diff --git a/docs/regs/hyperbus_cfg_regs.md b/docs/regs/hyperbus_cfg_regs.md
index 326f98d..9458acf 100644
--- a/docs/regs/hyperbus_cfg_regs.md
+++ b/docs/regs/hyperbus_cfg_regs.md
@@ -2,398 +2,1134 @@
Markdown description for SystemRDL register map.
Don't override. Generated from: hyperbus_cfg_regs
- - /home/phsauter/repos/hyperbus/src/regs/hyperbus_cfg_regs.rdl
+ - /home/phsauter/repos/hyperbus-peakrdl/src/regs/hyperbus_cfg_regs.rdl
-->
## hyperbus_cfg_regs address map
- Absolute Address: 0x0
- Base Offset: 0x0
-- Size: 0x78
-
-
HyperBus controller configuration. Chip address ranges must be 4 MiB aligned, ordered by chip-select index, and non-overlapping.
-
-|Offset| Identifier |Name|
-|------|---------------------|----|
-| 0x00 | t_latency_access | — |
-| 0x04 |en_latency_additional| — |
-| 0x08 | t_burst_max | — |
-| 0x0C |t_read_write_recovery| — |
-| 0x10 | t_rx_clk_delay | — |
-| 0x14 | t_tx_clk_delay | — |
-| 0x18 | address_mask_msb | — |
-| 0x1C | address_space | — |
-| 0x20 | phys_in_use | — |
-| 0x24 | which_phy | — |
-| 0x28 | t_csh_cycles | — |
-| 0x2C | csn_to_ck_cycles | — |
-| 0x30 | chip0_base | — |
-| 0x34 | chip0_bound | — |
-| 0x38 | chip1_base | — |
-| 0x3C | chip1_bound | — |
-| 0x40 | chip2_base | — |
-| 0x44 | chip2_bound | — |
-| 0x48 | chip3_base | — |
-| 0x4C | chip3_bound | — |
-| 0x58 | chip4_base | — |
-| 0x5C | chip4_bound | — |
-| 0x60 | chip5_base | — |
-| 0x64 | chip5_bound | — |
-| 0x68 | chip6_base | — |
-| 0x6C | chip6_bound | — |
-| 0x70 | chip7_base | — |
-| 0x74 | chip7_bound | — |
-
-### t_latency_access register
+- Size: 0x1000
+
+HyperBus controller configuration register map. Enabled chip ranges must be 4 MiB aligned, ordered by chip-select index, and non-overlapping.
+
+|Offset| Identifier |Name|
+|------|------------|----|
+| 0x000| global_cfg | — |
+| 0x100| frontend | — |
+| 0x200| backend | — |
+| 0x300| phy_0 | — |
+| 0x340| phy_1 | — |
+| 0x400| chip_0 | — |
+| 0x440| chip_1 | — |
+| 0x480| chip_2 | — |
+| 0x4C0| chip_3 | — |
+| 0x500| chip_4 | — |
+| 0x540| chip_5 | — |
+| 0x580| chip_6 | — |
+| 0x5C0| chip_7 | — |
+| 0xFFC|reserved_top| — |
+
+## global_cfg register file
+
+- Absolute Address: 0x0
+- Base Offset: 0x0
+- Size: 0x14
+
+|Offset| Identifier |Name|
+|------|--------------|----|
+| 0x00 | ip_version | — |
+| 0x04 |reg_if_version| — |
+| 0x08 | capability | — |
+| 0x0C | command | — |
+| 0x10 | status | — |
+
+### ip_version register
- Absolute Address: 0x0
- Base Offset: 0x0
- Size: 0x4
-Initial latency cycles before read or write data.
+IP version (major.minor.patch.revision).
-|Bits|Identifier|Access|Reset|Name|
-|----|----------|------|-----|----|
-| 3:0| value | rw | 0x6 | — |
+| Bits|Identifier|Access|Reset|Name|
+|-----|----------|------|-----|----|
+| 7:0 | revision | r | 0x0 | — |
+| 15:8| patch | r | 0x9 | — |
+|23:16| minor | r | 0x0 | — |
+|31:24| major | r | 0x0 | — |
-### en_latency_additional register
+### reg_if_version register
- Absolute Address: 0x4
- Base Offset: 0x4
- Size: 0x4
-Enable additional latency cycles when requested by RWDS.
+Register interface version.
-|Bits|Identifier|Access|Reset|Name|
-|----|----------|------|-----|----|
-| 0 | value | rw | 0x0 | — |
+| Bits|Identifier|Access|Reset|Name|
+|-----|----------|------|-----|----|
+| 15:0| minor | r | 0x0 | — |
+|31:16| major | r | 0x1 | — |
-### t_burst_max register
+### capability register
- Absolute Address: 0x8
- Base Offset: 0x8
- Size: 0x4
-Maximum continuous burst length before the PHY restarts a transfer.
+Hardware-provided implementation capabilities.
-|Bits|Identifier|Access|Reset|Name|
-|----|----------|------|-----|----|
-|15:0| value | rw |0x15E| — |
+|Bits| Identifier |Access|Reset|Name|
+|----|------------------|------|-----|----|
+| 7:0| num_chips | r | 0x0 | — |
+|15:8| num_phys | r | 0x0 | — |
+| 16 | per_chip_cfg | r | 0x0 | — |
+| 17 | per_phy_cfg | r | 0x0 | — |
+| 18 | chip_enable | r | 0x0 | — |
+| 19 | clock_divider | r | 0x0 | — |
+| 20 | staged_apply | r | 0x0 | — |
+| 21 | error_status | r | 0x0 | — |
+| 22 |rwds_sample_timing| r | 0x0 | — |
+| 23 | rwds_oe_timing | r | 0x0 | — |
+
+#### num_chips field
+
+Number of implemented chip selects.
+
+#### num_phys field
+
+Number of implemented PHY lanes.
+
+#### per_chip_cfg field
+
+Each chip record controls its corresponding chip rather than chip 0 being shared.
+
+#### per_phy_cfg field
+
+Each PHY record controls its corresponding lane rather than PHY 0 being shared.
-### t_read_write_recovery register
+#### chip_enable field
+
+Per-chip enable bits participate in address decoding.
+
+#### clock_divider field
+
+CLOCK_CFG controls an implemented backend clock divider.
+
+#### staged_apply field
+
+FLUSH and APPLY commands implement a staged configuration barrier.
+
+#### error_status field
+
+STATUS reports sticky controller errors.
+
+#### rwds_sample_timing field
+
+Per-chip RWDS sample timing is implemented.
+
+#### rwds_oe_timing field
+
+Per-PHY RWDS output-enable timing is implemented.
+
+### command register
- Absolute Address: 0xC
- Base Offset: 0xC
- Size: 0x4
-Recovery cycles inserted between read and write phases.
+Single-cycle write-one command strobes, active when capability.staged_apply is set; otherwise writes are retained only as inert pulses.
|Bits|Identifier|Access|Reset|Name|
|----|----------|------|-----|----|
-| 3:0| value | rw | 0x6 | — |
+| 0 | flush | rw | 0x0 | — |
+| 1 | apply | rw | 0x0 | — |
-### t_rx_clk_delay register
+### status register
- Absolute Address: 0x10
- Base Offset: 0x10
- Size: 0x4
-RX sampling delay with fine taps in bits 4:0 and coarse taps in bits 7:5.
+Controller status.
-|Bits|Identifier|Access|Reset|Name|
-|----|----------|------|-----|----|
-| 4:0| fine | rw | 0x10| — |
-| 7:5| coarse | rw | 0x0 | — |
-
-#### fine field
+|Bits| Identifier | Access |Reset|Name|
+|----|------------|---------|-----|----|
+| 0 |decode_error|rw, woclr| 0x0 | — |
+| 1 | busy | r | 0x0 | — |
+| 2 | dirty | r | 0x0 | — |
-Fine delay-line tap setting, nominally about 78 ps per tap.
+## frontend register file
-#### coarse field
+- Absolute Address: 0x100
+- Base Offset: 0x100
+- Size: 0x4
-Coarse delay-line tap setting with an implementation-defined step size.
+|Offset| Identifier |Name|
+|------|------------|----|
+| 0x0 |frontend_cfg| — |
-### t_tx_clk_delay register
+### frontend_cfg register
-- Absolute Address: 0x14
-- Base Offset: 0x14
+- Absolute Address: 0x100
+- Base Offset: 0x0
- Size: 0x4
-TX clock delay with fine taps in bits 4:0 and coarse taps in bits 7:5.
+Frontend configuration. dual_phy must be 0 or 1.
|Bits|Identifier|Access|Reset|Name|
|----|----------|------|-----|----|
-| 4:0| fine | rw | 0x10| — |
-| 7:5| coarse | rw | 0x0 | — |
+| 0 | dual_phy | rw | 0x1 | — |
-#### fine field
+## backend register file
-Fine delay-line tap setting, nominally about 78 ps per tap.
-
-#### coarse field
+- Absolute Address: 0x200
+- Base Offset: 0x200
+- Size: 0x4
-Coarse delay-line tap setting with an implementation-defined step size.
+|Offset|Identifier|Name|
+|------|----------|----|
+| 0x0 | clock_cfg| — |
-### address_mask_msb register
+### clock_cfg register
-- Absolute Address: 0x18
-- Base Offset: 0x18
+- Absolute Address: 0x200
+- Base Offset: 0x0
- Size: 0x4
-Most-significant address bit used by frontend address packing.
+Backend clock-divider configuration, active when capability.clock_divider is set; divider values must be at least 2.
|Bits|Identifier|Access|Reset|Name|
|----|----------|------|-----|----|
-| 4:0| value | rw | 0x19| — |
+| 7:0| divider | rw | 0x8 | — |
-### address_space register
+## phy_0 register file
-- Absolute Address: 0x1C
-- Base Offset: 0x1C
-- Size: 0x4
+- Absolute Address: 0x300
+- Base Offset: 0x300
+- Size: 0x8
-Select HyperRAM or HyperFlash address-space interpretation.
+|Offset| Identifier|Name|
+|------|-----------|----|
+| 0x0 | tx_delay | — |
+| 0x4 |rwds_timing| — |
-|Bits|Identifier|Access|Reset|Name|
-|----|----------|------|-----|----|
-| 0 | value | rw | 0x0 | — |
-
-### phys_in_use register
+### tx_delay register
-- Absolute Address: 0x20
-- Base Offset: 0x20
+- Absolute Address: 0x300
+- Base Offset: 0x0
- Size: 0x4
-Select whether one or both PHY lanes are active.
+PHY transmit delay. PHY 0 is shared when capability.per_phy_cfg is clear.
|Bits|Identifier|Access|Reset|Name|
|----|----------|------|-----|----|
-| 0 | value | rw | 0x1 | — |
+| 7:0| value | rw | 0x10| — |
-### which_phy register
+### rwds_timing register
-- Absolute Address: 0x24
-- Base Offset: 0x24
+- Absolute Address: 0x304
+- Base Offset: 0x4
- Size: 0x4
-Select the PHY lane used when only one PHY is active.
+PHY RWDS output-enable timing. rwds_oe_setup_cycles must be at most 15 and is active when capability.rwds_oe_timing is set.
-|Bits|Identifier|Access|Reset|Name|
-|----|----------|------|-----|----|
-| 0 | value | rw | 0x1 | — |
+|Bits| Identifier |Access|Reset|Name|
+|----|--------------------|------|-----|----|
+| 7:0|rwds_oe_setup_cycles| rw | 0x1 | — |
+
+## phy_1 register file
+
+- Absolute Address: 0x340
+- Base Offset: 0x340
+- Size: 0x8
-### t_csh_cycles register
+|Offset| Identifier|Name|
+|------|-----------|----|
+| 0x0 | tx_delay | — |
+| 0x4 |rwds_timing| — |
-- Absolute Address: 0x28
-- Base Offset: 0x28
+### tx_delay register
+
+- Absolute Address: 0x340
+- Base Offset: 0x0
- Size: 0x4
-Chip-select high time between transfers.
+PHY transmit delay. PHY 0 is shared when capability.per_phy_cfg is clear.
|Bits|Identifier|Access|Reset|Name|
|----|----------|------|-----|----|
-| 3:0| value | rw | 0x1 | — |
+| 7:0| value | rw | 0x10| — |
-### csn_to_ck_cycles register
+### rwds_timing register
-- Absolute Address: 0x2C
-- Base Offset: 0x2C
+- Absolute Address: 0x344
+- Base Offset: 0x4
- Size: 0x4
-Delay cycles from chip-select assertion to clock start.
+PHY RWDS output-enable timing. rwds_oe_setup_cycles must be at most 15 and is active when capability.rwds_oe_timing is set.
-|Bits|Identifier|Access|Reset|Name|
-|----|----------|------|-----|----|
-| 3:0| value | rw | 0x0 | — |
+|Bits| Identifier |Access|Reset|Name|
+|----|--------------------|------|-----|----|
+| 7:0|rwds_oe_setup_cycles| rw | 0x1 | — |
+
+## chip_0 register file
-### chip0_base register
+- Absolute Address: 0x400
+- Base Offset: 0x400
+- Size: 0x1C
-- Absolute Address: 0x30
-- Base Offset: 0x30
+|Offset| Identifier|Name|
+|------|-----------|----|
+| 0x00 | range_base| — |
+| 0x04 |range_bound| — |
+| 0x08 |address_cfg| — |
+| 0x0C |latency_cfg| — |
+| 0x10 | burst_cfg | — |
+| 0x14 |chip_timing| — |
+| 0x18 | rx_delay | — |
+
+### range_base register
+
+- Absolute Address: 0x400
+- Base Offset: 0x0
- Size: 0x4
-Inclusive 4 MiB-aligned address for chip-select 0 decoding.
+Inclusive 4 MiB-aligned chip address range base.
| Bits|Identifier|Access|Reset|Name|
|-----|----------|------|-----|----|
|31:22| value | rw | 0x0 | — |
-### chip0_bound register
+### range_bound register
-- Absolute Address: 0x34
-- Base Offset: 0x34
+- Absolute Address: 0x404
+- Base Offset: 0x4
- Size: 0x4
-Exclusive 4 MiB-aligned address for chip-select 0 decoding.
+Exclusive 4 MiB-aligned chip address range bound.
| Bits|Identifier|Access|Reset|Name|
|-----|----------|------|-----|----|
|31:22| value | rw | 0x1 | — |
-### chip1_base register
+### address_cfg register
+
+- Absolute Address: 0x408
+- Base Offset: 0x8
+- Size: 0x4
+
+Chip address-space interpretation and enable. address_space and enable must be 0 or 1, and address_mask_msb must be at most 31. Chip 0 is shared when capability.per_chip_cfg is clear; enable is active when capability.chip_enable is set.
+
+|Bits| Identifier |Access|Reset|Name|
+|----|----------------|------|-----|----|
+| 7:0| address_space | rw | 0x0 | — |
+|15:8|address_mask_msb| rw | 0x19| — |
+| 16 | enable | rw | 0x1 | — |
+
+### latency_cfg register
+
+- Absolute Address: 0x40C
+- Base Offset: 0xC
+- Size: 0x4
+
+Chip latency configuration. t_latency_access must be 3 through 15; rwds_sample_delay must be at most 15 and is active when capability.rwds_sample_timing is set. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits| Identifier |Access|Reset|Name|
+|----|---------------------|------|-----|----|
+| 7:0| t_latency_access | rw | 0x6 | — |
+|15:8| rwds_sample_delay | rw | 0x0 | — |
+| 16 |en_latency_additional| rw | 0x0 | — |
+
+### burst_cfg register
+
+- Absolute Address: 0x410
+- Base Offset: 0x10
+- Size: 0x4
+
+Chip burst configuration. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits| Identifier|Access|Reset|Name|
+|----|-----------|------|-----|----|
+|15:0|t_burst_max| rw |0x15E| — |
+
+### chip_timing register
+
+- Absolute Address: 0x414
+- Base Offset: 0x14
+- Size: 0x4
+
+Chip-select and read/write timing; byte-backed timing values must be at most 15. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+| Bits| Identifier |Access|Reset|Name|
+|-----|---------------------|------|-----|----|
+| 7:0 |t_read_write_recovery| rw | 0x6 | — |
+| 15:8| t_csh_cycles | rw | 0x1 | — |
+|23:16| csn_to_ck_cycles | rw | 0x0 | — |
+
+### rx_delay register
+
+- Absolute Address: 0x418
+- Base Offset: 0x18
+- Size: 0x4
+
+Chip receive delay. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits|Identifier|Access|Reset|Name|
+|----|----------|------|-----|----|
+| 7:0| value | rw | 0x10| — |
+
+## chip_1 register file
-- Absolute Address: 0x38
-- Base Offset: 0x38
+- Absolute Address: 0x440
+- Base Offset: 0x440
+- Size: 0x1C
+
+|Offset| Identifier|Name|
+|------|-----------|----|
+| 0x00 | range_base| — |
+| 0x04 |range_bound| — |
+| 0x08 |address_cfg| — |
+| 0x0C |latency_cfg| — |
+| 0x10 | burst_cfg | — |
+| 0x14 |chip_timing| — |
+| 0x18 | rx_delay | — |
+
+### range_base register
+
+- Absolute Address: 0x440
+- Base Offset: 0x0
- Size: 0x4
-Inclusive 4 MiB-aligned address for chip-select 1 decoding.
+Inclusive 4 MiB-aligned chip address range base.
| Bits|Identifier|Access|Reset|Name|
|-----|----------|------|-----|----|
|31:22| value | rw | 0x1 | — |
-### chip1_bound register
+### range_bound register
-- Absolute Address: 0x3C
-- Base Offset: 0x3C
+- Absolute Address: 0x444
+- Base Offset: 0x4
- Size: 0x4
-Exclusive 4 MiB-aligned address for chip-select 1 decoding.
+Exclusive 4 MiB-aligned chip address range bound.
| Bits|Identifier|Access|Reset|Name|
|-----|----------|------|-----|----|
|31:22| value | rw | 0x2 | — |
-### chip2_base register
+### address_cfg register
+
+- Absolute Address: 0x448
+- Base Offset: 0x8
+- Size: 0x4
+
+Chip address-space interpretation and enable. address_space and enable must be 0 or 1, and address_mask_msb must be at most 31. Chip 0 is shared when capability.per_chip_cfg is clear; enable is active when capability.chip_enable is set.
+
+|Bits| Identifier |Access|Reset|Name|
+|----|----------------|------|-----|----|
+| 7:0| address_space | rw | 0x0 | — |
+|15:8|address_mask_msb| rw | 0x19| — |
+| 16 | enable | rw | 0x1 | — |
+
+### latency_cfg register
+
+- Absolute Address: 0x44C
+- Base Offset: 0xC
+- Size: 0x4
+
+Chip latency configuration. t_latency_access must be 3 through 15; rwds_sample_delay must be at most 15 and is active when capability.rwds_sample_timing is set. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits| Identifier |Access|Reset|Name|
+|----|---------------------|------|-----|----|
+| 7:0| t_latency_access | rw | 0x6 | — |
+|15:8| rwds_sample_delay | rw | 0x0 | — |
+| 16 |en_latency_additional| rw | 0x0 | — |
+
+### burst_cfg register
-- Absolute Address: 0x40
-- Base Offset: 0x40
+- Absolute Address: 0x450
+- Base Offset: 0x10
+- Size: 0x4
+
+Chip burst configuration. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits| Identifier|Access|Reset|Name|
+|----|-----------|------|-----|----|
+|15:0|t_burst_max| rw |0x15E| — |
+
+### chip_timing register
+
+- Absolute Address: 0x454
+- Base Offset: 0x14
- Size: 0x4
-Inclusive 4 MiB-aligned address for chip-select 2 decoding.
+Chip-select and read/write timing; byte-backed timing values must be at most 15. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+| Bits| Identifier |Access|Reset|Name|
+|-----|---------------------|------|-----|----|
+| 7:0 |t_read_write_recovery| rw | 0x6 | — |
+| 15:8| t_csh_cycles | rw | 0x1 | — |
+|23:16| csn_to_ck_cycles | rw | 0x0 | — |
+
+### rx_delay register
+
+- Absolute Address: 0x458
+- Base Offset: 0x18
+- Size: 0x4
+
+Chip receive delay. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits|Identifier|Access|Reset|Name|
+|----|----------|------|-----|----|
+| 7:0| value | rw | 0x10| — |
+
+## chip_2 register file
+
+- Absolute Address: 0x480
+- Base Offset: 0x480
+- Size: 0x1C
+
+|Offset| Identifier|Name|
+|------|-----------|----|
+| 0x00 | range_base| — |
+| 0x04 |range_bound| — |
+| 0x08 |address_cfg| — |
+| 0x0C |latency_cfg| — |
+| 0x10 | burst_cfg | — |
+| 0x14 |chip_timing| — |
+| 0x18 | rx_delay | — |
+
+### range_base register
+
+- Absolute Address: 0x480
+- Base Offset: 0x0
+- Size: 0x4
+
+Inclusive 4 MiB-aligned chip address range base.
| Bits|Identifier|Access|Reset|Name|
|-----|----------|------|-----|----|
|31:22| value | rw | 0x2 | — |
-### chip2_bound register
+### range_bound register
-- Absolute Address: 0x44
-- Base Offset: 0x44
+- Absolute Address: 0x484
+- Base Offset: 0x4
- Size: 0x4
-Exclusive 4 MiB-aligned address for chip-select 2 decoding.
+Exclusive 4 MiB-aligned chip address range bound.
| Bits|Identifier|Access|Reset|Name|
|-----|----------|------|-----|----|
|31:22| value | rw | 0x3 | — |
-### chip3_base register
+### address_cfg register
+
+- Absolute Address: 0x488
+- Base Offset: 0x8
+- Size: 0x4
+
+Chip address-space interpretation and enable. address_space and enable must be 0 or 1, and address_mask_msb must be at most 31. Chip 0 is shared when capability.per_chip_cfg is clear; enable is active when capability.chip_enable is set.
-- Absolute Address: 0x48
-- Base Offset: 0x48
+|Bits| Identifier |Access|Reset|Name|
+|----|----------------|------|-----|----|
+| 7:0| address_space | rw | 0x0 | — |
+|15:8|address_mask_msb| rw | 0x19| — |
+| 16 | enable | rw | 0x1 | — |
+
+### latency_cfg register
+
+- Absolute Address: 0x48C
+- Base Offset: 0xC
- Size: 0x4
-Inclusive 4 MiB-aligned address for chip-select 3 decoding.
+Chip latency configuration. t_latency_access must be 3 through 15; rwds_sample_delay must be at most 15 and is active when capability.rwds_sample_timing is set. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits| Identifier |Access|Reset|Name|
+|----|---------------------|------|-----|----|
+| 7:0| t_latency_access | rw | 0x6 | — |
+|15:8| rwds_sample_delay | rw | 0x0 | — |
+| 16 |en_latency_additional| rw | 0x0 | — |
+
+### burst_cfg register
+
+- Absolute Address: 0x490
+- Base Offset: 0x10
+- Size: 0x4
+
+Chip burst configuration. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits| Identifier|Access|Reset|Name|
+|----|-----------|------|-----|----|
+|15:0|t_burst_max| rw |0x15E| — |
+
+### chip_timing register
+
+- Absolute Address: 0x494
+- Base Offset: 0x14
+- Size: 0x4
+
+Chip-select and read/write timing; byte-backed timing values must be at most 15. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+| Bits| Identifier |Access|Reset|Name|
+|-----|---------------------|------|-----|----|
+| 7:0 |t_read_write_recovery| rw | 0x6 | — |
+| 15:8| t_csh_cycles | rw | 0x1 | — |
+|23:16| csn_to_ck_cycles | rw | 0x0 | — |
+
+### rx_delay register
+
+- Absolute Address: 0x498
+- Base Offset: 0x18
+- Size: 0x4
+
+Chip receive delay. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits|Identifier|Access|Reset|Name|
+|----|----------|------|-----|----|
+| 7:0| value | rw | 0x10| — |
+
+## chip_3 register file
+
+- Absolute Address: 0x4C0
+- Base Offset: 0x4C0
+- Size: 0x1C
+
+|Offset| Identifier|Name|
+|------|-----------|----|
+| 0x00 | range_base| — |
+| 0x04 |range_bound| — |
+| 0x08 |address_cfg| — |
+| 0x0C |latency_cfg| — |
+| 0x10 | burst_cfg | — |
+| 0x14 |chip_timing| — |
+| 0x18 | rx_delay | — |
+
+### range_base register
+
+- Absolute Address: 0x4C0
+- Base Offset: 0x0
+- Size: 0x4
+
+Inclusive 4 MiB-aligned chip address range base.
| Bits|Identifier|Access|Reset|Name|
|-----|----------|------|-----|----|
|31:22| value | rw | 0x3 | — |
-### chip3_bound register
+### range_bound register
-- Absolute Address: 0x4C
-- Base Offset: 0x4C
+- Absolute Address: 0x4C4
+- Base Offset: 0x4
- Size: 0x4
-Exclusive 4 MiB-aligned address for chip-select 3 decoding.
+Exclusive 4 MiB-aligned chip address range bound.
| Bits|Identifier|Access|Reset|Name|
|-----|----------|------|-----|----|
|31:22| value | rw | 0x4 | — |
-### chip4_base register
+### address_cfg register
-- Absolute Address: 0x58
-- Base Offset: 0x58
+- Absolute Address: 0x4C8
+- Base Offset: 0x8
- Size: 0x4
-Inclusive 4 MiB-aligned address for chip-select 4 decoding.
+Chip address-space interpretation and enable. address_space and enable must be 0 or 1, and address_mask_msb must be at most 31. Chip 0 is shared when capability.per_chip_cfg is clear; enable is active when capability.chip_enable is set.
+
+|Bits| Identifier |Access|Reset|Name|
+|----|----------------|------|-----|----|
+| 7:0| address_space | rw | 0x0 | — |
+|15:8|address_mask_msb| rw | 0x19| — |
+| 16 | enable | rw | 0x1 | — |
+
+### latency_cfg register
+
+- Absolute Address: 0x4CC
+- Base Offset: 0xC
+- Size: 0x4
+
+Chip latency configuration. t_latency_access must be 3 through 15; rwds_sample_delay must be at most 15 and is active when capability.rwds_sample_timing is set. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits| Identifier |Access|Reset|Name|
+|----|---------------------|------|-----|----|
+| 7:0| t_latency_access | rw | 0x6 | — |
+|15:8| rwds_sample_delay | rw | 0x0 | — |
+| 16 |en_latency_additional| rw | 0x0 | — |
+
+### burst_cfg register
+
+- Absolute Address: 0x4D0
+- Base Offset: 0x10
+- Size: 0x4
+
+Chip burst configuration. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits| Identifier|Access|Reset|Name|
+|----|-----------|------|-----|----|
+|15:0|t_burst_max| rw |0x15E| — |
+
+### chip_timing register
+
+- Absolute Address: 0x4D4
+- Base Offset: 0x14
+- Size: 0x4
+
+Chip-select and read/write timing; byte-backed timing values must be at most 15. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+| Bits| Identifier |Access|Reset|Name|
+|-----|---------------------|------|-----|----|
+| 7:0 |t_read_write_recovery| rw | 0x6 | — |
+| 15:8| t_csh_cycles | rw | 0x1 | — |
+|23:16| csn_to_ck_cycles | rw | 0x0 | — |
+
+### rx_delay register
+
+- Absolute Address: 0x4D8
+- Base Offset: 0x18
+- Size: 0x4
+
+Chip receive delay. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits|Identifier|Access|Reset|Name|
+|----|----------|------|-----|----|
+| 7:0| value | rw | 0x10| — |
+
+## chip_4 register file
+
+- Absolute Address: 0x500
+- Base Offset: 0x500
+- Size: 0x1C
+
+|Offset| Identifier|Name|
+|------|-----------|----|
+| 0x00 | range_base| — |
+| 0x04 |range_bound| — |
+| 0x08 |address_cfg| — |
+| 0x0C |latency_cfg| — |
+| 0x10 | burst_cfg | — |
+| 0x14 |chip_timing| — |
+| 0x18 | rx_delay | — |
+
+### range_base register
+
+- Absolute Address: 0x500
+- Base Offset: 0x0
+- Size: 0x4
+
+Inclusive 4 MiB-aligned chip address range base.
| Bits|Identifier|Access|Reset|Name|
|-----|----------|------|-----|----|
|31:22| value | rw | 0x4 | — |
-### chip4_bound register
+### range_bound register
-- Absolute Address: 0x5C
-- Base Offset: 0x5C
+- Absolute Address: 0x504
+- Base Offset: 0x4
- Size: 0x4
-Exclusive 4 MiB-aligned address for chip-select 4 decoding.
+Exclusive 4 MiB-aligned chip address range bound.
| Bits|Identifier|Access|Reset|Name|
|-----|----------|------|-----|----|
|31:22| value | rw | 0x5 | — |
-### chip5_base register
+### address_cfg register
-- Absolute Address: 0x60
-- Base Offset: 0x60
+- Absolute Address: 0x508
+- Base Offset: 0x8
- Size: 0x4
-Inclusive 4 MiB-aligned address for chip-select 5 decoding.
+Chip address-space interpretation and enable. address_space and enable must be 0 or 1, and address_mask_msb must be at most 31. Chip 0 is shared when capability.per_chip_cfg is clear; enable is active when capability.chip_enable is set.
+
+|Bits| Identifier |Access|Reset|Name|
+|----|----------------|------|-----|----|
+| 7:0| address_space | rw | 0x0 | — |
+|15:8|address_mask_msb| rw | 0x19| — |
+| 16 | enable | rw | 0x1 | — |
+
+### latency_cfg register
+
+- Absolute Address: 0x50C
+- Base Offset: 0xC
+- Size: 0x4
+
+Chip latency configuration. t_latency_access must be 3 through 15; rwds_sample_delay must be at most 15 and is active when capability.rwds_sample_timing is set. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits| Identifier |Access|Reset|Name|
+|----|---------------------|------|-----|----|
+| 7:0| t_latency_access | rw | 0x6 | — |
+|15:8| rwds_sample_delay | rw | 0x0 | — |
+| 16 |en_latency_additional| rw | 0x0 | — |
+
+### burst_cfg register
+
+- Absolute Address: 0x510
+- Base Offset: 0x10
+- Size: 0x4
+
+Chip burst configuration. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits| Identifier|Access|Reset|Name|
+|----|-----------|------|-----|----|
+|15:0|t_burst_max| rw |0x15E| — |
+
+### chip_timing register
+
+- Absolute Address: 0x514
+- Base Offset: 0x14
+- Size: 0x4
+
+Chip-select and read/write timing; byte-backed timing values must be at most 15. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+| Bits| Identifier |Access|Reset|Name|
+|-----|---------------------|------|-----|----|
+| 7:0 |t_read_write_recovery| rw | 0x6 | — |
+| 15:8| t_csh_cycles | rw | 0x1 | — |
+|23:16| csn_to_ck_cycles | rw | 0x0 | — |
+
+### rx_delay register
+
+- Absolute Address: 0x518
+- Base Offset: 0x18
+- Size: 0x4
+
+Chip receive delay. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits|Identifier|Access|Reset|Name|
+|----|----------|------|-----|----|
+| 7:0| value | rw | 0x10| — |
+
+## chip_5 register file
+
+- Absolute Address: 0x540
+- Base Offset: 0x540
+- Size: 0x1C
+
+|Offset| Identifier|Name|
+|------|-----------|----|
+| 0x00 | range_base| — |
+| 0x04 |range_bound| — |
+| 0x08 |address_cfg| — |
+| 0x0C |latency_cfg| — |
+| 0x10 | burst_cfg | — |
+| 0x14 |chip_timing| — |
+| 0x18 | rx_delay | — |
+
+### range_base register
+
+- Absolute Address: 0x540
+- Base Offset: 0x0
+- Size: 0x4
+
+Inclusive 4 MiB-aligned chip address range base.
| Bits|Identifier|Access|Reset|Name|
|-----|----------|------|-----|----|
|31:22| value | rw | 0x5 | — |
-### chip5_bound register
+### range_bound register
-- Absolute Address: 0x64
-- Base Offset: 0x64
+- Absolute Address: 0x544
+- Base Offset: 0x4
- Size: 0x4
-Exclusive 4 MiB-aligned address for chip-select 5 decoding.
+Exclusive 4 MiB-aligned chip address range bound.
| Bits|Identifier|Access|Reset|Name|
|-----|----------|------|-----|----|
|31:22| value | rw | 0x6 | — |
-### chip6_base register
+### address_cfg register
-- Absolute Address: 0x68
-- Base Offset: 0x68
+- Absolute Address: 0x548
+- Base Offset: 0x8
- Size: 0x4
-Inclusive 4 MiB-aligned address for chip-select 6 decoding.
+Chip address-space interpretation and enable. address_space and enable must be 0 or 1, and address_mask_msb must be at most 31. Chip 0 is shared when capability.per_chip_cfg is clear; enable is active when capability.chip_enable is set.
+
+|Bits| Identifier |Access|Reset|Name|
+|----|----------------|------|-----|----|
+| 7:0| address_space | rw | 0x0 | — |
+|15:8|address_mask_msb| rw | 0x19| — |
+| 16 | enable | rw | 0x1 | — |
+
+### latency_cfg register
+
+- Absolute Address: 0x54C
+- Base Offset: 0xC
+- Size: 0x4
+
+Chip latency configuration. t_latency_access must be 3 through 15; rwds_sample_delay must be at most 15 and is active when capability.rwds_sample_timing is set. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits| Identifier |Access|Reset|Name|
+|----|---------------------|------|-----|----|
+| 7:0| t_latency_access | rw | 0x6 | — |
+|15:8| rwds_sample_delay | rw | 0x0 | — |
+| 16 |en_latency_additional| rw | 0x0 | — |
+
+### burst_cfg register
+
+- Absolute Address: 0x550
+- Base Offset: 0x10
+- Size: 0x4
+
+Chip burst configuration. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits| Identifier|Access|Reset|Name|
+|----|-----------|------|-----|----|
+|15:0|t_burst_max| rw |0x15E| — |
+
+### chip_timing register
+
+- Absolute Address: 0x554
+- Base Offset: 0x14
+- Size: 0x4
+
+Chip-select and read/write timing; byte-backed timing values must be at most 15. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+| Bits| Identifier |Access|Reset|Name|
+|-----|---------------------|------|-----|----|
+| 7:0 |t_read_write_recovery| rw | 0x6 | — |
+| 15:8| t_csh_cycles | rw | 0x1 | — |
+|23:16| csn_to_ck_cycles | rw | 0x0 | — |
+
+### rx_delay register
+
+- Absolute Address: 0x558
+- Base Offset: 0x18
+- Size: 0x4
+
+Chip receive delay. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits|Identifier|Access|Reset|Name|
+|----|----------|------|-----|----|
+| 7:0| value | rw | 0x10| — |
+
+## chip_6 register file
+
+- Absolute Address: 0x580
+- Base Offset: 0x580
+- Size: 0x1C
+
+|Offset| Identifier|Name|
+|------|-----------|----|
+| 0x00 | range_base| — |
+| 0x04 |range_bound| — |
+| 0x08 |address_cfg| — |
+| 0x0C |latency_cfg| — |
+| 0x10 | burst_cfg | — |
+| 0x14 |chip_timing| — |
+| 0x18 | rx_delay | — |
+
+### range_base register
+
+- Absolute Address: 0x580
+- Base Offset: 0x0
+- Size: 0x4
+
+Inclusive 4 MiB-aligned chip address range base.
| Bits|Identifier|Access|Reset|Name|
|-----|----------|------|-----|----|
|31:22| value | rw | 0x6 | — |
-### chip6_bound register
+### range_bound register
-- Absolute Address: 0x6C
-- Base Offset: 0x6C
+- Absolute Address: 0x584
+- Base Offset: 0x4
- Size: 0x4
-Exclusive 4 MiB-aligned address for chip-select 6 decoding.
+Exclusive 4 MiB-aligned chip address range bound.
| Bits|Identifier|Access|Reset|Name|
|-----|----------|------|-----|----|
|31:22| value | rw | 0x7 | — |
-### chip7_base register
+### address_cfg register
+
+- Absolute Address: 0x588
+- Base Offset: 0x8
+- Size: 0x4
+
+Chip address-space interpretation and enable. address_space and enable must be 0 or 1, and address_mask_msb must be at most 31. Chip 0 is shared when capability.per_chip_cfg is clear; enable is active when capability.chip_enable is set.
+
+|Bits| Identifier |Access|Reset|Name|
+|----|----------------|------|-----|----|
+| 7:0| address_space | rw | 0x0 | — |
+|15:8|address_mask_msb| rw | 0x19| — |
+| 16 | enable | rw | 0x1 | — |
+
+### latency_cfg register
+
+- Absolute Address: 0x58C
+- Base Offset: 0xC
+- Size: 0x4
+
+Chip latency configuration. t_latency_access must be 3 through 15; rwds_sample_delay must be at most 15 and is active when capability.rwds_sample_timing is set. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits| Identifier |Access|Reset|Name|
+|----|---------------------|------|-----|----|
+| 7:0| t_latency_access | rw | 0x6 | — |
+|15:8| rwds_sample_delay | rw | 0x0 | — |
+| 16 |en_latency_additional| rw | 0x0 | — |
+
+### burst_cfg register
+
+- Absolute Address: 0x590
+- Base Offset: 0x10
+- Size: 0x4
+
+Chip burst configuration. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits| Identifier|Access|Reset|Name|
+|----|-----------|------|-----|----|
+|15:0|t_burst_max| rw |0x15E| — |
+
+### chip_timing register
+
+- Absolute Address: 0x594
+- Base Offset: 0x14
+- Size: 0x4
+
+Chip-select and read/write timing; byte-backed timing values must be at most 15. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+| Bits| Identifier |Access|Reset|Name|
+|-----|---------------------|------|-----|----|
+| 7:0 |t_read_write_recovery| rw | 0x6 | — |
+| 15:8| t_csh_cycles | rw | 0x1 | — |
+|23:16| csn_to_ck_cycles | rw | 0x0 | — |
+
+### rx_delay register
+
+- Absolute Address: 0x598
+- Base Offset: 0x18
+- Size: 0x4
+
+Chip receive delay. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits|Identifier|Access|Reset|Name|
+|----|----------|------|-----|----|
+| 7:0| value | rw | 0x10| — |
+
+## chip_7 register file
+
+- Absolute Address: 0x5C0
+- Base Offset: 0x5C0
+- Size: 0x1C
+
+|Offset| Identifier|Name|
+|------|-----------|----|
+| 0x00 | range_base| — |
+| 0x04 |range_bound| — |
+| 0x08 |address_cfg| — |
+| 0x0C |latency_cfg| — |
+| 0x10 | burst_cfg | — |
+| 0x14 |chip_timing| — |
+| 0x18 | rx_delay | — |
-- Absolute Address: 0x70
-- Base Offset: 0x70
+### range_base register
+
+- Absolute Address: 0x5C0
+- Base Offset: 0x0
- Size: 0x4
-Inclusive 4 MiB-aligned address for chip-select 7 decoding.
+Inclusive 4 MiB-aligned chip address range base.
| Bits|Identifier|Access|Reset|Name|
|-----|----------|------|-----|----|
|31:22| value | rw | 0x7 | — |
-### chip7_bound register
+### range_bound register
-- Absolute Address: 0x74
-- Base Offset: 0x74
+- Absolute Address: 0x5C4
+- Base Offset: 0x4
- Size: 0x4
-Exclusive 4 MiB-aligned address for chip-select 7 decoding.
+Exclusive 4 MiB-aligned chip address range bound.
| Bits|Identifier|Access|Reset|Name|
|-----|----------|------|-----|----|
|31:22| value | rw | 0x8 | — |
+
+### address_cfg register
+
+- Absolute Address: 0x5C8
+- Base Offset: 0x8
+- Size: 0x4
+
+Chip address-space interpretation and enable. address_space and enable must be 0 or 1, and address_mask_msb must be at most 31. Chip 0 is shared when capability.per_chip_cfg is clear; enable is active when capability.chip_enable is set.
+
+|Bits| Identifier |Access|Reset|Name|
+|----|----------------|------|-----|----|
+| 7:0| address_space | rw | 0x0 | — |
+|15:8|address_mask_msb| rw | 0x19| — |
+| 16 | enable | rw | 0x1 | — |
+
+### latency_cfg register
+
+- Absolute Address: 0x5CC
+- Base Offset: 0xC
+- Size: 0x4
+
+Chip latency configuration. t_latency_access must be 3 through 15; rwds_sample_delay must be at most 15 and is active when capability.rwds_sample_timing is set. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits| Identifier |Access|Reset|Name|
+|----|---------------------|------|-----|----|
+| 7:0| t_latency_access | rw | 0x6 | — |
+|15:8| rwds_sample_delay | rw | 0x0 | — |
+| 16 |en_latency_additional| rw | 0x0 | — |
+
+### burst_cfg register
+
+- Absolute Address: 0x5D0
+- Base Offset: 0x10
+- Size: 0x4
+
+Chip burst configuration. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits| Identifier|Access|Reset|Name|
+|----|-----------|------|-----|----|
+|15:0|t_burst_max| rw |0x15E| — |
+
+### chip_timing register
+
+- Absolute Address: 0x5D4
+- Base Offset: 0x14
+- Size: 0x4
+
+Chip-select and read/write timing; byte-backed timing values must be at most 15. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+| Bits| Identifier |Access|Reset|Name|
+|-----|---------------------|------|-----|----|
+| 7:0 |t_read_write_recovery| rw | 0x6 | — |
+| 15:8| t_csh_cycles | rw | 0x1 | — |
+|23:16| csn_to_ck_cycles | rw | 0x0 | — |
+
+### rx_delay register
+
+- Absolute Address: 0x5D8
+- Base Offset: 0x18
+- Size: 0x4
+
+Chip receive delay. Chip 0 is shared when capability.per_chip_cfg is clear.
+
+|Bits|Identifier|Access|Reset|Name|
+|----|----------|------|-----|----|
+| 7:0| value | rw | 0x10| — |
+
+### reserved_top register
+
+- Absolute Address: 0xFFC
+- Base Offset: 0xFFC
+- Size: 0x4
+
+Reserved endpoint that fixes the register window size to 4 KiB.
+
+|Bits|Identifier|Access|Reset|Name|
+|----|----------|------|-----|----|
+|31:0| value | r | 0x0 | — |
diff --git a/include/hyperbus_cfg_regs.h b/include/hyperbus_cfg_regs.h
index a5a09ba..25b7b58 100644
--- a/include/hyperbus_cfg_regs.h
+++ b/include/hyperbus_cfg_regs.h
@@ -10,217 +10,426 @@ extern "C" {
#include
#include
-// reg - hyperbus_cfg_regs::t_latency_access
-#define HYPERBUS_CFG_REGS__T_LATENCY_ACCESS__VALUE_bm 0xf
-#define HYPERBUS_CFG_REGS__T_LATENCY_ACCESS__VALUE_bp 0
-#define HYPERBUS_CFG_REGS__T_LATENCY_ACCESS__VALUE_bw 4
-#define HYPERBUS_CFG_REGS__T_LATENCY_ACCESS__VALUE_reset 0x6
-
-// reg - hyperbus_cfg_regs::en_latency_additional
-#define HYPERBUS_CFG_REGS__EN_LATENCY_ADDITIONAL__VALUE_bm 0x1
-#define HYPERBUS_CFG_REGS__EN_LATENCY_ADDITIONAL__VALUE_bp 0
-#define HYPERBUS_CFG_REGS__EN_LATENCY_ADDITIONAL__VALUE_bw 1
-#define HYPERBUS_CFG_REGS__EN_LATENCY_ADDITIONAL__VALUE_reset 0x0
-
-// reg - hyperbus_cfg_regs::t_burst_max
-#define HYPERBUS_CFG_REGS__T_BURST_MAX__VALUE_bm 0xffff
-#define HYPERBUS_CFG_REGS__T_BURST_MAX__VALUE_bp 0
-#define HYPERBUS_CFG_REGS__T_BURST_MAX__VALUE_bw 16
-#define HYPERBUS_CFG_REGS__T_BURST_MAX__VALUE_reset 0x15e
-
-// reg - hyperbus_cfg_regs::t_read_write_recovery
-#define HYPERBUS_CFG_REGS__T_READ_WRITE_RECOVERY__VALUE_bm 0xf
-#define HYPERBUS_CFG_REGS__T_READ_WRITE_RECOVERY__VALUE_bp 0
-#define HYPERBUS_CFG_REGS__T_READ_WRITE_RECOVERY__VALUE_bw 4
-#define HYPERBUS_CFG_REGS__T_READ_WRITE_RECOVERY__VALUE_reset 0x6
-
-// reg - hyperbus_cfg_regs::t_rx_clk_delay
-#define HYPERBUS_CFG_REGS__T_RX_CLK_DELAY__FINE_bm 0x1f
-#define HYPERBUS_CFG_REGS__T_RX_CLK_DELAY__FINE_bp 0
-#define HYPERBUS_CFG_REGS__T_RX_CLK_DELAY__FINE_bw 5
-#define HYPERBUS_CFG_REGS__T_RX_CLK_DELAY__FINE_reset 0x10
-#define HYPERBUS_CFG_REGS__T_RX_CLK_DELAY__COARSE_bm 0xe0
-#define HYPERBUS_CFG_REGS__T_RX_CLK_DELAY__COARSE_bp 5
-#define HYPERBUS_CFG_REGS__T_RX_CLK_DELAY__COARSE_bw 3
-#define HYPERBUS_CFG_REGS__T_RX_CLK_DELAY__COARSE_reset 0x0
-
-// reg - hyperbus_cfg_regs::t_tx_clk_delay
-#define HYPERBUS_CFG_REGS__T_TX_CLK_DELAY__FINE_bm 0x1f
-#define HYPERBUS_CFG_REGS__T_TX_CLK_DELAY__FINE_bp 0
-#define HYPERBUS_CFG_REGS__T_TX_CLK_DELAY__FINE_bw 5
-#define HYPERBUS_CFG_REGS__T_TX_CLK_DELAY__FINE_reset 0x10
-#define HYPERBUS_CFG_REGS__T_TX_CLK_DELAY__COARSE_bm 0xe0
-#define HYPERBUS_CFG_REGS__T_TX_CLK_DELAY__COARSE_bp 5
-#define HYPERBUS_CFG_REGS__T_TX_CLK_DELAY__COARSE_bw 3
-#define HYPERBUS_CFG_REGS__T_TX_CLK_DELAY__COARSE_reset 0x0
-
-// reg - hyperbus_cfg_regs::address_mask_msb
-#define HYPERBUS_CFG_REGS__ADDRESS_MASK_MSB__VALUE_bm 0x1f
-#define HYPERBUS_CFG_REGS__ADDRESS_MASK_MSB__VALUE_bp 0
-#define HYPERBUS_CFG_REGS__ADDRESS_MASK_MSB__VALUE_bw 5
-#define HYPERBUS_CFG_REGS__ADDRESS_MASK_MSB__VALUE_reset 0x19
-
-// reg - hyperbus_cfg_regs::address_space
-#define HYPERBUS_CFG_REGS__ADDRESS_SPACE__VALUE_bm 0x1
-#define HYPERBUS_CFG_REGS__ADDRESS_SPACE__VALUE_bp 0
-#define HYPERBUS_CFG_REGS__ADDRESS_SPACE__VALUE_bw 1
-#define HYPERBUS_CFG_REGS__ADDRESS_SPACE__VALUE_reset 0x0
-
-// reg - hyperbus_cfg_regs::phys_in_use
-#define HYPERBUS_CFG_REGS__PHYS_IN_USE__VALUE_bm 0x1
-#define HYPERBUS_CFG_REGS__PHYS_IN_USE__VALUE_bp 0
-#define HYPERBUS_CFG_REGS__PHYS_IN_USE__VALUE_bw 1
-#define HYPERBUS_CFG_REGS__PHYS_IN_USE__VALUE_reset 0x1
-
-// reg - hyperbus_cfg_regs::which_phy
-#define HYPERBUS_CFG_REGS__WHICH_PHY__VALUE_bm 0x1
-#define HYPERBUS_CFG_REGS__WHICH_PHY__VALUE_bp 0
-#define HYPERBUS_CFG_REGS__WHICH_PHY__VALUE_bw 1
-#define HYPERBUS_CFG_REGS__WHICH_PHY__VALUE_reset 0x1
-
-// reg - hyperbus_cfg_regs::t_csh_cycles
-#define HYPERBUS_CFG_REGS__T_CSH_CYCLES__VALUE_bm 0xf
-#define HYPERBUS_CFG_REGS__T_CSH_CYCLES__VALUE_bp 0
-#define HYPERBUS_CFG_REGS__T_CSH_CYCLES__VALUE_bw 4
-#define HYPERBUS_CFG_REGS__T_CSH_CYCLES__VALUE_reset 0x1
-
-// reg - hyperbus_cfg_regs::csn_to_ck_cycles
-#define HYPERBUS_CFG_REGS__CSN_TO_CK_CYCLES__VALUE_bm 0xf
-#define HYPERBUS_CFG_REGS__CSN_TO_CK_CYCLES__VALUE_bp 0
-#define HYPERBUS_CFG_REGS__CSN_TO_CK_CYCLES__VALUE_bw 4
-#define HYPERBUS_CFG_REGS__CSN_TO_CK_CYCLES__VALUE_reset 0x0
-
-// reg - hyperbus_cfg_regs::chip0_base
-#define HYPERBUS_CFG_REGS__CHIP0_BASE__VALUE_bm 0xffc00000
-#define HYPERBUS_CFG_REGS__CHIP0_BASE__VALUE_bp 22
-#define HYPERBUS_CFG_REGS__CHIP0_BASE__VALUE_bw 10
-#define HYPERBUS_CFG_REGS__CHIP0_BASE__VALUE_reset 0x0
-
-// reg - hyperbus_cfg_regs::chip0_bound
-#define HYPERBUS_CFG_REGS__CHIP0_BOUND__VALUE_bm 0xffc00000
-#define HYPERBUS_CFG_REGS__CHIP0_BOUND__VALUE_bp 22
-#define HYPERBUS_CFG_REGS__CHIP0_BOUND__VALUE_bw 10
-#define HYPERBUS_CFG_REGS__CHIP0_BOUND__VALUE_reset 0x1
-
-// reg - hyperbus_cfg_regs::chip1_base
-#define HYPERBUS_CFG_REGS__CHIP1_BASE__VALUE_bm 0xffc00000
-#define HYPERBUS_CFG_REGS__CHIP1_BASE__VALUE_bp 22
-#define HYPERBUS_CFG_REGS__CHIP1_BASE__VALUE_bw 10
-#define HYPERBUS_CFG_REGS__CHIP1_BASE__VALUE_reset 0x1
-
-// reg - hyperbus_cfg_regs::chip1_bound
-#define HYPERBUS_CFG_REGS__CHIP1_BOUND__VALUE_bm 0xffc00000
-#define HYPERBUS_CFG_REGS__CHIP1_BOUND__VALUE_bp 22
-#define HYPERBUS_CFG_REGS__CHIP1_BOUND__VALUE_bw 10
-#define HYPERBUS_CFG_REGS__CHIP1_BOUND__VALUE_reset 0x2
-
-// reg - hyperbus_cfg_regs::chip2_base
-#define HYPERBUS_CFG_REGS__CHIP2_BASE__VALUE_bm 0xffc00000
-#define HYPERBUS_CFG_REGS__CHIP2_BASE__VALUE_bp 22
-#define HYPERBUS_CFG_REGS__CHIP2_BASE__VALUE_bw 10
-#define HYPERBUS_CFG_REGS__CHIP2_BASE__VALUE_reset 0x2
-
-// reg - hyperbus_cfg_regs::chip2_bound
-#define HYPERBUS_CFG_REGS__CHIP2_BOUND__VALUE_bm 0xffc00000
-#define HYPERBUS_CFG_REGS__CHIP2_BOUND__VALUE_bp 22
-#define HYPERBUS_CFG_REGS__CHIP2_BOUND__VALUE_bw 10
-#define HYPERBUS_CFG_REGS__CHIP2_BOUND__VALUE_reset 0x3
-
-// reg - hyperbus_cfg_regs::chip3_base
-#define HYPERBUS_CFG_REGS__CHIP3_BASE__VALUE_bm 0xffc00000
-#define HYPERBUS_CFG_REGS__CHIP3_BASE__VALUE_bp 22
-#define HYPERBUS_CFG_REGS__CHIP3_BASE__VALUE_bw 10
-#define HYPERBUS_CFG_REGS__CHIP3_BASE__VALUE_reset 0x3
-
-// reg - hyperbus_cfg_regs::chip3_bound
-#define HYPERBUS_CFG_REGS__CHIP3_BOUND__VALUE_bm 0xffc00000
-#define HYPERBUS_CFG_REGS__CHIP3_BOUND__VALUE_bp 22
-#define HYPERBUS_CFG_REGS__CHIP3_BOUND__VALUE_bw 10
-#define HYPERBUS_CFG_REGS__CHIP3_BOUND__VALUE_reset 0x4
-
-// reg - hyperbus_cfg_regs::chip4_base
-#define HYPERBUS_CFG_REGS__CHIP4_BASE__VALUE_bm 0xffc00000
-#define HYPERBUS_CFG_REGS__CHIP4_BASE__VALUE_bp 22
-#define HYPERBUS_CFG_REGS__CHIP4_BASE__VALUE_bw 10
-#define HYPERBUS_CFG_REGS__CHIP4_BASE__VALUE_reset 0x4
-
-// reg - hyperbus_cfg_regs::chip4_bound
-#define HYPERBUS_CFG_REGS__CHIP4_BOUND__VALUE_bm 0xffc00000
-#define HYPERBUS_CFG_REGS__CHIP4_BOUND__VALUE_bp 22
-#define HYPERBUS_CFG_REGS__CHIP4_BOUND__VALUE_bw 10
-#define HYPERBUS_CFG_REGS__CHIP4_BOUND__VALUE_reset 0x5
-
-// reg - hyperbus_cfg_regs::chip5_base
-#define HYPERBUS_CFG_REGS__CHIP5_BASE__VALUE_bm 0xffc00000
-#define HYPERBUS_CFG_REGS__CHIP5_BASE__VALUE_bp 22
-#define HYPERBUS_CFG_REGS__CHIP5_BASE__VALUE_bw 10
-#define HYPERBUS_CFG_REGS__CHIP5_BASE__VALUE_reset 0x5
-
-// reg - hyperbus_cfg_regs::chip5_bound
-#define HYPERBUS_CFG_REGS__CHIP5_BOUND__VALUE_bm 0xffc00000
-#define HYPERBUS_CFG_REGS__CHIP5_BOUND__VALUE_bp 22
-#define HYPERBUS_CFG_REGS__CHIP5_BOUND__VALUE_bw 10
-#define HYPERBUS_CFG_REGS__CHIP5_BOUND__VALUE_reset 0x6
-
-// reg - hyperbus_cfg_regs::chip6_base
-#define HYPERBUS_CFG_REGS__CHIP6_BASE__VALUE_bm 0xffc00000
-#define HYPERBUS_CFG_REGS__CHIP6_BASE__VALUE_bp 22
-#define HYPERBUS_CFG_REGS__CHIP6_BASE__VALUE_bw 10
-#define HYPERBUS_CFG_REGS__CHIP6_BASE__VALUE_reset 0x6
-
-// reg - hyperbus_cfg_regs::chip6_bound
-#define HYPERBUS_CFG_REGS__CHIP6_BOUND__VALUE_bm 0xffc00000
-#define HYPERBUS_CFG_REGS__CHIP6_BOUND__VALUE_bp 22
-#define HYPERBUS_CFG_REGS__CHIP6_BOUND__VALUE_bw 10
-#define HYPERBUS_CFG_REGS__CHIP6_BOUND__VALUE_reset 0x7
-
-// reg - hyperbus_cfg_regs::chip7_base
-#define HYPERBUS_CFG_REGS__CHIP7_BASE__VALUE_bm 0xffc00000
-#define HYPERBUS_CFG_REGS__CHIP7_BASE__VALUE_bp 22
-#define HYPERBUS_CFG_REGS__CHIP7_BASE__VALUE_bw 10
-#define HYPERBUS_CFG_REGS__CHIP7_BASE__VALUE_reset 0x7
-
-// reg - hyperbus_cfg_regs::chip7_bound
-#define HYPERBUS_CFG_REGS__CHIP7_BOUND__VALUE_bm 0xffc00000
-#define HYPERBUS_CFG_REGS__CHIP7_BOUND__VALUE_bp 22
-#define HYPERBUS_CFG_REGS__CHIP7_BOUND__VALUE_bw 10
-#define HYPERBUS_CFG_REGS__CHIP7_BOUND__VALUE_reset 0x8
+// reg - hyperbus_cfg_regs::ip_version
+#define HYPERBUS_CFG_REGS__IP_VERSION__REVISION_bm 0xff
+#define HYPERBUS_CFG_REGS__IP_VERSION__REVISION_bp 0
+#define HYPERBUS_CFG_REGS__IP_VERSION__REVISION_bw 8
+#define HYPERBUS_CFG_REGS__IP_VERSION__REVISION_reset 0x0
+#define HYPERBUS_CFG_REGS__IP_VERSION__PATCH_bm 0xff00
+#define HYPERBUS_CFG_REGS__IP_VERSION__PATCH_bp 8
+#define HYPERBUS_CFG_REGS__IP_VERSION__PATCH_bw 8
+#define HYPERBUS_CFG_REGS__IP_VERSION__PATCH_reset 0x9
+#define HYPERBUS_CFG_REGS__IP_VERSION__MINOR_bm 0xff0000
+#define HYPERBUS_CFG_REGS__IP_VERSION__MINOR_bp 16
+#define HYPERBUS_CFG_REGS__IP_VERSION__MINOR_bw 8
+#define HYPERBUS_CFG_REGS__IP_VERSION__MINOR_reset 0x0
+#define HYPERBUS_CFG_REGS__IP_VERSION__MAJOR_bm 0xff000000
+#define HYPERBUS_CFG_REGS__IP_VERSION__MAJOR_bp 24
+#define HYPERBUS_CFG_REGS__IP_VERSION__MAJOR_bw 8
+#define HYPERBUS_CFG_REGS__IP_VERSION__MAJOR_reset 0x0
+
+// reg - hyperbus_cfg_regs::reg_if_version
+#define HYPERBUS_CFG_REGS__REG_IF_VERSION__MINOR_bm 0xffff
+#define HYPERBUS_CFG_REGS__REG_IF_VERSION__MINOR_bp 0
+#define HYPERBUS_CFG_REGS__REG_IF_VERSION__MINOR_bw 16
+#define HYPERBUS_CFG_REGS__REG_IF_VERSION__MINOR_reset 0x0
+#define HYPERBUS_CFG_REGS__REG_IF_VERSION__MAJOR_bm 0xffff0000
+#define HYPERBUS_CFG_REGS__REG_IF_VERSION__MAJOR_bp 16
+#define HYPERBUS_CFG_REGS__REG_IF_VERSION__MAJOR_bw 16
+#define HYPERBUS_CFG_REGS__REG_IF_VERSION__MAJOR_reset 0x1
+
+// reg - hyperbus_cfg_regs::capability
+#define HYPERBUS_CFG_REGS__CAPABILITY__NUM_CHIPS_bm 0xff
+#define HYPERBUS_CFG_REGS__CAPABILITY__NUM_CHIPS_bp 0
+#define HYPERBUS_CFG_REGS__CAPABILITY__NUM_CHIPS_bw 8
+#define HYPERBUS_CFG_REGS__CAPABILITY__NUM_CHIPS_reset 0x0
+#define HYPERBUS_CFG_REGS__CAPABILITY__NUM_PHYS_bm 0xff00
+#define HYPERBUS_CFG_REGS__CAPABILITY__NUM_PHYS_bp 8
+#define HYPERBUS_CFG_REGS__CAPABILITY__NUM_PHYS_bw 8
+#define HYPERBUS_CFG_REGS__CAPABILITY__NUM_PHYS_reset 0x0
+#define HYPERBUS_CFG_REGS__CAPABILITY__PER_CHIP_CFG_bm 0x10000
+#define HYPERBUS_CFG_REGS__CAPABILITY__PER_CHIP_CFG_bp 16
+#define HYPERBUS_CFG_REGS__CAPABILITY__PER_CHIP_CFG_bw 1
+#define HYPERBUS_CFG_REGS__CAPABILITY__PER_CHIP_CFG_reset 0x0
+#define HYPERBUS_CFG_REGS__CAPABILITY__PER_PHY_CFG_bm 0x20000
+#define HYPERBUS_CFG_REGS__CAPABILITY__PER_PHY_CFG_bp 17
+#define HYPERBUS_CFG_REGS__CAPABILITY__PER_PHY_CFG_bw 1
+#define HYPERBUS_CFG_REGS__CAPABILITY__PER_PHY_CFG_reset 0x0
+#define HYPERBUS_CFG_REGS__CAPABILITY__CHIP_ENABLE_bm 0x40000
+#define HYPERBUS_CFG_REGS__CAPABILITY__CHIP_ENABLE_bp 18
+#define HYPERBUS_CFG_REGS__CAPABILITY__CHIP_ENABLE_bw 1
+#define HYPERBUS_CFG_REGS__CAPABILITY__CHIP_ENABLE_reset 0x0
+#define HYPERBUS_CFG_REGS__CAPABILITY__CLOCK_DIVIDER_bm 0x80000
+#define HYPERBUS_CFG_REGS__CAPABILITY__CLOCK_DIVIDER_bp 19
+#define HYPERBUS_CFG_REGS__CAPABILITY__CLOCK_DIVIDER_bw 1
+#define HYPERBUS_CFG_REGS__CAPABILITY__CLOCK_DIVIDER_reset 0x0
+#define HYPERBUS_CFG_REGS__CAPABILITY__STAGED_APPLY_bm 0x100000
+#define HYPERBUS_CFG_REGS__CAPABILITY__STAGED_APPLY_bp 20
+#define HYPERBUS_CFG_REGS__CAPABILITY__STAGED_APPLY_bw 1
+#define HYPERBUS_CFG_REGS__CAPABILITY__STAGED_APPLY_reset 0x0
+#define HYPERBUS_CFG_REGS__CAPABILITY__ERROR_STATUS_bm 0x200000
+#define HYPERBUS_CFG_REGS__CAPABILITY__ERROR_STATUS_bp 21
+#define HYPERBUS_CFG_REGS__CAPABILITY__ERROR_STATUS_bw 1
+#define HYPERBUS_CFG_REGS__CAPABILITY__ERROR_STATUS_reset 0x0
+#define HYPERBUS_CFG_REGS__CAPABILITY__RWDS_SAMPLE_TIMING_bm 0x400000
+#define HYPERBUS_CFG_REGS__CAPABILITY__RWDS_SAMPLE_TIMING_bp 22
+#define HYPERBUS_CFG_REGS__CAPABILITY__RWDS_SAMPLE_TIMING_bw 1
+#define HYPERBUS_CFG_REGS__CAPABILITY__RWDS_SAMPLE_TIMING_reset 0x0
+#define HYPERBUS_CFG_REGS__CAPABILITY__RWDS_OE_TIMING_bm 0x800000
+#define HYPERBUS_CFG_REGS__CAPABILITY__RWDS_OE_TIMING_bp 23
+#define HYPERBUS_CFG_REGS__CAPABILITY__RWDS_OE_TIMING_bw 1
+#define HYPERBUS_CFG_REGS__CAPABILITY__RWDS_OE_TIMING_reset 0x0
+
+// reg - hyperbus_cfg_regs::command
+#define HYPERBUS_CFG_REGS__COMMAND__FLUSH_bm 0x1
+#define HYPERBUS_CFG_REGS__COMMAND__FLUSH_bp 0
+#define HYPERBUS_CFG_REGS__COMMAND__FLUSH_bw 1
+#define HYPERBUS_CFG_REGS__COMMAND__FLUSH_reset 0x0
+#define HYPERBUS_CFG_REGS__COMMAND__APPLY_bm 0x2
+#define HYPERBUS_CFG_REGS__COMMAND__APPLY_bp 1
+#define HYPERBUS_CFG_REGS__COMMAND__APPLY_bw 1
+#define HYPERBUS_CFG_REGS__COMMAND__APPLY_reset 0x0
+
+// reg - hyperbus_cfg_regs::status
+#define HYPERBUS_CFG_REGS__STATUS__DECODE_ERROR_bm 0x1
+#define HYPERBUS_CFG_REGS__STATUS__DECODE_ERROR_bp 0
+#define HYPERBUS_CFG_REGS__STATUS__DECODE_ERROR_bw 1
+#define HYPERBUS_CFG_REGS__STATUS__DECODE_ERROR_reset 0x0
+#define HYPERBUS_CFG_REGS__STATUS__BUSY_bm 0x2
+#define HYPERBUS_CFG_REGS__STATUS__BUSY_bp 1
+#define HYPERBUS_CFG_REGS__STATUS__BUSY_bw 1
+#define HYPERBUS_CFG_REGS__STATUS__BUSY_reset 0x0
+#define HYPERBUS_CFG_REGS__STATUS__DIRTY_bm 0x4
+#define HYPERBUS_CFG_REGS__STATUS__DIRTY_bp 2
+#define HYPERBUS_CFG_REGS__STATUS__DIRTY_bw 1
+#define HYPERBUS_CFG_REGS__STATUS__DIRTY_reset 0x0
+
+// regfile - hyperbus_cfg_regs::global_regs
+typedef struct __attribute__ ((__packed__)) {
+ uint32_t ip_version;
+ uint32_t reg_if_version;
+ uint32_t capability;
+ uint32_t command;
+ uint32_t status;
+} hyperbus_cfg_regs__global_regs_t;
+
+// reg - hyperbus_cfg_regs::frontend_cfg
+#define HYPERBUS_CFG_REGS__FRONTEND_CFG__DUAL_PHY_bm 0x1
+#define HYPERBUS_CFG_REGS__FRONTEND_CFG__DUAL_PHY_bp 0
+#define HYPERBUS_CFG_REGS__FRONTEND_CFG__DUAL_PHY_bw 1
+#define HYPERBUS_CFG_REGS__FRONTEND_CFG__DUAL_PHY_reset 0x1
+
+// regfile - hyperbus_cfg_regs::frontend_regs
+typedef struct __attribute__ ((__packed__)) {
+ uint32_t frontend_cfg;
+} hyperbus_cfg_regs__frontend_regs_t;
+
+// reg - hyperbus_cfg_regs::clock_cfg
+#define HYPERBUS_CFG_REGS__CLOCK_CFG__DIVIDER_bm 0xff
+#define HYPERBUS_CFG_REGS__CLOCK_CFG__DIVIDER_bp 0
+#define HYPERBUS_CFG_REGS__CLOCK_CFG__DIVIDER_bw 8
+#define HYPERBUS_CFG_REGS__CLOCK_CFG__DIVIDER_reset 0x8
+
+// regfile - hyperbus_cfg_regs::backend_regs
+typedef struct __attribute__ ((__packed__)) {
+ uint32_t clock_cfg;
+} hyperbus_cfg_regs__backend_regs_t;
+
+// reg - hyperbus_cfg_regs::tx_delay
+#define HYPERBUS_CFG_REGS__TX_DELAY__VALUE_bm 0xff
+#define HYPERBUS_CFG_REGS__TX_DELAY__VALUE_bp 0
+#define HYPERBUS_CFG_REGS__TX_DELAY__VALUE_bw 8
+#define HYPERBUS_CFG_REGS__TX_DELAY__VALUE_reset 0x10
+
+// reg - hyperbus_cfg_regs::rwds_timing
+#define HYPERBUS_CFG_REGS__RWDS_TIMING__RWDS_OE_SETUP_CYCLES_bm 0xff
+#define HYPERBUS_CFG_REGS__RWDS_TIMING__RWDS_OE_SETUP_CYCLES_bp 0
+#define HYPERBUS_CFG_REGS__RWDS_TIMING__RWDS_OE_SETUP_CYCLES_bw 8
+#define HYPERBUS_CFG_REGS__RWDS_TIMING__RWDS_OE_SETUP_CYCLES_reset 0x1
+
+// regfile - hyperbus_cfg_regs::phy_regs
+typedef struct __attribute__ ((__packed__)) {
+ uint32_t tx_delay;
+ uint32_t rwds_timing;
+} hyperbus_cfg_regs__phy_regs_t;
+
+// reg - hyperbus_cfg_regs::range_base
+#define HYPERBUS_CFG_REGS__RANGE_BASE__VALUE_bm 0xffc00000
+#define HYPERBUS_CFG_REGS__RANGE_BASE__VALUE_bp 22
+#define HYPERBUS_CFG_REGS__RANGE_BASE__VALUE_bw 10
+#define HYPERBUS_CFG_REGS__RANGE_BASE__VALUE_reset 0x0
+
+// reg - hyperbus_cfg_regs::range_bound
+#define HYPERBUS_CFG_REGS__RANGE_BOUND__VALUE_bm 0xffc00000
+#define HYPERBUS_CFG_REGS__RANGE_BOUND__VALUE_bp 22
+#define HYPERBUS_CFG_REGS__RANGE_BOUND__VALUE_bw 10
+#define HYPERBUS_CFG_REGS__RANGE_BOUND__VALUE_reset 0x1
+
+// reg - hyperbus_cfg_regs::address_cfg
+#define HYPERBUS_CFG_REGS__ADDRESS_CFG__ADDRESS_SPACE_bm 0xff
+#define HYPERBUS_CFG_REGS__ADDRESS_CFG__ADDRESS_SPACE_bp 0
+#define HYPERBUS_CFG_REGS__ADDRESS_CFG__ADDRESS_SPACE_bw 8
+#define HYPERBUS_CFG_REGS__ADDRESS_CFG__ADDRESS_SPACE_reset 0x0
+#define HYPERBUS_CFG_REGS__ADDRESS_CFG__ADDRESS_MASK_MSB_bm 0xff00
+#define HYPERBUS_CFG_REGS__ADDRESS_CFG__ADDRESS_MASK_MSB_bp 8
+#define HYPERBUS_CFG_REGS__ADDRESS_CFG__ADDRESS_MASK_MSB_bw 8
+#define HYPERBUS_CFG_REGS__ADDRESS_CFG__ADDRESS_MASK_MSB_reset 0x19
+#define HYPERBUS_CFG_REGS__ADDRESS_CFG__ENABLE_bm 0x10000
+#define HYPERBUS_CFG_REGS__ADDRESS_CFG__ENABLE_bp 16
+#define HYPERBUS_CFG_REGS__ADDRESS_CFG__ENABLE_bw 1
+#define HYPERBUS_CFG_REGS__ADDRESS_CFG__ENABLE_reset 0x1
+
+// reg - hyperbus_cfg_regs::latency_cfg
+#define HYPERBUS_CFG_REGS__LATENCY_CFG__T_LATENCY_ACCESS_bm 0xff
+#define HYPERBUS_CFG_REGS__LATENCY_CFG__T_LATENCY_ACCESS_bp 0
+#define HYPERBUS_CFG_REGS__LATENCY_CFG__T_LATENCY_ACCESS_bw 8
+#define HYPERBUS_CFG_REGS__LATENCY_CFG__T_LATENCY_ACCESS_reset 0x6
+#define HYPERBUS_CFG_REGS__LATENCY_CFG__RWDS_SAMPLE_DELAY_bm 0xff00
+#define HYPERBUS_CFG_REGS__LATENCY_CFG__RWDS_SAMPLE_DELAY_bp 8
+#define HYPERBUS_CFG_REGS__LATENCY_CFG__RWDS_SAMPLE_DELAY_bw 8
+#define HYPERBUS_CFG_REGS__LATENCY_CFG__RWDS_SAMPLE_DELAY_reset 0x0
+#define HYPERBUS_CFG_REGS__LATENCY_CFG__EN_LATENCY_ADDITIONAL_bm 0x10000
+#define HYPERBUS_CFG_REGS__LATENCY_CFG__EN_LATENCY_ADDITIONAL_bp 16
+#define HYPERBUS_CFG_REGS__LATENCY_CFG__EN_LATENCY_ADDITIONAL_bw 1
+#define HYPERBUS_CFG_REGS__LATENCY_CFG__EN_LATENCY_ADDITIONAL_reset 0x0
+
+// reg - hyperbus_cfg_regs::burst_cfg
+#define HYPERBUS_CFG_REGS__BURST_CFG__T_BURST_MAX_bm 0xffff
+#define HYPERBUS_CFG_REGS__BURST_CFG__T_BURST_MAX_bp 0
+#define HYPERBUS_CFG_REGS__BURST_CFG__T_BURST_MAX_bw 16
+#define HYPERBUS_CFG_REGS__BURST_CFG__T_BURST_MAX_reset 0x15e
+
+// reg - hyperbus_cfg_regs::chip_timing
+#define HYPERBUS_CFG_REGS__CHIP_TIMING__T_READ_WRITE_RECOVERY_bm 0xff
+#define HYPERBUS_CFG_REGS__CHIP_TIMING__T_READ_WRITE_RECOVERY_bp 0
+#define HYPERBUS_CFG_REGS__CHIP_TIMING__T_READ_WRITE_RECOVERY_bw 8
+#define HYPERBUS_CFG_REGS__CHIP_TIMING__T_READ_WRITE_RECOVERY_reset 0x6
+#define HYPERBUS_CFG_REGS__CHIP_TIMING__T_CSH_CYCLES_bm 0xff00
+#define HYPERBUS_CFG_REGS__CHIP_TIMING__T_CSH_CYCLES_bp 8
+#define HYPERBUS_CFG_REGS__CHIP_TIMING__T_CSH_CYCLES_bw 8
+#define HYPERBUS_CFG_REGS__CHIP_TIMING__T_CSH_CYCLES_reset 0x1
+#define HYPERBUS_CFG_REGS__CHIP_TIMING__CSN_TO_CK_CYCLES_bm 0xff0000
+#define HYPERBUS_CFG_REGS__CHIP_TIMING__CSN_TO_CK_CYCLES_bp 16
+#define HYPERBUS_CFG_REGS__CHIP_TIMING__CSN_TO_CK_CYCLES_bw 8
+#define HYPERBUS_CFG_REGS__CHIP_TIMING__CSN_TO_CK_CYCLES_reset 0x0
+
+// reg - hyperbus_cfg_regs::rx_delay
+#define HYPERBUS_CFG_REGS__RX_DELAY__VALUE_bm 0xff
+#define HYPERBUS_CFG_REGS__RX_DELAY__VALUE_bp 0
+#define HYPERBUS_CFG_REGS__RX_DELAY__VALUE_bw 8
+#define HYPERBUS_CFG_REGS__RX_DELAY__VALUE_reset 0x10
+
+// regfile - hyperbus_cfg_regs::chip_regs
+typedef struct __attribute__ ((__packed__)) {
+ uint32_t range_base;
+ uint32_t range_bound;
+ uint32_t address_cfg;
+ uint32_t latency_cfg;
+ uint32_t burst_cfg;
+ uint32_t chip_timing;
+ uint32_t rx_delay;
+} hyperbus_cfg_regs__chip_regs_t;
+
+// reg - hyperbus_cfg_regs::range_base_value_aea1d0e1
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_AEA1D0E1__VALUE_bm 0xffc00000
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_AEA1D0E1__VALUE_bp 22
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_AEA1D0E1__VALUE_bw 10
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_AEA1D0E1__VALUE_reset 0x1
+
+// reg - hyperbus_cfg_regs::range_bound_value_e30f0c3f
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_E30F0C3F__VALUE_bm 0xffc00000
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_E30F0C3F__VALUE_bp 22
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_E30F0C3F__VALUE_bw 10
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_E30F0C3F__VALUE_reset 0x2
+
+// regfile - hyperbus_cfg_regs::chip_regs_range_base_de2a4636_range_bound_d40fd139
+typedef struct __attribute__ ((__packed__)) {
+ uint32_t range_base;
+ uint32_t range_bound;
+ uint32_t address_cfg;
+ uint32_t latency_cfg;
+ uint32_t burst_cfg;
+ uint32_t chip_timing;
+ uint32_t rx_delay;
+} hyperbus_cfg_regs__chip_regs_range_base_de2a4636_range_bound_d40fd139_t;
+
+// reg - hyperbus_cfg_regs::range_base_value_e30f0c3f
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_E30F0C3F__VALUE_bm 0xffc00000
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_E30F0C3F__VALUE_bp 22
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_E30F0C3F__VALUE_bw 10
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_E30F0C3F__VALUE_reset 0x2
+
+// reg - hyperbus_cfg_regs::range_bound_value_2f629ec9
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_2F629EC9__VALUE_bm 0xffc00000
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_2F629EC9__VALUE_bp 22
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_2F629EC9__VALUE_bw 10
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_2F629EC9__VALUE_reset 0x3
+
+// regfile - hyperbus_cfg_regs::chip_regs_range_base_b054dd4c_range_bound_a4d5f83b
+typedef struct __attribute__ ((__packed__)) {
+ uint32_t range_base;
+ uint32_t range_bound;
+ uint32_t address_cfg;
+ uint32_t latency_cfg;
+ uint32_t burst_cfg;
+ uint32_t chip_timing;
+ uint32_t rx_delay;
+} hyperbus_cfg_regs__chip_regs_range_base_b054dd4c_range_bound_a4d5f83b_t;
+
+// reg - hyperbus_cfg_regs::range_base_value_2f629ec9
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_2F629EC9__VALUE_bm 0xffc00000
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_2F629EC9__VALUE_bp 22
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_2F629EC9__VALUE_bw 10
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_2F629EC9__VALUE_reset 0x3
+
+// reg - hyperbus_cfg_regs::range_bound_value_a1e733c2
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_A1E733C2__VALUE_bm 0xffc00000
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_A1E733C2__VALUE_bp 22
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_A1E733C2__VALUE_bw 10
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_A1E733C2__VALUE_reset 0x4
+
+// regfile - hyperbus_cfg_regs::chip_regs_range_base_f7266ded_range_bound_5bf260e9
+typedef struct __attribute__ ((__packed__)) {
+ uint32_t range_base;
+ uint32_t range_bound;
+ uint32_t address_cfg;
+ uint32_t latency_cfg;
+ uint32_t burst_cfg;
+ uint32_t chip_timing;
+ uint32_t rx_delay;
+} hyperbus_cfg_regs__chip_regs_range_base_f7266ded_range_bound_5bf260e9_t;
+
+// reg - hyperbus_cfg_regs::range_base_value_a1e733c2
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_A1E733C2__VALUE_bm 0xffc00000
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_A1E733C2__VALUE_bp 22
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_A1E733C2__VALUE_bw 10
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_A1E733C2__VALUE_reset 0x4
+
+// reg - hyperbus_cfg_regs::range_bound_value_342915db
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_342915DB__VALUE_bm 0xffc00000
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_342915DB__VALUE_bp 22
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_342915DB__VALUE_bw 10
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_342915DB__VALUE_reset 0x5
+
+// regfile - hyperbus_cfg_regs::chip_regs_range_base_0d543b99_range_bound_1fffc3a2
+typedef struct __attribute__ ((__packed__)) {
+ uint32_t range_base;
+ uint32_t range_bound;
+ uint32_t address_cfg;
+ uint32_t latency_cfg;
+ uint32_t burst_cfg;
+ uint32_t chip_timing;
+ uint32_t rx_delay;
+} hyperbus_cfg_regs__chip_regs_range_base_0d543b99_range_bound_1fffc3a2_t;
+
+// reg - hyperbus_cfg_regs::range_base_value_342915db
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_342915DB__VALUE_bm 0xffc00000
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_342915DB__VALUE_bp 22
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_342915DB__VALUE_bw 10
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_342915DB__VALUE_reset 0x5
+
+// reg - hyperbus_cfg_regs::range_bound_value_883c384f
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_883C384F__VALUE_bm 0xffc00000
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_883C384F__VALUE_bp 22
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_883C384F__VALUE_bw 10
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_883C384F__VALUE_reset 0x6
+
+// regfile - hyperbus_cfg_regs::chip_regs_range_base_e068ab2e_range_bound_9afa5911
+typedef struct __attribute__ ((__packed__)) {
+ uint32_t range_base;
+ uint32_t range_bound;
+ uint32_t address_cfg;
+ uint32_t latency_cfg;
+ uint32_t burst_cfg;
+ uint32_t chip_timing;
+ uint32_t rx_delay;
+} hyperbus_cfg_regs__chip_regs_range_base_e068ab2e_range_bound_9afa5911_t;
+
+// reg - hyperbus_cfg_regs::range_base_value_883c384f
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_883C384F__VALUE_bm 0xffc00000
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_883C384F__VALUE_bp 22
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_883C384F__VALUE_bw 10
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_883C384F__VALUE_reset 0x6
+
+// reg - hyperbus_cfg_regs::range_bound_value_d0d03147
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_D0D03147__VALUE_bm 0xffc00000
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_D0D03147__VALUE_bp 22
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_D0D03147__VALUE_bw 10
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_D0D03147__VALUE_reset 0x7
+
+// regfile - hyperbus_cfg_regs::chip_regs_range_base_ac4fb754_range_bound_24b9644b
+typedef struct __attribute__ ((__packed__)) {
+ uint32_t range_base;
+ uint32_t range_bound;
+ uint32_t address_cfg;
+ uint32_t latency_cfg;
+ uint32_t burst_cfg;
+ uint32_t chip_timing;
+ uint32_t rx_delay;
+} hyperbus_cfg_regs__chip_regs_range_base_ac4fb754_range_bound_24b9644b_t;
+
+// reg - hyperbus_cfg_regs::range_base_value_d0d03147
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_D0D03147__VALUE_bm 0xffc00000
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_D0D03147__VALUE_bp 22
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_D0D03147__VALUE_bw 10
+#define HYPERBUS_CFG_REGS__RANGE_BASE_VALUE_D0D03147__VALUE_reset 0x7
+
+// reg - hyperbus_cfg_regs::range_bound_value_971bab53
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_971BAB53__VALUE_bm 0xffc00000
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_971BAB53__VALUE_bp 22
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_971BAB53__VALUE_bw 10
+#define HYPERBUS_CFG_REGS__RANGE_BOUND_VALUE_971BAB53__VALUE_reset 0x8
+
+// regfile - hyperbus_cfg_regs::chip_regs_range_base_63c2ba90_range_bound_602aea67
+typedef struct __attribute__ ((__packed__)) {
+ uint32_t range_base;
+ uint32_t range_bound;
+ uint32_t address_cfg;
+ uint32_t latency_cfg;
+ uint32_t burst_cfg;
+ uint32_t chip_timing;
+ uint32_t rx_delay;
+} hyperbus_cfg_regs__chip_regs_range_base_63c2ba90_range_bound_602aea67_t;
+
+// reg - hyperbus_cfg_regs::reserved_top
+#define HYPERBUS_CFG_REGS__RESERVED_TOP__VALUE_bm 0xffffffff
+#define HYPERBUS_CFG_REGS__RESERVED_TOP__VALUE_bp 0
+#define HYPERBUS_CFG_REGS__RESERVED_TOP__VALUE_bw 32
+#define HYPERBUS_CFG_REGS__RESERVED_TOP__VALUE_reset 0x0
// addrmap - hyperbus_cfg_regs
typedef struct __attribute__ ((__packed__)) {
- uint32_t t_latency_access;
- uint32_t en_latency_additional;
- uint32_t t_burst_max;
- uint32_t t_read_write_recovery;
- uint32_t t_rx_clk_delay;
- uint32_t t_tx_clk_delay;
- uint32_t address_mask_msb;
- uint32_t address_space;
- uint32_t phys_in_use;
- uint32_t which_phy;
- uint32_t t_csh_cycles;
- uint32_t csn_to_ck_cycles;
- uint32_t chip0_base;
- uint32_t chip0_bound;
- uint32_t chip1_base;
- uint32_t chip1_bound;
- uint32_t chip2_base;
- uint32_t chip2_bound;
- uint32_t chip3_base;
- uint32_t chip3_bound;
- uint8_t RESERVED_50_57[0x8];
- uint32_t chip4_base;
- uint32_t chip4_bound;
- uint32_t chip5_base;
- uint32_t chip5_bound;
- uint32_t chip6_base;
- uint32_t chip6_bound;
- uint32_t chip7_base;
- uint32_t chip7_bound;
+ hyperbus_cfg_regs__global_regs_t global_cfg;
+ uint8_t RESERVED_14_ff[0xec];
+ hyperbus_cfg_regs__frontend_regs_t frontend;
+ uint8_t RESERVED_104_1ff[0xfc];
+ hyperbus_cfg_regs__backend_regs_t backend;
+ uint8_t RESERVED_204_2ff[0xfc];
+ hyperbus_cfg_regs__phy_regs_t phy_0;
+ uint8_t RESERVED_308_33f[0x38];
+ hyperbus_cfg_regs__phy_regs_t phy_1;
+ uint8_t RESERVED_348_3ff[0xb8];
+ hyperbus_cfg_regs__chip_regs_t chip_0;
+ uint8_t RESERVED_41c_43f[0x24];
+ hyperbus_cfg_regs__chip_regs_range_base_de2a4636_range_bound_d40fd139_t chip_1;
+ uint8_t RESERVED_45c_47f[0x24];
+ hyperbus_cfg_regs__chip_regs_range_base_b054dd4c_range_bound_a4d5f83b_t chip_2;
+ uint8_t RESERVED_49c_4bf[0x24];
+ hyperbus_cfg_regs__chip_regs_range_base_f7266ded_range_bound_5bf260e9_t chip_3;
+ uint8_t RESERVED_4dc_4ff[0x24];
+ hyperbus_cfg_regs__chip_regs_range_base_0d543b99_range_bound_1fffc3a2_t chip_4;
+ uint8_t RESERVED_51c_53f[0x24];
+ hyperbus_cfg_regs__chip_regs_range_base_e068ab2e_range_bound_9afa5911_t chip_5;
+ uint8_t RESERVED_55c_57f[0x24];
+ hyperbus_cfg_regs__chip_regs_range_base_ac4fb754_range_bound_24b9644b_t chip_6;
+ uint8_t RESERVED_59c_5bf[0x24];
+ hyperbus_cfg_regs__chip_regs_range_base_63c2ba90_range_bound_602aea67_t chip_7;
+ uint8_t RESERVED_5dc_ffb[0xa20];
+ uint32_t reserved_top;
} hyperbus_cfg_regs_t;
-static_assert(sizeof(hyperbus_cfg_regs_t) == 0x78, "Packing error");
+static_assert(sizeof(hyperbus_cfg_regs_t) == 0x1000, "Packing error");
#ifdef __cplusplus
}
diff --git a/scripts/gen_regs.sh b/scripts/gen_regs.sh
index 3d625fc..8ceb003 100755
--- a/scripts/gen_regs.sh
+++ b/scripts/gen_regs.sh
@@ -12,35 +12,37 @@ export UV_CACHE_DIR
export UV_TOOL_DIR
RDL="${ROOT}/src/regs/hyperbus_cfg_regs.rdl"
+PEAKRDL_ARGS=(
+ --from "peakrdl-cli==1.5.0"
+ --with "peakrdl-regblock==1.3.1"
+ --with "peakrdl-cheader==1.1.0"
+ --with "peakrdl-markdown==1.0.3"
+)
mkdir -p "${ROOT}/include" "${ROOT}/docs/regs"
rm -rf "${ROOT}/docs/regs/hyperbus_cfg_regs"
-uvx --from peakrdl-cli \
- --with peakrdl-regblock \
- --with peakrdl-cheader \
- --with peakrdl-markdown \
+uvx "${PEAKRDL_ARGS[@]}" \
peakrdl regblock \
--cpuif apb4-flat \
--default-reset arst_n \
--module-name hyperbus_cfg_regblock \
--package-name hyperbus_cfg_regblock_pkg \
- --addr-width 7 \
+ --addr-width 12 \
-o "${ROOT}/src/regs" \
"${RDL}"
-uvx --from peakrdl-cli \
- --with peakrdl-regblock \
- --with peakrdl-cheader \
- --with peakrdl-markdown \
+uvx "${PEAKRDL_ARGS[@]}" \
peakrdl c-header \
-o "${ROOT}/include/hyperbus_cfg_regs.h" \
"${RDL}"
-uvx --from peakrdl-cli \
- --with peakrdl-regblock \
- --with peakrdl-cheader \
- --with peakrdl-markdown \
+uvx "${PEAKRDL_ARGS[@]}" \
peakrdl markdown \
-o "${ROOT}/docs/regs/hyperbus_cfg_regs.md" \
"${RDL}"
+
+# Keep generated RTL compatible with the repository whitespace checks.
+sed -i 's/[[:space:]]\+$//' \
+ "${ROOT}/src/regs/hyperbus_cfg_regblock.sv" \
+ "${ROOT}/src/regs/hyperbus_cfg_regblock_pkg.sv"
diff --git a/src/hyperbus.sv b/src/hyperbus.sv
index ff0faa6..e0889db 100644
--- a/src/hyperbus.sv
+++ b/src/hyperbus.sv
@@ -22,6 +22,7 @@ module hyperbus #(
parameter type axi_r_chan_t = logic,
parameter type axi_aw_chan_t = logic,
parameter int unsigned RegDataWidth = -1,
+ parameter int unsigned RegAddrWidth = 32,
parameter type reg_req_t = logic,
parameter type reg_rsp_t = logic,
parameter type axi_rule_t = logic,
@@ -118,6 +119,8 @@ module hyperbus #(
.NumChips ( NumChips ),
.NumPhys ( NumPhys ),
.RegDataWidth ( RegDataWidth ),
+ .RegAddrWidth ( RegAddrWidth ),
+ .CapabilityFeatures ( '0 ),
.reg_req_t ( reg_req_t ),
.reg_rsp_t ( reg_rsp_t ),
.rule_t ( axi_rule_t )
@@ -129,7 +132,12 @@ module hyperbus #(
.frontend_cfg_o ( frontend_cfg ),
.phy_cfg_o ( phy_cfg ),
.chip_rules_o ( chip_rules ),
- .trans_active_i ( trans_active )
+ .trans_active_i ( trans_active ),
+ .cfg_busy_i ( trans_active ),
+ .decode_error_i ( 1'b0 ),
+ .cfg_dirty_i ( 1'b0 ),
+ .flush_req_o ( ),
+ .apply_req_o ( )
);
// AXI slave interfacing PHY
diff --git a/src/hyperbus_cfg_regs.sv b/src/hyperbus_cfg_regs.sv
index 6c6ebd1..22162c5 100644
--- a/src/hyperbus_cfg_regs.sv
+++ b/src/hyperbus_cfg_regs.sv
@@ -10,6 +10,8 @@ module hyperbus_cfg_regs #(
parameter int unsigned NumChips = -1,
parameter int unsigned NumPhys = -1,
parameter int unsigned RegDataWidth = -1,
+ parameter int unsigned RegAddrWidth = 32,
+ parameter logic [7:0] CapabilityFeatures = '0,
parameter type reg_req_t = logic,
parameter type reg_rsp_t = logic,
parameter type rule_t = logic
@@ -23,21 +25,22 @@ module hyperbus_cfg_regs #(
output hyperbus_pkg::frontend_cfg_t frontend_cfg_o,
output hyperbus_pkg::phy_cfg_t phy_cfg_o,
output rule_t [NumChips-1:0] chip_rules_o,
- input trans_active_i
+ input logic trans_active_i,
+ input logic cfg_busy_i,
+ input logic decode_error_i,
+ input logic cfg_dirty_i,
+ output logic flush_req_o,
+ output logic apply_req_o
);
`include "common_cells/registers.svh"
localparam int unsigned NumChipsMax = 8;
- localparam int unsigned NumRegs = 30;
- localparam int unsigned RegsBits = cf_math_pkg::idx_width(NumRegs);
- localparam int unsigned RegStrbWidth = RegDataWidth/8;
-
`ASSERT_INIT(NumChipsValid, NumChips >= 1 && NumChips <= NumChipsMax)
`ASSERT_INIT(NumPhysValid, NumPhys == 1 || NumPhys == 2)
+ `ASSERT_INIT(RegAddrWidthValid, RegAddrWidth >= 12)
`ASSERT_INIT(RegDataWidthValid, RegDataWidth == 32)
- typedef logic [RegsBits-1:0] reg_idx_t;
- typedef logic [6:0] cfg_addr_t;
+ typedef logic [11:0] cfg_addr_t;
typedef logic [31:0] cfg_data_t;
typedef logic [3:0] cfg_strb_t;
@@ -72,36 +75,108 @@ module hyperbus_cfg_regs #(
} cfg_apb_rsp_t;
hyperbus_cfg_regblock_pkg::hyperbus_cfg_regs__out_t cfg_hwif_out;
+ hyperbus_cfg_regblock_pkg::hyperbus_cfg_regs__in_t cfg_hwif_in;
rule_t [NumChipsMax-1:0] chip_rules_all;
- reg_idx_t sel_reg;
+ cfg_addr_t cfg_addr;
+ logic cfg_addr_in_window;
logic sel_reg_mapped;
logic cfg_access_active_d, cfg_access_active_q;
logic cfg_access_open;
+ logic cfg_status_access;
+ logic cfg_value_valid;
+ logic unused_cfg_fields;
cfg_reg_req_t cfg_reg_req;
cfg_reg_rsp_t cfg_reg_rsp;
cfg_apb_req_t cfg_apb_req;
cfg_apb_rsp_t cfg_apb_rsp;
- assign sel_reg = reg_req_i.addr[$clog2(RegStrbWidth) +: RegsBits];
- assign sel_reg_mapped = (sel_reg < NumRegs);
- assign cfg_access_open = ~trans_active_i | cfg_access_active_q;
+ assign cfg_addr = cfg_addr_t'(reg_req_i.addr);
+ assign cfg_addr_in_window = reg_req_i.addr == RegAddrWidth'(cfg_addr);
+ assign cfg_status_access = reg_req_i.valid &&
+ cfg_addr_in_window && (cfg_addr == 12'h010);
+
+ always_comb begin : proc_cfg_addr_mapped
+ sel_reg_mapped = cfg_addr_in_window &&
+ ((cfg_addr == 12'h000) ||
+ (cfg_addr == 12'h004) ||
+ (cfg_addr == 12'h008) ||
+ (cfg_addr == 12'h00c) ||
+ (cfg_addr == 12'h010) ||
+ (cfg_addr == 12'h100) ||
+ (cfg_addr == 12'h200) ||
+ (cfg_addr == 12'hffc));
+ for (int unsigned i = 0; i < 2; i++) begin
+ sel_reg_mapped |= cfg_addr_in_window &&
+ ((cfg_addr == (12'h300 + i * 12'h40)) ||
+ (cfg_addr == (12'h304 + i * 12'h40)));
+ end
+ for (int unsigned i = 0; i < 8; i++) begin
+ sel_reg_mapped |= cfg_addr_in_window &&
+ ((cfg_addr == (12'h400 + i * 12'h40)) ||
+ (cfg_addr == (12'h404 + i * 12'h40)) ||
+ (cfg_addr == (12'h408 + i * 12'h40)) ||
+ (cfg_addr == (12'h40c + i * 12'h40)) ||
+ (cfg_addr == (12'h410 + i * 12'h40)) ||
+ (cfg_addr == (12'h414 + i * 12'h40)) ||
+ (cfg_addr == (12'h418 + i * 12'h40)));
+ end
+ end
+ assign cfg_access_open = ~trans_active_i | cfg_access_active_q | cfg_status_access;
+
+ always_comb begin : proc_cfg_value_valid
+ cfg_value_valid = 1'b1;
+ if (reg_req_i.valid && reg_req_i.write && sel_reg_mapped) begin
+ // All byte-backed legacy values are range-checked only when their
+ // corresponding byte is written, preserving partial-write behavior.
+ if ((cfg_addr == 12'h100) && reg_req_i.wstrb[0]) begin
+ cfg_value_valid &= (reg_req_i.wdata[7:0] <= 8'd1);
+ end
+ if ((cfg_addr == 12'h200) && reg_req_i.wstrb[0]) begin
+ cfg_value_valid &= (reg_req_i.wdata[7:0] >= 8'd2);
+ end
+ if (((cfg_addr == 12'h304) || (cfg_addr == 12'h344)) &&
+ reg_req_i.wstrb[0]) begin
+ cfg_value_valid &= (reg_req_i.wdata[7:0] <= 8'd15);
+ end
+ for (int unsigned i = 0; i < 8; i++) begin
+ if (cfg_addr == (12'h408 + i * 12'h40)) begin
+ if (reg_req_i.wstrb[0]) cfg_value_valid &= (reg_req_i.wdata[7:0] <= 8'd1);
+ if (reg_req_i.wstrb[1]) cfg_value_valid &= (reg_req_i.wdata[15:8] <= 8'd31);
+ if (reg_req_i.wstrb[2]) cfg_value_valid &= (reg_req_i.wdata[23:16] <= 8'd1);
+ end
+ if (cfg_addr == (12'h40c + i * 12'h40)) begin
+ if (reg_req_i.wstrb[0]) cfg_value_valid &=
+ (reg_req_i.wdata[7:0] >= 8'd3 && reg_req_i.wdata[7:0] <= 8'd15);
+ if (reg_req_i.wstrb[1]) cfg_value_valid &= (reg_req_i.wdata[15:8] <= 8'd15);
+ if (reg_req_i.wstrb[2]) cfg_value_valid &= (reg_req_i.wdata[23:16] <= 8'd1);
+ end
+ if (cfg_addr == (12'h414 + i * 12'h40)) begin
+ if (reg_req_i.wstrb[0]) cfg_value_valid &= (reg_req_i.wdata[7:0] <= 8'd15);
+ if (reg_req_i.wstrb[1]) cfg_value_valid &= (reg_req_i.wdata[15:8] <= 8'd15);
+ if (reg_req_i.wstrb[2]) cfg_value_valid &= (reg_req_i.wdata[23:16] <= 8'd15);
+ end
+ end
+ end
+ end
assign reg_rsp_o.ready = cfg_access_open &
- (~reg_req_i.valid | ~sel_reg_mapped | cfg_reg_rsp.ready);
- assign reg_rsp_o.error = ~sel_reg_mapped | cfg_reg_rsp.error;
+ (~reg_req_i.valid | ~sel_reg_mapped | ~cfg_value_valid | cfg_reg_rsp.ready);
+ assign reg_rsp_o.error = (reg_req_i.valid && ~sel_reg_mapped) |
+ (reg_req_i.valid && reg_req_i.write && sel_reg_mapped && !cfg_value_valid) |
+ cfg_reg_rsp.error;
assign reg_rsp_o.rdata = sel_reg_mapped ? RegDataWidth'(cfg_reg_rsp.rdata) : '0;
- assign cfg_reg_req.valid = reg_req_i.valid & sel_reg_mapped & cfg_access_open;
- assign cfg_reg_req.addr = {sel_reg, 2'b00};
+ assign cfg_reg_req.valid = reg_req_i.valid & sel_reg_mapped & cfg_access_open & cfg_value_valid;
+ assign cfg_reg_req.addr = cfg_addr;
assign cfg_reg_req.write = reg_req_i.write;
assign cfg_reg_req.wdata = 32'(reg_req_i.wdata);
assign cfg_reg_req.wstrb = cfg_strb_t'(reg_req_i.wstrb);
always_comb begin : proc_cfg_access
cfg_access_active_d = cfg_access_active_q;
- if (!cfg_access_active_q && cfg_reg_req.valid) begin
+ if (!cfg_access_active_q && cfg_reg_req.valid && !cfg_status_access) begin
cfg_access_active_d = 1'b1;
end
if (cfg_access_active_q && cfg_reg_rsp.ready) begin
@@ -115,60 +190,44 @@ module hyperbus_cfg_regs #(
chip_rules_all = '0;
for (int unsigned i = 0; i < NumChipsMax; i++) begin
chip_rules_all[i].idx = unsigned'(i);
- unique case (i)
- 0: begin
- chip_rules_all[i].start_addr = {
- cfg_hwif_out.chip0_base.value.value, 22'b0};
- chip_rules_all[i].end_addr = {
- cfg_hwif_out.chip0_bound.value.value, 22'b0};
- end
- 1: begin
- chip_rules_all[i].start_addr = {
- cfg_hwif_out.chip1_base.value.value, 22'b0};
- chip_rules_all[i].end_addr = {
- cfg_hwif_out.chip1_bound.value.value, 22'b0};
- end
- 2: begin
- chip_rules_all[i].start_addr = {
- cfg_hwif_out.chip2_base.value.value, 22'b0};
- chip_rules_all[i].end_addr = {
- cfg_hwif_out.chip2_bound.value.value, 22'b0};
- end
- 3: begin
- chip_rules_all[i].start_addr = {
- cfg_hwif_out.chip3_base.value.value, 22'b0};
- chip_rules_all[i].end_addr = {
- cfg_hwif_out.chip3_bound.value.value, 22'b0};
- end
- 4: begin
- chip_rules_all[i].start_addr = {
- cfg_hwif_out.chip4_base.value.value, 22'b0};
- chip_rules_all[i].end_addr = {
- cfg_hwif_out.chip4_bound.value.value, 22'b0};
- end
- 5: begin
- chip_rules_all[i].start_addr = {
- cfg_hwif_out.chip5_base.value.value, 22'b0};
- chip_rules_all[i].end_addr = {
- cfg_hwif_out.chip5_bound.value.value, 22'b0};
- end
- 6: begin
- chip_rules_all[i].start_addr = {
- cfg_hwif_out.chip6_base.value.value, 22'b0};
- chip_rules_all[i].end_addr = {
- cfg_hwif_out.chip6_bound.value.value, 22'b0};
- end
- 7: begin
- chip_rules_all[i].start_addr = {
- cfg_hwif_out.chip7_base.value.value, 22'b0};
- chip_rules_all[i].end_addr = {
- cfg_hwif_out.chip7_bound.value.value, 22'b0};
- end
- default:;
- endcase
end
+ chip_rules_all[0].start_addr = {cfg_hwif_out.chip_0.range_base.value.value, 22'b0};
+ chip_rules_all[0].end_addr = {cfg_hwif_out.chip_0.range_bound.value.value, 22'b0};
+ chip_rules_all[1].start_addr = {cfg_hwif_out.chip_1.range_base.value.value, 22'b0};
+ chip_rules_all[1].end_addr = {cfg_hwif_out.chip_1.range_bound.value.value, 22'b0};
+ chip_rules_all[2].start_addr = {cfg_hwif_out.chip_2.range_base.value.value, 22'b0};
+ chip_rules_all[2].end_addr = {cfg_hwif_out.chip_2.range_bound.value.value, 22'b0};
+ chip_rules_all[3].start_addr = {cfg_hwif_out.chip_3.range_base.value.value, 22'b0};
+ chip_rules_all[3].end_addr = {cfg_hwif_out.chip_3.range_bound.value.value, 22'b0};
+ chip_rules_all[4].start_addr = {cfg_hwif_out.chip_4.range_base.value.value, 22'b0};
+ chip_rules_all[4].end_addr = {cfg_hwif_out.chip_4.range_bound.value.value, 22'b0};
+ chip_rules_all[5].start_addr = {cfg_hwif_out.chip_5.range_base.value.value, 22'b0};
+ chip_rules_all[5].end_addr = {cfg_hwif_out.chip_5.range_bound.value.value, 22'b0};
+ chip_rules_all[6].start_addr = {cfg_hwif_out.chip_6.range_base.value.value, 22'b0};
+ chip_rules_all[6].end_addr = {cfg_hwif_out.chip_6.range_bound.value.value, 22'b0};
+ chip_rules_all[7].start_addr = {cfg_hwif_out.chip_7.range_base.value.value, 22'b0};
+ chip_rules_all[7].end_addr = {cfg_hwif_out.chip_7.range_bound.value.value, 22'b0};
end
+ assign cfg_hwif_in.global_cfg.capability.num_chips.next = 8'(NumChips);
+ assign cfg_hwif_in.global_cfg.capability.num_phys.next = 8'(NumPhys);
+ assign cfg_hwif_in.global_cfg.capability.per_chip_cfg.next = CapabilityFeatures[0];
+ assign cfg_hwif_in.global_cfg.capability.per_phy_cfg.next = CapabilityFeatures[1];
+ assign cfg_hwif_in.global_cfg.capability.chip_enable.next = CapabilityFeatures[2];
+ assign cfg_hwif_in.global_cfg.capability.clock_divider.next = CapabilityFeatures[3];
+ assign cfg_hwif_in.global_cfg.capability.staged_apply.next = CapabilityFeatures[4];
+ assign cfg_hwif_in.global_cfg.capability.error_status.next = CapabilityFeatures[5];
+ assign cfg_hwif_in.global_cfg.capability.rwds_sample_timing.next =
+ CapabilityFeatures[6];
+ assign cfg_hwif_in.global_cfg.capability.rwds_oe_timing.next = CapabilityFeatures[7];
+ assign cfg_hwif_in.global_cfg.status.decode_error.next =
+ cfg_hwif_out.global_cfg.status.decode_error.value;
+ assign cfg_hwif_in.global_cfg.status.decode_error.hwset = decode_error_i;
+ assign cfg_hwif_in.global_cfg.status.busy.next = cfg_busy_i;
+ assign cfg_hwif_in.global_cfg.status.dirty.next = cfg_dirty_i;
+ assign flush_req_o = cfg_hwif_out.global_cfg.command.flush.value;
+ assign apply_req_o = cfg_hwif_out.global_cfg.command.apply.value;
+
reg_to_apb #(
.reg_req_t ( cfg_reg_req_t ),
.reg_rsp_t ( cfg_reg_rsp_t ),
@@ -196,6 +255,7 @@ module hyperbus_cfg_regs #(
.s_apb_pready ( cfg_apb_rsp.pready ),
.s_apb_prdata ( cfg_apb_rsp.prdata ),
.s_apb_pslverr ( cfg_apb_rsp.pslverr ),
+ .hwif_in ( cfg_hwif_in ),
.hwif_out ( cfg_hwif_out )
);
@@ -203,31 +263,46 @@ module hyperbus_cfg_regs #(
frontend_cfg_o = '0;
phy_cfg_o = '0;
- frontend_cfg_o.address_mask_msb = cfg_hwif_out.address_mask_msb.value.value;
- frontend_cfg_o.address_space = cfg_hwif_out.address_space.value.value;
+ frontend_cfg_o.address_mask_msb = cfg_hwif_out.chip_0.address_cfg.address_mask_msb.value;
+ frontend_cfg_o.address_space = cfg_hwif_out.chip_0.address_cfg.address_space.value[0];
frontend_cfg_o.phys_in_use = (NumPhys == 2) &&
- cfg_hwif_out.phys_in_use.value.value;
- frontend_cfg_o.which_phy = (NumPhys == 2) &&
- cfg_hwif_out.which_phy.value.value;
-
- phy_cfg_o.chip.t_latency_access = cfg_hwif_out.t_latency_access.value.value;
- phy_cfg_o.chip.en_latency_additional = cfg_hwif_out.en_latency_additional.value.value;
- phy_cfg_o.chip.t_burst_max = cfg_hwif_out.t_burst_max.value.value;
- phy_cfg_o.chip.t_read_write_recovery = cfg_hwif_out.t_read_write_recovery.value.value;
- phy_cfg_o.chip.t_rx_clk_delay = {
- cfg_hwif_out.t_rx_clk_delay.coarse.value,
- cfg_hwif_out.t_rx_clk_delay.fine.value
- };
- phy_cfg_o.chip.t_csh_cycles = cfg_hwif_out.t_csh_cycles.value.value;
- phy_cfg_o.chip.csn_to_ck_cycles = cfg_hwif_out.csn_to_ck_cycles.value.value;
- phy_cfg_o.t_tx_clk_delay = {
- cfg_hwif_out.t_tx_clk_delay.coarse.value,
- cfg_hwif_out.t_tx_clk_delay.fine.value
- };
+ cfg_hwif_out.frontend.frontend_cfg.dual_phy.value;
+ frontend_cfg_o.which_phy = 1'b0;
+
+ phy_cfg_o.chip.t_latency_access = cfg_hwif_out.chip_0.latency_cfg.t_latency_access.value;
+ phy_cfg_o.chip.en_latency_additional = cfg_hwif_out.chip_0.latency_cfg.en_latency_additional.value;
+ phy_cfg_o.chip.t_burst_max = cfg_hwif_out.chip_0.burst_cfg.t_burst_max.value;
+ phy_cfg_o.chip.t_read_write_recovery = cfg_hwif_out.chip_0.chip_timing.t_read_write_recovery.value;
+ phy_cfg_o.chip.t_rx_clk_delay = cfg_hwif_out.chip_0.rx_delay.value.value;
+ phy_cfg_o.chip.t_csh_cycles = cfg_hwif_out.chip_0.chip_timing.t_csh_cycles.value;
+ phy_cfg_o.chip.csn_to_ck_cycles = cfg_hwif_out.chip_0.chip_timing.csn_to_ck_cycles.value;
+ phy_cfg_o.t_tx_clk_delay = cfg_hwif_out.phy_0.tx_delay.value.value;
phy_cfg_o.phys_in_use = (NumPhys == 2) &&
- cfg_hwif_out.phys_in_use.value.value;
- phy_cfg_o.which_phy = (NumPhys == 2) &&
- cfg_hwif_out.which_phy.value.value;
+ cfg_hwif_out.frontend.frontend_cfg.dual_phy.value;
+ phy_cfg_o.which_phy = 1'b0;
+ end
+
+ // The legacy PR34 interface has no destinations for these newer fields.
+ always_comb begin : proc_unused_cfg_fields
+ unused_cfg_fields = ^cfg_hwif_out.backend.clock_cfg.divider.value;
+ unused_cfg_fields |= ^cfg_hwif_out.phy_0.rwds_timing.rwds_oe_setup_cycles.value;
+ unused_cfg_fields |= ^cfg_hwif_out.phy_1.rwds_timing.rwds_oe_setup_cycles.value;
+ unused_cfg_fields |= ^cfg_hwif_out.chip_0.address_cfg.enable.value;
+ unused_cfg_fields |= ^cfg_hwif_out.chip_0.latency_cfg.rwds_sample_delay.value;
+ unused_cfg_fields |= ^cfg_hwif_out.chip_1.address_cfg.enable.value;
+ unused_cfg_fields |= ^cfg_hwif_out.chip_1.latency_cfg.rwds_sample_delay.value;
+ unused_cfg_fields |= ^cfg_hwif_out.chip_2.address_cfg.enable.value;
+ unused_cfg_fields |= ^cfg_hwif_out.chip_2.latency_cfg.rwds_sample_delay.value;
+ unused_cfg_fields |= ^cfg_hwif_out.chip_3.address_cfg.enable.value;
+ unused_cfg_fields |= ^cfg_hwif_out.chip_3.latency_cfg.rwds_sample_delay.value;
+ unused_cfg_fields |= ^cfg_hwif_out.chip_4.address_cfg.enable.value;
+ unused_cfg_fields |= ^cfg_hwif_out.chip_4.latency_cfg.rwds_sample_delay.value;
+ unused_cfg_fields |= ^cfg_hwif_out.chip_5.address_cfg.enable.value;
+ unused_cfg_fields |= ^cfg_hwif_out.chip_5.latency_cfg.rwds_sample_delay.value;
+ unused_cfg_fields |= ^cfg_hwif_out.chip_6.address_cfg.enable.value;
+ unused_cfg_fields |= ^cfg_hwif_out.chip_6.latency_cfg.rwds_sample_delay.value;
+ unused_cfg_fields |= ^cfg_hwif_out.chip_7.address_cfg.enable.value;
+ unused_cfg_fields |= ^cfg_hwif_out.chip_7.latency_cfg.rwds_sample_delay.value;
end
for (genvar i = 0; unsigned'(i) < NumChipsMax; i++) begin : gen_chip_rules
diff --git a/src/hyperbus_synth_wrap.sv b/src/hyperbus_synth_wrap.sv
index e7fc312..ed9ccc4 100644
--- a/src/hyperbus_synth_wrap.sv
+++ b/src/hyperbus_synth_wrap.sv
@@ -146,6 +146,7 @@ module hyperbus_lint_wrap #(
.axi_r_chan_t ( r_chan_t ),
.axi_aw_chan_t ( aw_chan_t ),
.RegDataWidth ( RegDataWidth ),
+ .RegAddrWidth ( RegAddrWidth ),
.reg_req_t ( reg_req_t ),
.reg_rsp_t ( reg_rsp_t ),
.axi_rule_t ( axi_rule_t )
diff --git a/src/regs/hyperbus_cfg_regblock.sv b/src/regs/hyperbus_cfg_regblock.sv
index 75b0286..ec72f2c 100644
--- a/src/regs/hyperbus_cfg_regblock.sv
+++ b/src/regs/hyperbus_cfg_regblock.sv
@@ -9,13 +9,14 @@ module hyperbus_cfg_regblock (
input wire s_apb_penable,
input wire s_apb_pwrite,
input wire [2:0] s_apb_pprot,
- input wire [6:0] s_apb_paddr,
+ input wire [11:0] s_apb_paddr,
input wire [31:0] s_apb_pwdata,
input wire [3:0] s_apb_pstrb,
output logic s_apb_pready,
output logic [31:0] s_apb_prdata,
output logic s_apb_pslverr,
+ input hyperbus_cfg_regblock_pkg::hyperbus_cfg_regs__in_t hwif_in,
output hyperbus_cfg_regblock_pkg::hyperbus_cfg_regs__out_t hwif_out
);
@@ -24,7 +25,7 @@ module hyperbus_cfg_regblock (
//--------------------------------------------------------------------------
logic cpuif_req;
logic cpuif_req_is_wr;
- logic [6:0] cpuif_addr;
+ logic [11:0] cpuif_addr;
logic [31:0] cpuif_wr_data;
logic [31:0] cpuif_wr_biten;
logic cpuif_req_stall_wr;
@@ -53,7 +54,7 @@ module hyperbus_cfg_regblock (
is_active <= '1;
cpuif_req <= '1;
cpuif_req_is_wr <= s_apb_pwrite;
- cpuif_addr <= {s_apb_paddr[6:2], 2'b0};
+ cpuif_addr <= {s_apb_paddr[11:2], 2'b0};
cpuif_wr_data <= s_apb_pwdata;
for(int i=0; i<4; i++) begin
cpuif_wr_biten[i*8 +: 8] <= {8{s_apb_pstrb[i]}};
@@ -86,38 +87,104 @@ module hyperbus_cfg_regblock (
// Address Decode
//--------------------------------------------------------------------------
typedef struct {
- logic t_latency_access;
- logic en_latency_additional;
- logic t_burst_max;
- logic t_read_write_recovery;
- logic t_rx_clk_delay;
- logic t_tx_clk_delay;
- logic address_mask_msb;
- logic address_space;
- logic phys_in_use;
- logic which_phy;
- logic t_csh_cycles;
- logic csn_to_ck_cycles;
- logic chip0_base;
- logic chip0_bound;
- logic chip1_base;
- logic chip1_bound;
- logic chip2_base;
- logic chip2_bound;
- logic chip3_base;
- logic chip3_bound;
- logic chip4_base;
- logic chip4_bound;
- logic chip5_base;
- logic chip5_bound;
- logic chip6_base;
- logic chip6_bound;
- logic chip7_base;
- logic chip7_bound;
+ struct {
+ logic ip_version;
+ logic reg_if_version;
+ logic capability;
+ logic command;
+ logic status;
+ } global_cfg;
+ struct {
+ logic frontend_cfg;
+ } frontend;
+ struct {
+ logic clock_cfg;
+ } backend;
+ struct {
+ logic tx_delay;
+ logic rwds_timing;
+ } phy_0;
+ struct {
+ logic tx_delay;
+ logic rwds_timing;
+ } phy_1;
+ struct {
+ logic range_base;
+ logic range_bound;
+ logic address_cfg;
+ logic latency_cfg;
+ logic burst_cfg;
+ logic chip_timing;
+ logic rx_delay;
+ } chip_0;
+ struct {
+ logic range_base;
+ logic range_bound;
+ logic address_cfg;
+ logic latency_cfg;
+ logic burst_cfg;
+ logic chip_timing;
+ logic rx_delay;
+ } chip_1;
+ struct {
+ logic range_base;
+ logic range_bound;
+ logic address_cfg;
+ logic latency_cfg;
+ logic burst_cfg;
+ logic chip_timing;
+ logic rx_delay;
+ } chip_2;
+ struct {
+ logic range_base;
+ logic range_bound;
+ logic address_cfg;
+ logic latency_cfg;
+ logic burst_cfg;
+ logic chip_timing;
+ logic rx_delay;
+ } chip_3;
+ struct {
+ logic range_base;
+ logic range_bound;
+ logic address_cfg;
+ logic latency_cfg;
+ logic burst_cfg;
+ logic chip_timing;
+ logic rx_delay;
+ } chip_4;
+ struct {
+ logic range_base;
+ logic range_bound;
+ logic address_cfg;
+ logic latency_cfg;
+ logic burst_cfg;
+ logic chip_timing;
+ logic rx_delay;
+ } chip_5;
+ struct {
+ logic range_base;
+ logic range_bound;
+ logic address_cfg;
+ logic latency_cfg;
+ logic burst_cfg;
+ logic chip_timing;
+ logic rx_delay;
+ } chip_6;
+ struct {
+ logic range_base;
+ logic range_bound;
+ logic address_cfg;
+ logic latency_cfg;
+ logic burst_cfg;
+ logic chip_timing;
+ logic rx_delay;
+ } chip_7;
+ logic reserved_top;
} decoded_reg_strb_t;
decoded_reg_strb_t decoded_reg_strb;
logic decoded_err;
- logic [6:0] decoded_addr;
+ logic [11:0] decoded_addr;
logic decoded_req;
logic decoded_req_is_wr;
logic [31:0] decoded_wr_data;
@@ -128,34 +195,74 @@ module hyperbus_cfg_regblock (
automatic logic is_valid_rw;
is_valid_addr = '1; // No valid address check
is_valid_rw = '1; // No valid RW check
- decoded_reg_strb.t_latency_access = cpuif_req_masked & (cpuif_addr == 7'h0);
- decoded_reg_strb.en_latency_additional = cpuif_req_masked & (cpuif_addr == 7'h4);
- decoded_reg_strb.t_burst_max = cpuif_req_masked & (cpuif_addr == 7'h8);
- decoded_reg_strb.t_read_write_recovery = cpuif_req_masked & (cpuif_addr == 7'hc);
- decoded_reg_strb.t_rx_clk_delay = cpuif_req_masked & (cpuif_addr == 7'h10);
- decoded_reg_strb.t_tx_clk_delay = cpuif_req_masked & (cpuif_addr == 7'h14);
- decoded_reg_strb.address_mask_msb = cpuif_req_masked & (cpuif_addr == 7'h18);
- decoded_reg_strb.address_space = cpuif_req_masked & (cpuif_addr == 7'h1c);
- decoded_reg_strb.phys_in_use = cpuif_req_masked & (cpuif_addr == 7'h20);
- decoded_reg_strb.which_phy = cpuif_req_masked & (cpuif_addr == 7'h24);
- decoded_reg_strb.t_csh_cycles = cpuif_req_masked & (cpuif_addr == 7'h28);
- decoded_reg_strb.csn_to_ck_cycles = cpuif_req_masked & (cpuif_addr == 7'h2c);
- decoded_reg_strb.chip0_base = cpuif_req_masked & (cpuif_addr == 7'h30);
- decoded_reg_strb.chip0_bound = cpuif_req_masked & (cpuif_addr == 7'h34);
- decoded_reg_strb.chip1_base = cpuif_req_masked & (cpuif_addr == 7'h38);
- decoded_reg_strb.chip1_bound = cpuif_req_masked & (cpuif_addr == 7'h3c);
- decoded_reg_strb.chip2_base = cpuif_req_masked & (cpuif_addr == 7'h40);
- decoded_reg_strb.chip2_bound = cpuif_req_masked & (cpuif_addr == 7'h44);
- decoded_reg_strb.chip3_base = cpuif_req_masked & (cpuif_addr == 7'h48);
- decoded_reg_strb.chip3_bound = cpuif_req_masked & (cpuif_addr == 7'h4c);
- decoded_reg_strb.chip4_base = cpuif_req_masked & (cpuif_addr == 7'h58);
- decoded_reg_strb.chip4_bound = cpuif_req_masked & (cpuif_addr == 7'h5c);
- decoded_reg_strb.chip5_base = cpuif_req_masked & (cpuif_addr == 7'h60);
- decoded_reg_strb.chip5_bound = cpuif_req_masked & (cpuif_addr == 7'h64);
- decoded_reg_strb.chip6_base = cpuif_req_masked & (cpuif_addr == 7'h68);
- decoded_reg_strb.chip6_bound = cpuif_req_masked & (cpuif_addr == 7'h6c);
- decoded_reg_strb.chip7_base = cpuif_req_masked & (cpuif_addr == 7'h70);
- decoded_reg_strb.chip7_bound = cpuif_req_masked & (cpuif_addr == 7'h74);
+ decoded_reg_strb.global_cfg.ip_version = cpuif_req_masked & (cpuif_addr == 12'h0) & !cpuif_req_is_wr;
+ decoded_reg_strb.global_cfg.reg_if_version = cpuif_req_masked & (cpuif_addr == 12'h4) & !cpuif_req_is_wr;
+ decoded_reg_strb.global_cfg.capability = cpuif_req_masked & (cpuif_addr == 12'h8) & !cpuif_req_is_wr;
+ decoded_reg_strb.global_cfg.command = cpuif_req_masked & (cpuif_addr == 12'hc);
+ decoded_reg_strb.global_cfg.status = cpuif_req_masked & (cpuif_addr == 12'h10);
+ decoded_reg_strb.frontend.frontend_cfg = cpuif_req_masked & (cpuif_addr == 12'h100);
+ decoded_reg_strb.backend.clock_cfg = cpuif_req_masked & (cpuif_addr == 12'h200);
+ decoded_reg_strb.phy_0.tx_delay = cpuif_req_masked & (cpuif_addr == 12'h300);
+ decoded_reg_strb.phy_0.rwds_timing = cpuif_req_masked & (cpuif_addr == 12'h304);
+ decoded_reg_strb.phy_1.tx_delay = cpuif_req_masked & (cpuif_addr == 12'h340);
+ decoded_reg_strb.phy_1.rwds_timing = cpuif_req_masked & (cpuif_addr == 12'h344);
+ decoded_reg_strb.chip_0.range_base = cpuif_req_masked & (cpuif_addr == 12'h400);
+ decoded_reg_strb.chip_0.range_bound = cpuif_req_masked & (cpuif_addr == 12'h404);
+ decoded_reg_strb.chip_0.address_cfg = cpuif_req_masked & (cpuif_addr == 12'h408);
+ decoded_reg_strb.chip_0.latency_cfg = cpuif_req_masked & (cpuif_addr == 12'h40c);
+ decoded_reg_strb.chip_0.burst_cfg = cpuif_req_masked & (cpuif_addr == 12'h410);
+ decoded_reg_strb.chip_0.chip_timing = cpuif_req_masked & (cpuif_addr == 12'h414);
+ decoded_reg_strb.chip_0.rx_delay = cpuif_req_masked & (cpuif_addr == 12'h418);
+ decoded_reg_strb.chip_1.range_base = cpuif_req_masked & (cpuif_addr == 12'h440);
+ decoded_reg_strb.chip_1.range_bound = cpuif_req_masked & (cpuif_addr == 12'h444);
+ decoded_reg_strb.chip_1.address_cfg = cpuif_req_masked & (cpuif_addr == 12'h448);
+ decoded_reg_strb.chip_1.latency_cfg = cpuif_req_masked & (cpuif_addr == 12'h44c);
+ decoded_reg_strb.chip_1.burst_cfg = cpuif_req_masked & (cpuif_addr == 12'h450);
+ decoded_reg_strb.chip_1.chip_timing = cpuif_req_masked & (cpuif_addr == 12'h454);
+ decoded_reg_strb.chip_1.rx_delay = cpuif_req_masked & (cpuif_addr == 12'h458);
+ decoded_reg_strb.chip_2.range_base = cpuif_req_masked & (cpuif_addr == 12'h480);
+ decoded_reg_strb.chip_2.range_bound = cpuif_req_masked & (cpuif_addr == 12'h484);
+ decoded_reg_strb.chip_2.address_cfg = cpuif_req_masked & (cpuif_addr == 12'h488);
+ decoded_reg_strb.chip_2.latency_cfg = cpuif_req_masked & (cpuif_addr == 12'h48c);
+ decoded_reg_strb.chip_2.burst_cfg = cpuif_req_masked & (cpuif_addr == 12'h490);
+ decoded_reg_strb.chip_2.chip_timing = cpuif_req_masked & (cpuif_addr == 12'h494);
+ decoded_reg_strb.chip_2.rx_delay = cpuif_req_masked & (cpuif_addr == 12'h498);
+ decoded_reg_strb.chip_3.range_base = cpuif_req_masked & (cpuif_addr == 12'h4c0);
+ decoded_reg_strb.chip_3.range_bound = cpuif_req_masked & (cpuif_addr == 12'h4c4);
+ decoded_reg_strb.chip_3.address_cfg = cpuif_req_masked & (cpuif_addr == 12'h4c8);
+ decoded_reg_strb.chip_3.latency_cfg = cpuif_req_masked & (cpuif_addr == 12'h4cc);
+ decoded_reg_strb.chip_3.burst_cfg = cpuif_req_masked & (cpuif_addr == 12'h4d0);
+ decoded_reg_strb.chip_3.chip_timing = cpuif_req_masked & (cpuif_addr == 12'h4d4);
+ decoded_reg_strb.chip_3.rx_delay = cpuif_req_masked & (cpuif_addr == 12'h4d8);
+ decoded_reg_strb.chip_4.range_base = cpuif_req_masked & (cpuif_addr == 12'h500);
+ decoded_reg_strb.chip_4.range_bound = cpuif_req_masked & (cpuif_addr == 12'h504);
+ decoded_reg_strb.chip_4.address_cfg = cpuif_req_masked & (cpuif_addr == 12'h508);
+ decoded_reg_strb.chip_4.latency_cfg = cpuif_req_masked & (cpuif_addr == 12'h50c);
+ decoded_reg_strb.chip_4.burst_cfg = cpuif_req_masked & (cpuif_addr == 12'h510);
+ decoded_reg_strb.chip_4.chip_timing = cpuif_req_masked & (cpuif_addr == 12'h514);
+ decoded_reg_strb.chip_4.rx_delay = cpuif_req_masked & (cpuif_addr == 12'h518);
+ decoded_reg_strb.chip_5.range_base = cpuif_req_masked & (cpuif_addr == 12'h540);
+ decoded_reg_strb.chip_5.range_bound = cpuif_req_masked & (cpuif_addr == 12'h544);
+ decoded_reg_strb.chip_5.address_cfg = cpuif_req_masked & (cpuif_addr == 12'h548);
+ decoded_reg_strb.chip_5.latency_cfg = cpuif_req_masked & (cpuif_addr == 12'h54c);
+ decoded_reg_strb.chip_5.burst_cfg = cpuif_req_masked & (cpuif_addr == 12'h550);
+ decoded_reg_strb.chip_5.chip_timing = cpuif_req_masked & (cpuif_addr == 12'h554);
+ decoded_reg_strb.chip_5.rx_delay = cpuif_req_masked & (cpuif_addr == 12'h558);
+ decoded_reg_strb.chip_6.range_base = cpuif_req_masked & (cpuif_addr == 12'h580);
+ decoded_reg_strb.chip_6.range_bound = cpuif_req_masked & (cpuif_addr == 12'h584);
+ decoded_reg_strb.chip_6.address_cfg = cpuif_req_masked & (cpuif_addr == 12'h588);
+ decoded_reg_strb.chip_6.latency_cfg = cpuif_req_masked & (cpuif_addr == 12'h58c);
+ decoded_reg_strb.chip_6.burst_cfg = cpuif_req_masked & (cpuif_addr == 12'h590);
+ decoded_reg_strb.chip_6.chip_timing = cpuif_req_masked & (cpuif_addr == 12'h594);
+ decoded_reg_strb.chip_6.rx_delay = cpuif_req_masked & (cpuif_addr == 12'h598);
+ decoded_reg_strb.chip_7.range_base = cpuif_req_masked & (cpuif_addr == 12'h5c0);
+ decoded_reg_strb.chip_7.range_bound = cpuif_req_masked & (cpuif_addr == 12'h5c4);
+ decoded_reg_strb.chip_7.address_cfg = cpuif_req_masked & (cpuif_addr == 12'h5c8);
+ decoded_reg_strb.chip_7.latency_cfg = cpuif_req_masked & (cpuif_addr == 12'h5cc);
+ decoded_reg_strb.chip_7.burst_cfg = cpuif_req_masked & (cpuif_addr == 12'h5d0);
+ decoded_reg_strb.chip_7.chip_timing = cpuif_req_masked & (cpuif_addr == 12'h5d4);
+ decoded_reg_strb.chip_7.rx_delay = cpuif_req_masked & (cpuif_addr == 12'h5d8);
+ decoded_reg_strb.reserved_top = cpuif_req_masked & (cpuif_addr == 12'hffc) & !cpuif_req_is_wr;
decoded_err = '0;
end
@@ -172,1129 +279,4380 @@ module hyperbus_cfg_regblock (
typedef struct {
struct {
struct {
- logic [3:0] next;
- logic load_next;
- } value;
- } t_latency_access;
- struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } num_chips;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } num_phys;
+ struct {
+ logic next;
+ logic load_next;
+ } per_chip_cfg;
+ struct {
+ logic next;
+ logic load_next;
+ } per_phy_cfg;
+ struct {
+ logic next;
+ logic load_next;
+ } chip_enable;
+ struct {
+ logic next;
+ logic load_next;
+ } clock_divider;
+ struct {
+ logic next;
+ logic load_next;
+ } staged_apply;
+ struct {
+ logic next;
+ logic load_next;
+ } error_status;
+ struct {
+ logic next;
+ logic load_next;
+ } rwds_sample_timing;
+ struct {
+ logic next;
+ logic load_next;
+ } rwds_oe_timing;
+ } capability;
struct {
- logic next;
- logic load_next;
- } value;
- } en_latency_additional;
+ struct {
+ logic next;
+ logic load_next;
+ } flush;
+ struct {
+ logic next;
+ logic load_next;
+ } apply;
+ } command;
+ struct {
+ struct {
+ logic next;
+ logic load_next;
+ } decode_error;
+ struct {
+ logic next;
+ logic load_next;
+ } busy;
+ struct {
+ logic next;
+ logic load_next;
+ } dirty;
+ } status;
+ } global_cfg;
struct {
struct {
- logic [15:0] next;
- logic load_next;
- } value;
- } t_burst_max;
+ struct {
+ logic next;
+ logic load_next;
+ } dual_phy;
+ } frontend_cfg;
+ } frontend;
struct {
struct {
- logic [3:0] next;
- logic load_next;
- } value;
- } t_read_write_recovery;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } divider;
+ } clock_cfg;
+ } backend;
struct {
struct {
- logic [4:0] next;
- logic load_next;
- } fine;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } value;
+ } tx_delay;
struct {
- logic [2:0] next;
- logic load_next;
- } coarse;
- } t_rx_clk_delay;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } rwds_oe_setup_cycles;
+ } rwds_timing;
+ } phy_0;
struct {
struct {
- logic [4:0] next;
- logic load_next;
- } fine;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } value;
+ } tx_delay;
struct {
- logic [2:0] next;
- logic load_next;
- } coarse;
- } t_tx_clk_delay;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } rwds_oe_setup_cycles;
+ } rwds_timing;
+ } phy_1;
struct {
struct {
- logic [4:0] next;
- logic load_next;
- } value;
- } address_mask_msb;
- struct {
+ struct {
+ logic [9:0] next;
+ logic load_next;
+ } value;
+ } range_base;
struct {
- logic next;
- logic load_next;
- } value;
- } address_space;
- struct {
+ struct {
+ logic [9:0] next;
+ logic load_next;
+ } value;
+ } range_bound;
struct {
- logic next;
- logic load_next;
- } value;
- } phys_in_use;
- struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } address_space;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } address_mask_msb;
+ struct {
+ logic next;
+ logic load_next;
+ } enable;
+ } address_cfg;
struct {
- logic next;
- logic load_next;
- } value;
- } which_phy;
- struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_latency_access;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } rwds_sample_delay;
+ struct {
+ logic next;
+ logic load_next;
+ } en_latency_additional;
+ } latency_cfg;
struct {
- logic [3:0] next;
- logic load_next;
- } value;
- } t_csh_cycles;
- struct {
+ struct {
+ logic [15:0] next;
+ logic load_next;
+ } t_burst_max;
+ } burst_cfg;
struct {
- logic [3:0] next;
- logic load_next;
- } value;
- } csn_to_ck_cycles;
- struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_read_write_recovery;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_csh_cycles;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } csn_to_ck_cycles;
+ } chip_timing;
struct {
- logic [9:0] next;
- logic load_next;
- } value;
- } chip0_base;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } value;
+ } rx_delay;
+ } chip_0;
struct {
struct {
- logic [9:0] next;
- logic load_next;
- } value;
- } chip0_bound;
- struct {
+ struct {
+ logic [9:0] next;
+ logic load_next;
+ } value;
+ } range_base;
struct {
- logic [9:0] next;
- logic load_next;
- } value;
- } chip1_base;
- struct {
+ struct {
+ logic [9:0] next;
+ logic load_next;
+ } value;
+ } range_bound;
struct {
- logic [9:0] next;
- logic load_next;
- } value;
- } chip1_bound;
- struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } address_space;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } address_mask_msb;
+ struct {
+ logic next;
+ logic load_next;
+ } enable;
+ } address_cfg;
struct {
- logic [9:0] next;
- logic load_next;
- } value;
- } chip2_base;
- struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_latency_access;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } rwds_sample_delay;
+ struct {
+ logic next;
+ logic load_next;
+ } en_latency_additional;
+ } latency_cfg;
struct {
- logic [9:0] next;
- logic load_next;
- } value;
- } chip2_bound;
- struct {
+ struct {
+ logic [15:0] next;
+ logic load_next;
+ } t_burst_max;
+ } burst_cfg;
struct {
- logic [9:0] next;
- logic load_next;
- } value;
- } chip3_base;
- struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_read_write_recovery;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_csh_cycles;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } csn_to_ck_cycles;
+ } chip_timing;
struct {
- logic [9:0] next;
- logic load_next;
- } value;
- } chip3_bound;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } value;
+ } rx_delay;
+ } chip_1;
struct {
struct {
- logic [9:0] next;
- logic load_next;
- } value;
- } chip4_base;
- struct {
+ struct {
+ logic [9:0] next;
+ logic load_next;
+ } value;
+ } range_base;
struct {
- logic [9:0] next;
- logic load_next;
- } value;
- } chip4_bound;
- struct {
+ struct {
+ logic [9:0] next;
+ logic load_next;
+ } value;
+ } range_bound;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } address_space;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } address_mask_msb;
+ struct {
+ logic next;
+ logic load_next;
+ } enable;
+ } address_cfg;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_latency_access;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } rwds_sample_delay;
+ struct {
+ logic next;
+ logic load_next;
+ } en_latency_additional;
+ } latency_cfg;
+ struct {
+ struct {
+ logic [15:0] next;
+ logic load_next;
+ } t_burst_max;
+ } burst_cfg;
struct {
- logic [9:0] next;
- logic load_next;
- } value;
- } chip5_base;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_read_write_recovery;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_csh_cycles;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } csn_to_ck_cycles;
+ } chip_timing;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } value;
+ } rx_delay;
+ } chip_2;
struct {
struct {
- logic [9:0] next;
- logic load_next;
- } value;
- } chip5_bound;
+ struct {
+ logic [9:0] next;
+ logic load_next;
+ } value;
+ } range_base;
+ struct {
+ struct {
+ logic [9:0] next;
+ logic load_next;
+ } value;
+ } range_bound;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } address_space;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } address_mask_msb;
+ struct {
+ logic next;
+ logic load_next;
+ } enable;
+ } address_cfg;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_latency_access;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } rwds_sample_delay;
+ struct {
+ logic next;
+ logic load_next;
+ } en_latency_additional;
+ } latency_cfg;
+ struct {
+ struct {
+ logic [15:0] next;
+ logic load_next;
+ } t_burst_max;
+ } burst_cfg;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_read_write_recovery;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_csh_cycles;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } csn_to_ck_cycles;
+ } chip_timing;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } value;
+ } rx_delay;
+ } chip_3;
struct {
struct {
- logic [9:0] next;
- logic load_next;
- } value;
- } chip6_base;
+ struct {
+ logic [9:0] next;
+ logic load_next;
+ } value;
+ } range_base;
+ struct {
+ struct {
+ logic [9:0] next;
+ logic load_next;
+ } value;
+ } range_bound;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } address_space;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } address_mask_msb;
+ struct {
+ logic next;
+ logic load_next;
+ } enable;
+ } address_cfg;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_latency_access;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } rwds_sample_delay;
+ struct {
+ logic next;
+ logic load_next;
+ } en_latency_additional;
+ } latency_cfg;
+ struct {
+ struct {
+ logic [15:0] next;
+ logic load_next;
+ } t_burst_max;
+ } burst_cfg;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_read_write_recovery;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_csh_cycles;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } csn_to_ck_cycles;
+ } chip_timing;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } value;
+ } rx_delay;
+ } chip_4;
struct {
struct {
- logic [9:0] next;
- logic load_next;
- } value;
- } chip6_bound;
+ struct {
+ logic [9:0] next;
+ logic load_next;
+ } value;
+ } range_base;
+ struct {
+ struct {
+ logic [9:0] next;
+ logic load_next;
+ } value;
+ } range_bound;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } address_space;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } address_mask_msb;
+ struct {
+ logic next;
+ logic load_next;
+ } enable;
+ } address_cfg;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_latency_access;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } rwds_sample_delay;
+ struct {
+ logic next;
+ logic load_next;
+ } en_latency_additional;
+ } latency_cfg;
+ struct {
+ struct {
+ logic [15:0] next;
+ logic load_next;
+ } t_burst_max;
+ } burst_cfg;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_read_write_recovery;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_csh_cycles;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } csn_to_ck_cycles;
+ } chip_timing;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } value;
+ } rx_delay;
+ } chip_5;
struct {
struct {
- logic [9:0] next;
- logic load_next;
- } value;
- } chip7_base;
+ struct {
+ logic [9:0] next;
+ logic load_next;
+ } value;
+ } range_base;
+ struct {
+ struct {
+ logic [9:0] next;
+ logic load_next;
+ } value;
+ } range_bound;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } address_space;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } address_mask_msb;
+ struct {
+ logic next;
+ logic load_next;
+ } enable;
+ } address_cfg;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_latency_access;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } rwds_sample_delay;
+ struct {
+ logic next;
+ logic load_next;
+ } en_latency_additional;
+ } latency_cfg;
+ struct {
+ struct {
+ logic [15:0] next;
+ logic load_next;
+ } t_burst_max;
+ } burst_cfg;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_read_write_recovery;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_csh_cycles;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } csn_to_ck_cycles;
+ } chip_timing;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } value;
+ } rx_delay;
+ } chip_6;
struct {
struct {
- logic [9:0] next;
- logic load_next;
- } value;
- } chip7_bound;
+ struct {
+ logic [9:0] next;
+ logic load_next;
+ } value;
+ } range_base;
+ struct {
+ struct {
+ logic [9:0] next;
+ logic load_next;
+ } value;
+ } range_bound;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } address_space;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } address_mask_msb;
+ struct {
+ logic next;
+ logic load_next;
+ } enable;
+ } address_cfg;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_latency_access;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } rwds_sample_delay;
+ struct {
+ logic next;
+ logic load_next;
+ } en_latency_additional;
+ } latency_cfg;
+ struct {
+ struct {
+ logic [15:0] next;
+ logic load_next;
+ } t_burst_max;
+ } burst_cfg;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_read_write_recovery;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } t_csh_cycles;
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } csn_to_ck_cycles;
+ } chip_timing;
+ struct {
+ struct {
+ logic [7:0] next;
+ logic load_next;
+ } value;
+ } rx_delay;
+ } chip_7;
} field_combo_t;
field_combo_t field_combo;
typedef struct {
struct {
struct {
- logic [3:0] value;
- } value;
- } t_latency_access;
- struct {
+ struct {
+ logic [7:0] value;
+ } num_chips;
+ struct {
+ logic [7:0] value;
+ } num_phys;
+ struct {
+ logic value;
+ } per_chip_cfg;
+ struct {
+ logic value;
+ } per_phy_cfg;
+ struct {
+ logic value;
+ } chip_enable;
+ struct {
+ logic value;
+ } clock_divider;
+ struct {
+ logic value;
+ } staged_apply;
+ struct {
+ logic value;
+ } error_status;
+ struct {
+ logic value;
+ } rwds_sample_timing;
+ struct {
+ logic value;
+ } rwds_oe_timing;
+ } capability;
struct {
- logic value;
- } value;
- } en_latency_additional;
+ struct {
+ logic value;
+ } flush;
+ struct {
+ logic value;
+ } apply;
+ } command;
+ struct {
+ struct {
+ logic value;
+ } decode_error;
+ struct {
+ logic value;
+ } busy;
+ struct {
+ logic value;
+ } dirty;
+ } status;
+ } global_cfg;
struct {
struct {
- logic [15:0] value;
- } value;
- } t_burst_max;
+ struct {
+ logic value;
+ } dual_phy;
+ } frontend_cfg;
+ } frontend;
struct {
struct {
- logic [3:0] value;
- } value;
- } t_read_write_recovery;
+ struct {
+ logic [7:0] value;
+ } divider;
+ } clock_cfg;
+ } backend;
struct {
struct {
- logic [4:0] value;
- } fine;
+ struct {
+ logic [7:0] value;
+ } value;
+ } tx_delay;
struct {
- logic [2:0] value;
- } coarse;
- } t_rx_clk_delay;
+ struct {
+ logic [7:0] value;
+ } rwds_oe_setup_cycles;
+ } rwds_timing;
+ } phy_0;
struct {
struct {
- logic [4:0] value;
- } fine;
+ struct {
+ logic [7:0] value;
+ } value;
+ } tx_delay;
struct {
- logic [2:0] value;
- } coarse;
- } t_tx_clk_delay;
+ struct {
+ logic [7:0] value;
+ } rwds_oe_setup_cycles;
+ } rwds_timing;
+ } phy_1;
struct {
struct {
- logic [4:0] value;
- } value;
- } address_mask_msb;
- struct {
+ struct {
+ logic [9:0] value;
+ } value;
+ } range_base;
struct {
- logic value;
- } value;
- } address_space;
- struct {
+ struct {
+ logic [9:0] value;
+ } value;
+ } range_bound;
struct {
- logic value;
- } value;
- } phys_in_use;
- struct {
+ struct {
+ logic [7:0] value;
+ } address_space;
+ struct {
+ logic [7:0] value;
+ } address_mask_msb;
+ struct {
+ logic value;
+ } enable;
+ } address_cfg;
struct {
- logic value;
- } value;
- } which_phy;
- struct {
+ struct {
+ logic [7:0] value;
+ } t_latency_access;
+ struct {
+ logic [7:0] value;
+ } rwds_sample_delay;
+ struct {
+ logic value;
+ } en_latency_additional;
+ } latency_cfg;
struct {
- logic [3:0] value;
- } value;
- } t_csh_cycles;
- struct {
+ struct {
+ logic [15:0] value;
+ } t_burst_max;
+ } burst_cfg;
struct {
- logic [3:0] value;
- } value;
- } csn_to_ck_cycles;
- struct {
+ struct {
+ logic [7:0] value;
+ } t_read_write_recovery;
+ struct {
+ logic [7:0] value;
+ } t_csh_cycles;
+ struct {
+ logic [7:0] value;
+ } csn_to_ck_cycles;
+ } chip_timing;
struct {
- logic [9:0] value;
- } value;
- } chip0_base;
+ struct {
+ logic [7:0] value;
+ } value;
+ } rx_delay;
+ } chip_0;
struct {
struct {
- logic [9:0] value;
- } value;
- } chip0_bound;
- struct {
+ struct {
+ logic [9:0] value;
+ } value;
+ } range_base;
struct {
- logic [9:0] value;
- } value;
- } chip1_base;
- struct {
+ struct {
+ logic [9:0] value;
+ } value;
+ } range_bound;
struct {
- logic [9:0] value;
- } value;
- } chip1_bound;
- struct {
+ struct {
+ logic [7:0] value;
+ } address_space;
+ struct {
+ logic [7:0] value;
+ } address_mask_msb;
+ struct {
+ logic value;
+ } enable;
+ } address_cfg;
struct {
- logic [9:0] value;
- } value;
- } chip2_base;
- struct {
+ struct {
+ logic [7:0] value;
+ } t_latency_access;
+ struct {
+ logic [7:0] value;
+ } rwds_sample_delay;
+ struct {
+ logic value;
+ } en_latency_additional;
+ } latency_cfg;
struct {
- logic [9:0] value;
- } value;
- } chip2_bound;
- struct {
+ struct {
+ logic [15:0] value;
+ } t_burst_max;
+ } burst_cfg;
struct {
- logic [9:0] value;
- } value;
- } chip3_base;
- struct {
+ struct {
+ logic [7:0] value;
+ } t_read_write_recovery;
+ struct {
+ logic [7:0] value;
+ } t_csh_cycles;
+ struct {
+ logic [7:0] value;
+ } csn_to_ck_cycles;
+ } chip_timing;
struct {
- logic [9:0] value;
- } value;
- } chip3_bound;
+ struct {
+ logic [7:0] value;
+ } value;
+ } rx_delay;
+ } chip_1;
struct {
struct {
- logic [9:0] value;
- } value;
- } chip4_base;
- struct {
+ struct {
+ logic [9:0] value;
+ } value;
+ } range_base;
struct {
- logic [9:0] value;
- } value;
- } chip4_bound;
- struct {
+ struct {
+ logic [9:0] value;
+ } value;
+ } range_bound;
+ struct {
+ struct {
+ logic [7:0] value;
+ } address_space;
+ struct {
+ logic [7:0] value;
+ } address_mask_msb;
+ struct {
+ logic value;
+ } enable;
+ } address_cfg;
struct {
- logic [9:0] value;
- } value;
- } chip5_base;
+ struct {
+ logic [7:0] value;
+ } t_latency_access;
+ struct {
+ logic [7:0] value;
+ } rwds_sample_delay;
+ struct {
+ logic value;
+ } en_latency_additional;
+ } latency_cfg;
+ struct {
+ struct {
+ logic [15:0] value;
+ } t_burst_max;
+ } burst_cfg;
+ struct {
+ struct {
+ logic [7:0] value;
+ } t_read_write_recovery;
+ struct {
+ logic [7:0] value;
+ } t_csh_cycles;
+ struct {
+ logic [7:0] value;
+ } csn_to_ck_cycles;
+ } chip_timing;
+ struct {
+ struct {
+ logic [7:0] value;
+ } value;
+ } rx_delay;
+ } chip_2;
struct {
struct {
- logic [9:0] value;
- } value;
- } chip5_bound;
+ struct {
+ logic [9:0] value;
+ } value;
+ } range_base;
+ struct {
+ struct {
+ logic [9:0] value;
+ } value;
+ } range_bound;
+ struct {
+ struct {
+ logic [7:0] value;
+ } address_space;
+ struct {
+ logic [7:0] value;
+ } address_mask_msb;
+ struct {
+ logic value;
+ } enable;
+ } address_cfg;
+ struct {
+ struct {
+ logic [7:0] value;
+ } t_latency_access;
+ struct {
+ logic [7:0] value;
+ } rwds_sample_delay;
+ struct {
+ logic value;
+ } en_latency_additional;
+ } latency_cfg;
+ struct {
+ struct {
+ logic [15:0] value;
+ } t_burst_max;
+ } burst_cfg;
+ struct {
+ struct {
+ logic [7:0] value;
+ } t_read_write_recovery;
+ struct {
+ logic [7:0] value;
+ } t_csh_cycles;
+ struct {
+ logic [7:0] value;
+ } csn_to_ck_cycles;
+ } chip_timing;
+ struct {
+ struct {
+ logic [7:0] value;
+ } value;
+ } rx_delay;
+ } chip_3;
struct {
struct {
- logic [9:0] value;
- } value;
- } chip6_base;
+ struct {
+ logic [9:0] value;
+ } value;
+ } range_base;
+ struct {
+ struct {
+ logic [9:0] value;
+ } value;
+ } range_bound;
+ struct {
+ struct {
+ logic [7:0] value;
+ } address_space;
+ struct {
+ logic [7:0] value;
+ } address_mask_msb;
+ struct {
+ logic value;
+ } enable;
+ } address_cfg;
+ struct {
+ struct {
+ logic [7:0] value;
+ } t_latency_access;
+ struct {
+ logic [7:0] value;
+ } rwds_sample_delay;
+ struct {
+ logic value;
+ } en_latency_additional;
+ } latency_cfg;
+ struct {
+ struct {
+ logic [15:0] value;
+ } t_burst_max;
+ } burst_cfg;
+ struct {
+ struct {
+ logic [7:0] value;
+ } t_read_write_recovery;
+ struct {
+ logic [7:0] value;
+ } t_csh_cycles;
+ struct {
+ logic [7:0] value;
+ } csn_to_ck_cycles;
+ } chip_timing;
+ struct {
+ struct {
+ logic [7:0] value;
+ } value;
+ } rx_delay;
+ } chip_4;
struct {
struct {
- logic [9:0] value;
- } value;
- } chip6_bound;
+ struct {
+ logic [9:0] value;
+ } value;
+ } range_base;
+ struct {
+ struct {
+ logic [9:0] value;
+ } value;
+ } range_bound;
+ struct {
+ struct {
+ logic [7:0] value;
+ } address_space;
+ struct {
+ logic [7:0] value;
+ } address_mask_msb;
+ struct {
+ logic value;
+ } enable;
+ } address_cfg;
+ struct {
+ struct {
+ logic [7:0] value;
+ } t_latency_access;
+ struct {
+ logic [7:0] value;
+ } rwds_sample_delay;
+ struct {
+ logic value;
+ } en_latency_additional;
+ } latency_cfg;
+ struct {
+ struct {
+ logic [15:0] value;
+ } t_burst_max;
+ } burst_cfg;
+ struct {
+ struct {
+ logic [7:0] value;
+ } t_read_write_recovery;
+ struct {
+ logic [7:0] value;
+ } t_csh_cycles;
+ struct {
+ logic [7:0] value;
+ } csn_to_ck_cycles;
+ } chip_timing;
+ struct {
+ struct {
+ logic [7:0] value;
+ } value;
+ } rx_delay;
+ } chip_5;
struct {
struct {
- logic [9:0] value;
- } value;
- } chip7_base;
+ struct {
+ logic [9:0] value;
+ } value;
+ } range_base;
+ struct {
+ struct {
+ logic [9:0] value;
+ } value;
+ } range_bound;
+ struct {
+ struct {
+ logic [7:0] value;
+ } address_space;
+ struct {
+ logic [7:0] value;
+ } address_mask_msb;
+ struct {
+ logic value;
+ } enable;
+ } address_cfg;
+ struct {
+ struct {
+ logic [7:0] value;
+ } t_latency_access;
+ struct {
+ logic [7:0] value;
+ } rwds_sample_delay;
+ struct {
+ logic value;
+ } en_latency_additional;
+ } latency_cfg;
+ struct {
+ struct {
+ logic [15:0] value;
+ } t_burst_max;
+ } burst_cfg;
+ struct {
+ struct {
+ logic [7:0] value;
+ } t_read_write_recovery;
+ struct {
+ logic [7:0] value;
+ } t_csh_cycles;
+ struct {
+ logic [7:0] value;
+ } csn_to_ck_cycles;
+ } chip_timing;
+ struct {
+ struct {
+ logic [7:0] value;
+ } value;
+ } rx_delay;
+ } chip_6;
struct {
struct {
- logic [9:0] value;
- } value;
- } chip7_bound;
+ struct {
+ logic [9:0] value;
+ } value;
+ } range_base;
+ struct {
+ struct {
+ logic [9:0] value;
+ } value;
+ } range_bound;
+ struct {
+ struct {
+ logic [7:0] value;
+ } address_space;
+ struct {
+ logic [7:0] value;
+ } address_mask_msb;
+ struct {
+ logic value;
+ } enable;
+ } address_cfg;
+ struct {
+ struct {
+ logic [7:0] value;
+ } t_latency_access;
+ struct {
+ logic [7:0] value;
+ } rwds_sample_delay;
+ struct {
+ logic value;
+ } en_latency_additional;
+ } latency_cfg;
+ struct {
+ struct {
+ logic [15:0] value;
+ } t_burst_max;
+ } burst_cfg;
+ struct {
+ struct {
+ logic [7:0] value;
+ } t_read_write_recovery;
+ struct {
+ logic [7:0] value;
+ } t_csh_cycles;
+ struct {
+ logic [7:0] value;
+ } csn_to_ck_cycles;
+ } chip_timing;
+ struct {
+ struct {
+ logic [7:0] value;
+ } value;
+ } rx_delay;
+ } chip_7;
} field_storage_t;
field_storage_t field_storage;
- // Field: hyperbus_cfg_regs.t_latency_access.value
+ assign hwif_out.global_cfg.ip_version.revision.value = 8'h0;
+ assign hwif_out.global_cfg.ip_version.patch.value = 8'h9;
+ assign hwif_out.global_cfg.ip_version.minor.value = 8'h0;
+ assign hwif_out.global_cfg.ip_version.major.value = 8'h0;
+ assign hwif_out.global_cfg.reg_if_version.minor.value = 16'h0;
+ assign hwif_out.global_cfg.reg_if_version.major.value = 16'h1;
+ // Field: hyperbus_cfg_regs.global_cfg.capability.num_chips
always_comb begin
- automatic logic [3:0] next_c;
+ automatic logic [7:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.t_latency_access.value.value;
+ next_c = field_storage.global_cfg.capability.num_chips.value;
load_next_c = '0;
- if(decoded_reg_strb.t_latency_access && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.t_latency_access.value.value & ~decoded_wr_biten[3:0]) | (decoded_wr_data[3:0] & decoded_wr_biten[3:0]);
- load_next_c = '1;
+
+ // HW Write
+ next_c = hwif_in.global_cfg.capability.num_chips.next;
+ load_next_c = '1;
+ field_combo.global_cfg.capability.num_chips.next = next_c;
+ field_combo.global_cfg.capability.num_chips.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.global_cfg.capability.num_chips.value <= 8'h0;
+ end else begin
+ if(field_combo.global_cfg.capability.num_chips.load_next) begin
+ field_storage.global_cfg.capability.num_chips.value <= field_combo.global_cfg.capability.num_chips.next;
+ end
end
- field_combo.t_latency_access.value.next = next_c;
- field_combo.t_latency_access.value.load_next = load_next_c;
+ end
+ assign hwif_out.global_cfg.capability.num_chips.value = field_storage.global_cfg.capability.num_chips.value;
+ // Field: hyperbus_cfg_regs.global_cfg.capability.num_phys
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.global_cfg.capability.num_phys.value;
+ load_next_c = '0;
+
+ // HW Write
+ next_c = hwif_in.global_cfg.capability.num_phys.next;
+ load_next_c = '1;
+ field_combo.global_cfg.capability.num_phys.next = next_c;
+ field_combo.global_cfg.capability.num_phys.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.t_latency_access.value.value <= 4'h6;
+ field_storage.global_cfg.capability.num_phys.value <= 8'h0;
end else begin
- if(field_combo.t_latency_access.value.load_next) begin
- field_storage.t_latency_access.value.value <= field_combo.t_latency_access.value.next;
+ if(field_combo.global_cfg.capability.num_phys.load_next) begin
+ field_storage.global_cfg.capability.num_phys.value <= field_combo.global_cfg.capability.num_phys.next;
end
end
end
- assign hwif_out.t_latency_access.value.value = field_storage.t_latency_access.value.value;
- // Field: hyperbus_cfg_regs.en_latency_additional.value
+ assign hwif_out.global_cfg.capability.num_phys.value = field_storage.global_cfg.capability.num_phys.value;
+ // Field: hyperbus_cfg_regs.global_cfg.capability.per_chip_cfg
always_comb begin
automatic logic [0:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.en_latency_additional.value.value;
+ next_c = field_storage.global_cfg.capability.per_chip_cfg.value;
load_next_c = '0;
- if(decoded_reg_strb.en_latency_additional && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.en_latency_additional.value.value & ~decoded_wr_biten[0:0]) | (decoded_wr_data[0:0] & decoded_wr_biten[0:0]);
- load_next_c = '1;
+
+ // HW Write
+ next_c = hwif_in.global_cfg.capability.per_chip_cfg.next;
+ load_next_c = '1;
+ field_combo.global_cfg.capability.per_chip_cfg.next = next_c;
+ field_combo.global_cfg.capability.per_chip_cfg.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.global_cfg.capability.per_chip_cfg.value <= 1'h0;
+ end else begin
+ if(field_combo.global_cfg.capability.per_chip_cfg.load_next) begin
+ field_storage.global_cfg.capability.per_chip_cfg.value <= field_combo.global_cfg.capability.per_chip_cfg.next;
+ end
end
- field_combo.en_latency_additional.value.next = next_c;
- field_combo.en_latency_additional.value.load_next = load_next_c;
+ end
+ assign hwif_out.global_cfg.capability.per_chip_cfg.value = field_storage.global_cfg.capability.per_chip_cfg.value;
+ // Field: hyperbus_cfg_regs.global_cfg.capability.per_phy_cfg
+ always_comb begin
+ automatic logic [0:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.global_cfg.capability.per_phy_cfg.value;
+ load_next_c = '0;
+
+ // HW Write
+ next_c = hwif_in.global_cfg.capability.per_phy_cfg.next;
+ load_next_c = '1;
+ field_combo.global_cfg.capability.per_phy_cfg.next = next_c;
+ field_combo.global_cfg.capability.per_phy_cfg.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.en_latency_additional.value.value <= 1'h0;
+ field_storage.global_cfg.capability.per_phy_cfg.value <= 1'h0;
end else begin
- if(field_combo.en_latency_additional.value.load_next) begin
- field_storage.en_latency_additional.value.value <= field_combo.en_latency_additional.value.next;
+ if(field_combo.global_cfg.capability.per_phy_cfg.load_next) begin
+ field_storage.global_cfg.capability.per_phy_cfg.value <= field_combo.global_cfg.capability.per_phy_cfg.next;
end
end
end
- assign hwif_out.en_latency_additional.value.value = field_storage.en_latency_additional.value.value;
- // Field: hyperbus_cfg_regs.t_burst_max.value
+ assign hwif_out.global_cfg.capability.per_phy_cfg.value = field_storage.global_cfg.capability.per_phy_cfg.value;
+ // Field: hyperbus_cfg_regs.global_cfg.capability.chip_enable
always_comb begin
- automatic logic [15:0] next_c;
+ automatic logic [0:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.t_burst_max.value.value;
+ next_c = field_storage.global_cfg.capability.chip_enable.value;
load_next_c = '0;
- if(decoded_reg_strb.t_burst_max && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.t_burst_max.value.value & ~decoded_wr_biten[15:0]) | (decoded_wr_data[15:0] & decoded_wr_biten[15:0]);
- load_next_c = '1;
+
+ // HW Write
+ next_c = hwif_in.global_cfg.capability.chip_enable.next;
+ load_next_c = '1;
+ field_combo.global_cfg.capability.chip_enable.next = next_c;
+ field_combo.global_cfg.capability.chip_enable.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.global_cfg.capability.chip_enable.value <= 1'h0;
+ end else begin
+ if(field_combo.global_cfg.capability.chip_enable.load_next) begin
+ field_storage.global_cfg.capability.chip_enable.value <= field_combo.global_cfg.capability.chip_enable.next;
+ end
end
- field_combo.t_burst_max.value.next = next_c;
- field_combo.t_burst_max.value.load_next = load_next_c;
+ end
+ assign hwif_out.global_cfg.capability.chip_enable.value = field_storage.global_cfg.capability.chip_enable.value;
+ // Field: hyperbus_cfg_regs.global_cfg.capability.clock_divider
+ always_comb begin
+ automatic logic [0:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.global_cfg.capability.clock_divider.value;
+ load_next_c = '0;
+
+ // HW Write
+ next_c = hwif_in.global_cfg.capability.clock_divider.next;
+ load_next_c = '1;
+ field_combo.global_cfg.capability.clock_divider.next = next_c;
+ field_combo.global_cfg.capability.clock_divider.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.t_burst_max.value.value <= 16'h15e;
+ field_storage.global_cfg.capability.clock_divider.value <= 1'h0;
end else begin
- if(field_combo.t_burst_max.value.load_next) begin
- field_storage.t_burst_max.value.value <= field_combo.t_burst_max.value.next;
+ if(field_combo.global_cfg.capability.clock_divider.load_next) begin
+ field_storage.global_cfg.capability.clock_divider.value <= field_combo.global_cfg.capability.clock_divider.next;
end
end
end
- assign hwif_out.t_burst_max.value.value = field_storage.t_burst_max.value.value;
- // Field: hyperbus_cfg_regs.t_read_write_recovery.value
+ assign hwif_out.global_cfg.capability.clock_divider.value = field_storage.global_cfg.capability.clock_divider.value;
+ // Field: hyperbus_cfg_regs.global_cfg.capability.staged_apply
always_comb begin
- automatic logic [3:0] next_c;
+ automatic logic [0:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.t_read_write_recovery.value.value;
+ next_c = field_storage.global_cfg.capability.staged_apply.value;
load_next_c = '0;
- if(decoded_reg_strb.t_read_write_recovery && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.t_read_write_recovery.value.value & ~decoded_wr_biten[3:0]) | (decoded_wr_data[3:0] & decoded_wr_biten[3:0]);
- load_next_c = '1;
+
+ // HW Write
+ next_c = hwif_in.global_cfg.capability.staged_apply.next;
+ load_next_c = '1;
+ field_combo.global_cfg.capability.staged_apply.next = next_c;
+ field_combo.global_cfg.capability.staged_apply.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.global_cfg.capability.staged_apply.value <= 1'h0;
+ end else begin
+ if(field_combo.global_cfg.capability.staged_apply.load_next) begin
+ field_storage.global_cfg.capability.staged_apply.value <= field_combo.global_cfg.capability.staged_apply.next;
+ end
end
- field_combo.t_read_write_recovery.value.next = next_c;
- field_combo.t_read_write_recovery.value.load_next = load_next_c;
+ end
+ assign hwif_out.global_cfg.capability.staged_apply.value = field_storage.global_cfg.capability.staged_apply.value;
+ // Field: hyperbus_cfg_regs.global_cfg.capability.error_status
+ always_comb begin
+ automatic logic [0:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.global_cfg.capability.error_status.value;
+ load_next_c = '0;
+
+ // HW Write
+ next_c = hwif_in.global_cfg.capability.error_status.next;
+ load_next_c = '1;
+ field_combo.global_cfg.capability.error_status.next = next_c;
+ field_combo.global_cfg.capability.error_status.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.t_read_write_recovery.value.value <= 4'h6;
+ field_storage.global_cfg.capability.error_status.value <= 1'h0;
end else begin
- if(field_combo.t_read_write_recovery.value.load_next) begin
- field_storage.t_read_write_recovery.value.value <= field_combo.t_read_write_recovery.value.next;
+ if(field_combo.global_cfg.capability.error_status.load_next) begin
+ field_storage.global_cfg.capability.error_status.value <= field_combo.global_cfg.capability.error_status.next;
end
end
end
- assign hwif_out.t_read_write_recovery.value.value = field_storage.t_read_write_recovery.value.value;
- // Field: hyperbus_cfg_regs.t_rx_clk_delay.fine
+ assign hwif_out.global_cfg.capability.error_status.value = field_storage.global_cfg.capability.error_status.value;
+ // Field: hyperbus_cfg_regs.global_cfg.capability.rwds_sample_timing
always_comb begin
- automatic logic [4:0] next_c;
+ automatic logic [0:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.t_rx_clk_delay.fine.value;
+ next_c = field_storage.global_cfg.capability.rwds_sample_timing.value;
load_next_c = '0;
- if(decoded_reg_strb.t_rx_clk_delay && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.t_rx_clk_delay.fine.value & ~decoded_wr_biten[4:0]) | (decoded_wr_data[4:0] & decoded_wr_biten[4:0]);
- load_next_c = '1;
+
+ // HW Write
+ next_c = hwif_in.global_cfg.capability.rwds_sample_timing.next;
+ load_next_c = '1;
+ field_combo.global_cfg.capability.rwds_sample_timing.next = next_c;
+ field_combo.global_cfg.capability.rwds_sample_timing.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.global_cfg.capability.rwds_sample_timing.value <= 1'h0;
+ end else begin
+ if(field_combo.global_cfg.capability.rwds_sample_timing.load_next) begin
+ field_storage.global_cfg.capability.rwds_sample_timing.value <= field_combo.global_cfg.capability.rwds_sample_timing.next;
+ end
end
- field_combo.t_rx_clk_delay.fine.next = next_c;
- field_combo.t_rx_clk_delay.fine.load_next = load_next_c;
+ end
+ assign hwif_out.global_cfg.capability.rwds_sample_timing.value = field_storage.global_cfg.capability.rwds_sample_timing.value;
+ // Field: hyperbus_cfg_regs.global_cfg.capability.rwds_oe_timing
+ always_comb begin
+ automatic logic [0:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.global_cfg.capability.rwds_oe_timing.value;
+ load_next_c = '0;
+
+ // HW Write
+ next_c = hwif_in.global_cfg.capability.rwds_oe_timing.next;
+ load_next_c = '1;
+ field_combo.global_cfg.capability.rwds_oe_timing.next = next_c;
+ field_combo.global_cfg.capability.rwds_oe_timing.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.t_rx_clk_delay.fine.value <= 5'h10;
+ field_storage.global_cfg.capability.rwds_oe_timing.value <= 1'h0;
end else begin
- if(field_combo.t_rx_clk_delay.fine.load_next) begin
- field_storage.t_rx_clk_delay.fine.value <= field_combo.t_rx_clk_delay.fine.next;
+ if(field_combo.global_cfg.capability.rwds_oe_timing.load_next) begin
+ field_storage.global_cfg.capability.rwds_oe_timing.value <= field_combo.global_cfg.capability.rwds_oe_timing.next;
end
end
end
- assign hwif_out.t_rx_clk_delay.fine.value = field_storage.t_rx_clk_delay.fine.value;
- // Field: hyperbus_cfg_regs.t_rx_clk_delay.coarse
+ assign hwif_out.global_cfg.capability.rwds_oe_timing.value = field_storage.global_cfg.capability.rwds_oe_timing.value;
+ // Field: hyperbus_cfg_regs.global_cfg.command.flush
always_comb begin
- automatic logic [2:0] next_c;
+ automatic logic [0:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.t_rx_clk_delay.coarse.value;
+ next_c = field_storage.global_cfg.command.flush.value;
load_next_c = '0;
- if(decoded_reg_strb.t_rx_clk_delay && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.t_rx_clk_delay.coarse.value & ~decoded_wr_biten[7:5]) | (decoded_wr_data[7:5] & decoded_wr_biten[7:5]);
+ if(decoded_reg_strb.global_cfg.command && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.global_cfg.command.flush.value & ~decoded_wr_biten[0:0]) | (decoded_wr_data[0:0] & decoded_wr_biten[0:0]);
+ load_next_c = '1;
+ end else begin // singlepulse clears back to 0
+ next_c = '0;
load_next_c = '1;
end
- field_combo.t_rx_clk_delay.coarse.next = next_c;
- field_combo.t_rx_clk_delay.coarse.load_next = load_next_c;
+ field_combo.global_cfg.command.flush.next = next_c;
+ field_combo.global_cfg.command.flush.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.t_rx_clk_delay.coarse.value <= 3'h0;
+ field_storage.global_cfg.command.flush.value <= 1'h0;
end else begin
- if(field_combo.t_rx_clk_delay.coarse.load_next) begin
- field_storage.t_rx_clk_delay.coarse.value <= field_combo.t_rx_clk_delay.coarse.next;
+ if(field_combo.global_cfg.command.flush.load_next) begin
+ field_storage.global_cfg.command.flush.value <= field_combo.global_cfg.command.flush.next;
end
end
end
- assign hwif_out.t_rx_clk_delay.coarse.value = field_storage.t_rx_clk_delay.coarse.value;
- // Field: hyperbus_cfg_regs.t_tx_clk_delay.fine
+ assign hwif_out.global_cfg.command.flush.value = field_storage.global_cfg.command.flush.value;
+ // Field: hyperbus_cfg_regs.global_cfg.command.apply
always_comb begin
- automatic logic [4:0] next_c;
+ automatic logic [0:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.t_tx_clk_delay.fine.value;
+ next_c = field_storage.global_cfg.command.apply.value;
load_next_c = '0;
- if(decoded_reg_strb.t_tx_clk_delay && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.t_tx_clk_delay.fine.value & ~decoded_wr_biten[4:0]) | (decoded_wr_data[4:0] & decoded_wr_biten[4:0]);
+ if(decoded_reg_strb.global_cfg.command && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.global_cfg.command.apply.value & ~decoded_wr_biten[1:1]) | (decoded_wr_data[1:1] & decoded_wr_biten[1:1]);
+ load_next_c = '1;
+ end else begin // singlepulse clears back to 0
+ next_c = '0;
load_next_c = '1;
end
- field_combo.t_tx_clk_delay.fine.next = next_c;
- field_combo.t_tx_clk_delay.fine.load_next = load_next_c;
+ field_combo.global_cfg.command.apply.next = next_c;
+ field_combo.global_cfg.command.apply.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.t_tx_clk_delay.fine.value <= 5'h10;
+ field_storage.global_cfg.command.apply.value <= 1'h0;
end else begin
- if(field_combo.t_tx_clk_delay.fine.load_next) begin
- field_storage.t_tx_clk_delay.fine.value <= field_combo.t_tx_clk_delay.fine.next;
+ if(field_combo.global_cfg.command.apply.load_next) begin
+ field_storage.global_cfg.command.apply.value <= field_combo.global_cfg.command.apply.next;
end
end
end
- assign hwif_out.t_tx_clk_delay.fine.value = field_storage.t_tx_clk_delay.fine.value;
- // Field: hyperbus_cfg_regs.t_tx_clk_delay.coarse
+ assign hwif_out.global_cfg.command.apply.value = field_storage.global_cfg.command.apply.value;
+ // Field: hyperbus_cfg_regs.global_cfg.status.decode_error
always_comb begin
- automatic logic [2:0] next_c;
+ automatic logic [0:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.t_tx_clk_delay.coarse.value;
+ next_c = field_storage.global_cfg.status.decode_error.value;
load_next_c = '0;
- if(decoded_reg_strb.t_tx_clk_delay && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.t_tx_clk_delay.coarse.value & ~decoded_wr_biten[7:5]) | (decoded_wr_data[7:5] & decoded_wr_biten[7:5]);
+ if(hwif_in.global_cfg.status.decode_error.hwset) begin // HW Set
+ next_c = '1;
+ load_next_c = '1;
+ end else if(decoded_reg_strb.global_cfg.status && decoded_req_is_wr) begin // SW write 1 clear
+ next_c = field_storage.global_cfg.status.decode_error.value & ~(decoded_wr_data[0:0] & decoded_wr_biten[0:0]);
+ load_next_c = '1;
+ end else begin // HW Write
+ next_c = hwif_in.global_cfg.status.decode_error.next;
load_next_c = '1;
end
- field_combo.t_tx_clk_delay.coarse.next = next_c;
- field_combo.t_tx_clk_delay.coarse.load_next = load_next_c;
+ field_combo.global_cfg.status.decode_error.next = next_c;
+ field_combo.global_cfg.status.decode_error.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.t_tx_clk_delay.coarse.value <= 3'h0;
+ field_storage.global_cfg.status.decode_error.value <= 1'h0;
end else begin
- if(field_combo.t_tx_clk_delay.coarse.load_next) begin
- field_storage.t_tx_clk_delay.coarse.value <= field_combo.t_tx_clk_delay.coarse.next;
+ if(field_combo.global_cfg.status.decode_error.load_next) begin
+ field_storage.global_cfg.status.decode_error.value <= field_combo.global_cfg.status.decode_error.next;
end
end
end
- assign hwif_out.t_tx_clk_delay.coarse.value = field_storage.t_tx_clk_delay.coarse.value;
- // Field: hyperbus_cfg_regs.address_mask_msb.value
+ assign hwif_out.global_cfg.status.decode_error.value = field_storage.global_cfg.status.decode_error.value;
+ // Field: hyperbus_cfg_regs.global_cfg.status.busy
always_comb begin
- automatic logic [4:0] next_c;
+ automatic logic [0:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.address_mask_msb.value.value;
+ next_c = field_storage.global_cfg.status.busy.value;
load_next_c = '0;
- if(decoded_reg_strb.address_mask_msb && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.address_mask_msb.value.value & ~decoded_wr_biten[4:0]) | (decoded_wr_data[4:0] & decoded_wr_biten[4:0]);
- load_next_c = '1;
+
+ // HW Write
+ next_c = hwif_in.global_cfg.status.busy.next;
+ load_next_c = '1;
+ field_combo.global_cfg.status.busy.next = next_c;
+ field_combo.global_cfg.status.busy.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.global_cfg.status.busy.value <= 1'h0;
+ end else begin
+ if(field_combo.global_cfg.status.busy.load_next) begin
+ field_storage.global_cfg.status.busy.value <= field_combo.global_cfg.status.busy.next;
+ end
end
- field_combo.address_mask_msb.value.next = next_c;
- field_combo.address_mask_msb.value.load_next = load_next_c;
+ end
+ assign hwif_out.global_cfg.status.busy.value = field_storage.global_cfg.status.busy.value;
+ // Field: hyperbus_cfg_regs.global_cfg.status.dirty
+ always_comb begin
+ automatic logic [0:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.global_cfg.status.dirty.value;
+ load_next_c = '0;
+
+ // HW Write
+ next_c = hwif_in.global_cfg.status.dirty.next;
+ load_next_c = '1;
+ field_combo.global_cfg.status.dirty.next = next_c;
+ field_combo.global_cfg.status.dirty.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.address_mask_msb.value.value <= 5'h19;
+ field_storage.global_cfg.status.dirty.value <= 1'h0;
end else begin
- if(field_combo.address_mask_msb.value.load_next) begin
- field_storage.address_mask_msb.value.value <= field_combo.address_mask_msb.value.next;
+ if(field_combo.global_cfg.status.dirty.load_next) begin
+ field_storage.global_cfg.status.dirty.value <= field_combo.global_cfg.status.dirty.next;
end
end
end
- assign hwif_out.address_mask_msb.value.value = field_storage.address_mask_msb.value.value;
- // Field: hyperbus_cfg_regs.address_space.value
+ assign hwif_out.global_cfg.status.dirty.value = field_storage.global_cfg.status.dirty.value;
+ // Field: hyperbus_cfg_regs.frontend.frontend_cfg.dual_phy
always_comb begin
automatic logic [0:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.address_space.value.value;
+ next_c = field_storage.frontend.frontend_cfg.dual_phy.value;
load_next_c = '0;
- if(decoded_reg_strb.address_space && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.address_space.value.value & ~decoded_wr_biten[0:0]) | (decoded_wr_data[0:0] & decoded_wr_biten[0:0]);
+ if(decoded_reg_strb.frontend.frontend_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.frontend.frontend_cfg.dual_phy.value & ~decoded_wr_biten[0:0]) | (decoded_wr_data[0:0] & decoded_wr_biten[0:0]);
load_next_c = '1;
end
- field_combo.address_space.value.next = next_c;
- field_combo.address_space.value.load_next = load_next_c;
+ field_combo.frontend.frontend_cfg.dual_phy.next = next_c;
+ field_combo.frontend.frontend_cfg.dual_phy.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.address_space.value.value <= 1'h0;
+ field_storage.frontend.frontend_cfg.dual_phy.value <= 1'h1;
end else begin
- if(field_combo.address_space.value.load_next) begin
- field_storage.address_space.value.value <= field_combo.address_space.value.next;
+ if(field_combo.frontend.frontend_cfg.dual_phy.load_next) begin
+ field_storage.frontend.frontend_cfg.dual_phy.value <= field_combo.frontend.frontend_cfg.dual_phy.next;
end
end
end
- assign hwif_out.address_space.value.value = field_storage.address_space.value.value;
- // Field: hyperbus_cfg_regs.phys_in_use.value
+ assign hwif_out.frontend.frontend_cfg.dual_phy.value = field_storage.frontend.frontend_cfg.dual_phy.value;
+ // Field: hyperbus_cfg_regs.backend.clock_cfg.divider
always_comb begin
- automatic logic [0:0] next_c;
+ automatic logic [7:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.phys_in_use.value.value;
+ next_c = field_storage.backend.clock_cfg.divider.value;
load_next_c = '0;
- if(decoded_reg_strb.phys_in_use && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.phys_in_use.value.value & ~decoded_wr_biten[0:0]) | (decoded_wr_data[0:0] & decoded_wr_biten[0:0]);
+ if(decoded_reg_strb.backend.clock_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.backend.clock_cfg.divider.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
load_next_c = '1;
end
- field_combo.phys_in_use.value.next = next_c;
- field_combo.phys_in_use.value.load_next = load_next_c;
+ field_combo.backend.clock_cfg.divider.next = next_c;
+ field_combo.backend.clock_cfg.divider.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.phys_in_use.value.value <= 1'h1;
+ field_storage.backend.clock_cfg.divider.value <= 8'h8;
end else begin
- if(field_combo.phys_in_use.value.load_next) begin
- field_storage.phys_in_use.value.value <= field_combo.phys_in_use.value.next;
+ if(field_combo.backend.clock_cfg.divider.load_next) begin
+ field_storage.backend.clock_cfg.divider.value <= field_combo.backend.clock_cfg.divider.next;
end
end
end
- assign hwif_out.phys_in_use.value.value = field_storage.phys_in_use.value.value;
- // Field: hyperbus_cfg_regs.which_phy.value
+ assign hwif_out.backend.clock_cfg.divider.value = field_storage.backend.clock_cfg.divider.value;
+ // Field: hyperbus_cfg_regs.phy_0.tx_delay.value
always_comb begin
- automatic logic [0:0] next_c;
+ automatic logic [7:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.which_phy.value.value;
+ next_c = field_storage.phy_0.tx_delay.value.value;
load_next_c = '0;
- if(decoded_reg_strb.which_phy && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.which_phy.value.value & ~decoded_wr_biten[0:0]) | (decoded_wr_data[0:0] & decoded_wr_biten[0:0]);
+ if(decoded_reg_strb.phy_0.tx_delay && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.phy_0.tx_delay.value.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
load_next_c = '1;
end
- field_combo.which_phy.value.next = next_c;
- field_combo.which_phy.value.load_next = load_next_c;
+ field_combo.phy_0.tx_delay.value.next = next_c;
+ field_combo.phy_0.tx_delay.value.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.which_phy.value.value <= 1'h1;
+ field_storage.phy_0.tx_delay.value.value <= 8'h10;
end else begin
- if(field_combo.which_phy.value.load_next) begin
- field_storage.which_phy.value.value <= field_combo.which_phy.value.next;
+ if(field_combo.phy_0.tx_delay.value.load_next) begin
+ field_storage.phy_0.tx_delay.value.value <= field_combo.phy_0.tx_delay.value.next;
end
end
end
- assign hwif_out.which_phy.value.value = field_storage.which_phy.value.value;
- // Field: hyperbus_cfg_regs.t_csh_cycles.value
+ assign hwif_out.phy_0.tx_delay.value.value = field_storage.phy_0.tx_delay.value.value;
+ // Field: hyperbus_cfg_regs.phy_0.rwds_timing.rwds_oe_setup_cycles
always_comb begin
- automatic logic [3:0] next_c;
+ automatic logic [7:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.t_csh_cycles.value.value;
+ next_c = field_storage.phy_0.rwds_timing.rwds_oe_setup_cycles.value;
load_next_c = '0;
- if(decoded_reg_strb.t_csh_cycles && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.t_csh_cycles.value.value & ~decoded_wr_biten[3:0]) | (decoded_wr_data[3:0] & decoded_wr_biten[3:0]);
+ if(decoded_reg_strb.phy_0.rwds_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.phy_0.rwds_timing.rwds_oe_setup_cycles.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
load_next_c = '1;
end
- field_combo.t_csh_cycles.value.next = next_c;
- field_combo.t_csh_cycles.value.load_next = load_next_c;
+ field_combo.phy_0.rwds_timing.rwds_oe_setup_cycles.next = next_c;
+ field_combo.phy_0.rwds_timing.rwds_oe_setup_cycles.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.t_csh_cycles.value.value <= 4'h1;
+ field_storage.phy_0.rwds_timing.rwds_oe_setup_cycles.value <= 8'h1;
end else begin
- if(field_combo.t_csh_cycles.value.load_next) begin
- field_storage.t_csh_cycles.value.value <= field_combo.t_csh_cycles.value.next;
+ if(field_combo.phy_0.rwds_timing.rwds_oe_setup_cycles.load_next) begin
+ field_storage.phy_0.rwds_timing.rwds_oe_setup_cycles.value <= field_combo.phy_0.rwds_timing.rwds_oe_setup_cycles.next;
end
end
end
- assign hwif_out.t_csh_cycles.value.value = field_storage.t_csh_cycles.value.value;
- // Field: hyperbus_cfg_regs.csn_to_ck_cycles.value
+ assign hwif_out.phy_0.rwds_timing.rwds_oe_setup_cycles.value = field_storage.phy_0.rwds_timing.rwds_oe_setup_cycles.value;
+ // Field: hyperbus_cfg_regs.phy_1.tx_delay.value
always_comb begin
- automatic logic [3:0] next_c;
+ automatic logic [7:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.csn_to_ck_cycles.value.value;
+ next_c = field_storage.phy_1.tx_delay.value.value;
load_next_c = '0;
- if(decoded_reg_strb.csn_to_ck_cycles && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.csn_to_ck_cycles.value.value & ~decoded_wr_biten[3:0]) | (decoded_wr_data[3:0] & decoded_wr_biten[3:0]);
+ if(decoded_reg_strb.phy_1.tx_delay && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.phy_1.tx_delay.value.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
load_next_c = '1;
end
- field_combo.csn_to_ck_cycles.value.next = next_c;
- field_combo.csn_to_ck_cycles.value.load_next = load_next_c;
+ field_combo.phy_1.tx_delay.value.next = next_c;
+ field_combo.phy_1.tx_delay.value.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.csn_to_ck_cycles.value.value <= 4'h0;
+ field_storage.phy_1.tx_delay.value.value <= 8'h10;
end else begin
- if(field_combo.csn_to_ck_cycles.value.load_next) begin
- field_storage.csn_to_ck_cycles.value.value <= field_combo.csn_to_ck_cycles.value.next;
+ if(field_combo.phy_1.tx_delay.value.load_next) begin
+ field_storage.phy_1.tx_delay.value.value <= field_combo.phy_1.tx_delay.value.next;
end
end
end
- assign hwif_out.csn_to_ck_cycles.value.value = field_storage.csn_to_ck_cycles.value.value;
- // Field: hyperbus_cfg_regs.chip0_base.value
+ assign hwif_out.phy_1.tx_delay.value.value = field_storage.phy_1.tx_delay.value.value;
+ // Field: hyperbus_cfg_regs.phy_1.rwds_timing.rwds_oe_setup_cycles
always_comb begin
- automatic logic [9:0] next_c;
+ automatic logic [7:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.chip0_base.value.value;
+ next_c = field_storage.phy_1.rwds_timing.rwds_oe_setup_cycles.value;
load_next_c = '0;
- if(decoded_reg_strb.chip0_base && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.chip0_base.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ if(decoded_reg_strb.phy_1.rwds_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.phy_1.rwds_timing.rwds_oe_setup_cycles.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
load_next_c = '1;
end
- field_combo.chip0_base.value.next = next_c;
- field_combo.chip0_base.value.load_next = load_next_c;
+ field_combo.phy_1.rwds_timing.rwds_oe_setup_cycles.next = next_c;
+ field_combo.phy_1.rwds_timing.rwds_oe_setup_cycles.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.chip0_base.value.value <= 10'h0;
+ field_storage.phy_1.rwds_timing.rwds_oe_setup_cycles.value <= 8'h1;
end else begin
- if(field_combo.chip0_base.value.load_next) begin
- field_storage.chip0_base.value.value <= field_combo.chip0_base.value.next;
+ if(field_combo.phy_1.rwds_timing.rwds_oe_setup_cycles.load_next) begin
+ field_storage.phy_1.rwds_timing.rwds_oe_setup_cycles.value <= field_combo.phy_1.rwds_timing.rwds_oe_setup_cycles.next;
end
end
end
- assign hwif_out.chip0_base.value.value = field_storage.chip0_base.value.value;
- // Field: hyperbus_cfg_regs.chip0_bound.value
+ assign hwif_out.phy_1.rwds_timing.rwds_oe_setup_cycles.value = field_storage.phy_1.rwds_timing.rwds_oe_setup_cycles.value;
+ // Field: hyperbus_cfg_regs.chip_0.range_base.value
always_comb begin
automatic logic [9:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.chip0_bound.value.value;
+ next_c = field_storage.chip_0.range_base.value.value;
load_next_c = '0;
- if(decoded_reg_strb.chip0_bound && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.chip0_bound.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ if(decoded_reg_strb.chip_0.range_base && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_0.range_base.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
load_next_c = '1;
end
- field_combo.chip0_bound.value.next = next_c;
- field_combo.chip0_bound.value.load_next = load_next_c;
+ field_combo.chip_0.range_base.value.next = next_c;
+ field_combo.chip_0.range_base.value.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.chip0_bound.value.value <= 10'h1;
+ field_storage.chip_0.range_base.value.value <= 10'h0;
end else begin
- if(field_combo.chip0_bound.value.load_next) begin
- field_storage.chip0_bound.value.value <= field_combo.chip0_bound.value.next;
+ if(field_combo.chip_0.range_base.value.load_next) begin
+ field_storage.chip_0.range_base.value.value <= field_combo.chip_0.range_base.value.next;
end
end
end
- assign hwif_out.chip0_bound.value.value = field_storage.chip0_bound.value.value;
- // Field: hyperbus_cfg_regs.chip1_base.value
+ assign hwif_out.chip_0.range_base.value.value = field_storage.chip_0.range_base.value.value;
+ // Field: hyperbus_cfg_regs.chip_0.range_bound.value
always_comb begin
automatic logic [9:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.chip1_base.value.value;
+ next_c = field_storage.chip_0.range_bound.value.value;
load_next_c = '0;
- if(decoded_reg_strb.chip1_base && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.chip1_base.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ if(decoded_reg_strb.chip_0.range_bound && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_0.range_bound.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
load_next_c = '1;
end
- field_combo.chip1_base.value.next = next_c;
- field_combo.chip1_base.value.load_next = load_next_c;
+ field_combo.chip_0.range_bound.value.next = next_c;
+ field_combo.chip_0.range_bound.value.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.chip1_base.value.value <= 10'h1;
+ field_storage.chip_0.range_bound.value.value <= 10'h1;
end else begin
- if(field_combo.chip1_base.value.load_next) begin
- field_storage.chip1_base.value.value <= field_combo.chip1_base.value.next;
+ if(field_combo.chip_0.range_bound.value.load_next) begin
+ field_storage.chip_0.range_bound.value.value <= field_combo.chip_0.range_bound.value.next;
end
end
end
- assign hwif_out.chip1_base.value.value = field_storage.chip1_base.value.value;
- // Field: hyperbus_cfg_regs.chip1_bound.value
+ assign hwif_out.chip_0.range_bound.value.value = field_storage.chip_0.range_bound.value.value;
+ // Field: hyperbus_cfg_regs.chip_0.address_cfg.address_space
always_comb begin
- automatic logic [9:0] next_c;
+ automatic logic [7:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.chip1_bound.value.value;
+ next_c = field_storage.chip_0.address_cfg.address_space.value;
load_next_c = '0;
- if(decoded_reg_strb.chip1_bound && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.chip1_bound.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ if(decoded_reg_strb.chip_0.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_0.address_cfg.address_space.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
load_next_c = '1;
end
- field_combo.chip1_bound.value.next = next_c;
- field_combo.chip1_bound.value.load_next = load_next_c;
+ field_combo.chip_0.address_cfg.address_space.next = next_c;
+ field_combo.chip_0.address_cfg.address_space.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.chip1_bound.value.value <= 10'h2;
+ field_storage.chip_0.address_cfg.address_space.value <= 8'h0;
end else begin
- if(field_combo.chip1_bound.value.load_next) begin
- field_storage.chip1_bound.value.value <= field_combo.chip1_bound.value.next;
+ if(field_combo.chip_0.address_cfg.address_space.load_next) begin
+ field_storage.chip_0.address_cfg.address_space.value <= field_combo.chip_0.address_cfg.address_space.next;
end
end
end
- assign hwif_out.chip1_bound.value.value = field_storage.chip1_bound.value.value;
- // Field: hyperbus_cfg_regs.chip2_base.value
+ assign hwif_out.chip_0.address_cfg.address_space.value = field_storage.chip_0.address_cfg.address_space.value;
+ // Field: hyperbus_cfg_regs.chip_0.address_cfg.address_mask_msb
always_comb begin
- automatic logic [9:0] next_c;
+ automatic logic [7:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.chip2_base.value.value;
+ next_c = field_storage.chip_0.address_cfg.address_mask_msb.value;
load_next_c = '0;
- if(decoded_reg_strb.chip2_base && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.chip2_base.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ if(decoded_reg_strb.chip_0.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_0.address_cfg.address_mask_msb.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
load_next_c = '1;
end
- field_combo.chip2_base.value.next = next_c;
- field_combo.chip2_base.value.load_next = load_next_c;
+ field_combo.chip_0.address_cfg.address_mask_msb.next = next_c;
+ field_combo.chip_0.address_cfg.address_mask_msb.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.chip2_base.value.value <= 10'h2;
+ field_storage.chip_0.address_cfg.address_mask_msb.value <= 8'h19;
end else begin
- if(field_combo.chip2_base.value.load_next) begin
- field_storage.chip2_base.value.value <= field_combo.chip2_base.value.next;
+ if(field_combo.chip_0.address_cfg.address_mask_msb.load_next) begin
+ field_storage.chip_0.address_cfg.address_mask_msb.value <= field_combo.chip_0.address_cfg.address_mask_msb.next;
end
end
end
- assign hwif_out.chip2_base.value.value = field_storage.chip2_base.value.value;
- // Field: hyperbus_cfg_regs.chip2_bound.value
+ assign hwif_out.chip_0.address_cfg.address_mask_msb.value = field_storage.chip_0.address_cfg.address_mask_msb.value;
+ // Field: hyperbus_cfg_regs.chip_0.address_cfg.enable
always_comb begin
- automatic logic [9:0] next_c;
+ automatic logic [0:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.chip2_bound.value.value;
+ next_c = field_storage.chip_0.address_cfg.enable.value;
load_next_c = '0;
- if(decoded_reg_strb.chip2_bound && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.chip2_bound.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ if(decoded_reg_strb.chip_0.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_0.address_cfg.enable.value & ~decoded_wr_biten[16:16]) | (decoded_wr_data[16:16] & decoded_wr_biten[16:16]);
load_next_c = '1;
end
- field_combo.chip2_bound.value.next = next_c;
- field_combo.chip2_bound.value.load_next = load_next_c;
+ field_combo.chip_0.address_cfg.enable.next = next_c;
+ field_combo.chip_0.address_cfg.enable.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.chip2_bound.value.value <= 10'h3;
+ field_storage.chip_0.address_cfg.enable.value <= 1'h1;
end else begin
- if(field_combo.chip2_bound.value.load_next) begin
- field_storage.chip2_bound.value.value <= field_combo.chip2_bound.value.next;
+ if(field_combo.chip_0.address_cfg.enable.load_next) begin
+ field_storage.chip_0.address_cfg.enable.value <= field_combo.chip_0.address_cfg.enable.next;
end
end
end
- assign hwif_out.chip2_bound.value.value = field_storage.chip2_bound.value.value;
- // Field: hyperbus_cfg_regs.chip3_base.value
+ assign hwif_out.chip_0.address_cfg.enable.value = field_storage.chip_0.address_cfg.enable.value;
+ // Field: hyperbus_cfg_regs.chip_0.latency_cfg.t_latency_access
always_comb begin
- automatic logic [9:0] next_c;
+ automatic logic [7:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.chip3_base.value.value;
+ next_c = field_storage.chip_0.latency_cfg.t_latency_access.value;
load_next_c = '0;
- if(decoded_reg_strb.chip3_base && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.chip3_base.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ if(decoded_reg_strb.chip_0.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_0.latency_cfg.t_latency_access.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
load_next_c = '1;
end
- field_combo.chip3_base.value.next = next_c;
- field_combo.chip3_base.value.load_next = load_next_c;
+ field_combo.chip_0.latency_cfg.t_latency_access.next = next_c;
+ field_combo.chip_0.latency_cfg.t_latency_access.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.chip3_base.value.value <= 10'h3;
+ field_storage.chip_0.latency_cfg.t_latency_access.value <= 8'h6;
end else begin
- if(field_combo.chip3_base.value.load_next) begin
- field_storage.chip3_base.value.value <= field_combo.chip3_base.value.next;
+ if(field_combo.chip_0.latency_cfg.t_latency_access.load_next) begin
+ field_storage.chip_0.latency_cfg.t_latency_access.value <= field_combo.chip_0.latency_cfg.t_latency_access.next;
end
end
end
- assign hwif_out.chip3_base.value.value = field_storage.chip3_base.value.value;
- // Field: hyperbus_cfg_regs.chip3_bound.value
+ assign hwif_out.chip_0.latency_cfg.t_latency_access.value = field_storage.chip_0.latency_cfg.t_latency_access.value;
+ // Field: hyperbus_cfg_regs.chip_0.latency_cfg.rwds_sample_delay
always_comb begin
- automatic logic [9:0] next_c;
+ automatic logic [7:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.chip3_bound.value.value;
+ next_c = field_storage.chip_0.latency_cfg.rwds_sample_delay.value;
load_next_c = '0;
- if(decoded_reg_strb.chip3_bound && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.chip3_bound.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ if(decoded_reg_strb.chip_0.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_0.latency_cfg.rwds_sample_delay.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
load_next_c = '1;
end
- field_combo.chip3_bound.value.next = next_c;
- field_combo.chip3_bound.value.load_next = load_next_c;
+ field_combo.chip_0.latency_cfg.rwds_sample_delay.next = next_c;
+ field_combo.chip_0.latency_cfg.rwds_sample_delay.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.chip3_bound.value.value <= 10'h4;
+ field_storage.chip_0.latency_cfg.rwds_sample_delay.value <= 8'h0;
end else begin
- if(field_combo.chip3_bound.value.load_next) begin
- field_storage.chip3_bound.value.value <= field_combo.chip3_bound.value.next;
+ if(field_combo.chip_0.latency_cfg.rwds_sample_delay.load_next) begin
+ field_storage.chip_0.latency_cfg.rwds_sample_delay.value <= field_combo.chip_0.latency_cfg.rwds_sample_delay.next;
end
end
end
- assign hwif_out.chip3_bound.value.value = field_storage.chip3_bound.value.value;
- // Field: hyperbus_cfg_regs.chip4_base.value
+ assign hwif_out.chip_0.latency_cfg.rwds_sample_delay.value = field_storage.chip_0.latency_cfg.rwds_sample_delay.value;
+ // Field: hyperbus_cfg_regs.chip_0.latency_cfg.en_latency_additional
always_comb begin
- automatic logic [9:0] next_c;
+ automatic logic [0:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.chip4_base.value.value;
+ next_c = field_storage.chip_0.latency_cfg.en_latency_additional.value;
load_next_c = '0;
- if(decoded_reg_strb.chip4_base && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.chip4_base.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ if(decoded_reg_strb.chip_0.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_0.latency_cfg.en_latency_additional.value & ~decoded_wr_biten[16:16]) | (decoded_wr_data[16:16] & decoded_wr_biten[16:16]);
load_next_c = '1;
end
- field_combo.chip4_base.value.next = next_c;
- field_combo.chip4_base.value.load_next = load_next_c;
+ field_combo.chip_0.latency_cfg.en_latency_additional.next = next_c;
+ field_combo.chip_0.latency_cfg.en_latency_additional.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.chip4_base.value.value <= 10'h4;
+ field_storage.chip_0.latency_cfg.en_latency_additional.value <= 1'h0;
end else begin
- if(field_combo.chip4_base.value.load_next) begin
- field_storage.chip4_base.value.value <= field_combo.chip4_base.value.next;
+ if(field_combo.chip_0.latency_cfg.en_latency_additional.load_next) begin
+ field_storage.chip_0.latency_cfg.en_latency_additional.value <= field_combo.chip_0.latency_cfg.en_latency_additional.next;
end
end
end
- assign hwif_out.chip4_base.value.value = field_storage.chip4_base.value.value;
- // Field: hyperbus_cfg_regs.chip4_bound.value
+ assign hwif_out.chip_0.latency_cfg.en_latency_additional.value = field_storage.chip_0.latency_cfg.en_latency_additional.value;
+ // Field: hyperbus_cfg_regs.chip_0.burst_cfg.t_burst_max
always_comb begin
- automatic logic [9:0] next_c;
+ automatic logic [15:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.chip4_bound.value.value;
+ next_c = field_storage.chip_0.burst_cfg.t_burst_max.value;
load_next_c = '0;
- if(decoded_reg_strb.chip4_bound && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.chip4_bound.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ if(decoded_reg_strb.chip_0.burst_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_0.burst_cfg.t_burst_max.value & ~decoded_wr_biten[15:0]) | (decoded_wr_data[15:0] & decoded_wr_biten[15:0]);
load_next_c = '1;
end
- field_combo.chip4_bound.value.next = next_c;
- field_combo.chip4_bound.value.load_next = load_next_c;
+ field_combo.chip_0.burst_cfg.t_burst_max.next = next_c;
+ field_combo.chip_0.burst_cfg.t_burst_max.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.chip4_bound.value.value <= 10'h5;
+ field_storage.chip_0.burst_cfg.t_burst_max.value <= 16'h15e;
end else begin
- if(field_combo.chip4_bound.value.load_next) begin
- field_storage.chip4_bound.value.value <= field_combo.chip4_bound.value.next;
+ if(field_combo.chip_0.burst_cfg.t_burst_max.load_next) begin
+ field_storage.chip_0.burst_cfg.t_burst_max.value <= field_combo.chip_0.burst_cfg.t_burst_max.next;
end
end
end
- assign hwif_out.chip4_bound.value.value = field_storage.chip4_bound.value.value;
- // Field: hyperbus_cfg_regs.chip5_base.value
+ assign hwif_out.chip_0.burst_cfg.t_burst_max.value = field_storage.chip_0.burst_cfg.t_burst_max.value;
+ // Field: hyperbus_cfg_regs.chip_0.chip_timing.t_read_write_recovery
always_comb begin
- automatic logic [9:0] next_c;
+ automatic logic [7:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.chip5_base.value.value;
+ next_c = field_storage.chip_0.chip_timing.t_read_write_recovery.value;
load_next_c = '0;
- if(decoded_reg_strb.chip5_base && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.chip5_base.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ if(decoded_reg_strb.chip_0.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_0.chip_timing.t_read_write_recovery.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
load_next_c = '1;
end
- field_combo.chip5_base.value.next = next_c;
- field_combo.chip5_base.value.load_next = load_next_c;
+ field_combo.chip_0.chip_timing.t_read_write_recovery.next = next_c;
+ field_combo.chip_0.chip_timing.t_read_write_recovery.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.chip5_base.value.value <= 10'h5;
+ field_storage.chip_0.chip_timing.t_read_write_recovery.value <= 8'h6;
end else begin
- if(field_combo.chip5_base.value.load_next) begin
- field_storage.chip5_base.value.value <= field_combo.chip5_base.value.next;
+ if(field_combo.chip_0.chip_timing.t_read_write_recovery.load_next) begin
+ field_storage.chip_0.chip_timing.t_read_write_recovery.value <= field_combo.chip_0.chip_timing.t_read_write_recovery.next;
end
end
end
- assign hwif_out.chip5_base.value.value = field_storage.chip5_base.value.value;
- // Field: hyperbus_cfg_regs.chip5_bound.value
+ assign hwif_out.chip_0.chip_timing.t_read_write_recovery.value = field_storage.chip_0.chip_timing.t_read_write_recovery.value;
+ // Field: hyperbus_cfg_regs.chip_0.chip_timing.t_csh_cycles
always_comb begin
- automatic logic [9:0] next_c;
+ automatic logic [7:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.chip5_bound.value.value;
+ next_c = field_storage.chip_0.chip_timing.t_csh_cycles.value;
load_next_c = '0;
- if(decoded_reg_strb.chip5_bound && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.chip5_bound.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ if(decoded_reg_strb.chip_0.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_0.chip_timing.t_csh_cycles.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
load_next_c = '1;
end
- field_combo.chip5_bound.value.next = next_c;
- field_combo.chip5_bound.value.load_next = load_next_c;
+ field_combo.chip_0.chip_timing.t_csh_cycles.next = next_c;
+ field_combo.chip_0.chip_timing.t_csh_cycles.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.chip5_bound.value.value <= 10'h6;
+ field_storage.chip_0.chip_timing.t_csh_cycles.value <= 8'h1;
end else begin
- if(field_combo.chip5_bound.value.load_next) begin
- field_storage.chip5_bound.value.value <= field_combo.chip5_bound.value.next;
+ if(field_combo.chip_0.chip_timing.t_csh_cycles.load_next) begin
+ field_storage.chip_0.chip_timing.t_csh_cycles.value <= field_combo.chip_0.chip_timing.t_csh_cycles.next;
end
end
end
- assign hwif_out.chip5_bound.value.value = field_storage.chip5_bound.value.value;
- // Field: hyperbus_cfg_regs.chip6_base.value
+ assign hwif_out.chip_0.chip_timing.t_csh_cycles.value = field_storage.chip_0.chip_timing.t_csh_cycles.value;
+ // Field: hyperbus_cfg_regs.chip_0.chip_timing.csn_to_ck_cycles
always_comb begin
- automatic logic [9:0] next_c;
+ automatic logic [7:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.chip6_base.value.value;
+ next_c = field_storage.chip_0.chip_timing.csn_to_ck_cycles.value;
load_next_c = '0;
- if(decoded_reg_strb.chip6_base && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.chip6_base.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ if(decoded_reg_strb.chip_0.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_0.chip_timing.csn_to_ck_cycles.value & ~decoded_wr_biten[23:16]) | (decoded_wr_data[23:16] & decoded_wr_biten[23:16]);
load_next_c = '1;
end
- field_combo.chip6_base.value.next = next_c;
- field_combo.chip6_base.value.load_next = load_next_c;
+ field_combo.chip_0.chip_timing.csn_to_ck_cycles.next = next_c;
+ field_combo.chip_0.chip_timing.csn_to_ck_cycles.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.chip6_base.value.value <= 10'h6;
+ field_storage.chip_0.chip_timing.csn_to_ck_cycles.value <= 8'h0;
end else begin
- if(field_combo.chip6_base.value.load_next) begin
- field_storage.chip6_base.value.value <= field_combo.chip6_base.value.next;
+ if(field_combo.chip_0.chip_timing.csn_to_ck_cycles.load_next) begin
+ field_storage.chip_0.chip_timing.csn_to_ck_cycles.value <= field_combo.chip_0.chip_timing.csn_to_ck_cycles.next;
end
end
end
- assign hwif_out.chip6_base.value.value = field_storage.chip6_base.value.value;
- // Field: hyperbus_cfg_regs.chip6_bound.value
+ assign hwif_out.chip_0.chip_timing.csn_to_ck_cycles.value = field_storage.chip_0.chip_timing.csn_to_ck_cycles.value;
+ // Field: hyperbus_cfg_regs.chip_0.rx_delay.value
always_comb begin
- automatic logic [9:0] next_c;
+ automatic logic [7:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.chip6_bound.value.value;
+ next_c = field_storage.chip_0.rx_delay.value.value;
load_next_c = '0;
- if(decoded_reg_strb.chip6_bound && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.chip6_bound.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ if(decoded_reg_strb.chip_0.rx_delay && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_0.rx_delay.value.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
load_next_c = '1;
end
- field_combo.chip6_bound.value.next = next_c;
- field_combo.chip6_bound.value.load_next = load_next_c;
+ field_combo.chip_0.rx_delay.value.next = next_c;
+ field_combo.chip_0.rx_delay.value.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.chip6_bound.value.value <= 10'h7;
+ field_storage.chip_0.rx_delay.value.value <= 8'h10;
end else begin
- if(field_combo.chip6_bound.value.load_next) begin
- field_storage.chip6_bound.value.value <= field_combo.chip6_bound.value.next;
+ if(field_combo.chip_0.rx_delay.value.load_next) begin
+ field_storage.chip_0.rx_delay.value.value <= field_combo.chip_0.rx_delay.value.next;
end
end
end
- assign hwif_out.chip6_bound.value.value = field_storage.chip6_bound.value.value;
- // Field: hyperbus_cfg_regs.chip7_base.value
+ assign hwif_out.chip_0.rx_delay.value.value = field_storage.chip_0.rx_delay.value.value;
+ // Field: hyperbus_cfg_regs.chip_1.range_base.value
always_comb begin
automatic logic [9:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.chip7_base.value.value;
+ next_c = field_storage.chip_1.range_base.value.value;
load_next_c = '0;
- if(decoded_reg_strb.chip7_base && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.chip7_base.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ if(decoded_reg_strb.chip_1.range_base && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_1.range_base.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
load_next_c = '1;
end
- field_combo.chip7_base.value.next = next_c;
- field_combo.chip7_base.value.load_next = load_next_c;
+ field_combo.chip_1.range_base.value.next = next_c;
+ field_combo.chip_1.range_base.value.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.chip7_base.value.value <= 10'h7;
+ field_storage.chip_1.range_base.value.value <= 10'h1;
end else begin
- if(field_combo.chip7_base.value.load_next) begin
- field_storage.chip7_base.value.value <= field_combo.chip7_base.value.next;
+ if(field_combo.chip_1.range_base.value.load_next) begin
+ field_storage.chip_1.range_base.value.value <= field_combo.chip_1.range_base.value.next;
end
end
end
- assign hwif_out.chip7_base.value.value = field_storage.chip7_base.value.value;
- // Field: hyperbus_cfg_regs.chip7_bound.value
+ assign hwif_out.chip_1.range_base.value.value = field_storage.chip_1.range_base.value.value;
+ // Field: hyperbus_cfg_regs.chip_1.range_bound.value
always_comb begin
automatic logic [9:0] next_c;
automatic logic load_next_c;
- next_c = field_storage.chip7_bound.value.value;
+ next_c = field_storage.chip_1.range_bound.value.value;
load_next_c = '0;
- if(decoded_reg_strb.chip7_bound && decoded_req_is_wr) begin // SW write
- next_c = (field_storage.chip7_bound.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ if(decoded_reg_strb.chip_1.range_bound && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_1.range_bound.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
load_next_c = '1;
end
- field_combo.chip7_bound.value.next = next_c;
- field_combo.chip7_bound.value.load_next = load_next_c;
+ field_combo.chip_1.range_bound.value.next = next_c;
+ field_combo.chip_1.range_bound.value.load_next = load_next_c;
end
always_ff @(posedge clk or negedge arst_n) begin
if(~arst_n) begin
- field_storage.chip7_bound.value.value <= 10'h8;
+ field_storage.chip_1.range_bound.value.value <= 10'h2;
end else begin
- if(field_combo.chip7_bound.value.load_next) begin
- field_storage.chip7_bound.value.value <= field_combo.chip7_bound.value.next;
+ if(field_combo.chip_1.range_bound.value.load_next) begin
+ field_storage.chip_1.range_bound.value.value <= field_combo.chip_1.range_bound.value.next;
end
end
end
- assign hwif_out.chip7_bound.value.value = field_storage.chip7_bound.value.value;
-
- //--------------------------------------------------------------------------
- // Write response
- //--------------------------------------------------------------------------
- assign cpuif_wr_ack = decoded_req & decoded_req_is_wr;
- // Writes are always granted with no error response
- assign cpuif_wr_err = '0;
-
- //--------------------------------------------------------------------------
- // Readback
- //--------------------------------------------------------------------------
-
- logic [6:0] rd_mux_addr;
- assign rd_mux_addr = decoded_addr;
-
- logic readback_err;
- logic readback_done;
- logic [31:0] readback_data;
+ assign hwif_out.chip_1.range_bound.value.value = field_storage.chip_1.range_bound.value.value;
+ // Field: hyperbus_cfg_regs.chip_1.address_cfg.address_space
always_comb begin
- automatic logic [31:0] readback_data_var;
- readback_data_var = '0;
- if(rd_mux_addr == 7'h0) begin
- readback_data_var[3:0] = field_storage.t_latency_access.value.value;
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_1.address_cfg.address_space.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_1.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_1.address_cfg.address_space.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_1.address_cfg.address_space.next = next_c;
+ field_combo.chip_1.address_cfg.address_space.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_1.address_cfg.address_space.value <= 8'h0;
+ end else begin
+ if(field_combo.chip_1.address_cfg.address_space.load_next) begin
+ field_storage.chip_1.address_cfg.address_space.value <= field_combo.chip_1.address_cfg.address_space.next;
+ end
+ end
+ end
+ assign hwif_out.chip_1.address_cfg.address_space.value = field_storage.chip_1.address_cfg.address_space.value;
+ // Field: hyperbus_cfg_regs.chip_1.address_cfg.address_mask_msb
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_1.address_cfg.address_mask_msb.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_1.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_1.address_cfg.address_mask_msb.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
+ load_next_c = '1;
+ end
+ field_combo.chip_1.address_cfg.address_mask_msb.next = next_c;
+ field_combo.chip_1.address_cfg.address_mask_msb.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_1.address_cfg.address_mask_msb.value <= 8'h19;
+ end else begin
+ if(field_combo.chip_1.address_cfg.address_mask_msb.load_next) begin
+ field_storage.chip_1.address_cfg.address_mask_msb.value <= field_combo.chip_1.address_cfg.address_mask_msb.next;
+ end
+ end
+ end
+ assign hwif_out.chip_1.address_cfg.address_mask_msb.value = field_storage.chip_1.address_cfg.address_mask_msb.value;
+ // Field: hyperbus_cfg_regs.chip_1.address_cfg.enable
+ always_comb begin
+ automatic logic [0:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_1.address_cfg.enable.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_1.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_1.address_cfg.enable.value & ~decoded_wr_biten[16:16]) | (decoded_wr_data[16:16] & decoded_wr_biten[16:16]);
+ load_next_c = '1;
+ end
+ field_combo.chip_1.address_cfg.enable.next = next_c;
+ field_combo.chip_1.address_cfg.enable.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_1.address_cfg.enable.value <= 1'h1;
+ end else begin
+ if(field_combo.chip_1.address_cfg.enable.load_next) begin
+ field_storage.chip_1.address_cfg.enable.value <= field_combo.chip_1.address_cfg.enable.next;
+ end
+ end
+ end
+ assign hwif_out.chip_1.address_cfg.enable.value = field_storage.chip_1.address_cfg.enable.value;
+ // Field: hyperbus_cfg_regs.chip_1.latency_cfg.t_latency_access
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_1.latency_cfg.t_latency_access.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_1.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_1.latency_cfg.t_latency_access.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_1.latency_cfg.t_latency_access.next = next_c;
+ field_combo.chip_1.latency_cfg.t_latency_access.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_1.latency_cfg.t_latency_access.value <= 8'h6;
+ end else begin
+ if(field_combo.chip_1.latency_cfg.t_latency_access.load_next) begin
+ field_storage.chip_1.latency_cfg.t_latency_access.value <= field_combo.chip_1.latency_cfg.t_latency_access.next;
+ end
+ end
+ end
+ assign hwif_out.chip_1.latency_cfg.t_latency_access.value = field_storage.chip_1.latency_cfg.t_latency_access.value;
+ // Field: hyperbus_cfg_regs.chip_1.latency_cfg.rwds_sample_delay
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_1.latency_cfg.rwds_sample_delay.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_1.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_1.latency_cfg.rwds_sample_delay.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
+ load_next_c = '1;
+ end
+ field_combo.chip_1.latency_cfg.rwds_sample_delay.next = next_c;
+ field_combo.chip_1.latency_cfg.rwds_sample_delay.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_1.latency_cfg.rwds_sample_delay.value <= 8'h0;
+ end else begin
+ if(field_combo.chip_1.latency_cfg.rwds_sample_delay.load_next) begin
+ field_storage.chip_1.latency_cfg.rwds_sample_delay.value <= field_combo.chip_1.latency_cfg.rwds_sample_delay.next;
+ end
+ end
+ end
+ assign hwif_out.chip_1.latency_cfg.rwds_sample_delay.value = field_storage.chip_1.latency_cfg.rwds_sample_delay.value;
+ // Field: hyperbus_cfg_regs.chip_1.latency_cfg.en_latency_additional
+ always_comb begin
+ automatic logic [0:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_1.latency_cfg.en_latency_additional.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_1.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_1.latency_cfg.en_latency_additional.value & ~decoded_wr_biten[16:16]) | (decoded_wr_data[16:16] & decoded_wr_biten[16:16]);
+ load_next_c = '1;
+ end
+ field_combo.chip_1.latency_cfg.en_latency_additional.next = next_c;
+ field_combo.chip_1.latency_cfg.en_latency_additional.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_1.latency_cfg.en_latency_additional.value <= 1'h0;
+ end else begin
+ if(field_combo.chip_1.latency_cfg.en_latency_additional.load_next) begin
+ field_storage.chip_1.latency_cfg.en_latency_additional.value <= field_combo.chip_1.latency_cfg.en_latency_additional.next;
+ end
+ end
+ end
+ assign hwif_out.chip_1.latency_cfg.en_latency_additional.value = field_storage.chip_1.latency_cfg.en_latency_additional.value;
+ // Field: hyperbus_cfg_regs.chip_1.burst_cfg.t_burst_max
+ always_comb begin
+ automatic logic [15:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_1.burst_cfg.t_burst_max.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_1.burst_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_1.burst_cfg.t_burst_max.value & ~decoded_wr_biten[15:0]) | (decoded_wr_data[15:0] & decoded_wr_biten[15:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_1.burst_cfg.t_burst_max.next = next_c;
+ field_combo.chip_1.burst_cfg.t_burst_max.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_1.burst_cfg.t_burst_max.value <= 16'h15e;
+ end else begin
+ if(field_combo.chip_1.burst_cfg.t_burst_max.load_next) begin
+ field_storage.chip_1.burst_cfg.t_burst_max.value <= field_combo.chip_1.burst_cfg.t_burst_max.next;
+ end
+ end
+ end
+ assign hwif_out.chip_1.burst_cfg.t_burst_max.value = field_storage.chip_1.burst_cfg.t_burst_max.value;
+ // Field: hyperbus_cfg_regs.chip_1.chip_timing.t_read_write_recovery
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_1.chip_timing.t_read_write_recovery.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_1.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_1.chip_timing.t_read_write_recovery.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_1.chip_timing.t_read_write_recovery.next = next_c;
+ field_combo.chip_1.chip_timing.t_read_write_recovery.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_1.chip_timing.t_read_write_recovery.value <= 8'h6;
+ end else begin
+ if(field_combo.chip_1.chip_timing.t_read_write_recovery.load_next) begin
+ field_storage.chip_1.chip_timing.t_read_write_recovery.value <= field_combo.chip_1.chip_timing.t_read_write_recovery.next;
+ end
+ end
+ end
+ assign hwif_out.chip_1.chip_timing.t_read_write_recovery.value = field_storage.chip_1.chip_timing.t_read_write_recovery.value;
+ // Field: hyperbus_cfg_regs.chip_1.chip_timing.t_csh_cycles
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_1.chip_timing.t_csh_cycles.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_1.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_1.chip_timing.t_csh_cycles.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
+ load_next_c = '1;
+ end
+ field_combo.chip_1.chip_timing.t_csh_cycles.next = next_c;
+ field_combo.chip_1.chip_timing.t_csh_cycles.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_1.chip_timing.t_csh_cycles.value <= 8'h1;
+ end else begin
+ if(field_combo.chip_1.chip_timing.t_csh_cycles.load_next) begin
+ field_storage.chip_1.chip_timing.t_csh_cycles.value <= field_combo.chip_1.chip_timing.t_csh_cycles.next;
+ end
+ end
+ end
+ assign hwif_out.chip_1.chip_timing.t_csh_cycles.value = field_storage.chip_1.chip_timing.t_csh_cycles.value;
+ // Field: hyperbus_cfg_regs.chip_1.chip_timing.csn_to_ck_cycles
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_1.chip_timing.csn_to_ck_cycles.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_1.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_1.chip_timing.csn_to_ck_cycles.value & ~decoded_wr_biten[23:16]) | (decoded_wr_data[23:16] & decoded_wr_biten[23:16]);
+ load_next_c = '1;
+ end
+ field_combo.chip_1.chip_timing.csn_to_ck_cycles.next = next_c;
+ field_combo.chip_1.chip_timing.csn_to_ck_cycles.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_1.chip_timing.csn_to_ck_cycles.value <= 8'h0;
+ end else begin
+ if(field_combo.chip_1.chip_timing.csn_to_ck_cycles.load_next) begin
+ field_storage.chip_1.chip_timing.csn_to_ck_cycles.value <= field_combo.chip_1.chip_timing.csn_to_ck_cycles.next;
+ end
+ end
+ end
+ assign hwif_out.chip_1.chip_timing.csn_to_ck_cycles.value = field_storage.chip_1.chip_timing.csn_to_ck_cycles.value;
+ // Field: hyperbus_cfg_regs.chip_1.rx_delay.value
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_1.rx_delay.value.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_1.rx_delay && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_1.rx_delay.value.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_1.rx_delay.value.next = next_c;
+ field_combo.chip_1.rx_delay.value.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_1.rx_delay.value.value <= 8'h10;
+ end else begin
+ if(field_combo.chip_1.rx_delay.value.load_next) begin
+ field_storage.chip_1.rx_delay.value.value <= field_combo.chip_1.rx_delay.value.next;
+ end
+ end
+ end
+ assign hwif_out.chip_1.rx_delay.value.value = field_storage.chip_1.rx_delay.value.value;
+ // Field: hyperbus_cfg_regs.chip_2.range_base.value
+ always_comb begin
+ automatic logic [9:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_2.range_base.value.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_2.range_base && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_2.range_base.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ load_next_c = '1;
+ end
+ field_combo.chip_2.range_base.value.next = next_c;
+ field_combo.chip_2.range_base.value.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_2.range_base.value.value <= 10'h2;
+ end else begin
+ if(field_combo.chip_2.range_base.value.load_next) begin
+ field_storage.chip_2.range_base.value.value <= field_combo.chip_2.range_base.value.next;
+ end
+ end
+ end
+ assign hwif_out.chip_2.range_base.value.value = field_storage.chip_2.range_base.value.value;
+ // Field: hyperbus_cfg_regs.chip_2.range_bound.value
+ always_comb begin
+ automatic logic [9:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_2.range_bound.value.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_2.range_bound && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_2.range_bound.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ load_next_c = '1;
+ end
+ field_combo.chip_2.range_bound.value.next = next_c;
+ field_combo.chip_2.range_bound.value.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_2.range_bound.value.value <= 10'h3;
+ end else begin
+ if(field_combo.chip_2.range_bound.value.load_next) begin
+ field_storage.chip_2.range_bound.value.value <= field_combo.chip_2.range_bound.value.next;
+ end
+ end
+ end
+ assign hwif_out.chip_2.range_bound.value.value = field_storage.chip_2.range_bound.value.value;
+ // Field: hyperbus_cfg_regs.chip_2.address_cfg.address_space
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_2.address_cfg.address_space.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_2.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_2.address_cfg.address_space.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_2.address_cfg.address_space.next = next_c;
+ field_combo.chip_2.address_cfg.address_space.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_2.address_cfg.address_space.value <= 8'h0;
+ end else begin
+ if(field_combo.chip_2.address_cfg.address_space.load_next) begin
+ field_storage.chip_2.address_cfg.address_space.value <= field_combo.chip_2.address_cfg.address_space.next;
+ end
+ end
+ end
+ assign hwif_out.chip_2.address_cfg.address_space.value = field_storage.chip_2.address_cfg.address_space.value;
+ // Field: hyperbus_cfg_regs.chip_2.address_cfg.address_mask_msb
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_2.address_cfg.address_mask_msb.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_2.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_2.address_cfg.address_mask_msb.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
+ load_next_c = '1;
+ end
+ field_combo.chip_2.address_cfg.address_mask_msb.next = next_c;
+ field_combo.chip_2.address_cfg.address_mask_msb.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_2.address_cfg.address_mask_msb.value <= 8'h19;
+ end else begin
+ if(field_combo.chip_2.address_cfg.address_mask_msb.load_next) begin
+ field_storage.chip_2.address_cfg.address_mask_msb.value <= field_combo.chip_2.address_cfg.address_mask_msb.next;
+ end
+ end
+ end
+ assign hwif_out.chip_2.address_cfg.address_mask_msb.value = field_storage.chip_2.address_cfg.address_mask_msb.value;
+ // Field: hyperbus_cfg_regs.chip_2.address_cfg.enable
+ always_comb begin
+ automatic logic [0:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_2.address_cfg.enable.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_2.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_2.address_cfg.enable.value & ~decoded_wr_biten[16:16]) | (decoded_wr_data[16:16] & decoded_wr_biten[16:16]);
+ load_next_c = '1;
+ end
+ field_combo.chip_2.address_cfg.enable.next = next_c;
+ field_combo.chip_2.address_cfg.enable.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_2.address_cfg.enable.value <= 1'h1;
+ end else begin
+ if(field_combo.chip_2.address_cfg.enable.load_next) begin
+ field_storage.chip_2.address_cfg.enable.value <= field_combo.chip_2.address_cfg.enable.next;
+ end
+ end
+ end
+ assign hwif_out.chip_2.address_cfg.enable.value = field_storage.chip_2.address_cfg.enable.value;
+ // Field: hyperbus_cfg_regs.chip_2.latency_cfg.t_latency_access
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_2.latency_cfg.t_latency_access.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_2.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_2.latency_cfg.t_latency_access.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_2.latency_cfg.t_latency_access.next = next_c;
+ field_combo.chip_2.latency_cfg.t_latency_access.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_2.latency_cfg.t_latency_access.value <= 8'h6;
+ end else begin
+ if(field_combo.chip_2.latency_cfg.t_latency_access.load_next) begin
+ field_storage.chip_2.latency_cfg.t_latency_access.value <= field_combo.chip_2.latency_cfg.t_latency_access.next;
+ end
+ end
+ end
+ assign hwif_out.chip_2.latency_cfg.t_latency_access.value = field_storage.chip_2.latency_cfg.t_latency_access.value;
+ // Field: hyperbus_cfg_regs.chip_2.latency_cfg.rwds_sample_delay
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_2.latency_cfg.rwds_sample_delay.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_2.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_2.latency_cfg.rwds_sample_delay.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
+ load_next_c = '1;
+ end
+ field_combo.chip_2.latency_cfg.rwds_sample_delay.next = next_c;
+ field_combo.chip_2.latency_cfg.rwds_sample_delay.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_2.latency_cfg.rwds_sample_delay.value <= 8'h0;
+ end else begin
+ if(field_combo.chip_2.latency_cfg.rwds_sample_delay.load_next) begin
+ field_storage.chip_2.latency_cfg.rwds_sample_delay.value <= field_combo.chip_2.latency_cfg.rwds_sample_delay.next;
+ end
+ end
+ end
+ assign hwif_out.chip_2.latency_cfg.rwds_sample_delay.value = field_storage.chip_2.latency_cfg.rwds_sample_delay.value;
+ // Field: hyperbus_cfg_regs.chip_2.latency_cfg.en_latency_additional
+ always_comb begin
+ automatic logic [0:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_2.latency_cfg.en_latency_additional.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_2.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_2.latency_cfg.en_latency_additional.value & ~decoded_wr_biten[16:16]) | (decoded_wr_data[16:16] & decoded_wr_biten[16:16]);
+ load_next_c = '1;
+ end
+ field_combo.chip_2.latency_cfg.en_latency_additional.next = next_c;
+ field_combo.chip_2.latency_cfg.en_latency_additional.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_2.latency_cfg.en_latency_additional.value <= 1'h0;
+ end else begin
+ if(field_combo.chip_2.latency_cfg.en_latency_additional.load_next) begin
+ field_storage.chip_2.latency_cfg.en_latency_additional.value <= field_combo.chip_2.latency_cfg.en_latency_additional.next;
+ end
+ end
+ end
+ assign hwif_out.chip_2.latency_cfg.en_latency_additional.value = field_storage.chip_2.latency_cfg.en_latency_additional.value;
+ // Field: hyperbus_cfg_regs.chip_2.burst_cfg.t_burst_max
+ always_comb begin
+ automatic logic [15:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_2.burst_cfg.t_burst_max.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_2.burst_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_2.burst_cfg.t_burst_max.value & ~decoded_wr_biten[15:0]) | (decoded_wr_data[15:0] & decoded_wr_biten[15:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_2.burst_cfg.t_burst_max.next = next_c;
+ field_combo.chip_2.burst_cfg.t_burst_max.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_2.burst_cfg.t_burst_max.value <= 16'h15e;
+ end else begin
+ if(field_combo.chip_2.burst_cfg.t_burst_max.load_next) begin
+ field_storage.chip_2.burst_cfg.t_burst_max.value <= field_combo.chip_2.burst_cfg.t_burst_max.next;
+ end
+ end
+ end
+ assign hwif_out.chip_2.burst_cfg.t_burst_max.value = field_storage.chip_2.burst_cfg.t_burst_max.value;
+ // Field: hyperbus_cfg_regs.chip_2.chip_timing.t_read_write_recovery
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_2.chip_timing.t_read_write_recovery.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_2.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_2.chip_timing.t_read_write_recovery.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_2.chip_timing.t_read_write_recovery.next = next_c;
+ field_combo.chip_2.chip_timing.t_read_write_recovery.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_2.chip_timing.t_read_write_recovery.value <= 8'h6;
+ end else begin
+ if(field_combo.chip_2.chip_timing.t_read_write_recovery.load_next) begin
+ field_storage.chip_2.chip_timing.t_read_write_recovery.value <= field_combo.chip_2.chip_timing.t_read_write_recovery.next;
+ end
+ end
+ end
+ assign hwif_out.chip_2.chip_timing.t_read_write_recovery.value = field_storage.chip_2.chip_timing.t_read_write_recovery.value;
+ // Field: hyperbus_cfg_regs.chip_2.chip_timing.t_csh_cycles
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_2.chip_timing.t_csh_cycles.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_2.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_2.chip_timing.t_csh_cycles.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
+ load_next_c = '1;
+ end
+ field_combo.chip_2.chip_timing.t_csh_cycles.next = next_c;
+ field_combo.chip_2.chip_timing.t_csh_cycles.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_2.chip_timing.t_csh_cycles.value <= 8'h1;
+ end else begin
+ if(field_combo.chip_2.chip_timing.t_csh_cycles.load_next) begin
+ field_storage.chip_2.chip_timing.t_csh_cycles.value <= field_combo.chip_2.chip_timing.t_csh_cycles.next;
+ end
+ end
+ end
+ assign hwif_out.chip_2.chip_timing.t_csh_cycles.value = field_storage.chip_2.chip_timing.t_csh_cycles.value;
+ // Field: hyperbus_cfg_regs.chip_2.chip_timing.csn_to_ck_cycles
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_2.chip_timing.csn_to_ck_cycles.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_2.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_2.chip_timing.csn_to_ck_cycles.value & ~decoded_wr_biten[23:16]) | (decoded_wr_data[23:16] & decoded_wr_biten[23:16]);
+ load_next_c = '1;
+ end
+ field_combo.chip_2.chip_timing.csn_to_ck_cycles.next = next_c;
+ field_combo.chip_2.chip_timing.csn_to_ck_cycles.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_2.chip_timing.csn_to_ck_cycles.value <= 8'h0;
+ end else begin
+ if(field_combo.chip_2.chip_timing.csn_to_ck_cycles.load_next) begin
+ field_storage.chip_2.chip_timing.csn_to_ck_cycles.value <= field_combo.chip_2.chip_timing.csn_to_ck_cycles.next;
+ end
+ end
+ end
+ assign hwif_out.chip_2.chip_timing.csn_to_ck_cycles.value = field_storage.chip_2.chip_timing.csn_to_ck_cycles.value;
+ // Field: hyperbus_cfg_regs.chip_2.rx_delay.value
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_2.rx_delay.value.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_2.rx_delay && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_2.rx_delay.value.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_2.rx_delay.value.next = next_c;
+ field_combo.chip_2.rx_delay.value.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_2.rx_delay.value.value <= 8'h10;
+ end else begin
+ if(field_combo.chip_2.rx_delay.value.load_next) begin
+ field_storage.chip_2.rx_delay.value.value <= field_combo.chip_2.rx_delay.value.next;
+ end
+ end
+ end
+ assign hwif_out.chip_2.rx_delay.value.value = field_storage.chip_2.rx_delay.value.value;
+ // Field: hyperbus_cfg_regs.chip_3.range_base.value
+ always_comb begin
+ automatic logic [9:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_3.range_base.value.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_3.range_base && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_3.range_base.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ load_next_c = '1;
+ end
+ field_combo.chip_3.range_base.value.next = next_c;
+ field_combo.chip_3.range_base.value.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_3.range_base.value.value <= 10'h3;
+ end else begin
+ if(field_combo.chip_3.range_base.value.load_next) begin
+ field_storage.chip_3.range_base.value.value <= field_combo.chip_3.range_base.value.next;
+ end
+ end
+ end
+ assign hwif_out.chip_3.range_base.value.value = field_storage.chip_3.range_base.value.value;
+ // Field: hyperbus_cfg_regs.chip_3.range_bound.value
+ always_comb begin
+ automatic logic [9:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_3.range_bound.value.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_3.range_bound && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_3.range_bound.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ load_next_c = '1;
+ end
+ field_combo.chip_3.range_bound.value.next = next_c;
+ field_combo.chip_3.range_bound.value.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_3.range_bound.value.value <= 10'h4;
+ end else begin
+ if(field_combo.chip_3.range_bound.value.load_next) begin
+ field_storage.chip_3.range_bound.value.value <= field_combo.chip_3.range_bound.value.next;
+ end
+ end
+ end
+ assign hwif_out.chip_3.range_bound.value.value = field_storage.chip_3.range_bound.value.value;
+ // Field: hyperbus_cfg_regs.chip_3.address_cfg.address_space
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_3.address_cfg.address_space.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_3.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_3.address_cfg.address_space.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_3.address_cfg.address_space.next = next_c;
+ field_combo.chip_3.address_cfg.address_space.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_3.address_cfg.address_space.value <= 8'h0;
+ end else begin
+ if(field_combo.chip_3.address_cfg.address_space.load_next) begin
+ field_storage.chip_3.address_cfg.address_space.value <= field_combo.chip_3.address_cfg.address_space.next;
+ end
+ end
+ end
+ assign hwif_out.chip_3.address_cfg.address_space.value = field_storage.chip_3.address_cfg.address_space.value;
+ // Field: hyperbus_cfg_regs.chip_3.address_cfg.address_mask_msb
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_3.address_cfg.address_mask_msb.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_3.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_3.address_cfg.address_mask_msb.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
+ load_next_c = '1;
+ end
+ field_combo.chip_3.address_cfg.address_mask_msb.next = next_c;
+ field_combo.chip_3.address_cfg.address_mask_msb.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_3.address_cfg.address_mask_msb.value <= 8'h19;
+ end else begin
+ if(field_combo.chip_3.address_cfg.address_mask_msb.load_next) begin
+ field_storage.chip_3.address_cfg.address_mask_msb.value <= field_combo.chip_3.address_cfg.address_mask_msb.next;
+ end
+ end
+ end
+ assign hwif_out.chip_3.address_cfg.address_mask_msb.value = field_storage.chip_3.address_cfg.address_mask_msb.value;
+ // Field: hyperbus_cfg_regs.chip_3.address_cfg.enable
+ always_comb begin
+ automatic logic [0:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_3.address_cfg.enable.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_3.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_3.address_cfg.enable.value & ~decoded_wr_biten[16:16]) | (decoded_wr_data[16:16] & decoded_wr_biten[16:16]);
+ load_next_c = '1;
+ end
+ field_combo.chip_3.address_cfg.enable.next = next_c;
+ field_combo.chip_3.address_cfg.enable.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_3.address_cfg.enable.value <= 1'h1;
+ end else begin
+ if(field_combo.chip_3.address_cfg.enable.load_next) begin
+ field_storage.chip_3.address_cfg.enable.value <= field_combo.chip_3.address_cfg.enable.next;
+ end
+ end
+ end
+ assign hwif_out.chip_3.address_cfg.enable.value = field_storage.chip_3.address_cfg.enable.value;
+ // Field: hyperbus_cfg_regs.chip_3.latency_cfg.t_latency_access
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_3.latency_cfg.t_latency_access.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_3.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_3.latency_cfg.t_latency_access.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_3.latency_cfg.t_latency_access.next = next_c;
+ field_combo.chip_3.latency_cfg.t_latency_access.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_3.latency_cfg.t_latency_access.value <= 8'h6;
+ end else begin
+ if(field_combo.chip_3.latency_cfg.t_latency_access.load_next) begin
+ field_storage.chip_3.latency_cfg.t_latency_access.value <= field_combo.chip_3.latency_cfg.t_latency_access.next;
+ end
+ end
+ end
+ assign hwif_out.chip_3.latency_cfg.t_latency_access.value = field_storage.chip_3.latency_cfg.t_latency_access.value;
+ // Field: hyperbus_cfg_regs.chip_3.latency_cfg.rwds_sample_delay
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_3.latency_cfg.rwds_sample_delay.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_3.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_3.latency_cfg.rwds_sample_delay.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
+ load_next_c = '1;
+ end
+ field_combo.chip_3.latency_cfg.rwds_sample_delay.next = next_c;
+ field_combo.chip_3.latency_cfg.rwds_sample_delay.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_3.latency_cfg.rwds_sample_delay.value <= 8'h0;
+ end else begin
+ if(field_combo.chip_3.latency_cfg.rwds_sample_delay.load_next) begin
+ field_storage.chip_3.latency_cfg.rwds_sample_delay.value <= field_combo.chip_3.latency_cfg.rwds_sample_delay.next;
+ end
+ end
+ end
+ assign hwif_out.chip_3.latency_cfg.rwds_sample_delay.value = field_storage.chip_3.latency_cfg.rwds_sample_delay.value;
+ // Field: hyperbus_cfg_regs.chip_3.latency_cfg.en_latency_additional
+ always_comb begin
+ automatic logic [0:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_3.latency_cfg.en_latency_additional.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_3.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_3.latency_cfg.en_latency_additional.value & ~decoded_wr_biten[16:16]) | (decoded_wr_data[16:16] & decoded_wr_biten[16:16]);
+ load_next_c = '1;
+ end
+ field_combo.chip_3.latency_cfg.en_latency_additional.next = next_c;
+ field_combo.chip_3.latency_cfg.en_latency_additional.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_3.latency_cfg.en_latency_additional.value <= 1'h0;
+ end else begin
+ if(field_combo.chip_3.latency_cfg.en_latency_additional.load_next) begin
+ field_storage.chip_3.latency_cfg.en_latency_additional.value <= field_combo.chip_3.latency_cfg.en_latency_additional.next;
+ end
+ end
+ end
+ assign hwif_out.chip_3.latency_cfg.en_latency_additional.value = field_storage.chip_3.latency_cfg.en_latency_additional.value;
+ // Field: hyperbus_cfg_regs.chip_3.burst_cfg.t_burst_max
+ always_comb begin
+ automatic logic [15:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_3.burst_cfg.t_burst_max.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_3.burst_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_3.burst_cfg.t_burst_max.value & ~decoded_wr_biten[15:0]) | (decoded_wr_data[15:0] & decoded_wr_biten[15:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_3.burst_cfg.t_burst_max.next = next_c;
+ field_combo.chip_3.burst_cfg.t_burst_max.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_3.burst_cfg.t_burst_max.value <= 16'h15e;
+ end else begin
+ if(field_combo.chip_3.burst_cfg.t_burst_max.load_next) begin
+ field_storage.chip_3.burst_cfg.t_burst_max.value <= field_combo.chip_3.burst_cfg.t_burst_max.next;
+ end
+ end
+ end
+ assign hwif_out.chip_3.burst_cfg.t_burst_max.value = field_storage.chip_3.burst_cfg.t_burst_max.value;
+ // Field: hyperbus_cfg_regs.chip_3.chip_timing.t_read_write_recovery
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_3.chip_timing.t_read_write_recovery.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_3.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_3.chip_timing.t_read_write_recovery.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_3.chip_timing.t_read_write_recovery.next = next_c;
+ field_combo.chip_3.chip_timing.t_read_write_recovery.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_3.chip_timing.t_read_write_recovery.value <= 8'h6;
+ end else begin
+ if(field_combo.chip_3.chip_timing.t_read_write_recovery.load_next) begin
+ field_storage.chip_3.chip_timing.t_read_write_recovery.value <= field_combo.chip_3.chip_timing.t_read_write_recovery.next;
+ end
+ end
+ end
+ assign hwif_out.chip_3.chip_timing.t_read_write_recovery.value = field_storage.chip_3.chip_timing.t_read_write_recovery.value;
+ // Field: hyperbus_cfg_regs.chip_3.chip_timing.t_csh_cycles
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_3.chip_timing.t_csh_cycles.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_3.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_3.chip_timing.t_csh_cycles.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
+ load_next_c = '1;
+ end
+ field_combo.chip_3.chip_timing.t_csh_cycles.next = next_c;
+ field_combo.chip_3.chip_timing.t_csh_cycles.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_3.chip_timing.t_csh_cycles.value <= 8'h1;
+ end else begin
+ if(field_combo.chip_3.chip_timing.t_csh_cycles.load_next) begin
+ field_storage.chip_3.chip_timing.t_csh_cycles.value <= field_combo.chip_3.chip_timing.t_csh_cycles.next;
+ end
+ end
+ end
+ assign hwif_out.chip_3.chip_timing.t_csh_cycles.value = field_storage.chip_3.chip_timing.t_csh_cycles.value;
+ // Field: hyperbus_cfg_regs.chip_3.chip_timing.csn_to_ck_cycles
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_3.chip_timing.csn_to_ck_cycles.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_3.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_3.chip_timing.csn_to_ck_cycles.value & ~decoded_wr_biten[23:16]) | (decoded_wr_data[23:16] & decoded_wr_biten[23:16]);
+ load_next_c = '1;
+ end
+ field_combo.chip_3.chip_timing.csn_to_ck_cycles.next = next_c;
+ field_combo.chip_3.chip_timing.csn_to_ck_cycles.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_3.chip_timing.csn_to_ck_cycles.value <= 8'h0;
+ end else begin
+ if(field_combo.chip_3.chip_timing.csn_to_ck_cycles.load_next) begin
+ field_storage.chip_3.chip_timing.csn_to_ck_cycles.value <= field_combo.chip_3.chip_timing.csn_to_ck_cycles.next;
+ end
+ end
+ end
+ assign hwif_out.chip_3.chip_timing.csn_to_ck_cycles.value = field_storage.chip_3.chip_timing.csn_to_ck_cycles.value;
+ // Field: hyperbus_cfg_regs.chip_3.rx_delay.value
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_3.rx_delay.value.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_3.rx_delay && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_3.rx_delay.value.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_3.rx_delay.value.next = next_c;
+ field_combo.chip_3.rx_delay.value.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_3.rx_delay.value.value <= 8'h10;
+ end else begin
+ if(field_combo.chip_3.rx_delay.value.load_next) begin
+ field_storage.chip_3.rx_delay.value.value <= field_combo.chip_3.rx_delay.value.next;
+ end
+ end
+ end
+ assign hwif_out.chip_3.rx_delay.value.value = field_storage.chip_3.rx_delay.value.value;
+ // Field: hyperbus_cfg_regs.chip_4.range_base.value
+ always_comb begin
+ automatic logic [9:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_4.range_base.value.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_4.range_base && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_4.range_base.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ load_next_c = '1;
+ end
+ field_combo.chip_4.range_base.value.next = next_c;
+ field_combo.chip_4.range_base.value.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_4.range_base.value.value <= 10'h4;
+ end else begin
+ if(field_combo.chip_4.range_base.value.load_next) begin
+ field_storage.chip_4.range_base.value.value <= field_combo.chip_4.range_base.value.next;
+ end
+ end
+ end
+ assign hwif_out.chip_4.range_base.value.value = field_storage.chip_4.range_base.value.value;
+ // Field: hyperbus_cfg_regs.chip_4.range_bound.value
+ always_comb begin
+ automatic logic [9:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_4.range_bound.value.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_4.range_bound && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_4.range_bound.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ load_next_c = '1;
+ end
+ field_combo.chip_4.range_bound.value.next = next_c;
+ field_combo.chip_4.range_bound.value.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_4.range_bound.value.value <= 10'h5;
+ end else begin
+ if(field_combo.chip_4.range_bound.value.load_next) begin
+ field_storage.chip_4.range_bound.value.value <= field_combo.chip_4.range_bound.value.next;
+ end
+ end
+ end
+ assign hwif_out.chip_4.range_bound.value.value = field_storage.chip_4.range_bound.value.value;
+ // Field: hyperbus_cfg_regs.chip_4.address_cfg.address_space
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_4.address_cfg.address_space.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_4.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_4.address_cfg.address_space.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_4.address_cfg.address_space.next = next_c;
+ field_combo.chip_4.address_cfg.address_space.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_4.address_cfg.address_space.value <= 8'h0;
+ end else begin
+ if(field_combo.chip_4.address_cfg.address_space.load_next) begin
+ field_storage.chip_4.address_cfg.address_space.value <= field_combo.chip_4.address_cfg.address_space.next;
+ end
+ end
+ end
+ assign hwif_out.chip_4.address_cfg.address_space.value = field_storage.chip_4.address_cfg.address_space.value;
+ // Field: hyperbus_cfg_regs.chip_4.address_cfg.address_mask_msb
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_4.address_cfg.address_mask_msb.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_4.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_4.address_cfg.address_mask_msb.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
+ load_next_c = '1;
+ end
+ field_combo.chip_4.address_cfg.address_mask_msb.next = next_c;
+ field_combo.chip_4.address_cfg.address_mask_msb.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_4.address_cfg.address_mask_msb.value <= 8'h19;
+ end else begin
+ if(field_combo.chip_4.address_cfg.address_mask_msb.load_next) begin
+ field_storage.chip_4.address_cfg.address_mask_msb.value <= field_combo.chip_4.address_cfg.address_mask_msb.next;
+ end
+ end
+ end
+ assign hwif_out.chip_4.address_cfg.address_mask_msb.value = field_storage.chip_4.address_cfg.address_mask_msb.value;
+ // Field: hyperbus_cfg_regs.chip_4.address_cfg.enable
+ always_comb begin
+ automatic logic [0:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_4.address_cfg.enable.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_4.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_4.address_cfg.enable.value & ~decoded_wr_biten[16:16]) | (decoded_wr_data[16:16] & decoded_wr_biten[16:16]);
+ load_next_c = '1;
+ end
+ field_combo.chip_4.address_cfg.enable.next = next_c;
+ field_combo.chip_4.address_cfg.enable.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_4.address_cfg.enable.value <= 1'h1;
+ end else begin
+ if(field_combo.chip_4.address_cfg.enable.load_next) begin
+ field_storage.chip_4.address_cfg.enable.value <= field_combo.chip_4.address_cfg.enable.next;
+ end
+ end
+ end
+ assign hwif_out.chip_4.address_cfg.enable.value = field_storage.chip_4.address_cfg.enable.value;
+ // Field: hyperbus_cfg_regs.chip_4.latency_cfg.t_latency_access
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_4.latency_cfg.t_latency_access.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_4.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_4.latency_cfg.t_latency_access.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_4.latency_cfg.t_latency_access.next = next_c;
+ field_combo.chip_4.latency_cfg.t_latency_access.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_4.latency_cfg.t_latency_access.value <= 8'h6;
+ end else begin
+ if(field_combo.chip_4.latency_cfg.t_latency_access.load_next) begin
+ field_storage.chip_4.latency_cfg.t_latency_access.value <= field_combo.chip_4.latency_cfg.t_latency_access.next;
+ end
+ end
+ end
+ assign hwif_out.chip_4.latency_cfg.t_latency_access.value = field_storage.chip_4.latency_cfg.t_latency_access.value;
+ // Field: hyperbus_cfg_regs.chip_4.latency_cfg.rwds_sample_delay
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_4.latency_cfg.rwds_sample_delay.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_4.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_4.latency_cfg.rwds_sample_delay.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
+ load_next_c = '1;
+ end
+ field_combo.chip_4.latency_cfg.rwds_sample_delay.next = next_c;
+ field_combo.chip_4.latency_cfg.rwds_sample_delay.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_4.latency_cfg.rwds_sample_delay.value <= 8'h0;
+ end else begin
+ if(field_combo.chip_4.latency_cfg.rwds_sample_delay.load_next) begin
+ field_storage.chip_4.latency_cfg.rwds_sample_delay.value <= field_combo.chip_4.latency_cfg.rwds_sample_delay.next;
+ end
+ end
+ end
+ assign hwif_out.chip_4.latency_cfg.rwds_sample_delay.value = field_storage.chip_4.latency_cfg.rwds_sample_delay.value;
+ // Field: hyperbus_cfg_regs.chip_4.latency_cfg.en_latency_additional
+ always_comb begin
+ automatic logic [0:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_4.latency_cfg.en_latency_additional.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_4.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_4.latency_cfg.en_latency_additional.value & ~decoded_wr_biten[16:16]) | (decoded_wr_data[16:16] & decoded_wr_biten[16:16]);
+ load_next_c = '1;
+ end
+ field_combo.chip_4.latency_cfg.en_latency_additional.next = next_c;
+ field_combo.chip_4.latency_cfg.en_latency_additional.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_4.latency_cfg.en_latency_additional.value <= 1'h0;
+ end else begin
+ if(field_combo.chip_4.latency_cfg.en_latency_additional.load_next) begin
+ field_storage.chip_4.latency_cfg.en_latency_additional.value <= field_combo.chip_4.latency_cfg.en_latency_additional.next;
+ end
+ end
+ end
+ assign hwif_out.chip_4.latency_cfg.en_latency_additional.value = field_storage.chip_4.latency_cfg.en_latency_additional.value;
+ // Field: hyperbus_cfg_regs.chip_4.burst_cfg.t_burst_max
+ always_comb begin
+ automatic logic [15:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_4.burst_cfg.t_burst_max.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_4.burst_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_4.burst_cfg.t_burst_max.value & ~decoded_wr_biten[15:0]) | (decoded_wr_data[15:0] & decoded_wr_biten[15:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_4.burst_cfg.t_burst_max.next = next_c;
+ field_combo.chip_4.burst_cfg.t_burst_max.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_4.burst_cfg.t_burst_max.value <= 16'h15e;
+ end else begin
+ if(field_combo.chip_4.burst_cfg.t_burst_max.load_next) begin
+ field_storage.chip_4.burst_cfg.t_burst_max.value <= field_combo.chip_4.burst_cfg.t_burst_max.next;
+ end
+ end
+ end
+ assign hwif_out.chip_4.burst_cfg.t_burst_max.value = field_storage.chip_4.burst_cfg.t_burst_max.value;
+ // Field: hyperbus_cfg_regs.chip_4.chip_timing.t_read_write_recovery
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_4.chip_timing.t_read_write_recovery.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_4.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_4.chip_timing.t_read_write_recovery.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_4.chip_timing.t_read_write_recovery.next = next_c;
+ field_combo.chip_4.chip_timing.t_read_write_recovery.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_4.chip_timing.t_read_write_recovery.value <= 8'h6;
+ end else begin
+ if(field_combo.chip_4.chip_timing.t_read_write_recovery.load_next) begin
+ field_storage.chip_4.chip_timing.t_read_write_recovery.value <= field_combo.chip_4.chip_timing.t_read_write_recovery.next;
+ end
+ end
+ end
+ assign hwif_out.chip_4.chip_timing.t_read_write_recovery.value = field_storage.chip_4.chip_timing.t_read_write_recovery.value;
+ // Field: hyperbus_cfg_regs.chip_4.chip_timing.t_csh_cycles
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_4.chip_timing.t_csh_cycles.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_4.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_4.chip_timing.t_csh_cycles.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
+ load_next_c = '1;
+ end
+ field_combo.chip_4.chip_timing.t_csh_cycles.next = next_c;
+ field_combo.chip_4.chip_timing.t_csh_cycles.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_4.chip_timing.t_csh_cycles.value <= 8'h1;
+ end else begin
+ if(field_combo.chip_4.chip_timing.t_csh_cycles.load_next) begin
+ field_storage.chip_4.chip_timing.t_csh_cycles.value <= field_combo.chip_4.chip_timing.t_csh_cycles.next;
+ end
+ end
+ end
+ assign hwif_out.chip_4.chip_timing.t_csh_cycles.value = field_storage.chip_4.chip_timing.t_csh_cycles.value;
+ // Field: hyperbus_cfg_regs.chip_4.chip_timing.csn_to_ck_cycles
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_4.chip_timing.csn_to_ck_cycles.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_4.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_4.chip_timing.csn_to_ck_cycles.value & ~decoded_wr_biten[23:16]) | (decoded_wr_data[23:16] & decoded_wr_biten[23:16]);
+ load_next_c = '1;
+ end
+ field_combo.chip_4.chip_timing.csn_to_ck_cycles.next = next_c;
+ field_combo.chip_4.chip_timing.csn_to_ck_cycles.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_4.chip_timing.csn_to_ck_cycles.value <= 8'h0;
+ end else begin
+ if(field_combo.chip_4.chip_timing.csn_to_ck_cycles.load_next) begin
+ field_storage.chip_4.chip_timing.csn_to_ck_cycles.value <= field_combo.chip_4.chip_timing.csn_to_ck_cycles.next;
+ end
+ end
+ end
+ assign hwif_out.chip_4.chip_timing.csn_to_ck_cycles.value = field_storage.chip_4.chip_timing.csn_to_ck_cycles.value;
+ // Field: hyperbus_cfg_regs.chip_4.rx_delay.value
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_4.rx_delay.value.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_4.rx_delay && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_4.rx_delay.value.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_4.rx_delay.value.next = next_c;
+ field_combo.chip_4.rx_delay.value.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_4.rx_delay.value.value <= 8'h10;
+ end else begin
+ if(field_combo.chip_4.rx_delay.value.load_next) begin
+ field_storage.chip_4.rx_delay.value.value <= field_combo.chip_4.rx_delay.value.next;
+ end
+ end
+ end
+ assign hwif_out.chip_4.rx_delay.value.value = field_storage.chip_4.rx_delay.value.value;
+ // Field: hyperbus_cfg_regs.chip_5.range_base.value
+ always_comb begin
+ automatic logic [9:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_5.range_base.value.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_5.range_base && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_5.range_base.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ load_next_c = '1;
+ end
+ field_combo.chip_5.range_base.value.next = next_c;
+ field_combo.chip_5.range_base.value.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_5.range_base.value.value <= 10'h5;
+ end else begin
+ if(field_combo.chip_5.range_base.value.load_next) begin
+ field_storage.chip_5.range_base.value.value <= field_combo.chip_5.range_base.value.next;
+ end
+ end
+ end
+ assign hwif_out.chip_5.range_base.value.value = field_storage.chip_5.range_base.value.value;
+ // Field: hyperbus_cfg_regs.chip_5.range_bound.value
+ always_comb begin
+ automatic logic [9:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_5.range_bound.value.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_5.range_bound && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_5.range_bound.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ load_next_c = '1;
+ end
+ field_combo.chip_5.range_bound.value.next = next_c;
+ field_combo.chip_5.range_bound.value.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_5.range_bound.value.value <= 10'h6;
+ end else begin
+ if(field_combo.chip_5.range_bound.value.load_next) begin
+ field_storage.chip_5.range_bound.value.value <= field_combo.chip_5.range_bound.value.next;
+ end
+ end
+ end
+ assign hwif_out.chip_5.range_bound.value.value = field_storage.chip_5.range_bound.value.value;
+ // Field: hyperbus_cfg_regs.chip_5.address_cfg.address_space
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_5.address_cfg.address_space.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_5.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_5.address_cfg.address_space.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_5.address_cfg.address_space.next = next_c;
+ field_combo.chip_5.address_cfg.address_space.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_5.address_cfg.address_space.value <= 8'h0;
+ end else begin
+ if(field_combo.chip_5.address_cfg.address_space.load_next) begin
+ field_storage.chip_5.address_cfg.address_space.value <= field_combo.chip_5.address_cfg.address_space.next;
+ end
+ end
+ end
+ assign hwif_out.chip_5.address_cfg.address_space.value = field_storage.chip_5.address_cfg.address_space.value;
+ // Field: hyperbus_cfg_regs.chip_5.address_cfg.address_mask_msb
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_5.address_cfg.address_mask_msb.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_5.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_5.address_cfg.address_mask_msb.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
+ load_next_c = '1;
+ end
+ field_combo.chip_5.address_cfg.address_mask_msb.next = next_c;
+ field_combo.chip_5.address_cfg.address_mask_msb.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_5.address_cfg.address_mask_msb.value <= 8'h19;
+ end else begin
+ if(field_combo.chip_5.address_cfg.address_mask_msb.load_next) begin
+ field_storage.chip_5.address_cfg.address_mask_msb.value <= field_combo.chip_5.address_cfg.address_mask_msb.next;
+ end
+ end
+ end
+ assign hwif_out.chip_5.address_cfg.address_mask_msb.value = field_storage.chip_5.address_cfg.address_mask_msb.value;
+ // Field: hyperbus_cfg_regs.chip_5.address_cfg.enable
+ always_comb begin
+ automatic logic [0:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_5.address_cfg.enable.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_5.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_5.address_cfg.enable.value & ~decoded_wr_biten[16:16]) | (decoded_wr_data[16:16] & decoded_wr_biten[16:16]);
+ load_next_c = '1;
+ end
+ field_combo.chip_5.address_cfg.enable.next = next_c;
+ field_combo.chip_5.address_cfg.enable.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_5.address_cfg.enable.value <= 1'h1;
+ end else begin
+ if(field_combo.chip_5.address_cfg.enable.load_next) begin
+ field_storage.chip_5.address_cfg.enable.value <= field_combo.chip_5.address_cfg.enable.next;
+ end
+ end
+ end
+ assign hwif_out.chip_5.address_cfg.enable.value = field_storage.chip_5.address_cfg.enable.value;
+ // Field: hyperbus_cfg_regs.chip_5.latency_cfg.t_latency_access
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_5.latency_cfg.t_latency_access.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_5.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_5.latency_cfg.t_latency_access.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_5.latency_cfg.t_latency_access.next = next_c;
+ field_combo.chip_5.latency_cfg.t_latency_access.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_5.latency_cfg.t_latency_access.value <= 8'h6;
+ end else begin
+ if(field_combo.chip_5.latency_cfg.t_latency_access.load_next) begin
+ field_storage.chip_5.latency_cfg.t_latency_access.value <= field_combo.chip_5.latency_cfg.t_latency_access.next;
+ end
+ end
+ end
+ assign hwif_out.chip_5.latency_cfg.t_latency_access.value = field_storage.chip_5.latency_cfg.t_latency_access.value;
+ // Field: hyperbus_cfg_regs.chip_5.latency_cfg.rwds_sample_delay
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_5.latency_cfg.rwds_sample_delay.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_5.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_5.latency_cfg.rwds_sample_delay.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
+ load_next_c = '1;
+ end
+ field_combo.chip_5.latency_cfg.rwds_sample_delay.next = next_c;
+ field_combo.chip_5.latency_cfg.rwds_sample_delay.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_5.latency_cfg.rwds_sample_delay.value <= 8'h0;
+ end else begin
+ if(field_combo.chip_5.latency_cfg.rwds_sample_delay.load_next) begin
+ field_storage.chip_5.latency_cfg.rwds_sample_delay.value <= field_combo.chip_5.latency_cfg.rwds_sample_delay.next;
+ end
+ end
+ end
+ assign hwif_out.chip_5.latency_cfg.rwds_sample_delay.value = field_storage.chip_5.latency_cfg.rwds_sample_delay.value;
+ // Field: hyperbus_cfg_regs.chip_5.latency_cfg.en_latency_additional
+ always_comb begin
+ automatic logic [0:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_5.latency_cfg.en_latency_additional.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_5.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_5.latency_cfg.en_latency_additional.value & ~decoded_wr_biten[16:16]) | (decoded_wr_data[16:16] & decoded_wr_biten[16:16]);
+ load_next_c = '1;
+ end
+ field_combo.chip_5.latency_cfg.en_latency_additional.next = next_c;
+ field_combo.chip_5.latency_cfg.en_latency_additional.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_5.latency_cfg.en_latency_additional.value <= 1'h0;
+ end else begin
+ if(field_combo.chip_5.latency_cfg.en_latency_additional.load_next) begin
+ field_storage.chip_5.latency_cfg.en_latency_additional.value <= field_combo.chip_5.latency_cfg.en_latency_additional.next;
+ end
+ end
+ end
+ assign hwif_out.chip_5.latency_cfg.en_latency_additional.value = field_storage.chip_5.latency_cfg.en_latency_additional.value;
+ // Field: hyperbus_cfg_regs.chip_5.burst_cfg.t_burst_max
+ always_comb begin
+ automatic logic [15:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_5.burst_cfg.t_burst_max.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_5.burst_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_5.burst_cfg.t_burst_max.value & ~decoded_wr_biten[15:0]) | (decoded_wr_data[15:0] & decoded_wr_biten[15:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_5.burst_cfg.t_burst_max.next = next_c;
+ field_combo.chip_5.burst_cfg.t_burst_max.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_5.burst_cfg.t_burst_max.value <= 16'h15e;
+ end else begin
+ if(field_combo.chip_5.burst_cfg.t_burst_max.load_next) begin
+ field_storage.chip_5.burst_cfg.t_burst_max.value <= field_combo.chip_5.burst_cfg.t_burst_max.next;
+ end
+ end
+ end
+ assign hwif_out.chip_5.burst_cfg.t_burst_max.value = field_storage.chip_5.burst_cfg.t_burst_max.value;
+ // Field: hyperbus_cfg_regs.chip_5.chip_timing.t_read_write_recovery
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_5.chip_timing.t_read_write_recovery.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_5.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_5.chip_timing.t_read_write_recovery.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_5.chip_timing.t_read_write_recovery.next = next_c;
+ field_combo.chip_5.chip_timing.t_read_write_recovery.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_5.chip_timing.t_read_write_recovery.value <= 8'h6;
+ end else begin
+ if(field_combo.chip_5.chip_timing.t_read_write_recovery.load_next) begin
+ field_storage.chip_5.chip_timing.t_read_write_recovery.value <= field_combo.chip_5.chip_timing.t_read_write_recovery.next;
+ end
+ end
+ end
+ assign hwif_out.chip_5.chip_timing.t_read_write_recovery.value = field_storage.chip_5.chip_timing.t_read_write_recovery.value;
+ // Field: hyperbus_cfg_regs.chip_5.chip_timing.t_csh_cycles
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_5.chip_timing.t_csh_cycles.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_5.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_5.chip_timing.t_csh_cycles.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
+ load_next_c = '1;
+ end
+ field_combo.chip_5.chip_timing.t_csh_cycles.next = next_c;
+ field_combo.chip_5.chip_timing.t_csh_cycles.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_5.chip_timing.t_csh_cycles.value <= 8'h1;
+ end else begin
+ if(field_combo.chip_5.chip_timing.t_csh_cycles.load_next) begin
+ field_storage.chip_5.chip_timing.t_csh_cycles.value <= field_combo.chip_5.chip_timing.t_csh_cycles.next;
+ end
+ end
+ end
+ assign hwif_out.chip_5.chip_timing.t_csh_cycles.value = field_storage.chip_5.chip_timing.t_csh_cycles.value;
+ // Field: hyperbus_cfg_regs.chip_5.chip_timing.csn_to_ck_cycles
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_5.chip_timing.csn_to_ck_cycles.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_5.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_5.chip_timing.csn_to_ck_cycles.value & ~decoded_wr_biten[23:16]) | (decoded_wr_data[23:16] & decoded_wr_biten[23:16]);
+ load_next_c = '1;
+ end
+ field_combo.chip_5.chip_timing.csn_to_ck_cycles.next = next_c;
+ field_combo.chip_5.chip_timing.csn_to_ck_cycles.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_5.chip_timing.csn_to_ck_cycles.value <= 8'h0;
+ end else begin
+ if(field_combo.chip_5.chip_timing.csn_to_ck_cycles.load_next) begin
+ field_storage.chip_5.chip_timing.csn_to_ck_cycles.value <= field_combo.chip_5.chip_timing.csn_to_ck_cycles.next;
+ end
+ end
+ end
+ assign hwif_out.chip_5.chip_timing.csn_to_ck_cycles.value = field_storage.chip_5.chip_timing.csn_to_ck_cycles.value;
+ // Field: hyperbus_cfg_regs.chip_5.rx_delay.value
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_5.rx_delay.value.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_5.rx_delay && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_5.rx_delay.value.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_5.rx_delay.value.next = next_c;
+ field_combo.chip_5.rx_delay.value.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_5.rx_delay.value.value <= 8'h10;
+ end else begin
+ if(field_combo.chip_5.rx_delay.value.load_next) begin
+ field_storage.chip_5.rx_delay.value.value <= field_combo.chip_5.rx_delay.value.next;
+ end
+ end
+ end
+ assign hwif_out.chip_5.rx_delay.value.value = field_storage.chip_5.rx_delay.value.value;
+ // Field: hyperbus_cfg_regs.chip_6.range_base.value
+ always_comb begin
+ automatic logic [9:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_6.range_base.value.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_6.range_base && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_6.range_base.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ load_next_c = '1;
+ end
+ field_combo.chip_6.range_base.value.next = next_c;
+ field_combo.chip_6.range_base.value.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_6.range_base.value.value <= 10'h6;
+ end else begin
+ if(field_combo.chip_6.range_base.value.load_next) begin
+ field_storage.chip_6.range_base.value.value <= field_combo.chip_6.range_base.value.next;
+ end
+ end
+ end
+ assign hwif_out.chip_6.range_base.value.value = field_storage.chip_6.range_base.value.value;
+ // Field: hyperbus_cfg_regs.chip_6.range_bound.value
+ always_comb begin
+ automatic logic [9:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_6.range_bound.value.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_6.range_bound && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_6.range_bound.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ load_next_c = '1;
+ end
+ field_combo.chip_6.range_bound.value.next = next_c;
+ field_combo.chip_6.range_bound.value.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_6.range_bound.value.value <= 10'h7;
+ end else begin
+ if(field_combo.chip_6.range_bound.value.load_next) begin
+ field_storage.chip_6.range_bound.value.value <= field_combo.chip_6.range_bound.value.next;
+ end
+ end
+ end
+ assign hwif_out.chip_6.range_bound.value.value = field_storage.chip_6.range_bound.value.value;
+ // Field: hyperbus_cfg_regs.chip_6.address_cfg.address_space
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_6.address_cfg.address_space.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_6.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_6.address_cfg.address_space.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_6.address_cfg.address_space.next = next_c;
+ field_combo.chip_6.address_cfg.address_space.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_6.address_cfg.address_space.value <= 8'h0;
+ end else begin
+ if(field_combo.chip_6.address_cfg.address_space.load_next) begin
+ field_storage.chip_6.address_cfg.address_space.value <= field_combo.chip_6.address_cfg.address_space.next;
+ end
+ end
+ end
+ assign hwif_out.chip_6.address_cfg.address_space.value = field_storage.chip_6.address_cfg.address_space.value;
+ // Field: hyperbus_cfg_regs.chip_6.address_cfg.address_mask_msb
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_6.address_cfg.address_mask_msb.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_6.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_6.address_cfg.address_mask_msb.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
+ load_next_c = '1;
+ end
+ field_combo.chip_6.address_cfg.address_mask_msb.next = next_c;
+ field_combo.chip_6.address_cfg.address_mask_msb.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_6.address_cfg.address_mask_msb.value <= 8'h19;
+ end else begin
+ if(field_combo.chip_6.address_cfg.address_mask_msb.load_next) begin
+ field_storage.chip_6.address_cfg.address_mask_msb.value <= field_combo.chip_6.address_cfg.address_mask_msb.next;
+ end
+ end
+ end
+ assign hwif_out.chip_6.address_cfg.address_mask_msb.value = field_storage.chip_6.address_cfg.address_mask_msb.value;
+ // Field: hyperbus_cfg_regs.chip_6.address_cfg.enable
+ always_comb begin
+ automatic logic [0:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_6.address_cfg.enable.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_6.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_6.address_cfg.enable.value & ~decoded_wr_biten[16:16]) | (decoded_wr_data[16:16] & decoded_wr_biten[16:16]);
+ load_next_c = '1;
+ end
+ field_combo.chip_6.address_cfg.enable.next = next_c;
+ field_combo.chip_6.address_cfg.enable.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_6.address_cfg.enable.value <= 1'h1;
+ end else begin
+ if(field_combo.chip_6.address_cfg.enable.load_next) begin
+ field_storage.chip_6.address_cfg.enable.value <= field_combo.chip_6.address_cfg.enable.next;
+ end
+ end
+ end
+ assign hwif_out.chip_6.address_cfg.enable.value = field_storage.chip_6.address_cfg.enable.value;
+ // Field: hyperbus_cfg_regs.chip_6.latency_cfg.t_latency_access
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_6.latency_cfg.t_latency_access.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_6.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_6.latency_cfg.t_latency_access.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_6.latency_cfg.t_latency_access.next = next_c;
+ field_combo.chip_6.latency_cfg.t_latency_access.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_6.latency_cfg.t_latency_access.value <= 8'h6;
+ end else begin
+ if(field_combo.chip_6.latency_cfg.t_latency_access.load_next) begin
+ field_storage.chip_6.latency_cfg.t_latency_access.value <= field_combo.chip_6.latency_cfg.t_latency_access.next;
+ end
+ end
+ end
+ assign hwif_out.chip_6.latency_cfg.t_latency_access.value = field_storage.chip_6.latency_cfg.t_latency_access.value;
+ // Field: hyperbus_cfg_regs.chip_6.latency_cfg.rwds_sample_delay
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_6.latency_cfg.rwds_sample_delay.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_6.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_6.latency_cfg.rwds_sample_delay.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
+ load_next_c = '1;
+ end
+ field_combo.chip_6.latency_cfg.rwds_sample_delay.next = next_c;
+ field_combo.chip_6.latency_cfg.rwds_sample_delay.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_6.latency_cfg.rwds_sample_delay.value <= 8'h0;
+ end else begin
+ if(field_combo.chip_6.latency_cfg.rwds_sample_delay.load_next) begin
+ field_storage.chip_6.latency_cfg.rwds_sample_delay.value <= field_combo.chip_6.latency_cfg.rwds_sample_delay.next;
+ end
+ end
+ end
+ assign hwif_out.chip_6.latency_cfg.rwds_sample_delay.value = field_storage.chip_6.latency_cfg.rwds_sample_delay.value;
+ // Field: hyperbus_cfg_regs.chip_6.latency_cfg.en_latency_additional
+ always_comb begin
+ automatic logic [0:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_6.latency_cfg.en_latency_additional.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_6.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_6.latency_cfg.en_latency_additional.value & ~decoded_wr_biten[16:16]) | (decoded_wr_data[16:16] & decoded_wr_biten[16:16]);
+ load_next_c = '1;
+ end
+ field_combo.chip_6.latency_cfg.en_latency_additional.next = next_c;
+ field_combo.chip_6.latency_cfg.en_latency_additional.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_6.latency_cfg.en_latency_additional.value <= 1'h0;
+ end else begin
+ if(field_combo.chip_6.latency_cfg.en_latency_additional.load_next) begin
+ field_storage.chip_6.latency_cfg.en_latency_additional.value <= field_combo.chip_6.latency_cfg.en_latency_additional.next;
+ end
+ end
+ end
+ assign hwif_out.chip_6.latency_cfg.en_latency_additional.value = field_storage.chip_6.latency_cfg.en_latency_additional.value;
+ // Field: hyperbus_cfg_regs.chip_6.burst_cfg.t_burst_max
+ always_comb begin
+ automatic logic [15:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_6.burst_cfg.t_burst_max.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_6.burst_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_6.burst_cfg.t_burst_max.value & ~decoded_wr_biten[15:0]) | (decoded_wr_data[15:0] & decoded_wr_biten[15:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_6.burst_cfg.t_burst_max.next = next_c;
+ field_combo.chip_6.burst_cfg.t_burst_max.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_6.burst_cfg.t_burst_max.value <= 16'h15e;
+ end else begin
+ if(field_combo.chip_6.burst_cfg.t_burst_max.load_next) begin
+ field_storage.chip_6.burst_cfg.t_burst_max.value <= field_combo.chip_6.burst_cfg.t_burst_max.next;
+ end
+ end
+ end
+ assign hwif_out.chip_6.burst_cfg.t_burst_max.value = field_storage.chip_6.burst_cfg.t_burst_max.value;
+ // Field: hyperbus_cfg_regs.chip_6.chip_timing.t_read_write_recovery
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_6.chip_timing.t_read_write_recovery.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_6.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_6.chip_timing.t_read_write_recovery.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_6.chip_timing.t_read_write_recovery.next = next_c;
+ field_combo.chip_6.chip_timing.t_read_write_recovery.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_6.chip_timing.t_read_write_recovery.value <= 8'h6;
+ end else begin
+ if(field_combo.chip_6.chip_timing.t_read_write_recovery.load_next) begin
+ field_storage.chip_6.chip_timing.t_read_write_recovery.value <= field_combo.chip_6.chip_timing.t_read_write_recovery.next;
+ end
+ end
+ end
+ assign hwif_out.chip_6.chip_timing.t_read_write_recovery.value = field_storage.chip_6.chip_timing.t_read_write_recovery.value;
+ // Field: hyperbus_cfg_regs.chip_6.chip_timing.t_csh_cycles
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_6.chip_timing.t_csh_cycles.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_6.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_6.chip_timing.t_csh_cycles.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
+ load_next_c = '1;
+ end
+ field_combo.chip_6.chip_timing.t_csh_cycles.next = next_c;
+ field_combo.chip_6.chip_timing.t_csh_cycles.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_6.chip_timing.t_csh_cycles.value <= 8'h1;
+ end else begin
+ if(field_combo.chip_6.chip_timing.t_csh_cycles.load_next) begin
+ field_storage.chip_6.chip_timing.t_csh_cycles.value <= field_combo.chip_6.chip_timing.t_csh_cycles.next;
+ end
+ end
+ end
+ assign hwif_out.chip_6.chip_timing.t_csh_cycles.value = field_storage.chip_6.chip_timing.t_csh_cycles.value;
+ // Field: hyperbus_cfg_regs.chip_6.chip_timing.csn_to_ck_cycles
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_6.chip_timing.csn_to_ck_cycles.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_6.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_6.chip_timing.csn_to_ck_cycles.value & ~decoded_wr_biten[23:16]) | (decoded_wr_data[23:16] & decoded_wr_biten[23:16]);
+ load_next_c = '1;
+ end
+ field_combo.chip_6.chip_timing.csn_to_ck_cycles.next = next_c;
+ field_combo.chip_6.chip_timing.csn_to_ck_cycles.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_6.chip_timing.csn_to_ck_cycles.value <= 8'h0;
+ end else begin
+ if(field_combo.chip_6.chip_timing.csn_to_ck_cycles.load_next) begin
+ field_storage.chip_6.chip_timing.csn_to_ck_cycles.value <= field_combo.chip_6.chip_timing.csn_to_ck_cycles.next;
+ end
+ end
+ end
+ assign hwif_out.chip_6.chip_timing.csn_to_ck_cycles.value = field_storage.chip_6.chip_timing.csn_to_ck_cycles.value;
+ // Field: hyperbus_cfg_regs.chip_6.rx_delay.value
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_6.rx_delay.value.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_6.rx_delay && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_6.rx_delay.value.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_6.rx_delay.value.next = next_c;
+ field_combo.chip_6.rx_delay.value.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_6.rx_delay.value.value <= 8'h10;
+ end else begin
+ if(field_combo.chip_6.rx_delay.value.load_next) begin
+ field_storage.chip_6.rx_delay.value.value <= field_combo.chip_6.rx_delay.value.next;
+ end
+ end
+ end
+ assign hwif_out.chip_6.rx_delay.value.value = field_storage.chip_6.rx_delay.value.value;
+ // Field: hyperbus_cfg_regs.chip_7.range_base.value
+ always_comb begin
+ automatic logic [9:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_7.range_base.value.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_7.range_base && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_7.range_base.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ load_next_c = '1;
+ end
+ field_combo.chip_7.range_base.value.next = next_c;
+ field_combo.chip_7.range_base.value.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_7.range_base.value.value <= 10'h7;
+ end else begin
+ if(field_combo.chip_7.range_base.value.load_next) begin
+ field_storage.chip_7.range_base.value.value <= field_combo.chip_7.range_base.value.next;
+ end
+ end
+ end
+ assign hwif_out.chip_7.range_base.value.value = field_storage.chip_7.range_base.value.value;
+ // Field: hyperbus_cfg_regs.chip_7.range_bound.value
+ always_comb begin
+ automatic logic [9:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_7.range_bound.value.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_7.range_bound && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_7.range_bound.value.value & ~decoded_wr_biten[31:22]) | (decoded_wr_data[31:22] & decoded_wr_biten[31:22]);
+ load_next_c = '1;
+ end
+ field_combo.chip_7.range_bound.value.next = next_c;
+ field_combo.chip_7.range_bound.value.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_7.range_bound.value.value <= 10'h8;
+ end else begin
+ if(field_combo.chip_7.range_bound.value.load_next) begin
+ field_storage.chip_7.range_bound.value.value <= field_combo.chip_7.range_bound.value.next;
+ end
+ end
+ end
+ assign hwif_out.chip_7.range_bound.value.value = field_storage.chip_7.range_bound.value.value;
+ // Field: hyperbus_cfg_regs.chip_7.address_cfg.address_space
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_7.address_cfg.address_space.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_7.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_7.address_cfg.address_space.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_7.address_cfg.address_space.next = next_c;
+ field_combo.chip_7.address_cfg.address_space.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_7.address_cfg.address_space.value <= 8'h0;
+ end else begin
+ if(field_combo.chip_7.address_cfg.address_space.load_next) begin
+ field_storage.chip_7.address_cfg.address_space.value <= field_combo.chip_7.address_cfg.address_space.next;
+ end
+ end
+ end
+ assign hwif_out.chip_7.address_cfg.address_space.value = field_storage.chip_7.address_cfg.address_space.value;
+ // Field: hyperbus_cfg_regs.chip_7.address_cfg.address_mask_msb
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_7.address_cfg.address_mask_msb.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_7.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_7.address_cfg.address_mask_msb.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
+ load_next_c = '1;
+ end
+ field_combo.chip_7.address_cfg.address_mask_msb.next = next_c;
+ field_combo.chip_7.address_cfg.address_mask_msb.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_7.address_cfg.address_mask_msb.value <= 8'h19;
+ end else begin
+ if(field_combo.chip_7.address_cfg.address_mask_msb.load_next) begin
+ field_storage.chip_7.address_cfg.address_mask_msb.value <= field_combo.chip_7.address_cfg.address_mask_msb.next;
+ end
+ end
+ end
+ assign hwif_out.chip_7.address_cfg.address_mask_msb.value = field_storage.chip_7.address_cfg.address_mask_msb.value;
+ // Field: hyperbus_cfg_regs.chip_7.address_cfg.enable
+ always_comb begin
+ automatic logic [0:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_7.address_cfg.enable.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_7.address_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_7.address_cfg.enable.value & ~decoded_wr_biten[16:16]) | (decoded_wr_data[16:16] & decoded_wr_biten[16:16]);
+ load_next_c = '1;
+ end
+ field_combo.chip_7.address_cfg.enable.next = next_c;
+ field_combo.chip_7.address_cfg.enable.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_7.address_cfg.enable.value <= 1'h1;
+ end else begin
+ if(field_combo.chip_7.address_cfg.enable.load_next) begin
+ field_storage.chip_7.address_cfg.enable.value <= field_combo.chip_7.address_cfg.enable.next;
+ end
+ end
+ end
+ assign hwif_out.chip_7.address_cfg.enable.value = field_storage.chip_7.address_cfg.enable.value;
+ // Field: hyperbus_cfg_regs.chip_7.latency_cfg.t_latency_access
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_7.latency_cfg.t_latency_access.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_7.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_7.latency_cfg.t_latency_access.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_7.latency_cfg.t_latency_access.next = next_c;
+ field_combo.chip_7.latency_cfg.t_latency_access.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_7.latency_cfg.t_latency_access.value <= 8'h6;
+ end else begin
+ if(field_combo.chip_7.latency_cfg.t_latency_access.load_next) begin
+ field_storage.chip_7.latency_cfg.t_latency_access.value <= field_combo.chip_7.latency_cfg.t_latency_access.next;
+ end
+ end
+ end
+ assign hwif_out.chip_7.latency_cfg.t_latency_access.value = field_storage.chip_7.latency_cfg.t_latency_access.value;
+ // Field: hyperbus_cfg_regs.chip_7.latency_cfg.rwds_sample_delay
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_7.latency_cfg.rwds_sample_delay.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_7.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_7.latency_cfg.rwds_sample_delay.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
+ load_next_c = '1;
+ end
+ field_combo.chip_7.latency_cfg.rwds_sample_delay.next = next_c;
+ field_combo.chip_7.latency_cfg.rwds_sample_delay.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_7.latency_cfg.rwds_sample_delay.value <= 8'h0;
+ end else begin
+ if(field_combo.chip_7.latency_cfg.rwds_sample_delay.load_next) begin
+ field_storage.chip_7.latency_cfg.rwds_sample_delay.value <= field_combo.chip_7.latency_cfg.rwds_sample_delay.next;
+ end
+ end
+ end
+ assign hwif_out.chip_7.latency_cfg.rwds_sample_delay.value = field_storage.chip_7.latency_cfg.rwds_sample_delay.value;
+ // Field: hyperbus_cfg_regs.chip_7.latency_cfg.en_latency_additional
+ always_comb begin
+ automatic logic [0:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_7.latency_cfg.en_latency_additional.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_7.latency_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_7.latency_cfg.en_latency_additional.value & ~decoded_wr_biten[16:16]) | (decoded_wr_data[16:16] & decoded_wr_biten[16:16]);
+ load_next_c = '1;
+ end
+ field_combo.chip_7.latency_cfg.en_latency_additional.next = next_c;
+ field_combo.chip_7.latency_cfg.en_latency_additional.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_7.latency_cfg.en_latency_additional.value <= 1'h0;
+ end else begin
+ if(field_combo.chip_7.latency_cfg.en_latency_additional.load_next) begin
+ field_storage.chip_7.latency_cfg.en_latency_additional.value <= field_combo.chip_7.latency_cfg.en_latency_additional.next;
+ end
+ end
+ end
+ assign hwif_out.chip_7.latency_cfg.en_latency_additional.value = field_storage.chip_7.latency_cfg.en_latency_additional.value;
+ // Field: hyperbus_cfg_regs.chip_7.burst_cfg.t_burst_max
+ always_comb begin
+ automatic logic [15:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_7.burst_cfg.t_burst_max.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_7.burst_cfg && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_7.burst_cfg.t_burst_max.value & ~decoded_wr_biten[15:0]) | (decoded_wr_data[15:0] & decoded_wr_biten[15:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_7.burst_cfg.t_burst_max.next = next_c;
+ field_combo.chip_7.burst_cfg.t_burst_max.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_7.burst_cfg.t_burst_max.value <= 16'h15e;
+ end else begin
+ if(field_combo.chip_7.burst_cfg.t_burst_max.load_next) begin
+ field_storage.chip_7.burst_cfg.t_burst_max.value <= field_combo.chip_7.burst_cfg.t_burst_max.next;
+ end
+ end
+ end
+ assign hwif_out.chip_7.burst_cfg.t_burst_max.value = field_storage.chip_7.burst_cfg.t_burst_max.value;
+ // Field: hyperbus_cfg_regs.chip_7.chip_timing.t_read_write_recovery
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_7.chip_timing.t_read_write_recovery.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_7.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_7.chip_timing.t_read_write_recovery.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_7.chip_timing.t_read_write_recovery.next = next_c;
+ field_combo.chip_7.chip_timing.t_read_write_recovery.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_7.chip_timing.t_read_write_recovery.value <= 8'h6;
+ end else begin
+ if(field_combo.chip_7.chip_timing.t_read_write_recovery.load_next) begin
+ field_storage.chip_7.chip_timing.t_read_write_recovery.value <= field_combo.chip_7.chip_timing.t_read_write_recovery.next;
+ end
+ end
+ end
+ assign hwif_out.chip_7.chip_timing.t_read_write_recovery.value = field_storage.chip_7.chip_timing.t_read_write_recovery.value;
+ // Field: hyperbus_cfg_regs.chip_7.chip_timing.t_csh_cycles
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_7.chip_timing.t_csh_cycles.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_7.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_7.chip_timing.t_csh_cycles.value & ~decoded_wr_biten[15:8]) | (decoded_wr_data[15:8] & decoded_wr_biten[15:8]);
+ load_next_c = '1;
+ end
+ field_combo.chip_7.chip_timing.t_csh_cycles.next = next_c;
+ field_combo.chip_7.chip_timing.t_csh_cycles.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_7.chip_timing.t_csh_cycles.value <= 8'h1;
+ end else begin
+ if(field_combo.chip_7.chip_timing.t_csh_cycles.load_next) begin
+ field_storage.chip_7.chip_timing.t_csh_cycles.value <= field_combo.chip_7.chip_timing.t_csh_cycles.next;
+ end
+ end
+ end
+ assign hwif_out.chip_7.chip_timing.t_csh_cycles.value = field_storage.chip_7.chip_timing.t_csh_cycles.value;
+ // Field: hyperbus_cfg_regs.chip_7.chip_timing.csn_to_ck_cycles
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_7.chip_timing.csn_to_ck_cycles.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_7.chip_timing && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_7.chip_timing.csn_to_ck_cycles.value & ~decoded_wr_biten[23:16]) | (decoded_wr_data[23:16] & decoded_wr_biten[23:16]);
+ load_next_c = '1;
+ end
+ field_combo.chip_7.chip_timing.csn_to_ck_cycles.next = next_c;
+ field_combo.chip_7.chip_timing.csn_to_ck_cycles.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_7.chip_timing.csn_to_ck_cycles.value <= 8'h0;
+ end else begin
+ if(field_combo.chip_7.chip_timing.csn_to_ck_cycles.load_next) begin
+ field_storage.chip_7.chip_timing.csn_to_ck_cycles.value <= field_combo.chip_7.chip_timing.csn_to_ck_cycles.next;
+ end
+ end
+ end
+ assign hwif_out.chip_7.chip_timing.csn_to_ck_cycles.value = field_storage.chip_7.chip_timing.csn_to_ck_cycles.value;
+ // Field: hyperbus_cfg_regs.chip_7.rx_delay.value
+ always_comb begin
+ automatic logic [7:0] next_c;
+ automatic logic load_next_c;
+ next_c = field_storage.chip_7.rx_delay.value.value;
+ load_next_c = '0;
+ if(decoded_reg_strb.chip_7.rx_delay && decoded_req_is_wr) begin // SW write
+ next_c = (field_storage.chip_7.rx_delay.value.value & ~decoded_wr_biten[7:0]) | (decoded_wr_data[7:0] & decoded_wr_biten[7:0]);
+ load_next_c = '1;
+ end
+ field_combo.chip_7.rx_delay.value.next = next_c;
+ field_combo.chip_7.rx_delay.value.load_next = load_next_c;
+ end
+ always_ff @(posedge clk or negedge arst_n) begin
+ if(~arst_n) begin
+ field_storage.chip_7.rx_delay.value.value <= 8'h10;
+ end else begin
+ if(field_combo.chip_7.rx_delay.value.load_next) begin
+ field_storage.chip_7.rx_delay.value.value <= field_combo.chip_7.rx_delay.value.next;
+ end
+ end
+ end
+ assign hwif_out.chip_7.rx_delay.value.value = field_storage.chip_7.rx_delay.value.value;
+ assign hwif_out.reserved_top.value.value = 32'h0;
+
+ //--------------------------------------------------------------------------
+ // Write response
+ //--------------------------------------------------------------------------
+ assign cpuif_wr_ack = decoded_req & decoded_req_is_wr;
+ // Writes are always granted with no error response
+ assign cpuif_wr_err = '0;
+
+ //--------------------------------------------------------------------------
+ // Readback
+ //--------------------------------------------------------------------------
+
+ logic [11:0] rd_mux_addr;
+ assign rd_mux_addr = decoded_addr;
+
+ logic readback_err;
+ logic readback_done;
+ logic [31:0] readback_data;
+ always_comb begin
+ automatic logic [31:0] readback_data_var;
+ readback_data_var = '0;
+ if(rd_mux_addr == 12'h0) begin
+ readback_data_var[7:0] = 8'h0;
+ readback_data_var[15:8] = 8'h9;
+ readback_data_var[23:16] = 8'h0;
+ readback_data_var[31:24] = 8'h0;
+ end
+ if(rd_mux_addr == 12'h4) begin
+ readback_data_var[15:0] = 16'h0;
+ readback_data_var[31:16] = 16'h1;
+ end
+ if(rd_mux_addr == 12'h8) begin
+ readback_data_var[7:0] = field_storage.global_cfg.capability.num_chips.value;
+ readback_data_var[15:8] = field_storage.global_cfg.capability.num_phys.value;
+ readback_data_var[16] = field_storage.global_cfg.capability.per_chip_cfg.value;
+ readback_data_var[17] = field_storage.global_cfg.capability.per_phy_cfg.value;
+ readback_data_var[18] = field_storage.global_cfg.capability.chip_enable.value;
+ readback_data_var[19] = field_storage.global_cfg.capability.clock_divider.value;
+ readback_data_var[20] = field_storage.global_cfg.capability.staged_apply.value;
+ readback_data_var[21] = field_storage.global_cfg.capability.error_status.value;
+ readback_data_var[22] = field_storage.global_cfg.capability.rwds_sample_timing.value;
+ readback_data_var[23] = field_storage.global_cfg.capability.rwds_oe_timing.value;
+ end
+ if(rd_mux_addr == 12'hc) begin
+ readback_data_var[0] = field_storage.global_cfg.command.flush.value;
+ readback_data_var[1] = field_storage.global_cfg.command.apply.value;
+ end
+ if(rd_mux_addr == 12'h10) begin
+ readback_data_var[0] = field_storage.global_cfg.status.decode_error.value;
+ readback_data_var[1] = field_storage.global_cfg.status.busy.value;
+ readback_data_var[2] = field_storage.global_cfg.status.dirty.value;
+ end
+ if(rd_mux_addr == 12'h100) begin
+ readback_data_var[0] = field_storage.frontend.frontend_cfg.dual_phy.value;
+ end
+ if(rd_mux_addr == 12'h200) begin
+ readback_data_var[7:0] = field_storage.backend.clock_cfg.divider.value;
+ end
+ if(rd_mux_addr == 12'h300) begin
+ readback_data_var[7:0] = field_storage.phy_0.tx_delay.value.value;
+ end
+ if(rd_mux_addr == 12'h304) begin
+ readback_data_var[7:0] = field_storage.phy_0.rwds_timing.rwds_oe_setup_cycles.value;
+ end
+ if(rd_mux_addr == 12'h340) begin
+ readback_data_var[7:0] = field_storage.phy_1.tx_delay.value.value;
+ end
+ if(rd_mux_addr == 12'h344) begin
+ readback_data_var[7:0] = field_storage.phy_1.rwds_timing.rwds_oe_setup_cycles.value;
+ end
+ if(rd_mux_addr == 12'h400) begin
+ readback_data_var[31:22] = field_storage.chip_0.range_base.value.value;
+ end
+ if(rd_mux_addr == 12'h404) begin
+ readback_data_var[31:22] = field_storage.chip_0.range_bound.value.value;
+ end
+ if(rd_mux_addr == 12'h408) begin
+ readback_data_var[7:0] = field_storage.chip_0.address_cfg.address_space.value;
+ readback_data_var[15:8] = field_storage.chip_0.address_cfg.address_mask_msb.value;
+ readback_data_var[16] = field_storage.chip_0.address_cfg.enable.value;
+ end
+ if(rd_mux_addr == 12'h40c) begin
+ readback_data_var[7:0] = field_storage.chip_0.latency_cfg.t_latency_access.value;
+ readback_data_var[15:8] = field_storage.chip_0.latency_cfg.rwds_sample_delay.value;
+ readback_data_var[16] = field_storage.chip_0.latency_cfg.en_latency_additional.value;
+ end
+ if(rd_mux_addr == 12'h410) begin
+ readback_data_var[15:0] = field_storage.chip_0.burst_cfg.t_burst_max.value;
+ end
+ if(rd_mux_addr == 12'h414) begin
+ readback_data_var[7:0] = field_storage.chip_0.chip_timing.t_read_write_recovery.value;
+ readback_data_var[15:8] = field_storage.chip_0.chip_timing.t_csh_cycles.value;
+ readback_data_var[23:16] = field_storage.chip_0.chip_timing.csn_to_ck_cycles.value;
+ end
+ if(rd_mux_addr == 12'h418) begin
+ readback_data_var[7:0] = field_storage.chip_0.rx_delay.value.value;
+ end
+ if(rd_mux_addr == 12'h440) begin
+ readback_data_var[31:22] = field_storage.chip_1.range_base.value.value;
+ end
+ if(rd_mux_addr == 12'h444) begin
+ readback_data_var[31:22] = field_storage.chip_1.range_bound.value.value;
+ end
+ if(rd_mux_addr == 12'h448) begin
+ readback_data_var[7:0] = field_storage.chip_1.address_cfg.address_space.value;
+ readback_data_var[15:8] = field_storage.chip_1.address_cfg.address_mask_msb.value;
+ readback_data_var[16] = field_storage.chip_1.address_cfg.enable.value;
+ end
+ if(rd_mux_addr == 12'h44c) begin
+ readback_data_var[7:0] = field_storage.chip_1.latency_cfg.t_latency_access.value;
+ readback_data_var[15:8] = field_storage.chip_1.latency_cfg.rwds_sample_delay.value;
+ readback_data_var[16] = field_storage.chip_1.latency_cfg.en_latency_additional.value;
+ end
+ if(rd_mux_addr == 12'h450) begin
+ readback_data_var[15:0] = field_storage.chip_1.burst_cfg.t_burst_max.value;
+ end
+ if(rd_mux_addr == 12'h454) begin
+ readback_data_var[7:0] = field_storage.chip_1.chip_timing.t_read_write_recovery.value;
+ readback_data_var[15:8] = field_storage.chip_1.chip_timing.t_csh_cycles.value;
+ readback_data_var[23:16] = field_storage.chip_1.chip_timing.csn_to_ck_cycles.value;
+ end
+ if(rd_mux_addr == 12'h458) begin
+ readback_data_var[7:0] = field_storage.chip_1.rx_delay.value.value;
+ end
+ if(rd_mux_addr == 12'h480) begin
+ readback_data_var[31:22] = field_storage.chip_2.range_base.value.value;
+ end
+ if(rd_mux_addr == 12'h484) begin
+ readback_data_var[31:22] = field_storage.chip_2.range_bound.value.value;
+ end
+ if(rd_mux_addr == 12'h488) begin
+ readback_data_var[7:0] = field_storage.chip_2.address_cfg.address_space.value;
+ readback_data_var[15:8] = field_storage.chip_2.address_cfg.address_mask_msb.value;
+ readback_data_var[16] = field_storage.chip_2.address_cfg.enable.value;
+ end
+ if(rd_mux_addr == 12'h48c) begin
+ readback_data_var[7:0] = field_storage.chip_2.latency_cfg.t_latency_access.value;
+ readback_data_var[15:8] = field_storage.chip_2.latency_cfg.rwds_sample_delay.value;
+ readback_data_var[16] = field_storage.chip_2.latency_cfg.en_latency_additional.value;
+ end
+ if(rd_mux_addr == 12'h490) begin
+ readback_data_var[15:0] = field_storage.chip_2.burst_cfg.t_burst_max.value;
+ end
+ if(rd_mux_addr == 12'h494) begin
+ readback_data_var[7:0] = field_storage.chip_2.chip_timing.t_read_write_recovery.value;
+ readback_data_var[15:8] = field_storage.chip_2.chip_timing.t_csh_cycles.value;
+ readback_data_var[23:16] = field_storage.chip_2.chip_timing.csn_to_ck_cycles.value;
+ end
+ if(rd_mux_addr == 12'h498) begin
+ readback_data_var[7:0] = field_storage.chip_2.rx_delay.value.value;
+ end
+ if(rd_mux_addr == 12'h4c0) begin
+ readback_data_var[31:22] = field_storage.chip_3.range_base.value.value;
+ end
+ if(rd_mux_addr == 12'h4c4) begin
+ readback_data_var[31:22] = field_storage.chip_3.range_bound.value.value;
+ end
+ if(rd_mux_addr == 12'h4c8) begin
+ readback_data_var[7:0] = field_storage.chip_3.address_cfg.address_space.value;
+ readback_data_var[15:8] = field_storage.chip_3.address_cfg.address_mask_msb.value;
+ readback_data_var[16] = field_storage.chip_3.address_cfg.enable.value;
+ end
+ if(rd_mux_addr == 12'h4cc) begin
+ readback_data_var[7:0] = field_storage.chip_3.latency_cfg.t_latency_access.value;
+ readback_data_var[15:8] = field_storage.chip_3.latency_cfg.rwds_sample_delay.value;
+ readback_data_var[16] = field_storage.chip_3.latency_cfg.en_latency_additional.value;
+ end
+ if(rd_mux_addr == 12'h4d0) begin
+ readback_data_var[15:0] = field_storage.chip_3.burst_cfg.t_burst_max.value;
+ end
+ if(rd_mux_addr == 12'h4d4) begin
+ readback_data_var[7:0] = field_storage.chip_3.chip_timing.t_read_write_recovery.value;
+ readback_data_var[15:8] = field_storage.chip_3.chip_timing.t_csh_cycles.value;
+ readback_data_var[23:16] = field_storage.chip_3.chip_timing.csn_to_ck_cycles.value;
+ end
+ if(rd_mux_addr == 12'h4d8) begin
+ readback_data_var[7:0] = field_storage.chip_3.rx_delay.value.value;
+ end
+ if(rd_mux_addr == 12'h500) begin
+ readback_data_var[31:22] = field_storage.chip_4.range_base.value.value;
+ end
+ if(rd_mux_addr == 12'h504) begin
+ readback_data_var[31:22] = field_storage.chip_4.range_bound.value.value;
end
- if(rd_mux_addr == 7'h4) begin
- readback_data_var[0] = field_storage.en_latency_additional.value.value;
+ if(rd_mux_addr == 12'h508) begin
+ readback_data_var[7:0] = field_storage.chip_4.address_cfg.address_space.value;
+ readback_data_var[15:8] = field_storage.chip_4.address_cfg.address_mask_msb.value;
+ readback_data_var[16] = field_storage.chip_4.address_cfg.enable.value;
end
- if(rd_mux_addr == 7'h8) begin
- readback_data_var[15:0] = field_storage.t_burst_max.value.value;
+ if(rd_mux_addr == 12'h50c) begin
+ readback_data_var[7:0] = field_storage.chip_4.latency_cfg.t_latency_access.value;
+ readback_data_var[15:8] = field_storage.chip_4.latency_cfg.rwds_sample_delay.value;
+ readback_data_var[16] = field_storage.chip_4.latency_cfg.en_latency_additional.value;
end
- if(rd_mux_addr == 7'hc) begin
- readback_data_var[3:0] = field_storage.t_read_write_recovery.value.value;
+ if(rd_mux_addr == 12'h510) begin
+ readback_data_var[15:0] = field_storage.chip_4.burst_cfg.t_burst_max.value;
end
- if(rd_mux_addr == 7'h10) begin
- readback_data_var[4:0] = field_storage.t_rx_clk_delay.fine.value;
- readback_data_var[7:5] = field_storage.t_rx_clk_delay.coarse.value;
+ if(rd_mux_addr == 12'h514) begin
+ readback_data_var[7:0] = field_storage.chip_4.chip_timing.t_read_write_recovery.value;
+ readback_data_var[15:8] = field_storage.chip_4.chip_timing.t_csh_cycles.value;
+ readback_data_var[23:16] = field_storage.chip_4.chip_timing.csn_to_ck_cycles.value;
end
- if(rd_mux_addr == 7'h14) begin
- readback_data_var[4:0] = field_storage.t_tx_clk_delay.fine.value;
- readback_data_var[7:5] = field_storage.t_tx_clk_delay.coarse.value;
+ if(rd_mux_addr == 12'h518) begin
+ readback_data_var[7:0] = field_storage.chip_4.rx_delay.value.value;
end
- if(rd_mux_addr == 7'h18) begin
- readback_data_var[4:0] = field_storage.address_mask_msb.value.value;
+ if(rd_mux_addr == 12'h540) begin
+ readback_data_var[31:22] = field_storage.chip_5.range_base.value.value;
end
- if(rd_mux_addr == 7'h1c) begin
- readback_data_var[0] = field_storage.address_space.value.value;
+ if(rd_mux_addr == 12'h544) begin
+ readback_data_var[31:22] = field_storage.chip_5.range_bound.value.value;
end
- if(rd_mux_addr == 7'h20) begin
- readback_data_var[0] = field_storage.phys_in_use.value.value;
+ if(rd_mux_addr == 12'h548) begin
+ readback_data_var[7:0] = field_storage.chip_5.address_cfg.address_space.value;
+ readback_data_var[15:8] = field_storage.chip_5.address_cfg.address_mask_msb.value;
+ readback_data_var[16] = field_storage.chip_5.address_cfg.enable.value;
end
- if(rd_mux_addr == 7'h24) begin
- readback_data_var[0] = field_storage.which_phy.value.value;
+ if(rd_mux_addr == 12'h54c) begin
+ readback_data_var[7:0] = field_storage.chip_5.latency_cfg.t_latency_access.value;
+ readback_data_var[15:8] = field_storage.chip_5.latency_cfg.rwds_sample_delay.value;
+ readback_data_var[16] = field_storage.chip_5.latency_cfg.en_latency_additional.value;
end
- if(rd_mux_addr == 7'h28) begin
- readback_data_var[3:0] = field_storage.t_csh_cycles.value.value;
+ if(rd_mux_addr == 12'h550) begin
+ readback_data_var[15:0] = field_storage.chip_5.burst_cfg.t_burst_max.value;
end
- if(rd_mux_addr == 7'h2c) begin
- readback_data_var[3:0] = field_storage.csn_to_ck_cycles.value.value;
+ if(rd_mux_addr == 12'h554) begin
+ readback_data_var[7:0] = field_storage.chip_5.chip_timing.t_read_write_recovery.value;
+ readback_data_var[15:8] = field_storage.chip_5.chip_timing.t_csh_cycles.value;
+ readback_data_var[23:16] = field_storage.chip_5.chip_timing.csn_to_ck_cycles.value;
end
- if(rd_mux_addr == 7'h30) begin
- readback_data_var[31:22] = field_storage.chip0_base.value.value;
+ if(rd_mux_addr == 12'h558) begin
+ readback_data_var[7:0] = field_storage.chip_5.rx_delay.value.value;
end
- if(rd_mux_addr == 7'h34) begin
- readback_data_var[31:22] = field_storage.chip0_bound.value.value;
+ if(rd_mux_addr == 12'h580) begin
+ readback_data_var[31:22] = field_storage.chip_6.range_base.value.value;
end
- if(rd_mux_addr == 7'h38) begin
- readback_data_var[31:22] = field_storage.chip1_base.value.value;
+ if(rd_mux_addr == 12'h584) begin
+ readback_data_var[31:22] = field_storage.chip_6.range_bound.value.value;
end
- if(rd_mux_addr == 7'h3c) begin
- readback_data_var[31:22] = field_storage.chip1_bound.value.value;
+ if(rd_mux_addr == 12'h588) begin
+ readback_data_var[7:0] = field_storage.chip_6.address_cfg.address_space.value;
+ readback_data_var[15:8] = field_storage.chip_6.address_cfg.address_mask_msb.value;
+ readback_data_var[16] = field_storage.chip_6.address_cfg.enable.value;
end
- if(rd_mux_addr == 7'h40) begin
- readback_data_var[31:22] = field_storage.chip2_base.value.value;
+ if(rd_mux_addr == 12'h58c) begin
+ readback_data_var[7:0] = field_storage.chip_6.latency_cfg.t_latency_access.value;
+ readback_data_var[15:8] = field_storage.chip_6.latency_cfg.rwds_sample_delay.value;
+ readback_data_var[16] = field_storage.chip_6.latency_cfg.en_latency_additional.value;
end
- if(rd_mux_addr == 7'h44) begin
- readback_data_var[31:22] = field_storage.chip2_bound.value.value;
+ if(rd_mux_addr == 12'h590) begin
+ readback_data_var[15:0] = field_storage.chip_6.burst_cfg.t_burst_max.value;
end
- if(rd_mux_addr == 7'h48) begin
- readback_data_var[31:22] = field_storage.chip3_base.value.value;
+ if(rd_mux_addr == 12'h594) begin
+ readback_data_var[7:0] = field_storage.chip_6.chip_timing.t_read_write_recovery.value;
+ readback_data_var[15:8] = field_storage.chip_6.chip_timing.t_csh_cycles.value;
+ readback_data_var[23:16] = field_storage.chip_6.chip_timing.csn_to_ck_cycles.value;
end
- if(rd_mux_addr == 7'h4c) begin
- readback_data_var[31:22] = field_storage.chip3_bound.value.value;
+ if(rd_mux_addr == 12'h598) begin
+ readback_data_var[7:0] = field_storage.chip_6.rx_delay.value.value;
end
- if(rd_mux_addr == 7'h58) begin
- readback_data_var[31:22] = field_storage.chip4_base.value.value;
+ if(rd_mux_addr == 12'h5c0) begin
+ readback_data_var[31:22] = field_storage.chip_7.range_base.value.value;
end
- if(rd_mux_addr == 7'h5c) begin
- readback_data_var[31:22] = field_storage.chip4_bound.value.value;
+ if(rd_mux_addr == 12'h5c4) begin
+ readback_data_var[31:22] = field_storage.chip_7.range_bound.value.value;
end
- if(rd_mux_addr == 7'h60) begin
- readback_data_var[31:22] = field_storage.chip5_base.value.value;
+ if(rd_mux_addr == 12'h5c8) begin
+ readback_data_var[7:0] = field_storage.chip_7.address_cfg.address_space.value;
+ readback_data_var[15:8] = field_storage.chip_7.address_cfg.address_mask_msb.value;
+ readback_data_var[16] = field_storage.chip_7.address_cfg.enable.value;
end
- if(rd_mux_addr == 7'h64) begin
- readback_data_var[31:22] = field_storage.chip5_bound.value.value;
+ if(rd_mux_addr == 12'h5cc) begin
+ readback_data_var[7:0] = field_storage.chip_7.latency_cfg.t_latency_access.value;
+ readback_data_var[15:8] = field_storage.chip_7.latency_cfg.rwds_sample_delay.value;
+ readback_data_var[16] = field_storage.chip_7.latency_cfg.en_latency_additional.value;
end
- if(rd_mux_addr == 7'h68) begin
- readback_data_var[31:22] = field_storage.chip6_base.value.value;
+ if(rd_mux_addr == 12'h5d0) begin
+ readback_data_var[15:0] = field_storage.chip_7.burst_cfg.t_burst_max.value;
end
- if(rd_mux_addr == 7'h6c) begin
- readback_data_var[31:22] = field_storage.chip6_bound.value.value;
+ if(rd_mux_addr == 12'h5d4) begin
+ readback_data_var[7:0] = field_storage.chip_7.chip_timing.t_read_write_recovery.value;
+ readback_data_var[15:8] = field_storage.chip_7.chip_timing.t_csh_cycles.value;
+ readback_data_var[23:16] = field_storage.chip_7.chip_timing.csn_to_ck_cycles.value;
end
- if(rd_mux_addr == 7'h70) begin
- readback_data_var[31:22] = field_storage.chip7_base.value.value;
+ if(rd_mux_addr == 12'h5d8) begin
+ readback_data_var[7:0] = field_storage.chip_7.rx_delay.value.value;
end
- if(rd_mux_addr == 7'h74) begin
- readback_data_var[31:22] = field_storage.chip7_bound.value.value;
+ if(rd_mux_addr == 12'hffc) begin
+ readback_data_var[31:0] = 32'h0;
end
readback_data = readback_data_var;
readback_done = decoded_req & ~decoded_req_is_wr;
diff --git a/src/regs/hyperbus_cfg_regblock_pkg.sv b/src/regs/hyperbus_cfg_regblock_pkg.sv
index 85c5edb..807817d 100644
--- a/src/regs/hyperbus_cfg_regblock_pkg.sv
+++ b/src/regs/hyperbus_cfg_regblock_pkg.sv
@@ -4,271 +4,563 @@
package hyperbus_cfg_regblock_pkg;
localparam HYPERBUS_CFG_REGBLOCK_DATA_WIDTH = 32;
- localparam HYPERBUS_CFG_REGBLOCK_MIN_ADDR_WIDTH = 7;
- localparam HYPERBUS_CFG_REGBLOCK_SIZE = 'h78;
+ localparam HYPERBUS_CFG_REGBLOCK_MIN_ADDR_WIDTH = 12;
+ localparam HYPERBUS_CFG_REGBLOCK_SIZE = 'h1000;
typedef struct {
- logic [3:0] value;
- } hyperbus_cfg_regs__t_latency_access__value__out_t;
+ logic [7:0] next;
+ } hyperbus_cfg_regs__capability__num_chips__in_t;
typedef struct {
- hyperbus_cfg_regs__t_latency_access__value__out_t value;
- } hyperbus_cfg_regs__t_latency_access__out_t;
+ logic [7:0] next;
+ } hyperbus_cfg_regs__capability__num_phys__in_t;
typedef struct {
- logic value;
- } hyperbus_cfg_regs__en_latency_additional__value__out_t;
+ logic next;
+ } hyperbus_cfg_regs__capability__per_chip_cfg__in_t;
+
+ typedef struct {
+ logic next;
+ } hyperbus_cfg_regs__capability__per_phy_cfg__in_t;
+
+ typedef struct {
+ logic next;
+ } hyperbus_cfg_regs__capability__chip_enable__in_t;
+
+ typedef struct {
+ logic next;
+ } hyperbus_cfg_regs__capability__clock_divider__in_t;
+
+ typedef struct {
+ logic next;
+ } hyperbus_cfg_regs__capability__staged_apply__in_t;
+
+ typedef struct {
+ logic next;
+ } hyperbus_cfg_regs__capability__error_status__in_t;
+
+ typedef struct {
+ logic next;
+ } hyperbus_cfg_regs__capability__rwds_sample_timing__in_t;
+
+ typedef struct {
+ logic next;
+ } hyperbus_cfg_regs__capability__rwds_oe_timing__in_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__capability__num_chips__in_t num_chips;
+ hyperbus_cfg_regs__capability__num_phys__in_t num_phys;
+ hyperbus_cfg_regs__capability__per_chip_cfg__in_t per_chip_cfg;
+ hyperbus_cfg_regs__capability__per_phy_cfg__in_t per_phy_cfg;
+ hyperbus_cfg_regs__capability__chip_enable__in_t chip_enable;
+ hyperbus_cfg_regs__capability__clock_divider__in_t clock_divider;
+ hyperbus_cfg_regs__capability__staged_apply__in_t staged_apply;
+ hyperbus_cfg_regs__capability__error_status__in_t error_status;
+ hyperbus_cfg_regs__capability__rwds_sample_timing__in_t rwds_sample_timing;
+ hyperbus_cfg_regs__capability__rwds_oe_timing__in_t rwds_oe_timing;
+ } hyperbus_cfg_regs__capability__in_t;
+
+ typedef struct {
+ logic next;
+ logic hwset;
+ } hyperbus_cfg_regs__status__decode_error__in_t;
+
+ typedef struct {
+ logic next;
+ } hyperbus_cfg_regs__status__busy__in_t;
+
+ typedef struct {
+ logic next;
+ } hyperbus_cfg_regs__status__dirty__in_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__status__decode_error__in_t decode_error;
+ hyperbus_cfg_regs__status__busy__in_t busy;
+ hyperbus_cfg_regs__status__dirty__in_t dirty;
+ } hyperbus_cfg_regs__status__in_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__capability__in_t capability;
+ hyperbus_cfg_regs__status__in_t status;
+ } hyperbus_cfg_regs__global_regs__in_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__global_regs__in_t global_cfg;
+ } hyperbus_cfg_regs__in_t;
+
+ typedef struct {
+ logic [7:0] value;
+ } hyperbus_cfg_regs__ip_version__revision__out_t;
+
+ typedef struct {
+ logic [7:0] value;
+ } hyperbus_cfg_regs__ip_version__patch__out_t;
typedef struct {
- hyperbus_cfg_regs__en_latency_additional__value__out_t value;
- } hyperbus_cfg_regs__en_latency_additional__out_t;
+ logic [7:0] value;
+ } hyperbus_cfg_regs__ip_version__minor__out_t;
+
+ typedef struct {
+ logic [7:0] value;
+ } hyperbus_cfg_regs__ip_version__major__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__ip_version__revision__out_t revision;
+ hyperbus_cfg_regs__ip_version__patch__out_t patch;
+ hyperbus_cfg_regs__ip_version__minor__out_t minor;
+ hyperbus_cfg_regs__ip_version__major__out_t major;
+ } hyperbus_cfg_regs__ip_version__out_t;
typedef struct {
logic [15:0] value;
- } hyperbus_cfg_regs__t_burst_max__value__out_t;
+ } hyperbus_cfg_regs__reg_if_version__minor__out_t;
+
+ typedef struct {
+ logic [15:0] value;
+ } hyperbus_cfg_regs__reg_if_version__major__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__reg_if_version__minor__out_t minor;
+ hyperbus_cfg_regs__reg_if_version__major__out_t major;
+ } hyperbus_cfg_regs__reg_if_version__out_t;
+
+ typedef struct {
+ logic [7:0] value;
+ } hyperbus_cfg_regs__capability__num_chips__out_t;
+
+ typedef struct {
+ logic [7:0] value;
+ } hyperbus_cfg_regs__capability__num_phys__out_t;
+
+ typedef struct {
+ logic value;
+ } hyperbus_cfg_regs__capability__per_chip_cfg__out_t;
typedef struct {
- hyperbus_cfg_regs__t_burst_max__value__out_t value;
- } hyperbus_cfg_regs__t_burst_max__out_t;
+ logic value;
+ } hyperbus_cfg_regs__capability__per_phy_cfg__out_t;
typedef struct {
- logic [3:0] value;
- } hyperbus_cfg_regs__t_read_write_recovery__value__out_t;
+ logic value;
+ } hyperbus_cfg_regs__capability__chip_enable__out_t;
typedef struct {
- hyperbus_cfg_regs__t_read_write_recovery__value__out_t value;
- } hyperbus_cfg_regs__t_read_write_recovery__out_t;
+ logic value;
+ } hyperbus_cfg_regs__capability__clock_divider__out_t;
typedef struct {
- logic [4:0] value;
- } hyperbus_cfg_regs__t_rx_clk_delay__fine__out_t;
+ logic value;
+ } hyperbus_cfg_regs__capability__staged_apply__out_t;
typedef struct {
- logic [2:0] value;
- } hyperbus_cfg_regs__t_rx_clk_delay__coarse__out_t;
+ logic value;
+ } hyperbus_cfg_regs__capability__error_status__out_t;
typedef struct {
- hyperbus_cfg_regs__t_rx_clk_delay__fine__out_t fine;
- hyperbus_cfg_regs__t_rx_clk_delay__coarse__out_t coarse;
- } hyperbus_cfg_regs__t_rx_clk_delay__out_t;
+ logic value;
+ } hyperbus_cfg_regs__capability__rwds_sample_timing__out_t;
typedef struct {
- logic [4:0] value;
- } hyperbus_cfg_regs__t_tx_clk_delay__fine__out_t;
+ logic value;
+ } hyperbus_cfg_regs__capability__rwds_oe_timing__out_t;
typedef struct {
- logic [2:0] value;
- } hyperbus_cfg_regs__t_tx_clk_delay__coarse__out_t;
+ hyperbus_cfg_regs__capability__num_chips__out_t num_chips;
+ hyperbus_cfg_regs__capability__num_phys__out_t num_phys;
+ hyperbus_cfg_regs__capability__per_chip_cfg__out_t per_chip_cfg;
+ hyperbus_cfg_regs__capability__per_phy_cfg__out_t per_phy_cfg;
+ hyperbus_cfg_regs__capability__chip_enable__out_t chip_enable;
+ hyperbus_cfg_regs__capability__clock_divider__out_t clock_divider;
+ hyperbus_cfg_regs__capability__staged_apply__out_t staged_apply;
+ hyperbus_cfg_regs__capability__error_status__out_t error_status;
+ hyperbus_cfg_regs__capability__rwds_sample_timing__out_t rwds_sample_timing;
+ hyperbus_cfg_regs__capability__rwds_oe_timing__out_t rwds_oe_timing;
+ } hyperbus_cfg_regs__capability__out_t;
typedef struct {
- hyperbus_cfg_regs__t_tx_clk_delay__fine__out_t fine;
- hyperbus_cfg_regs__t_tx_clk_delay__coarse__out_t coarse;
- } hyperbus_cfg_regs__t_tx_clk_delay__out_t;
+ logic value;
+ } hyperbus_cfg_regs__command__flush__out_t;
typedef struct {
- logic [4:0] value;
- } hyperbus_cfg_regs__address_mask_msb__value__out_t;
+ logic value;
+ } hyperbus_cfg_regs__command__apply__out_t;
typedef struct {
- hyperbus_cfg_regs__address_mask_msb__value__out_t value;
- } hyperbus_cfg_regs__address_mask_msb__out_t;
+ hyperbus_cfg_regs__command__flush__out_t flush;
+ hyperbus_cfg_regs__command__apply__out_t apply;
+ } hyperbus_cfg_regs__command__out_t;
typedef struct {
logic value;
- } hyperbus_cfg_regs__address_space__value__out_t;
+ } hyperbus_cfg_regs__status__decode_error__out_t;
typedef struct {
- hyperbus_cfg_regs__address_space__value__out_t value;
- } hyperbus_cfg_regs__address_space__out_t;
+ logic value;
+ } hyperbus_cfg_regs__status__busy__out_t;
typedef struct {
logic value;
- } hyperbus_cfg_regs__phys_in_use__value__out_t;
+ } hyperbus_cfg_regs__status__dirty__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__status__decode_error__out_t decode_error;
+ hyperbus_cfg_regs__status__busy__out_t busy;
+ hyperbus_cfg_regs__status__dirty__out_t dirty;
+ } hyperbus_cfg_regs__status__out_t;
typedef struct {
- hyperbus_cfg_regs__phys_in_use__value__out_t value;
- } hyperbus_cfg_regs__phys_in_use__out_t;
+ hyperbus_cfg_regs__ip_version__out_t ip_version;
+ hyperbus_cfg_regs__reg_if_version__out_t reg_if_version;
+ hyperbus_cfg_regs__capability__out_t capability;
+ hyperbus_cfg_regs__command__out_t command;
+ hyperbus_cfg_regs__status__out_t status;
+ } hyperbus_cfg_regs__global_regs__out_t;
typedef struct {
logic value;
- } hyperbus_cfg_regs__which_phy__value__out_t;
+ } hyperbus_cfg_regs__frontend_cfg__dual_phy__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__frontend_cfg__dual_phy__out_t dual_phy;
+ } hyperbus_cfg_regs__frontend_cfg__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__frontend_cfg__out_t frontend_cfg;
+ } hyperbus_cfg_regs__frontend_regs__out_t;
typedef struct {
- hyperbus_cfg_regs__which_phy__value__out_t value;
- } hyperbus_cfg_regs__which_phy__out_t;
+ logic [7:0] value;
+ } hyperbus_cfg_regs__clock_cfg__divider__out_t;
typedef struct {
- logic [3:0] value;
- } hyperbus_cfg_regs__t_csh_cycles__value__out_t;
+ hyperbus_cfg_regs__clock_cfg__divider__out_t divider;
+ } hyperbus_cfg_regs__clock_cfg__out_t;
typedef struct {
- hyperbus_cfg_regs__t_csh_cycles__value__out_t value;
- } hyperbus_cfg_regs__t_csh_cycles__out_t;
+ hyperbus_cfg_regs__clock_cfg__out_t clock_cfg;
+ } hyperbus_cfg_regs__backend_regs__out_t;
typedef struct {
- logic [3:0] value;
- } hyperbus_cfg_regs__csn_to_ck_cycles__value__out_t;
+ logic [7:0] value;
+ } hyperbus_cfg_regs__tx_delay__value__out_t;
typedef struct {
- hyperbus_cfg_regs__csn_to_ck_cycles__value__out_t value;
- } hyperbus_cfg_regs__csn_to_ck_cycles__out_t;
+ hyperbus_cfg_regs__tx_delay__value__out_t value;
+ } hyperbus_cfg_regs__tx_delay__out_t;
+
+ typedef struct {
+ logic [7:0] value;
+ } hyperbus_cfg_regs__rwds_timing__rwds_oe_setup_cycles__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__rwds_timing__rwds_oe_setup_cycles__out_t rwds_oe_setup_cycles;
+ } hyperbus_cfg_regs__rwds_timing__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__tx_delay__out_t tx_delay;
+ hyperbus_cfg_regs__rwds_timing__out_t rwds_timing;
+ } hyperbus_cfg_regs__phy_regs__out_t;
typedef struct {
logic [9:0] value;
- } hyperbus_cfg_regs__chip0_base__value__out_t;
+ } hyperbus_cfg_regs__range_base__value__out_t;
typedef struct {
- hyperbus_cfg_regs__chip0_base__value__out_t value;
- } hyperbus_cfg_regs__chip0_base__out_t;
+ hyperbus_cfg_regs__range_base__value__out_t value;
+ } hyperbus_cfg_regs__range_base__out_t;
typedef struct {
logic [9:0] value;
- } hyperbus_cfg_regs__chip0_bound__value__out_t;
+ } hyperbus_cfg_regs__range_bound__value__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__range_bound__value__out_t value;
+ } hyperbus_cfg_regs__range_bound__out_t;
+
+ typedef struct {
+ logic [7:0] value;
+ } hyperbus_cfg_regs__address_cfg__address_space__out_t;
+
+ typedef struct {
+ logic [7:0] value;
+ } hyperbus_cfg_regs__address_cfg__address_mask_msb__out_t;
+
+ typedef struct {
+ logic value;
+ } hyperbus_cfg_regs__address_cfg__enable__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__address_cfg__address_space__out_t address_space;
+ hyperbus_cfg_regs__address_cfg__address_mask_msb__out_t address_mask_msb;
+ hyperbus_cfg_regs__address_cfg__enable__out_t enable;
+ } hyperbus_cfg_regs__address_cfg__out_t;
+
+ typedef struct {
+ logic [7:0] value;
+ } hyperbus_cfg_regs__latency_cfg__t_latency_access__out_t;
+
+ typedef struct {
+ logic [7:0] value;
+ } hyperbus_cfg_regs__latency_cfg__rwds_sample_delay__out_t;
+
+ typedef struct {
+ logic value;
+ } hyperbus_cfg_regs__latency_cfg__en_latency_additional__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__latency_cfg__t_latency_access__out_t t_latency_access;
+ hyperbus_cfg_regs__latency_cfg__rwds_sample_delay__out_t rwds_sample_delay;
+ hyperbus_cfg_regs__latency_cfg__en_latency_additional__out_t en_latency_additional;
+ } hyperbus_cfg_regs__latency_cfg__out_t;
+
+ typedef struct {
+ logic [15:0] value;
+ } hyperbus_cfg_regs__burst_cfg__t_burst_max__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__burst_cfg__t_burst_max__out_t t_burst_max;
+ } hyperbus_cfg_regs__burst_cfg__out_t;
+
+ typedef struct {
+ logic [7:0] value;
+ } hyperbus_cfg_regs__chip_timing__t_read_write_recovery__out_t;
typedef struct {
- hyperbus_cfg_regs__chip0_bound__value__out_t value;
- } hyperbus_cfg_regs__chip0_bound__out_t;
+ logic [7:0] value;
+ } hyperbus_cfg_regs__chip_timing__t_csh_cycles__out_t;
+
+ typedef struct {
+ logic [7:0] value;
+ } hyperbus_cfg_regs__chip_timing__csn_to_ck_cycles__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__chip_timing__t_read_write_recovery__out_t t_read_write_recovery;
+ hyperbus_cfg_regs__chip_timing__t_csh_cycles__out_t t_csh_cycles;
+ hyperbus_cfg_regs__chip_timing__csn_to_ck_cycles__out_t csn_to_ck_cycles;
+ } hyperbus_cfg_regs__chip_timing__out_t;
+
+ typedef struct {
+ logic [7:0] value;
+ } hyperbus_cfg_regs__rx_delay__value__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__rx_delay__value__out_t value;
+ } hyperbus_cfg_regs__rx_delay__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__range_base__out_t range_base;
+ hyperbus_cfg_regs__range_bound__out_t range_bound;
+ hyperbus_cfg_regs__address_cfg__out_t address_cfg;
+ hyperbus_cfg_regs__latency_cfg__out_t latency_cfg;
+ hyperbus_cfg_regs__burst_cfg__out_t burst_cfg;
+ hyperbus_cfg_regs__chip_timing__out_t chip_timing;
+ hyperbus_cfg_regs__rx_delay__out_t rx_delay;
+ } hyperbus_cfg_regs__chip_regs__out_t;
typedef struct {
logic [9:0] value;
- } hyperbus_cfg_regs__chip1_base__value__out_t;
+ } hyperbus_cfg_regs__range_base_value_aea1d0e1__value_reset_1__out_t;
typedef struct {
- hyperbus_cfg_regs__chip1_base__value__out_t value;
- } hyperbus_cfg_regs__chip1_base__out_t;
+ hyperbus_cfg_regs__range_base_value_aea1d0e1__value_reset_1__out_t value;
+ } hyperbus_cfg_regs__range_base_value_aea1d0e1__out_t;
typedef struct {
logic [9:0] value;
- } hyperbus_cfg_regs__chip1_bound__value__out_t;
+ } hyperbus_cfg_regs__range_bound_value_e30f0c3f__value_reset_2__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__range_bound_value_e30f0c3f__value_reset_2__out_t value;
+ } hyperbus_cfg_regs__range_bound_value_e30f0c3f__out_t;
typedef struct {
- hyperbus_cfg_regs__chip1_bound__value__out_t value;
- } hyperbus_cfg_regs__chip1_bound__out_t;
+ hyperbus_cfg_regs__range_base_value_aea1d0e1__out_t range_base;
+ hyperbus_cfg_regs__range_bound_value_e30f0c3f__out_t range_bound;
+ hyperbus_cfg_regs__address_cfg__out_t address_cfg;
+ hyperbus_cfg_regs__latency_cfg__out_t latency_cfg;
+ hyperbus_cfg_regs__burst_cfg__out_t burst_cfg;
+ hyperbus_cfg_regs__chip_timing__out_t chip_timing;
+ hyperbus_cfg_regs__rx_delay__out_t rx_delay;
+ } hyperbus_cfg_regs__chip_regs_range_base_de2a4636_range_bound_d40fd139__out_t;
typedef struct {
logic [9:0] value;
- } hyperbus_cfg_regs__chip2_base__value__out_t;
+ } hyperbus_cfg_regs__range_base_value_e30f0c3f__value_reset_2__out_t;
typedef struct {
- hyperbus_cfg_regs__chip2_base__value__out_t value;
- } hyperbus_cfg_regs__chip2_base__out_t;
+ hyperbus_cfg_regs__range_base_value_e30f0c3f__value_reset_2__out_t value;
+ } hyperbus_cfg_regs__range_base_value_e30f0c3f__out_t;
typedef struct {
logic [9:0] value;
- } hyperbus_cfg_regs__chip2_bound__value__out_t;
+ } hyperbus_cfg_regs__range_bound_value_2f629ec9__value_reset_3__out_t;
typedef struct {
- hyperbus_cfg_regs__chip2_bound__value__out_t value;
- } hyperbus_cfg_regs__chip2_bound__out_t;
+ hyperbus_cfg_regs__range_bound_value_2f629ec9__value_reset_3__out_t value;
+ } hyperbus_cfg_regs__range_bound_value_2f629ec9__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__range_base_value_e30f0c3f__out_t range_base;
+ hyperbus_cfg_regs__range_bound_value_2f629ec9__out_t range_bound;
+ hyperbus_cfg_regs__address_cfg__out_t address_cfg;
+ hyperbus_cfg_regs__latency_cfg__out_t latency_cfg;
+ hyperbus_cfg_regs__burst_cfg__out_t burst_cfg;
+ hyperbus_cfg_regs__chip_timing__out_t chip_timing;
+ hyperbus_cfg_regs__rx_delay__out_t rx_delay;
+ } hyperbus_cfg_regs__chip_regs_range_base_b054dd4c_range_bound_a4d5f83b__out_t;
typedef struct {
logic [9:0] value;
- } hyperbus_cfg_regs__chip3_base__value__out_t;
+ } hyperbus_cfg_regs__range_base_value_2f629ec9__value_reset_3__out_t;
typedef struct {
- hyperbus_cfg_regs__chip3_base__value__out_t value;
- } hyperbus_cfg_regs__chip3_base__out_t;
+ hyperbus_cfg_regs__range_base_value_2f629ec9__value_reset_3__out_t value;
+ } hyperbus_cfg_regs__range_base_value_2f629ec9__out_t;
typedef struct {
logic [9:0] value;
- } hyperbus_cfg_regs__chip3_bound__value__out_t;
+ } hyperbus_cfg_regs__range_bound_value_a1e733c2__value_reset_4__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__range_bound_value_a1e733c2__value_reset_4__out_t value;
+ } hyperbus_cfg_regs__range_bound_value_a1e733c2__out_t;
typedef struct {
- hyperbus_cfg_regs__chip3_bound__value__out_t value;
- } hyperbus_cfg_regs__chip3_bound__out_t;
+ hyperbus_cfg_regs__range_base_value_2f629ec9__out_t range_base;
+ hyperbus_cfg_regs__range_bound_value_a1e733c2__out_t range_bound;
+ hyperbus_cfg_regs__address_cfg__out_t address_cfg;
+ hyperbus_cfg_regs__latency_cfg__out_t latency_cfg;
+ hyperbus_cfg_regs__burst_cfg__out_t burst_cfg;
+ hyperbus_cfg_regs__chip_timing__out_t chip_timing;
+ hyperbus_cfg_regs__rx_delay__out_t rx_delay;
+ } hyperbus_cfg_regs__chip_regs_range_base_f7266ded_range_bound_5bf260e9__out_t;
typedef struct {
logic [9:0] value;
- } hyperbus_cfg_regs__chip4_base__value__out_t;
+ } hyperbus_cfg_regs__range_base_value_a1e733c2__value_reset_4__out_t;
typedef struct {
- hyperbus_cfg_regs__chip4_base__value__out_t value;
- } hyperbus_cfg_regs__chip4_base__out_t;
+ hyperbus_cfg_regs__range_base_value_a1e733c2__value_reset_4__out_t value;
+ } hyperbus_cfg_regs__range_base_value_a1e733c2__out_t;
typedef struct {
logic [9:0] value;
- } hyperbus_cfg_regs__chip4_bound__value__out_t;
+ } hyperbus_cfg_regs__range_bound_value_342915db__value_reset_5__out_t;
typedef struct {
- hyperbus_cfg_regs__chip4_bound__value__out_t value;
- } hyperbus_cfg_regs__chip4_bound__out_t;
+ hyperbus_cfg_regs__range_bound_value_342915db__value_reset_5__out_t value;
+ } hyperbus_cfg_regs__range_bound_value_342915db__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__range_base_value_a1e733c2__out_t range_base;
+ hyperbus_cfg_regs__range_bound_value_342915db__out_t range_bound;
+ hyperbus_cfg_regs__address_cfg__out_t address_cfg;
+ hyperbus_cfg_regs__latency_cfg__out_t latency_cfg;
+ hyperbus_cfg_regs__burst_cfg__out_t burst_cfg;
+ hyperbus_cfg_regs__chip_timing__out_t chip_timing;
+ hyperbus_cfg_regs__rx_delay__out_t rx_delay;
+ } hyperbus_cfg_regs__chip_regs_range_base_0d543b99_range_bound_1fffc3a2__out_t;
typedef struct {
logic [9:0] value;
- } hyperbus_cfg_regs__chip5_base__value__out_t;
+ } hyperbus_cfg_regs__range_base_value_342915db__value_reset_5__out_t;
typedef struct {
- hyperbus_cfg_regs__chip5_base__value__out_t value;
- } hyperbus_cfg_regs__chip5_base__out_t;
+ hyperbus_cfg_regs__range_base_value_342915db__value_reset_5__out_t value;
+ } hyperbus_cfg_regs__range_base_value_342915db__out_t;
typedef struct {
logic [9:0] value;
- } hyperbus_cfg_regs__chip5_bound__value__out_t;
+ } hyperbus_cfg_regs__range_bound_value_883c384f__value_reset_6__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__range_bound_value_883c384f__value_reset_6__out_t value;
+ } hyperbus_cfg_regs__range_bound_value_883c384f__out_t;
typedef struct {
- hyperbus_cfg_regs__chip5_bound__value__out_t value;
- } hyperbus_cfg_regs__chip5_bound__out_t;
+ hyperbus_cfg_regs__range_base_value_342915db__out_t range_base;
+ hyperbus_cfg_regs__range_bound_value_883c384f__out_t range_bound;
+ hyperbus_cfg_regs__address_cfg__out_t address_cfg;
+ hyperbus_cfg_regs__latency_cfg__out_t latency_cfg;
+ hyperbus_cfg_regs__burst_cfg__out_t burst_cfg;
+ hyperbus_cfg_regs__chip_timing__out_t chip_timing;
+ hyperbus_cfg_regs__rx_delay__out_t rx_delay;
+ } hyperbus_cfg_regs__chip_regs_range_base_e068ab2e_range_bound_9afa5911__out_t;
typedef struct {
logic [9:0] value;
- } hyperbus_cfg_regs__chip6_base__value__out_t;
+ } hyperbus_cfg_regs__range_base_value_883c384f__value_reset_6__out_t;
typedef struct {
- hyperbus_cfg_regs__chip6_base__value__out_t value;
- } hyperbus_cfg_regs__chip6_base__out_t;
+ hyperbus_cfg_regs__range_base_value_883c384f__value_reset_6__out_t value;
+ } hyperbus_cfg_regs__range_base_value_883c384f__out_t;
typedef struct {
logic [9:0] value;
- } hyperbus_cfg_regs__chip6_bound__value__out_t;
+ } hyperbus_cfg_regs__range_bound_value_d0d03147__value_reset_7__out_t;
typedef struct {
- hyperbus_cfg_regs__chip6_bound__value__out_t value;
- } hyperbus_cfg_regs__chip6_bound__out_t;
+ hyperbus_cfg_regs__range_bound_value_d0d03147__value_reset_7__out_t value;
+ } hyperbus_cfg_regs__range_bound_value_d0d03147__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__range_base_value_883c384f__out_t range_base;
+ hyperbus_cfg_regs__range_bound_value_d0d03147__out_t range_bound;
+ hyperbus_cfg_regs__address_cfg__out_t address_cfg;
+ hyperbus_cfg_regs__latency_cfg__out_t latency_cfg;
+ hyperbus_cfg_regs__burst_cfg__out_t burst_cfg;
+ hyperbus_cfg_regs__chip_timing__out_t chip_timing;
+ hyperbus_cfg_regs__rx_delay__out_t rx_delay;
+ } hyperbus_cfg_regs__chip_regs_range_base_ac4fb754_range_bound_24b9644b__out_t;
typedef struct {
logic [9:0] value;
- } hyperbus_cfg_regs__chip7_base__value__out_t;
+ } hyperbus_cfg_regs__range_base_value_d0d03147__value_reset_7__out_t;
typedef struct {
- hyperbus_cfg_regs__chip7_base__value__out_t value;
- } hyperbus_cfg_regs__chip7_base__out_t;
+ hyperbus_cfg_regs__range_base_value_d0d03147__value_reset_7__out_t value;
+ } hyperbus_cfg_regs__range_base_value_d0d03147__out_t;
typedef struct {
logic [9:0] value;
- } hyperbus_cfg_regs__chip7_bound__value__out_t;
-
- typedef struct {
- hyperbus_cfg_regs__chip7_bound__value__out_t value;
- } hyperbus_cfg_regs__chip7_bound__out_t;
-
- typedef struct {
- hyperbus_cfg_regs__t_latency_access__out_t t_latency_access;
- hyperbus_cfg_regs__en_latency_additional__out_t en_latency_additional;
- hyperbus_cfg_regs__t_burst_max__out_t t_burst_max;
- hyperbus_cfg_regs__t_read_write_recovery__out_t t_read_write_recovery;
- hyperbus_cfg_regs__t_rx_clk_delay__out_t t_rx_clk_delay;
- hyperbus_cfg_regs__t_tx_clk_delay__out_t t_tx_clk_delay;
- hyperbus_cfg_regs__address_mask_msb__out_t address_mask_msb;
- hyperbus_cfg_regs__address_space__out_t address_space;
- hyperbus_cfg_regs__phys_in_use__out_t phys_in_use;
- hyperbus_cfg_regs__which_phy__out_t which_phy;
- hyperbus_cfg_regs__t_csh_cycles__out_t t_csh_cycles;
- hyperbus_cfg_regs__csn_to_ck_cycles__out_t csn_to_ck_cycles;
- hyperbus_cfg_regs__chip0_base__out_t chip0_base;
- hyperbus_cfg_regs__chip0_bound__out_t chip0_bound;
- hyperbus_cfg_regs__chip1_base__out_t chip1_base;
- hyperbus_cfg_regs__chip1_bound__out_t chip1_bound;
- hyperbus_cfg_regs__chip2_base__out_t chip2_base;
- hyperbus_cfg_regs__chip2_bound__out_t chip2_bound;
- hyperbus_cfg_regs__chip3_base__out_t chip3_base;
- hyperbus_cfg_regs__chip3_bound__out_t chip3_bound;
- hyperbus_cfg_regs__chip4_base__out_t chip4_base;
- hyperbus_cfg_regs__chip4_bound__out_t chip4_bound;
- hyperbus_cfg_regs__chip5_base__out_t chip5_base;
- hyperbus_cfg_regs__chip5_bound__out_t chip5_bound;
- hyperbus_cfg_regs__chip6_base__out_t chip6_base;
- hyperbus_cfg_regs__chip6_bound__out_t chip6_bound;
- hyperbus_cfg_regs__chip7_base__out_t chip7_base;
- hyperbus_cfg_regs__chip7_bound__out_t chip7_bound;
+ } hyperbus_cfg_regs__range_bound_value_971bab53__value_reset_8__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__range_bound_value_971bab53__value_reset_8__out_t value;
+ } hyperbus_cfg_regs__range_bound_value_971bab53__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__range_base_value_d0d03147__out_t range_base;
+ hyperbus_cfg_regs__range_bound_value_971bab53__out_t range_bound;
+ hyperbus_cfg_regs__address_cfg__out_t address_cfg;
+ hyperbus_cfg_regs__latency_cfg__out_t latency_cfg;
+ hyperbus_cfg_regs__burst_cfg__out_t burst_cfg;
+ hyperbus_cfg_regs__chip_timing__out_t chip_timing;
+ hyperbus_cfg_regs__rx_delay__out_t rx_delay;
+ } hyperbus_cfg_regs__chip_regs_range_base_63c2ba90_range_bound_602aea67__out_t;
+
+ typedef struct {
+ logic [31:0] value;
+ } hyperbus_cfg_regs__reserved_top__value__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__reserved_top__value__out_t value;
+ } hyperbus_cfg_regs__reserved_top__out_t;
+
+ typedef struct {
+ hyperbus_cfg_regs__global_regs__out_t global_cfg;
+ hyperbus_cfg_regs__frontend_regs__out_t frontend;
+ hyperbus_cfg_regs__backend_regs__out_t backend;
+ hyperbus_cfg_regs__phy_regs__out_t phy_0;
+ hyperbus_cfg_regs__phy_regs__out_t phy_1;
+ hyperbus_cfg_regs__chip_regs__out_t chip_0;
+ hyperbus_cfg_regs__chip_regs_range_base_de2a4636_range_bound_d40fd139__out_t chip_1;
+ hyperbus_cfg_regs__chip_regs_range_base_b054dd4c_range_bound_a4d5f83b__out_t chip_2;
+ hyperbus_cfg_regs__chip_regs_range_base_f7266ded_range_bound_5bf260e9__out_t chip_3;
+ hyperbus_cfg_regs__chip_regs_range_base_0d543b99_range_bound_1fffc3a2__out_t chip_4;
+ hyperbus_cfg_regs__chip_regs_range_base_e068ab2e_range_bound_9afa5911__out_t chip_5;
+ hyperbus_cfg_regs__chip_regs_range_base_ac4fb754_range_bound_24b9644b__out_t chip_6;
+ hyperbus_cfg_regs__chip_regs_range_base_63c2ba90_range_bound_602aea67__out_t chip_7;
+ hyperbus_cfg_regs__reserved_top__out_t reserved_top;
} hyperbus_cfg_regs__out_t;
endpackage
diff --git a/src/regs/hyperbus_cfg_regs.rdl b/src/regs/hyperbus_cfg_regs.rdl
index 515e294..a81f7f9 100644
--- a/src/regs/hyperbus_cfg_regs.rdl
+++ b/src/regs/hyperbus_cfg_regs.rdl
@@ -1,194 +1,148 @@
addrmap hyperbus_cfg_regs {
- desc = "HyperBus controller configuration. Chip address ranges must be 4 MiB aligned, ordered by chip-select index, and non-overlapping.";
-
- reg t_latency_access {
- desc = "Initial latency cycles before read or write data.";
- field { sw = rw; hw = r; reset = 4'h6; } value[3:0];
- };
-
- reg en_latency_additional {
- desc = "Enable additional latency cycles when requested by RWDS.";
- field { sw = rw; hw = r; reset = 1'b0; } value;
- };
-
- reg t_burst_max {
- desc = "Maximum continuous burst length before the PHY restarts a transfer.";
- field { sw = rw; hw = r; reset = 16'd350; } value[15:0];
- };
-
- reg t_read_write_recovery {
- desc = "Recovery cycles inserted between read and write phases.";
- field { sw = rw; hw = r; reset = 4'h6; } value[3:0];
- };
-
- reg t_rx_clk_delay {
- desc = "RX sampling delay with fine taps in bits 4:0 and coarse taps in bits 7:5.";
- field {
- desc = "Fine delay-line tap setting, nominally about 78 ps per tap.";
- sw = rw;
- hw = r;
- reset = 5'h10;
- } fine[4:0];
- field {
- desc = "Coarse delay-line tap setting with an implementation-defined step size.";
- sw = rw;
- hw = r;
- reset = 3'h0;
- } coarse[7:5];
- };
-
- reg t_tx_clk_delay {
- desc = "TX clock delay with fine taps in bits 4:0 and coarse taps in bits 7:5.";
- field {
- desc = "Fine delay-line tap setting, nominally about 78 ps per tap.";
- sw = rw;
- hw = r;
- reset = 5'h10;
- } fine[4:0];
- field {
- desc = "Coarse delay-line tap setting with an implementation-defined step size.";
- sw = rw;
- hw = r;
- reset = 3'h0;
- } coarse[7:5];
- };
-
- reg address_mask_msb {
- desc = "Most-significant address bit used by frontend address packing.";
- field { sw = rw; hw = r; reset = 5'd25; } value[4:0];
- };
-
- reg address_space {
- desc = "Select HyperRAM or HyperFlash address-space interpretation.";
- field { sw = rw; hw = r; reset = 1'b0; } value;
- };
-
- reg phys_in_use {
- desc = "Select whether one or both PHY lanes are active.";
- field { sw = rw; hw = r; reset = 1'b1; } value;
- };
-
- reg which_phy {
- desc = "Select the PHY lane used when only one PHY is active.";
- field { sw = rw; hw = r; reset = 1'b1; } value;
- };
-
- reg t_csh_cycles {
- desc = "Chip-select high time between transfers.";
- field { sw = rw; hw = r; reset = 4'h1; } value[3:0];
- };
-
- reg csn_to_ck_cycles {
- desc = "Delay cycles from chip-select assertion to clock start.";
- field { sw = rw; hw = r; reset = 4'h0; } value[3:0];
- };
-
- reg chip0_base {
- desc = "Inclusive 4 MiB-aligned address for chip-select 0 decoding.";
+ desc = "HyperBus controller configuration register map. Enabled chip ranges must be 4 MiB aligned, ordered by chip-select index, and non-overlapping.";
+
+ reg ip_version {
+ desc = "IP version (major.minor.patch.revision).";
+ field { sw = r; hw = r; reset = 8'd0; } major[31:24];
+ field { sw = r; hw = r; reset = 8'd0; } minor[23:16];
+ field { sw = r; hw = r; reset = 8'd9; } patch[15:8];
+ field { sw = r; hw = r; reset = 8'd0; } revision[7:0];
+ };
+ reg reg_if_version {
+ desc = "Register interface version.";
+ field { sw = r; hw = r; reset = 16'd1; } major[31:16];
+ field { sw = r; hw = r; reset = 16'd0; } minor[15:0];
+ };
+ reg capability {
+ desc = "Hardware-provided implementation capabilities.";
+ field { desc = "Number of implemented chip selects."; sw = r; hw = rw; reset = 8'd0; } num_chips[7:0];
+ field { desc = "Number of implemented PHY lanes."; sw = r; hw = rw; reset = 8'd0; } num_phys[15:8];
+ field { desc = "Each chip record controls its corresponding chip rather than chip 0 being shared."; sw = r; hw = rw; reset = 1'b0; } per_chip_cfg[16:16];
+ field { desc = "Each PHY record controls its corresponding lane rather than PHY 0 being shared."; sw = r; hw = rw; reset = 1'b0; } per_phy_cfg[17:17];
+ field { desc = "Per-chip enable bits participate in address decoding."; sw = r; hw = rw; reset = 1'b0; } chip_enable[18:18];
+ field { desc = "CLOCK_CFG controls an implemented backend clock divider."; sw = r; hw = rw; reset = 1'b0; } clock_divider[19:19];
+ field { desc = "FLUSH and APPLY commands implement a staged configuration barrier."; sw = r; hw = rw; reset = 1'b0; } staged_apply[20:20];
+ field { desc = "STATUS reports sticky controller errors."; sw = r; hw = rw; reset = 1'b0; } error_status[21:21];
+ field { desc = "Per-chip RWDS sample timing is implemented."; sw = r; hw = rw; reset = 1'b0; } rwds_sample_timing[22:22];
+ field { desc = "Per-PHY RWDS output-enable timing is implemented."; sw = r; hw = rw; reset = 1'b0; } rwds_oe_timing[23:23];
+ };
+ reg command {
+ desc = "Single-cycle write-one command strobes, active when capability.staged_apply is set; otherwise writes are retained only as inert pulses.";
+ field { sw = rw; hw = r; singlepulse = true; reset = 1'b0; } flush;
+ field { sw = rw; hw = r; singlepulse = true; reset = 1'b0; } apply;
+ };
+ reg status {
+ desc = "Controller status.";
+ field { sw = rw; hw = rw; onwrite = woclr; hwset = true; precedence = hw; reset = 1'b0; } decode_error;
+ field { sw = r; hw = rw; reset = 1'b0; } busy;
+ field { sw = r; hw = rw; reset = 1'b0; } dirty;
+ };
+ reg frontend_cfg {
+ desc = "Frontend configuration. dual_phy must be 0 or 1.";
+ field { sw = rw; hw = r; reset = 1'b1; } dual_phy;
+ };
+ reg clock_cfg {
+ desc = "Backend clock-divider configuration, active when capability.clock_divider is set; divider values must be at least 2.";
+ field { sw = rw; hw = r; reset = 8'd8; } divider[7:0];
+ };
+ reg tx_delay {
+ desc = "PHY transmit delay. PHY 0 is shared when capability.per_phy_cfg is clear.";
+ field { sw = rw; hw = r; reset = 8'h10; } value[7:0];
+ };
+ reg rwds_timing {
+ desc = "PHY RWDS output-enable timing. rwds_oe_setup_cycles must be at most 15 and is active when capability.rwds_oe_timing is set.";
+ field { sw = rw; hw = r; reset = 8'd1; } rwds_oe_setup_cycles[7:0];
+ };
+ reg range_base {
+ desc = "Inclusive 4 MiB-aligned chip address range base.";
field { sw = rw; hw = r; reset = 10'd0; } value[31:22];
};
-
- reg chip0_bound {
- desc = "Exclusive 4 MiB-aligned address for chip-select 0 decoding.";
- field { sw = rw; hw = r; reset = 10'd1; } value[31:22];
- };
-
- reg chip1_base {
- desc = "Inclusive 4 MiB-aligned address for chip-select 1 decoding.";
+ reg range_bound {
+ desc = "Exclusive 4 MiB-aligned chip address range bound.";
field { sw = rw; hw = r; reset = 10'd1; } value[31:22];
};
-
- reg chip1_bound {
- desc = "Exclusive 4 MiB-aligned address for chip-select 1 decoding.";
- field { sw = rw; hw = r; reset = 10'd2; } value[31:22];
- };
-
- reg chip2_base {
- desc = "Inclusive 4 MiB-aligned address for chip-select 2 decoding.";
- field { sw = rw; hw = r; reset = 10'd2; } value[31:22];
- };
-
- reg chip2_bound {
- desc = "Exclusive 4 MiB-aligned address for chip-select 2 decoding.";
- field { sw = rw; hw = r; reset = 10'd3; } value[31:22];
- };
-
- reg chip3_base {
- desc = "Inclusive 4 MiB-aligned address for chip-select 3 decoding.";
- field { sw = rw; hw = r; reset = 10'd3; } value[31:22];
- };
-
- reg chip3_bound {
- desc = "Exclusive 4 MiB-aligned address for chip-select 3 decoding.";
- field { sw = rw; hw = r; reset = 10'd4; } value[31:22];
- };
-
- reg chip4_base {
- desc = "Inclusive 4 MiB-aligned address for chip-select 4 decoding.";
- field { sw = rw; hw = r; reset = 10'd4; } value[31:22];
- };
-
- reg chip4_bound {
- desc = "Exclusive 4 MiB-aligned address for chip-select 4 decoding.";
- field { sw = rw; hw = r; reset = 10'd5; } value[31:22];
- };
-
- reg chip5_base {
- desc = "Inclusive 4 MiB-aligned address for chip-select 5 decoding.";
- field { sw = rw; hw = r; reset = 10'd5; } value[31:22];
- };
-
- reg chip5_bound {
- desc = "Exclusive 4 MiB-aligned address for chip-select 5 decoding.";
- field { sw = rw; hw = r; reset = 10'd6; } value[31:22];
- };
-
- reg chip6_base {
- desc = "Inclusive 4 MiB-aligned address for chip-select 6 decoding.";
- field { sw = rw; hw = r; reset = 10'd6; } value[31:22];
- };
-
- reg chip6_bound {
- desc = "Exclusive 4 MiB-aligned address for chip-select 6 decoding.";
- field { sw = rw; hw = r; reset = 10'd7; } value[31:22];
- };
-
- reg chip7_base {
- desc = "Inclusive 4 MiB-aligned address for chip-select 7 decoding.";
- field { sw = rw; hw = r; reset = 10'd7; } value[31:22];
- };
-
- reg chip7_bound {
- desc = "Exclusive 4 MiB-aligned address for chip-select 7 decoding.";
- field { sw = rw; hw = r; reset = 10'd8; } value[31:22];
- };
-
- t_latency_access t_latency_access @ 0x00;
- en_latency_additional en_latency_additional @ 0x04;
- t_burst_max t_burst_max @ 0x08;
- t_read_write_recovery t_read_write_recovery @ 0x0c;
- t_rx_clk_delay t_rx_clk_delay @ 0x10;
- t_tx_clk_delay t_tx_clk_delay @ 0x14;
- address_mask_msb address_mask_msb @ 0x18;
- address_space address_space @ 0x1c;
- phys_in_use phys_in_use @ 0x20;
- which_phy which_phy @ 0x24;
- t_csh_cycles t_csh_cycles @ 0x28;
- csn_to_ck_cycles csn_to_ck_cycles @ 0x2c;
- chip0_base chip0_base @ 0x30;
- chip0_bound chip0_bound @ 0x34;
- chip1_base chip1_base @ 0x38;
- chip1_bound chip1_bound @ 0x3c;
- chip2_base chip2_base @ 0x40;
- chip2_bound chip2_bound @ 0x44;
- chip3_base chip3_base @ 0x48;
- chip3_bound chip3_bound @ 0x4c;
- chip4_base chip4_base @ 0x58;
- chip4_bound chip4_bound @ 0x5c;
- chip5_base chip5_base @ 0x60;
- chip5_bound chip5_bound @ 0x64;
- chip6_base chip6_base @ 0x68;
- chip6_bound chip6_bound @ 0x6c;
- chip7_base chip7_base @ 0x70;
- chip7_bound chip7_bound @ 0x74;
+ reg address_cfg {
+ desc = "Chip address-space interpretation and enable. address_space and enable must be 0 or 1, and address_mask_msb must be at most 31. Chip 0 is shared when capability.per_chip_cfg is clear; enable is active when capability.chip_enable is set.";
+ field { sw = rw; hw = r; reset = 8'd0; } address_space[7:0];
+ field { sw = rw; hw = r; reset = 8'd25; } address_mask_msb[15:8];
+ field { sw = rw; hw = r; reset = 1'b1; } enable[16:16];
+ };
+ reg latency_cfg {
+ desc = "Chip latency configuration. t_latency_access must be 3 through 15; rwds_sample_delay must be at most 15 and is active when capability.rwds_sample_timing is set. Chip 0 is shared when capability.per_chip_cfg is clear.";
+ field { sw = rw; hw = r; reset = 8'd6; } t_latency_access[7:0];
+ field { sw = rw; hw = r; reset = 8'd0; } rwds_sample_delay[15:8];
+ field { sw = rw; hw = r; reset = 1'b0; } en_latency_additional[16:16];
+ };
+ reg burst_cfg {
+ desc = "Chip burst configuration. Chip 0 is shared when capability.per_chip_cfg is clear.";
+ field { sw = rw; hw = r; reset = 16'd350; } t_burst_max[15:0];
+ };
+ reg chip_timing {
+ desc = "Chip-select and read/write timing; byte-backed timing values must be at most 15. Chip 0 is shared when capability.per_chip_cfg is clear.";
+ field { sw = rw; hw = r; reset = 8'd6; } t_read_write_recovery[7:0];
+ field { sw = rw; hw = r; reset = 8'd1; } t_csh_cycles[15:8];
+ field { sw = rw; hw = r; reset = 8'd0; } csn_to_ck_cycles[23:16];
+ };
+ reg rx_delay {
+ desc = "Chip receive delay. Chip 0 is shared when capability.per_chip_cfg is clear.";
+ field { sw = rw; hw = r; reset = 8'h10; } value[7:0];
+ };
+ reg reserved_top {
+ desc = "Reserved endpoint that fixes the register window size to 4 KiB.";
+ field { sw = r; hw = r; reset = 32'd0; } value[31:0];
+ };
+ regfile phy_regs {
+ tx_delay tx_delay @0x00;
+ rwds_timing rwds_timing @0x04;
+ };
+ regfile chip_regs {
+ range_base range_base @0x00;
+ range_bound range_bound @0x04;
+ address_cfg address_cfg @0x08;
+ latency_cfg latency_cfg @0x0c;
+ burst_cfg burst_cfg @0x10;
+ chip_timing chip_timing @0x14;
+ rx_delay rx_delay @0x18;
+ };
+ regfile global_regs {
+ ip_version ip_version @0x000;
+ reg_if_version reg_if_version @0x004;
+ capability capability @0x008;
+ command command @0x00c;
+ status status @0x010;
+ };
+ regfile frontend_regs {
+ frontend_cfg frontend_cfg @0x000;
+ };
+ regfile backend_regs {
+ clock_cfg clock_cfg @0x000;
+ };
+ global_regs global_cfg @0x000;
+ frontend_regs frontend @0x100;
+ backend_regs backend @0x200;
+ phy_regs phy_0 @0x300;
+ phy_regs phy_1 @0x340;
+ chip_regs chip_0 @0x400;
+ chip_regs chip_1 @0x440;
+ chip_regs chip_2 @0x480;
+ chip_regs chip_3 @0x4c0;
+ chip_regs chip_4 @0x500;
+ chip_regs chip_5 @0x540;
+ chip_regs chip_6 @0x580;
+ chip_regs chip_7 @0x5c0;
+ chip_1.range_base.value->reset = 10'd1;
+ chip_1.range_bound.value->reset = 10'd2;
+ chip_2.range_base.value->reset = 10'd2;
+ chip_2.range_bound.value->reset = 10'd3;
+ chip_3.range_base.value->reset = 10'd3;
+ chip_3.range_bound.value->reset = 10'd4;
+ chip_4.range_base.value->reset = 10'd4;
+ chip_4.range_bound.value->reset = 10'd5;
+ chip_5.range_base.value->reset = 10'd5;
+ chip_5.range_bound.value->reset = 10'd6;
+ chip_6.range_base.value->reset = 10'd6;
+ chip_6.range_bound.value->reset = 10'd7;
+ chip_7.range_base.value->reset = 10'd7;
+ chip_7.range_bound.value->reset = 10'd8;
+ reserved_top reserved_top @0xffc;
};
diff --git a/test/axi_hyper_tb.sv b/test/axi_hyper_tb.sv
index fcd42cd..fd1d57f 100644
--- a/test/axi_hyper_tb.sv
+++ b/test/axi_hyper_tb.sv
@@ -235,6 +235,10 @@ module axi_hyper_tb
// Address Ranges //
////////////////////
localparam axi_addr_t MemRegionStart = axi_addr_t'(32'h8000_0000);
+ localparam logic [31:0] CfgFrontendAddr = 32'h0000_0100;
+ localparam logic [31:0] CfgChip0AddressAddr = 32'h0000_0408;
+ localparam logic [31:0] CfgChip0Memory = 32'h0001_1900;
+ localparam logic [31:0] CfgChip0Register = 32'h0001_1901;
localparam axi_addr_t MemRegionLength = axi_addr_t'(TbDramDataWidth * TbDramLenWidth);
logic s_error;
@@ -378,7 +382,7 @@ module axi_hyper_tb
#600350ns;
// switch memory address space to register space
- reg_master.send_write(32'h7<<2, 1'b1, '1, s_reg_error);
+ reg_master.send_write(CfgChip0AddressAddr, CfgChip0Register, '1, s_reg_error);
if (s_reg_error != 1'b0) $error("unexpected error");
// enable variable latency so we can test RWDS sampling
@@ -386,7 +390,7 @@ module axi_hyper_tb
axi_write_32(32'h8000_0000 + S27KS_CFG0_REG_OFFSET, (s27ks_cfg0 | s27ks_cfg0 << 16));
// switch back to memory address space
- reg_master.send_write(32'h7<<2, 1'b0, '1, s_reg_error);
+ reg_master.send_write(CfgChip0AddressAddr, CfgChip0Memory, '1, s_reg_error);
if (s_reg_error != 1'b0) $error("unexpected error");
check_consecutive_reads(axi_ctrl_mst);
@@ -411,31 +415,7 @@ module axi_hyper_tb
$display("= Use only phy 0 =");
$display("===========================");
- reg_master.send_write(32'h20,1'b0,'1,s_reg_error);
- reg_master.send_write(32'h24,1'b0,'1,s_reg_error);
- if (s_reg_error != 1'b0) $error("unexpected error");
-
- axi_rand_mst.reset();
- axi_ctrl_mst.reset_master();
- check_odd_subword_accesses(axi_ctrl_mst);
-
- $display("===========================");
- $display("= Random AXI transactions =");
- $display("===========================");
-
- axi_rand_mst.run(TbNumReads, TbNumWrites);
-
- $display("===========================");
- $display("= Test finished =");
- $display("===========================");
-
- mst_scoreboard.clear_range(32'h8000_0000, 32'h8000_0000 + ( TbDramDataWidth * TbDramLenWidth ));
-
- $display("===========================");
- $display("= Use only phy 1 =");
- $display("===========================");
-
- reg_master.send_write(32'h24,1'b1,'1,s_reg_error);
+ reg_master.send_write(CfgFrontendAddr, 32'h0, '1, s_reg_error);
if (s_reg_error != 1'b0) $error("unexpected error");
axi_rand_mst.reset();
diff --git a/test/hyperbus_cfg_regs_tb.sv b/test/hyperbus_cfg_regs_tb.sv
index 2209dcb..a9e8f9f 100644
--- a/test/hyperbus_cfg_regs_tb.sv
+++ b/test/hyperbus_cfg_regs_tb.sv
@@ -7,7 +7,7 @@ module hyperbus_cfg_regs_tb;
localparam int unsigned NumChips = 8;
typedef struct packed {
- logic [7:0] addr;
+ logic [31:0] addr;
logic write;
logic [31:0] wdata;
logic [3:0] wstrb;
@@ -34,58 +34,70 @@ module hyperbus_cfg_regs_tb;
hyperbus_pkg::phy_cfg_t phy_cfg;
rule_t [NumChips-1:0] chip_rules;
logic trans_active;
-
- task automatic reg_write(
- input logic [7:0] addr,
- input logic [31:0] data
- );
+ logic cfg_busy;
+ logic decode_error;
+ logic cfg_dirty;
+ logic flush_req;
+ logic apply_req;
+ int unsigned command_pulse_count;
+
+ task automatic reg_write_strobe(input logic [31:0] addr, input logic [31:0] data,
+ input logic [3:0] strb);
+ @(negedge clk);
+ reg_req = '{addr: addr, write: 1'b1, wdata: data, wstrb: strb, valid: 1'b1};
+ do @(posedge clk); while (!reg_rsp.ready);
+ if (reg_rsp.error) $error("Register write to 0x%0h failed", addr);
@(negedge clk);
- reg_req.addr = addr;
- reg_req.write = 1'b1;
- reg_req.wdata = data;
- reg_req.wstrb = '1;
- reg_req.valid = 1'b1;
+ reg_req.valid = 1'b0;
+ endtask
- do begin
- @(posedge clk);
- end while (!reg_rsp.ready);
- if (reg_rsp.error) begin
- $error("Register write to 0x%0h failed", addr);
- end
+ task automatic reg_write(input logic [31:0] addr, input logic [31:0] data);
+ reg_write_strobe(addr, data, 4'b1111);
+ endtask
+ task automatic reg_write_error(input logic [31:0] addr, input logic [31:0] data,
+ input logic [3:0] strb);
+ @(negedge clk);
+ reg_req = '{addr: addr, write: 1'b1, wdata: data, wstrb: strb, valid: 1'b1};
+ do @(posedge clk); while (!reg_rsp.ready);
+ if (!reg_rsp.error) $error("Invalid register write to 0x%0h was accepted", addr);
@(negedge clk);
reg_req.valid = 1'b0;
endtask
- task automatic reg_read(
- input logic [7:0] addr,
- output logic [31:0] data
- );
+ task automatic reg_read(input logic [31:0] addr, output logic [31:0] data);
@(negedge clk);
- reg_req.addr = addr;
- reg_req.write = 1'b0;
- reg_req.wdata = '0;
- reg_req.wstrb = '0;
- reg_req.valid = 1'b1;
-
- do begin
- @(posedge clk);
- end while (!reg_rsp.ready);
+ reg_req = '{addr: addr, write: 1'b0, wdata: '0, wstrb: '0, valid: 1'b1};
+ do @(posedge clk); while (!reg_rsp.ready);
data = reg_rsp.rdata;
- if (reg_rsp.error) begin
- $error("Register read from 0x%0h failed", addr);
- end
+ if (reg_rsp.error) $error("Register read from 0x%0h failed", addr);
+ @(negedge clk);
+ reg_req.valid = 1'b0;
+ endtask
+ task automatic reg_read_error(input logic [31:0] addr);
+ logic [31:0] unused;
+ @(negedge clk);
+ reg_req = '{addr: addr, write: 1'b0, wdata: '0, wstrb: '0, valid: 1'b1};
+ do @(posedge clk); while (!reg_rsp.ready);
+ if (!reg_rsp.error) $error("Unmapped read from 0x%0h was accepted", addr);
+ unused = reg_rsp.rdata;
@(negedge clk);
reg_req.valid = 1'b0;
endtask
always #5ns clk = ~clk;
+ always @(posedge clk) begin
+ if (rst_n && flush_req && apply_req) command_pulse_count++;
+ end
+
hyperbus_cfg_regs #(
.NumChips ( NumChips ),
.NumPhys ( 2 ),
.RegDataWidth ( 32 ),
+ .RegAddrWidth ( 32 ),
+ .CapabilityFeatures ( 8'hff ),
.reg_req_t ( reg_req_t ),
.reg_rsp_t ( reg_rsp_t ),
.rule_t ( rule_t )
@@ -97,23 +109,73 @@ module hyperbus_cfg_regs_tb;
.frontend_cfg_o ( frontend_cfg ),
.phy_cfg_o ( phy_cfg ),
.chip_rules_o ( chip_rules ),
- .trans_active_i ( trans_active )
+ .trans_active_i ( trans_active ),
+ .cfg_busy_i ( cfg_busy ),
+ .decode_error_i ( decode_error ),
+ .cfg_dirty_i ( cfg_dirty ),
+ .flush_req_o ( flush_req ),
+ .apply_req_o ( apply_req )
);
initial begin : proc_stimulus
- logic [31:0] chip_addr;
- logic [31:0] rx_clk_delay;
- logic [31:0] tx_clk_delay;
+ logic [31:0] data;
clk = 1'b0;
rst_n = 1'b0;
reg_req = '0;
trans_active = 1'b0;
-
+ cfg_busy = 1'b0;
+ decode_error = 1'b0;
+ cfg_dirty = 1'b0;
+ command_pulse_count = 0;
repeat (4) @(posedge clk);
rst_n = 1'b1;
repeat (2) @(posedge clk);
+ reg_read(12'h000, data);
+ if (data != 32'h0000_0900) $error("Unexpected IP_VERSION reset: %h", data);
+ reg_read(12'h004, data);
+ if (data != 32'h0001_0000) $error("Unexpected REG_IF_VERSION reset: %h", data);
+ @(negedge clk);
+ reg_req = '{addr: 32'h00c, write: 1'b1, wdata: 32'h3, wstrb: 4'b1111, valid: 1'b1};
+ do @(posedge clk); while (!reg_rsp.ready);
+ if (reg_rsp.error) $error("COMMAND write failed");
+ @(negedge clk);
+ reg_req.valid = 1'b0;
+ repeat (2) @(posedge clk);
+ #1ns;
+ if (command_pulse_count != 1) begin
+ $error("COMMAND strobes were sampled %0d times", command_pulse_count);
+ end
+ if (flush_req || apply_req) $error("COMMAND strobes were not one-cycle pulses");
+ reg_read(12'h00c, data);
+ if (data != 32'h0) $error("COMMAND strobes did not clear after one cycle: %h", data);
+ reg_read(12'h008, data);
+ if (data != 32'h00ff_0208) $error("Unexpected CAPABILITY reset: %h", data);
+ reg_read(12'h010, data);
+ if (data != 32'h0) $error("Unexpected STATUS reset: %h", data);
+ reg_read(12'h100, data);
+ if ((data != 32'h1) || !frontend_cfg.phys_in_use) $error("Unexpected frontend reset");
+ reg_read(12'h200, data);
+ if (data != 32'h8) $error("Unexpected CLOCK_CFG reset: %h", data);
+ reg_write_error(32'h200, 32'h1, 4'b0001);
+ reg_read(32'h200, data);
+ if (data != 32'h8) $error("Invalid divider write modified the register: %h", data);
+ reg_read(12'h300, data);
+ if (data != 32'h10) $error("Unexpected PHY0 TX_DELAY reset: %h", data);
+ reg_read(12'h340, data);
+ if (data != 32'h10) $error("Unexpected PHY1 TX_DELAY reset: %h", data);
+ reg_read(12'h408, data);
+ if (data != 32'h0001_1900) $error("Unexpected chip0 ADDRESS_CFG reset: %h", data);
+ reg_read(12'h40c, data);
+ if (data != 32'h6) $error("Unexpected chip0 LATENCY_CFG reset: %h", data);
+ reg_read(12'h410, data);
+ if (data != 32'd350) $error("Unexpected chip0 BURST_CFG reset: %h", data);
+ reg_read(12'h414, data);
+ if (data != 32'h106) $error("Unexpected chip0 CHIP_TIMING reset: %h", data);
+ reg_read(12'h418, data);
+ if (data != 32'h10) $error("Unexpected chip0 RX_DELAY reset: %h", data);
+
for (int unsigned i = 0; i < NumChips; i++) begin
if ((chip_rules[i].start_addr != i * 32'h0040_0000) ||
(chip_rules[i].end_addr != (i + 1) * 32'h0040_0000)) begin
@@ -121,45 +183,69 @@ module hyperbus_cfg_regs_tb;
end
end
- // Exercise both the fine [4:0] and coarse [7:5] delay settings.
- reg_write(8'h10, 8'hb5);
- reg_write(8'h14, 8'h6a);
- reg_read(8'h10, rx_clk_delay);
- reg_read(8'h14, tx_clk_delay);
- if ((rx_clk_delay != 8'hb5) || (tx_clk_delay != 8'h6a) ||
- (phy_cfg.chip.t_rx_clk_delay != 8'hb5) ||
- (phy_cfg.t_tx_clk_delay != 8'h6a)) begin
- $error("Delay-line configuration fields did not take effect");
- end
-
- // Low address bits are not stored and read back as zero.
- reg_write(8'h70, 32'h8134_5678);
- reg_read(8'h70, chip_addr);
- if ((chip_addr != 32'h8100_0000) ||
- (chip_rules[7].start_addr != 32'h8100_0000)) begin
- $error("Chip address alignment was not applied");
- end
+ reg_write(12'h340, 32'h0000_00a5);
+ reg_read(12'h340, data);
+ if ((data != 8'ha5) || (phy_cfg.t_tx_clk_delay != 8'h10))
+ $error("PHY1 write/read or PHY0 mapping failed");
+ reg_write(12'h300, 32'h0000_005a);
+ if (phy_cfg.t_tx_clk_delay != 8'h5a) $error("PHY0 TX_DELAY mapping failed");
+
+ reg_write(12'h400 + 12'h1c0, 32'h8134_5678);
+ reg_read(12'h400 + 12'h1c0, data);
+ if ((data != 32'h8100_0000) || (chip_rules[7].start_addr != 32'h8100_0000))
+ $error("Chip7 address alignment was not applied");
+
+ reg_write(12'h40c, 32'h0001_0007);
+ reg_read(12'h40c, data);
+ if ((data != 32'h0001_0007) || (phy_cfg.chip.t_latency_access != 7) ||
+ !phy_cfg.chip.en_latency_additional) $error("Chip0 latency mapping failed");
+ reg_write(12'h414, 32'h0000_010a);
+ reg_write_strobe(32'h414, 32'h0000_0007, 4'b0001);
+ reg_read(32'h414, data);
+ if (data != 32'h0000_0107) $error("Partial timing write failed: %h", data);
+ reg_write_error(32'h414, 32'h0000_0010, 4'b0001);
+ reg_read(32'h414, data);
+ if (data != 32'h0000_0107) $error("Invalid timing write modified the register: %h", data);
+ reg_write_error(32'h40c, 32'h0000_0002, 4'b0001);
+ reg_read(32'h40c, data);
+ if (data != 32'h0001_0007) $error("Invalid latency write modified the register: %h", data);
+ reg_read_error(12'h415);
+
+ reg_read_error(12'h104);
+ reg_read_error(32'h0000_1000);
+ reg_read(12'hffc, data);
+ if (data != '0) $error("Reserved endpoint did not read as zero");
- // A new configuration access must wait for an active transfer to finish.
+ trans_active = 1'b1;
+ cfg_busy = 1'b1;
+ reg_read(32'h010, data);
+ if ((data & 32'h2) == 0) $error("STATUS read was blocked during active transfer");
+ decode_error = 1'b1;
+ cfg_dirty = 1'b1;
+ reg_read(32'h010, data);
+ if ((data & 32'h5) != 32'h5) $error("STATUS hardware bits were not set: %h", data);
+ trans_active = 1'b0;
+ reg_write(32'h010, 32'h1);
+ reg_read(32'h010, data);
+ if ((data & 32'h1) == 0) $error("STATUS hwset did not win over W1C");
+ decode_error = 1'b0;
+ cfg_dirty = 1'b0;
+ reg_write(32'h010, 32'h1);
+ reg_read(32'h010, data);
+ if ((data & 32'h1) != 0) $error("STATUS W1C did not clear decode_error");
trans_active = 1'b1;
@(negedge clk);
- reg_req.addr = 8'h00;
- reg_req.write = 1'b0;
- reg_req.valid = 1'b1;
+ reg_req = '{addr: 32'h000, write: 1'b0, wdata: '0, wstrb: '0, valid: 1'b1};
repeat (3) begin
@(posedge clk);
- if (reg_rsp.ready) begin
- $error("Configuration access completed during an active transfer");
- end
+ if (reg_rsp.ready) $error("Access completed during active transfer");
end
trans_active = 1'b0;
- do begin
- @(posedge clk);
- end while (!reg_rsp.ready);
+ cfg_busy = 1'b0;
+ do @(posedge clk); while (!reg_rsp.ready);
@(negedge clk);
reg_req.valid = 1'b0;
$finish;
end
-
endmodule