Record the measured timing cost of the command register file
A/B on identical seeds rather than comparing against a different sweep, since
seed-to-seed spread on this design is larger than the effect being measured:
seed 1 clk seed 2 clk SB_DFFE SB_LUT4
before 28.72 27.04 934 2818
after 29.07 26.39 1038 2959
So +104 FFs, +141 LUTs, and about -2.4% fmax on the worst seed while seed 1
improved -- most of the spread is placement noise over a modest real cost.
8/8 seeds still close; best seed 3 at 29.74 MHz is 1.24x over the 24 MHz
target.
Also records why the storage covers the full low nibble rather than only the
registers libogc2 touches: a sparse decode would silently drop writes to
anything unlisted, which is exactly the behaviour this replaced. Noted as the
obvious thing to narrow if clk margin ever needs reclaiming.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1443,6 +1443,15 @@ register; if a real-hardware reset ever turns out to depend on it, this is the
|
|||||||
place to add the side effect. The NCRA reset follows immediately in that
|
place to add the side effect. The NCRA reset follows immediately in that
|
||||||
sequence anyway, which is why ignoring it costs nothing today.
|
sequence anyway, which is why ignoring it costs nothing today.
|
||||||
|
|
||||||
|
**Measured cost** (A/B on identical seeds, 2026-10-10): +104 `SB_DFFE`,
|
||||||
|
+141 `SB_LUT4`, and `clk` 27.04 → 26.39 MHz on seed 2 while seed 1 went
|
||||||
|
28.72 → 29.07, i.e. about −2.4% on the worst seed with the rest inside
|
||||||
|
placement noise. 8/8 seeds still close; best seed 3 at 29.74 MHz = 1.24×. The
|
||||||
|
storage is a full low nibble (`0x00`–`0x0F`) rather than only the registers
|
||||||
|
listed above, deliberately: a sparse decode would silently drop writes to
|
||||||
|
anything unlisted, which is the behaviour being fixed. If `clk` margin ever
|
||||||
|
needs reclaiming, this array is the obvious thing to narrow.
|
||||||
|
|
||||||
Test: `bba_register_file` **T14** covers the whole table — revision ID value
|
Test: `bba_register_file` **T14** covers the whole table — revision ID value
|
||||||
and read-only-ness, write/read-back on `0x04`/`0x05`/`0x09`/`0x0B`/`0x0F`, and
|
and read-only-ness, write/read-back on `0x04`/`0x05`/`0x09`/`0x0B`/`0x0F`, and
|
||||||
`0x20` still reading `0x00` so a stray high register cannot alias onto a real
|
`0x20` still reading `0x00` so a stray high register cannot alias onto a real
|
||||||
|
|||||||
Reference in New Issue
Block a user