Ch441: one-entry fully-registered W buffer, Z-RMW master -> wr_arb s2 [READY FOR REVIEW]
Cuts the lone remaining EMIF setup fail (-0.016 ns, -0.259 skew): the combinational EMIF gen_p2c_ff -> wr_arb s2_wready -> gs_lpddr_z_rmw next-state (st, endpoint labelled S_FILL_R via the shared encoded state register). New gs_axi_w_regbuf: fully-registered one-entry W buffer (Option B per Codex). - u_wready = !full ONLY (registered occupancy) -> EMIF WREADY never reaches the Z FSM combinationally. NOT a fall-through skid (no !full-OR-d_wready term). - Buffers WDATA/WSTRB/WLAST; downstream held stable until accepted; exactly-once. - AW/B untouched; arbiter bready_q unchanged (still arms on real EMIF W handshake). - z_rmw may enter B-wait once the beat is buffered -- safe: EMIF cannot return B until the buffered beat reaches it. Single-beat writes -> the 1-beat/2-cycle buffer rate is far above the Z write rate (no new FIFO pressure). Wired in zc_emit between u_z W output (zi_*) and the z_w* ports. New file in sim Makefile RTL_SRCS + synth QSF (both). Focused tb_gs_axi_w_regbuf: exactly-once/order/ payload scoreboard + no-combinational-bypass check (u_wready===!full incl. full && d_wready) + downstream-stable check; standalone target + in make run. Texture-cache +0.016 paths NOT touched. No simulations or Quartus run. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+11
-1
@@ -585,6 +585,7 @@ RTL_SRCS := \
|
||||
$(RTL_ROOT)/gif_gs/gs_lpddr_map_pkg.sv \
|
||||
$(RTL_ROOT)/gif_gs/gs_lpddr_axi_master.sv \
|
||||
$(RTL_ROOT)/gif_gs/gs_lpddr_z_rmw.sv \
|
||||
$(RTL_ROOT)/gif_gs/gs_axi_w_regbuf.sv \
|
||||
$(RTL_ROOT)/gif_gs/gs_lpddr_zc_emit.sv \
|
||||
$(RTL_ROOT)/gif_gs/gs_lpddr_rd_probe.sv \
|
||||
$(RTL_ROOT)/gif_gs/gs_lpddr_scanout.sv \
|
||||
@@ -1143,6 +1144,15 @@ tb_gs_lpddr_zc_emit: dirs
|
||||
@echo "=== run tb_gs_lpddr_zc_emit ==="
|
||||
@cd $(TRACE_DIR) && $(VVP) $(BUILD_DIR)/tb_gs_lpddr_zc_emit.vvp
|
||||
|
||||
tb_gs_axi_w_regbuf: dirs
|
||||
@echo "=== build tb_gs_axi_w_regbuf ==="
|
||||
$(IVERILOG) $(IVERILOG_FLGS) \
|
||||
-o $(BUILD_DIR)/tb_gs_axi_w_regbuf.vvp \
|
||||
-s tb_gs_axi_w_regbuf \
|
||||
$(RTL_SRCS) $(TB_ROOT)/gif_gs/tb_gs_axi_w_regbuf.sv
|
||||
@echo "=== run tb_gs_axi_w_regbuf ==="
|
||||
@cd $(TRACE_DIR) && $(VVP) $(BUILD_DIR)/tb_gs_axi_w_regbuf.vvp
|
||||
|
||||
tb_gs_grad_divider: dirs
|
||||
@echo "=== build tb_gs_grad_divider ==="
|
||||
$(IVERILOG) $(IVERILOG_FLGS) \
|
||||
@@ -6263,7 +6273,7 @@ run: tb_top_psmct32_sh3_zs640c12_cap tb_top_psmct32_sh3_zint640c12
|
||||
run: tb_top_psmct32_sh3_zs640b24_cap tb_top_psmct32_sh3_zint640b24
|
||||
|
||||
.PHONY: tb_top_psmct32_sh3_zs640c24c_cap tb_top_psmct32_sh3_zint640c24c sh3_zs640c24c_fixture sh3_zs640motionabc_bootlet
|
||||
run: tb_top_psmct32_sh3_zs640c24c_cap tb_top_psmct32_sh3_zint640c24c
|
||||
run: tb_top_psmct32_sh3_zs640c24c_cap tb_top_psmct32_sh3_zint640c24c tb_gs_axi_w_regbuf
|
||||
|
||||
run: tb_ee_fetch tb_gs tb_intc tb_platform_video tb_bgcolor_via_dma tb_sif_mailbox \
|
||||
tb_sif_command_echo tb_sif_command_echo_rearm tb_sif_negative_path \
|
||||
|
||||
Reference in New Issue
Block a user