From 4c898a46e37d9dc9b8e6b809b5bc8a880c8ec1e1 Mon Sep 17 00:00:00 2001 From: "amit.b" Date: Mon, 29 Mar 2021 11:43:32 +0530 Subject: [PATCH] Reduced LUT Count for N values --- sources_1/imports/Downloads/sc_decoder_fsm.sv | 49 +++++++++++-------- 1 file changed, 29 insertions(+), 20 deletions(-) diff --git a/sources_1/imports/Downloads/sc_decoder_fsm.sv b/sources_1/imports/Downloads/sc_decoder_fsm.sv index 09909ca..9e8b718 100644 --- a/sources_1/imports/Downloads/sc_decoder_fsm.sv +++ b/sources_1/imports/Downloads/sc_decoder_fsm.sv @@ -382,7 +382,7 @@ endmodule // ////////////////////////////////////////////////////////////////////////////////// `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, @@ -471,7 +471,8 @@ for(genvar i=0; i>1; tmp_U=0; n_state=wait_U; end wait_U: begin ena_L=0;wea_L=0;enb_L=0; - ena_v=0;wea_v=0; enb_v=1; + ena_v=0;wea_v=0; enb_v=1'b1; // if(counter==cmax) begin // counter=counter_reg-cmax; n_state=state_U; @@ -626,7 +629,8 @@ begin n_state=wait_lstate_logic; end wait_LRU_logic: begin - depth=depth_reg; node=(node_reg-1'b1)/2; +// depth=depth_reg; node=(node_reg-1'b1)/2; + depth=depth_reg; node=(node_reg-1'b1)>>1; n_state=wait_LRU; end wait_LRU: begin @@ -645,23 +649,26 @@ begin ena_v=1'b1;wea_v=1'b1; enb_v=0; 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]); - u[(2*node)+2-N]=(f[(2*node)+2-N]==1) ? 0 : ((LRU[0][BITS-1] == 1) ? 1 : 0); +// u[(2*node)+2-N]=(f[(2*node)+2-N]==1) ? 0 : ((LRU[0][BITS-1] == 1) ? 1 : 0); + u[(2*node)+2-N]=(f[(2*node)+2-N]) ? 0 : ((LRU[0][BITS-1]) ? 1 : 0); g_calc(L_out[temp_index_f],L_out[temp_index_f+1],u[(2*node)+2-N],LRU[1]); - u[(2*node)+3-N]=(f[(2*node)+3-N]==1) ? 0 : ((LRU[1][BITS-1] == 1) ? 1 : 0); + //u[(2*node)+3-N]=(f[(2*node)+3-N]==1) ? 0 : ((LRU[1][BITS-1] == 1) ? 1 : 0); + u[(2*node)+3-N]=(f[(2*node)+3-N]) ? 0 : ((LRU[1][BITS-1]) ? 1 : 0); v_in[temp_index_f]=u[(2*node)+2-N] ^ u[(2*node)+3-N]; v_in[temp_index_f+1]=u[(2*node)+3-N]; - if(node[0]==1) +// if(node[0]==1) + if(node[0]) n_state = wait_R_logic; else n_state=wait_U_logic; end wait_lnode_logic: begin - depth=depth_reg+1; node=node_reg; + depth=depth_reg+1'b1; node=node_reg; n_state=wait_lnode; end wait_lnode: begin - ena_L=0;wea_L=0;enb_L=1; + ena_L=0;wea_L=0;enb_L=1'b1; ena_v=0;wea_v=0; enb_v=0; // if(counter==cmax) begin // counter=counter_reg-cmax; @@ -672,12 +679,14 @@ begin end state_lnode: begin ena_L=0;wea_L=0;enb_L=0; - ena_v=1;wea_v=1; enb_v=0; - temp_index_f=((N/(2**(depth)))*((2*node+1)-((2**(depth))-1))); + ena_v=1'b1;wea_v=1'b1; enb_v=0; + 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]); - u[(2*node)+2-N]=(f[(2*node)+2-N]==1) ? 0 : ((LRU[0][BITS-1] == 1) ? 1 : 0); + // u[(2*node)+2-N]=(f[(2*node)+2-N]==1'b1) ? 0 : ((LRU[0][BITS-1] == 1'b1) ? 1'b1 : 0); + u[(2*node)+2-N]=(f[(2*node)+2-N]) ? 0 : ((LRU[0][BITS-1]) ? 1'b1 : 0); g_calc(L_out[temp_index_f],L_out[temp_index_f+1],u[(2*node)+2-N],LRU[1]); - u[(2*node)+3-N]=(f[(2*node)+3-N]==1) ? 0 : ((LRU[1][BITS-1] == 1) ? 1 : 0); +// u[(2*node)+3-N]=(f[(2*node)+3-N]==1'b1) ? 0 : ((LRU[1][BITS-1] == 1) ? 1'b1 : 0); + u[(2*node)+3-N]=(f[(2*node)+3-N]) ? 0 : ((LRU[1][BITS-1]) ? 1'b1 : 0); v_in[temp_index_f]=u[(2*node)+2-N] ^ u[(2*node)+3-N]; v_in[temp_index_f+1]=u[(2*node)+3-N]; n_state = wait_U_logic; @@ -687,7 +696,7 @@ begin n_state=wait_lstate; end wait_lstate: begin - ena_L=0;wea_L=0;enb_L=1; + ena_L=0;wea_L=0;enb_L=1'b1; ena_v=0;wea_v=0; enb_v=0; // if(counter==cmax) begin // counter=counter_reg-cmax; @@ -698,7 +707,7 @@ begin end state_last: begin ena_L=0;wea_L=0;enb_L=0; - ena_v=1;wea_v=1; enb_v=0; + ena_v=1'b1;wea_v=1'b1; enb_v=0; v=v_out; n_state=idle; end