@@ -27,20 +27,17 @@ module writeback #(
2727);
2828
2929 localparam N_REG = 32 ;
30- localparam // Addresses for local memory 0:32 is registers, rest is SRAM
31- A_START = 'h0 ,
32- A_N_BUNDLES_1 = 'h1 ,
33- A_EN_COUNT = 'h2 ,
34- A_VALID = 'h3 ,
35- A_IB = 'h4 ,
36- A_IP = 'h5 ,
37- A_IN = 'h6 ,
38- A_IL = 'h7 ,
39- A_IWKW2 = 'h8
40- ; // Max 32 registers
30+
31+ // Addresses for local memory 0:32 is registers, rest is SRAM
32+ typedef enum int {
33+ `include " config_reg.def"
34+ WB_A_NUM_REGS
35+ } wb_reg_e ;
36+
4137 logic [WIDTH - 1 : 0 ] cfg [N_REG - 1 : 0 ];
42- wire en_count = 1 '(cfg[A_EN_COUNT ]);
43- wire start = 1 '(cfg[A_START ]);
38+ wire en_count = 1 '(cfg[WB_A_EN_COUNT ]);
39+ wire start = 1 '(cfg[WB_A_START ]);
40+ wire [WIDTH - 1 : 0 ] n_bundles_1 = cfg[WB_A_N_BUNDLES_1 ];
4441
4542 // ------------------- BUNDLES SRAM ---------------------------------------
4643
@@ -69,12 +66,6 @@ module writeback #(
6966 .doB (ram_rd_data)
7067 );
7168
72- logic [AXI_ADDR_WIDTH - 1 : 0 ] reg_rd_addr_valid;
73- always_ff @ (posedge clk) begin
74- ram_rd_valid <= ram_rd_en;
75- reg_rd_addr_valid <= reg_rd_addr;
76- end
77-
7869 always_comb begin
7970 ram_wr_en = reg_wr_en && (reg_wr_addr >= N_REG );
8071 ram_wr_addr = SRAM_WR_ADDR_WIDTH ' (reg_wr_addr - N_REG );
@@ -103,12 +94,12 @@ module writeback #(
10394 ram_rd_valid <= ram_rd_en;
10495 end
10596
106- up_counter # (.W (WIDTH )) C_B (.clk (clk), .rstn_g (rstn), .rst_l (start ), .en (lc_p ), .max_in (WIDTH '(cfg[ A_N_BUNDLES_1 ]) ), .last_clk (lc_b ), .last (l_b ), .first (), .count (i_b ));
107- up_counter # (.W (WIDTH )) C_P (.clk (clk), .rstn_g (rstn), .rst_l (ram_rd_valid ), .en (lc_t ), .max_in (WIDTH '( ram_max_p ) ), .last_clk (lc_p ), .last (l_p ), .first (), .count (i_p ));
108- up_counter # (.W (WIDTH )) C_T (.clk (clk), .rstn_g (rstn), .rst_l (ram_rd_valid ), .en (lc_n ), .max_in (WIDTH '( ram_max_t ) ), .last_clk (lc_t ), .last (l_t ), .first (), .count (i_t ));
109- up_counter # (.W (WIDTH )) C_N (.clk (clk), .rstn_g (rstn), .rst_l (ram_rd_valid ), .en (lc_l ), .max_in (WIDTH '( ram_max_n ) ), .last_clk (lc_n ), .last (l_n ), .first (), .count (i_n ));
110- up_counter # (.W (WIDTH )) C_L (.clk (clk), .rstn_g (rstn), .rst_l (ram_rd_valid ), .en (lc_wkw2 ), .max_in (WIDTH '( ram_max_l ) ), .last_clk (lc_l ), .last (l_l ), .first (), .count (i_l ));
111- up_counter # (.W (WIDTH )) C_WKW2 (.clk (clk), .rstn_g (rstn), .rst_l (ram_rd_valid ), .en (en_count), .max_in (WIDTH '( ram_max_wkw2 ) ), .last_clk (lc_wkw2), .last (l_wkw2), .first (), .count (i_wkw2));
97+ up_counter # (.W (WIDTH )) C_B (.clk (clk), .rstn_g (rstn), .rst_l (start ), .en (lc_p ), .max_in (n_bundles_1 ), .last_clk (lc_b ), .last (l_b ), .first (), .count (i_b ));
98+ up_counter # (.W (WIDTH )) C_P (.clk (clk), .rstn_g (rstn), .rst_l (ram_rd_valid ), .en (lc_t ), .max_in (ram_max_p ), .last_clk (lc_p ), .last (l_p ), .first (), .count (i_p ));
99+ up_counter # (.W (WIDTH )) C_T (.clk (clk), .rstn_g (rstn), .rst_l (ram_rd_valid ), .en (lc_n ), .max_in (ram_max_t ), .last_clk (lc_t ), .last (l_t ), .first (), .count (i_t ));
100+ up_counter # (.W (WIDTH )) C_N (.clk (clk), .rstn_g (rstn), .rst_l (ram_rd_valid ), .en (lc_l ), .max_in (ram_max_n ), .last_clk (lc_n ), .last (l_n ), .first (), .count (i_n ));
101+ up_counter # (.W (WIDTH )) C_L (.clk (clk), .rstn_g (rstn), .rst_l (ram_rd_valid ), .en (lc_wkw2 ), .max_in (ram_max_l ), .last_clk (lc_l ), .last (l_l ), .first (), .count (i_l ));
102+ up_counter # (.W (WIDTH )) C_WKW2 (.clk (clk), .rstn_g (rstn), .rst_l (ram_rd_valid ), .en (en_count), .max_in (ram_max_wkw2), .last_clk (lc_wkw2), .last (l_wkw2), .first (), .count (i_wkw2));
112103
113104 // It takes a few cycles after en_count for the registers to have valid data:
114105 // 0 - en_count, lc_p
@@ -126,20 +117,19 @@ module writeback #(
126117 end else begin
127118
128119 if (en_count)
129- cfg[A_EN_COUNT ] <= WIDTH ' (0 );
120+ cfg[WB_A_EN_COUNT ] <= WIDTH ' (0 );
130121
131122 if (start)
132- cfg[A_START ] <= WIDTH ' (0 );
123+ cfg[WB_A_START ] <= WIDTH ' (0 );
133124
134125 if (i_valid_next)
135- cfg[A_VALID ] <= WIDTH ' (1 );
136-
137- cfg[A_IB ] <= i_b ;
138- cfg[A_IP ] <= i_p ;
139- cfg[A_IN ] <= i_n ;
140- cfg[A_IL ] <= i_l ;
141- cfg[A_IWKW2 ] <= i_wkw2;
126+ cfg[WB_A_VALID ] <= WIDTH ' (1 );
142127
128+ cfg[WB_A_IB ] <= i_b ;
129+ cfg[WB_A_IP ] <= i_p ;
130+ cfg[WB_A_IN ] <= i_n ;
131+ cfg[WB_A_IL ] <= i_l ;
132+ cfg[WB_A_IWKW2 ] <= i_wkw2;
143133
144134 if (reg_wr_en && reg_wr_addr < N_REG ) // PS has priority in writing to registers
145135 cfg[reg_wr_addr] <= WIDTH ' (reg_wr_data);
0 commit comments