📄 tb_des3.v
字号:
module TB_DES3;
reg des_clk;
reg rst_n ;
wire [63:0] des_in ;
reg mode ;
reg load ;
wire [63:0] des_out;
wire ready ;
wire [63:0] exp_out_d;
integer file;
reg [319:0] x[512:0];
reg [319:0] tmp;
integer select;
integer i;
wire [63:0] key1;
wire [63:0] key2;
wire [63:0] key3;
reg [63:0] des_exp[0:52];
always @(posedge des_clk)
des_exp[0] <= #1 exp_out_d;
always @(posedge des_clk)
for(i=0;i<51;i=i+1)
des_exp[i+1] <= #1 des_exp[i];
initial
begin
file = $fopen("3des_log.txt");
des_clk = 0;
rst_n = 1;
// key1 key2 key3 Test data Out data
x[0]=320'h0101010101010101_0101010101010101_0101010101010101_95F8A5E5DD31D900_8000000000000000;
x[1]=320'h0101010101010101_0101010101010101_0101010101010101_9D64555A9A10B852_0000001000000000;
x[2]=320'h3849674C2602319E_3849674C2602319E_3849674C2602319E_51454B582DDF440A_7178876E01F19B2A;
x[3]=320'h04B915BA43FEB5B6_04B915BA43FEB5B6_04B915BA43FEB5B6_42FD443059577FA2_AF37FB421F8C4095;
x[4]=320'h0123456789ABCDEF_0123456789ABCDEF_0123456789ABCDEF_736F6D6564617461_3D124FE2198BA318;
x[5]=320'h0123456789ABCDEF_5555555555555555_0123456789ABCDEF_736F6D6564617461_FBABA1FF9D05E9B1;
x[6]=320'h0123456789ABCDEF_5555555555555555_FEDCBA9876543210_736F6D6564617461_18d748e563620572;
x[7]=320'h0352020767208217_8602876659082198_64056ABDFEA93457_7371756967676C65_c07d2a0fa566fa30;
x[8]=320'h0101010101010101_8001010101010101_0101010101010102_0000000000000000_e6e6dd5b7e722974;
x[9]=320'h1046103489988020_9107D01589190101_19079210981A0101_0000000000000000_e1ef62c332fe825b;
#73 rst_n = 0;
#100 rst_n = 1;
// Wait for clock edge
mode = 0;
load = 0;
@(posedge des_clk);
$fdisplay(file,"");
$fdisplay(file,"**************************************");
$fdisplay(file,"* Starting DES Test ... *");
$fdisplay(file,"**************************************");
$fdisplay(file,"");
$fdisplay(file,"Running Decrypt test ...\n");
@(posedge des_clk)
select = 0;
tmp = x[0];
mode = 0;
//@(posedge des_clk)
//load <= #1 1;
@(posedge des_clk)
for(select=1;select<(9);select=select+1)
begin
load = 1;
tmp = x[select];
@(posedge des_clk);
end
load <= #1 0;
repeat (52)@(posedge des_clk);
$fdisplay(file,"Running Encrypt test ...\n");
@(posedge des_clk)
select = 0;
tmp = x[0];
mode = 1;
//@(posedge des_clk)
//load <= #1 1;
@(posedge des_clk)
for(select=1;select<(9);select=select+1)
begin
load = 1;
tmp = x[select];
@(posedge des_clk);
end
load <= #1 0;
repeat (52)@(posedge des_clk);
$fdisplay(file,"");
$fdisplay(file,"**************************************");
$fdisplay(file,"* DES Test done ... *");
$fdisplay(file,"**************************************");
$fdisplay(file,"");
$stop;
$fclose(file);
end // end of initial
always @(posedge des_clk)
begin
if(ready)
$fdisplay(file,"des_exp: %x, des_out: %x-----%x",des_exp[50], des_out,des_exp[50]==des_out);
end
// DES Clock
always #50 des_clk=~des_clk;
assign #1 key1 =tmp[319:256];
assign #1 key2 =tmp[255:192];
assign #1 key3 =tmp[191:128];
assign #1 des_in = mode ? tmp[63:0] : tmp[127:64];
assign exp_out_d = mode ? tmp[127:64] : tmp[63:0];
DES3_TOP U_DES3_TOP(
.des_clk (des_clk ),
.rst_n (rst_n ),
.des_in (des_in ),
.load (load ),
.key1 (key1 ),
.key2 (key2 ),
.key3 (key3 ),
.mode (mode ),
.des_out (des_out ),
.ready (ready )
);
endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -