[tlul_lc_gate] Use prim_blanker instead of muxes and buffers
Signed-off-by: Michael Schaffner <msf@google.com>
diff --git a/hw/ip/tlul/rtl/tlul_lc_gate.sv b/hw/ip/tlul/rtl/tlul_lc_gate.sv
index 80786a1..7285c6e 100644
--- a/hw/ip/tlul/rtl/tlul_lc_gate.sv
+++ b/hw/ip/tlul/rtl/tlul_lc_gate.sv
@@ -53,26 +53,20 @@
tl_d2h_t tl_d2h_int [NumGatesPerDirection+1];
for (genvar k = 0; k < NumGatesPerDirection; k++) begin : gen_lc_gating_muxes
// H -> D path.
- tl_h2d_t tl_h2d_unbuf;
- assign tl_h2d_unbuf = (lc_tx_test_true_strict(lc_en_buf[2*k])) ? tl_h2d_int[k] : '0;
- // We do not want the tool to get smart about restructuring the muxes, hence we insert an
- // optimization barrier between them.
- prim_buf #(
+ prim_blanker #(
.Width($bits(tl_h2d_t))
- ) u_prim_buf_h2d (
- .in_i(tl_h2d_unbuf),
+ ) u_prim_blanker_h2d (
+ .in_i(tl_h2d_int[k]),
+ .en_i(lc_tx_test_true_strict(lc_en_buf[2*k])),
.out_o(tl_h2d_int[k+1])
);
// D -> H path.
- tl_d2h_t tl_d2h_unbuf;
- assign tl_d2h_unbuf = (lc_tx_test_true_strict(lc_en_buf[2*k+1])) ? tl_d2h_int[k+1] : '0;
- // We do not want the tool to get smart about restructuring the muxes, hence we insert an
- // optimization barrier between them.
- prim_buf #(
+ prim_blanker #(
.Width($bits(tl_d2h_t))
- ) u_prim_buf_d2h (
- .in_i(tl_d2h_unbuf),
+ ) u_prim_blanker_d2h (
+ .in_i(tl_d2h_int[k+1]),
+ .en_i(lc_tx_test_true_strict(lc_en_buf[2*k+1])),
.out_o(tl_d2h_int[k])
);
end
diff --git a/hw/ip/tlul/tlul_lc_gate.core b/hw/ip/tlul/tlul_lc_gate.core
index 8a60dfa..2e65cd5 100644
--- a/hw/ip/tlul/tlul_lc_gate.core
+++ b/hw/ip/tlul/tlul_lc_gate.core
@@ -11,6 +11,7 @@
- lowrisc:prim:assert
- lowrisc:tlul:common
- lowrisc:ip:lc_ctrl_pkg
+ - lowrisc:prim:blanker
files:
- rtl/tlul_lc_gate.sv
file_type: systemVerilogSource