⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tb_des3.v

📁 有效的改进3-DES算法的执行速度
💻 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 + -