From 7f42d8d1ff9ab4ee6d978b6d8dcf54acd552d339 Mon Sep 17 00:00:00 2001 From: lf <15201710458@163.com> Date: Tue, 4 Aug 2020 23:11:26 +0800 Subject: [PATCH] support 64bit bus --- .gitignore | 1 + rtl/inc/sm3_cfg.v | 4 +-- rtl/sm3_cmprss_core.v | 6 ++--- sim/run/run_sim.bat | 4 +-- sim/tb/tb_sm3_core_top.sv | 52 ++++++++++++++++++++++++++++++--------- 5 files changed, 48 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index fe30a83..3479c26 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ sim/run/vsim.wlf sim/run/work/* sim/run/wlf* +run_sim.log diff --git a/rtl/inc/sm3_cfg.v b/rtl/inc/sm3_cfg.v index 407d7f6..c982ef7 100644 --- a/rtl/inc/sm3_cfg.v +++ b/rtl/inc/sm3_cfg.v @@ -18,8 +18,8 @@ //模块调试开关----------------------------- `ifdef DESIGN_SIM //`define SM3_PAD_SIM_DBG - `define SM3_EXPND_SIM_DBG - // `define SM3_CMPRS_SIM_DBG + // `define SM3_EXPND_SIM_DBG + `define SM3_CMPRS_SIM_DBG // `define SM3_CMPRS_SIM_FILE_LOG `endif diff --git a/rtl/sm3_cmprss_core.v b/rtl/sm3_cmprss_core.v index 7f9f45d..c1400ca 100644 --- a/rtl/sm3_cmprss_core.v +++ b/rtl/sm3_cmprss_core.v @@ -368,12 +368,12 @@ assign cmprss_otpt_res_o = sm3_res; generate if(1) begin always@(*) begin - if(sm3_wj_wjj_valid_i) + if(cmprss_otpt_vld_o) begin `ifdef SM3_CMPRS_SIM_FILE_LOG - $fdisplay(file,"LOG: %32h ,%32h , %32h",reg_cmprss_round, expnd_inpt_wj_i[31:0],expnd_inpt_wjj_i[31:0]); + $fdisplay(file,"LOG: res : %64h",cmprss_otpt_res_o); `else - $fdisplay("LOG: %32h ,%32h , %32h",reg_cmprss_round, expnd_inpt_wj_i[31:0],expnd_inpt_wjj_i[31:0]); + $display("LOG: res : %64h",cmprss_otpt_res_o); `endif end diff --git a/sim/run/run_sim.bat b/sim/run/run_sim.bat index 2807b82..75cf646 100644 --- a/sim/run/run_sim.bat +++ b/sim/run/run_sim.bat @@ -22,9 +22,9 @@ set bin_path=%~dp1 set bin_path=%bin_path%/win64 REM set bin_path=C:\modeltech64_10.5\win64 -call %bin_path%/vsim -do "do ../script/run_sm3_expnd_tb.do" -l run_sim.log +REM call %bin_path%/vsim -do "do ../script/run_sm3_expnd_tb.do" -l run_sim.log REM call %bin_path%/vsim -do "do ../script/run_sm3_cmprss_tb.do" -l run_sim.log -REM call %bin_path%/vsim -do "do ../script/run_sm3_core_top_tb_wth_cmodel.do" -l run_sim.log +call %bin_path%/vsim -c -do "do ../script/run_sm3_core_top_tb_wth_cmodel.do" -l run_sim.log if "%errorlevel%"=="1" goto END if "%errorlevel%"=="0" goto SUCCESS diff --git a/sim/tb/tb_sm3_core_top.sv b/sim/tb/tb_sm3_core_top.sv index 3eb00cf..4e8e886 100644 --- a/sim/tb/tb_sm3_core_top.sv +++ b/sim/tb/tb_sm3_core_top.sv @@ -13,22 +13,24 @@ // Revision: // Revision 0.01 - File Created // Revision 0.02 - Pass random test with c model +// Revision 0.03 - Pass random test with c model (64bit) ////////////////////////////////////////////////////////////////////////////////// module tb_sm3_core_top ( ); `ifdef SM3_INPT_DW_32 localparam [1:0] INPT_WORD_NUM = 2'd1; + bit [31:0] urand_num; `elsif SM3_INPT_DW_64 localparam [1:0] INPT_WORD_NUM = 2'd2; + bit [63:0] urand_num; `endif //import c reference function import "DPI-C" function void sm3_c(input int len,input bit[7:0] data[],output bit[31:0] res[]); int i; -bit [31:0] urand_num; -bit [7:0] data[1050]; +bit [7:0] data[1050];//TODO buff length limit the inpt data length bit [31:0] res[8]; int stat_test_cnt; @@ -48,7 +50,7 @@ initial begin sm3if.clk = 0; sm3if.rst_n = 0; sm3if.msg_inpt_d = 0; - sm3if.msg_inpt_vld_byte = 4'b1111; + sm3if.msg_inpt_vld_byte = 0; sm3if.msg_inpt_vld = 0; sm3if.msg_inpt_lst = 0; @@ -64,7 +66,7 @@ initial begin `ifdef C_MODEL_SELF_TEST sm3_inpt_byte_num = 64; `else - sm3_inpt_byte_num = ($urandom % 128 + 1 + 4); + sm3_inpt_byte_num = ($urandom % 128 + 1 + 8);//确保数据至少有2个周期 `endif @(posedge sm3if.clk); @@ -97,16 +99,33 @@ task automatic task_rndm_inpt_cmpr_cmodel( // 初始化数组同时产生逻辑激励 for(i = 0 ; i < data_inpt_clk_num - 1 ; i++)begin sm3if.msg_inpt_vld = 1; - sm3if.msg_inpt_vld_byte = 4'b1111; + `ifdef SM3_INPT_DW_32 + sm3if.msg_inpt_vld_byte = 4'b1111; + `elsif SM3_INPT_DW_64 + sm3if.msg_inpt_vld_byte = 8'b1111_1111; + `endif + `ifdef C_MODEL_SELF_TEST urand_num = 32'h61626364; `else - urand_num = ($urandom); + `ifdef SM3_INPT_DW_32 + urand_num = ($urandom); + `elsif SM3_INPT_DW_64 + urand_num = {$urandom,$urandom}; + `endif + `endif - {data[4*i],data[4*i+1],data[4*i+2],data[4*i+3]} = urand_num; - sm3if.msg_inpt_d = urand_num; + `ifdef SM3_INPT_DW_32 + {data[4*i],data[4*i+1],data[4*i+2],data[4*i+3]} = urand_num; + sm3if.msg_inpt_d = urand_num; + `elsif SM3_INPT_DW_64 + {data[8*i],data[8*i+1],data[8*i+2],data[8*i+3], + data[8*i+4],data[8*i+1+4],data[8*i+2+4],data[8*i+3+4]} = urand_num; + sm3if.msg_inpt_d = urand_num; + `endif + @(posedge sm3if.clk); // $display("SV array b4 %d:%x", i,urand_num); sm3if.msg_inpt_vld = 0; @@ -121,10 +140,19 @@ task automatic task_rndm_inpt_cmpr_cmodel( `ifdef C_MODEL_SELF_TEST urand_num = 32'h61626364; `else - urand_num = ($urandom); + `ifdef SM3_INPT_DW_32 + urand_num = ($urandom); + `elsif SM3_INPT_DW_64 + urand_num = {$urandom,$urandom}; + `endif + + `endif + `ifdef SM3_INPT_DW_32 + {data[4*i],data[4*i+1],data[4*i+2],data[4*i+3]} = urand_num; + `elsif SM3_INPT_DW_64 + {data[8*i],data[8*i+1],data[8*i+2],data[8*i+3], + data[8*i+4],data[8*i+1+4],data[8*i+2+4],data[8*i+3+4]} = urand_num; `endif - - {data[4*i],data[4*i+1],data[4*i+2],data[4*i+3]} = urand_num; sm3if.msg_inpt_lst = 1; @@ -221,7 +249,7 @@ function automatic void lst_data_gntr_64( ref logic [63:0] lst_data, ref logic [ 7:0] lst_vld_byte, input bit [3:0] unalign_byte_num, - input logic [31:0]rndm_data + input logic [63:0]rndm_data ); lst_vld_byte = unalign_byte_num == 3'd0 ? 8'b1111_1111 : unalign_byte_num == 3'd1 ? 8'b1000_0000