From 6ead92f3df7f1103210b74635322a7ddc30bfca1 Mon Sep 17 00:00:00 2001 From: "amit.b" Date: Mon, 29 Mar 2021 20:56:16 +0530 Subject: [PATCH] Removed latches except L_in register --- sources_1/imports/Downloads/sc_decoder_fsm.sv | 122 +++++++++++++++--- 1 file changed, 107 insertions(+), 15 deletions(-) diff --git a/sources_1/imports/Downloads/sc_decoder_fsm.sv b/sources_1/imports/Downloads/sc_decoder_fsm.sv index cce19c1..6687462 100644 --- a/sources_1/imports/Downloads/sc_decoder_fsm.sv +++ b/sources_1/imports/Downloads/sc_decoder_fsm.sv @@ -1,7 +1,7 @@ `timescale 1ns/1ps `define BITS 8 -module sc_decoder_fsm #(parameter BITS=8, N=11'd32)( +module sc_decoder_fsm #(parameter BITS=8, N=11'd128)( input clk, rst, input in_valid, input signed [N-1:0][BITS-1:0] y, @@ -47,7 +47,7 @@ endfunction localparam d = $clog2(N); // Internal Signals -logic [N-1:0][BITS-1:0] L_in, L_out; +logic [N-1:0][BITS-1:0] L_in = 'b0, L_out; logic [d :0] temp_index_f,temp_index_g; logic [N-1:0] v_in, v_out; logic [11 :0] jL1,jL2, @@ -63,8 +63,8 @@ reg [N-1:0]v; logic [4:0] c_state, n_state; //Auxiliary registers declarations -logic [d:0] depth,depth_reg; -logic [d:0] node,node_reg; +logic [d:0] depth = 'b0,depth_reg; +logic [d:0] node = 'b0,node_reg; logic [11:0] tmp_L, tmp_L_reg, tmp_R, tmp_R_reg, tmp_U, tmp_U_reg; @@ -139,11 +139,17 @@ always_comb begin u = 0; v = 0; -// depth = 0; + tmp_L = 0; tmp_R = 0; tmp_U = 0; + ena_L = 0; enb_L = 0; + wea_L = 0; + node = node_reg; + depth = depth_reg; + L_in = L_in; if(in_valid) case(c_state) idle: begin + L_in = 0; depth = 0; node = 0; tmp_L = 0; tmp_R = 0; tmp_U = 0; ena_L = 0; wea_L = 0; enb_L = 0; @@ -162,23 +168,30 @@ always_comb ena_L = 1'b1; wea_L = 1'b1; enb_L = 0; ena_v = 0; wea_v = 0; enb_v = 0; + tmp_L = tmp_L; + tmp_R = tmp_R; + tmp_U = tmp_U; u = u; v = v; for(int k = 0; k < N; k++) L_in[k] = y[k]; +// L_in = y; n_state = wait_L_logic; end wait_L_logic: begin + L_in = L_in; depth = depth_reg + 1'b1; node = ((2*node_reg) + 1'b1); ena_L = 0; wea_L = 0; tmp_L = 0; enb_L = 1'b1; ena_v = 0; wea_v = 0; enb_v = 0; - + tmp_R = tmp_R; + tmp_U = tmp_U; + u = u; v = v; if(depth < d) @@ -190,7 +203,14 @@ always_comb wait_L: begin u = u; -// depth = depth_reg; + v = v; + L_in = L_in; + tmp_L = tmp_L; + tmp_R = tmp_R; + tmp_U = tmp_U; + ena_L = ena_L; enb_L = enb_L; + wea_L = wea_L; + // depth = depth_reg; n_state = state_L; end @@ -203,7 +223,9 @@ always_comb ena_v = 0; wea_v = 0; enb_v = 0; tmp_L = tmp_L_reg + 1'b1; - + tmp_R = tmp_R; + tmp_U = tmp_U; + temp_index_f = ((N/(2**(depth+1'b1))) * ((2*(node) + 1'b1) - ((2**(depth + 1'b1)) - 1'b1))); jL1 = (tmp_L_reg) + temp_index_f; @@ -223,8 +245,13 @@ always_comb begin u = u; v = v; + L_in = L_in; + ena_L = ena_L; enb_L = enb_L; + wea_L = wea_L; depth = depth_reg - 1'b1; node = node_reg + 1'b1; + tmp_L = tmp_L; + tmp_U = tmp_U; tmp_R = 0; n_state = wait_R; end @@ -232,10 +259,15 @@ always_comb wait_R: begin // depth = depth_reg; + L_in = L_in; ena_L = 0;wea_L = 0; enb_L = 1'b1; ena_v = 0;wea_v = 0; enb_v = 1'b1; + wea_L = wea_L; u = u; v = v; + tmp_L = tmp_L; + tmp_R = tmp_R; + tmp_U = tmp_U; n_state = state_R; end @@ -247,6 +279,8 @@ always_comb ena_L = 1'b1; wea_L = 1'b1; enb_L = 0; ena_v = 0; wea_v = 0; enb_v = 0; + tmp_L = tmp_L; + tmp_U = tmp_U; tmp_R = tmp_R_reg + 1'b1; temp_index_f = ((N/(2**(depth + 1'b1))) * ((2*(node) + 1'b1) -((2**(depth + 1'b1)) - 1'b1))); temp_index_g = ((N/(2**(depth + 1'b1))) * ((2*(node - 1'b1) + 1'b1)-((2**(depth + 1'b1)) - 1'b1))); @@ -271,28 +305,41 @@ always_comb begin depth = depth_reg - 1'b1; node = (node_reg - 2) >> 1; + L_in = L_in; tmp_U = 0; + wea_L = wea_L; u = u; v = v; + ena_L = ena_L; enb_L = enb_L; + tmp_L = tmp_L; + tmp_R = tmp_R; + tmp_U = tmp_U; n_state = wait_U; end wait_U: begin // depth = depth_reg; + L_in = L_in; ena_L = 0; wea_L = 0; enb_L = 0; ena_v = 0; wea_v = 0; enb_v = 1'b1; - + tmp_L = tmp_L; + tmp_R = tmp_R; + tmp_U = tmp_U; + n_state = state_U; end state_U: begin // depth = depth_reg; + L_in = L_in; ena_L = 0; ena_v =1'b1; enb_L = 0; wea_L = 0; wea_v =1'b1; enb_v = 0; u = u; v = v; + tmp_L = tmp_L; + tmp_R = tmp_R; tmp_U = tmp_U_reg+1'b1; temp_index_f = ((N/(2**(depth))) * ((2*node + 1'b1) - ((2**(depth)) - 1'b1))); @@ -316,7 +363,14 @@ always_comb begin u = u; v = v; - // depth = depth_reg; + L_in = L_in; + wea_L = wea_L; + +// depth = depth_reg; + tmp_L = tmp_L; + tmp_R = tmp_R; + tmp_U = tmp_U; + ena_L = ena_L; enb_L = enb_L; node = (node_reg - 1'b1) >> 1; n_state = wait_LRU; @@ -325,10 +379,14 @@ always_comb wait_LRU: begin // depth = depth_reg; + L_in = L_in; u = u; v = v; ena_L = 0; wea_L = 0; enb_L = 1'b1; ena_v = 0; wea_v = 0; enb_v = 0; + tmp_L = tmp_L; + tmp_R = tmp_R; + tmp_U = tmp_U; n_state = state_LRU; end @@ -339,7 +397,11 @@ always_comb ena_L = 0; ena_v = 1'b1; enb_v = 0; wea_v = 1'b1; wea_L = 0; enb_L = 0; + L_in = L_in; v = v; + tmp_L = tmp_L; + tmp_R = tmp_R; + tmp_U = tmp_U; temp_index_f = ((N/(2**(depth))) * ((2*node + 1'b1) - ((2**(depth)) - 1'b1))); fminsum_calc(L_out[temp_index_f],L_out[temp_index_f + 1],LRU[0]); @@ -363,8 +425,14 @@ always_comb begin u = u; v = v; + L_in = L_in; + tmp_L = tmp_L; + tmp_R = tmp_R; + tmp_U = tmp_U; depth = depth_reg + 1'b1; node = node_reg; - + ena_L = ena_L; enb_L = enb_L; + wea_L = wea_L; + n_state = wait_lnode; end @@ -373,6 +441,10 @@ always_comb // depth = depth_reg; u = u; v = v; + tmp_L = tmp_L; + tmp_R = tmp_R; + tmp_U = tmp_U; + L_in = L_in; ena_L = 0; wea_L = 0; enb_L = 1'b1; ena_v = 0; wea_v = 0; enb_v = 0; @@ -384,8 +456,12 @@ always_comb // depth = depth_reg; u = u; v = v; + L_in = L_in; ena_L = 0; wea_L = 0; enb_L = 0; ena_v = 1'b1; wea_v = 1'b1; enb_v = 0; + tmp_L = tmp_L; + tmp_R = tmp_R; + tmp_U = tmp_U; temp_index_f = ((N/(2**(depth))) * ((2*node + 1'b1) - ((2**(depth)) - 1'b1))); @@ -407,9 +483,15 @@ always_comb begin u = u; v = v; + L_in = L_in; // depth = depth_reg; node = node_reg; - + tmp_L = tmp_L; + tmp_R = tmp_R; + tmp_U = tmp_U; + ena_L = ena_L; enb_L = enb_L; + wea_L = wea_L; + n_state = wait_lstate; end @@ -418,18 +500,26 @@ always_comb // depth = depth_reg; u = u; v = v; + L_in = L_in; ena_L = 0; wea_L = 0; enb_L = 1'b1; ena_v = 0; wea_v = 0; enb_v = 0; - + tmp_L = tmp_L; + tmp_R = tmp_R; + tmp_U = tmp_U; + n_state = state_last; end state_last: begin // depth = depth_reg; + L_in = L_in; u = u; ena_L = 0; wea_L = 0; enb_L = 0; ena_v = 1'b1; wea_v = 1'b1; enb_v = 0; + tmp_L = tmp_L; + tmp_R = tmp_R; + tmp_U = tmp_U; v = v_out; @@ -439,11 +529,12 @@ always_comb begin u = 0; v = 0; + L_in = 0; depth = 0; node = 0; tmp_L = 0; tmp_R = 0; tmp_U = 0; - ena_L = 0; wea_L = 0; enb_L = 0; + ena_L = 0; enb_L = 0; wea_L = 0; ena_v = 0; wea_v = 0; enb_v = 0; - + n_state = idle; end endcase @@ -451,6 +542,7 @@ always_comb begin u = 0; v = 0; + L_in = 0; depth = 0; node = 0; tmp_L = 0; tmp_R = 0; tmp_U = 0; ena_L = 0; wea_L = 0; enb_L = 0;