小舍YZ 发表于 2017-8-22 15:51:12

f函数的实现

f函数的实现

module des_f(input clk,   
   input reset,   
   input des_mode,   
   input inter_num_i,   
   input R_i,   
   input L_i,   
   input Key_i,
   
   output reg R_o,   
   output reg L_o,   
   output reg Key_o);
   
reg next_R;
//reg R_i_var;
wire expandedR;
reg pre_key;
reg new_key_tmp;
reg inter_num;
wire p;   
reg address_s;
reg Soutput;   
wire Soutput_wire;
wire new_key;
wire out_key;
   
key_getkey_get(.pre_key(pre_key), .des_mode(des_mode), .inter_num(inter_num), .new_key(new_key), .out_key(out_key));
s1sbox1(.stage1_input(address_s), .stage1_output(Soutput_wire));
s2sbox2(.stage1_input(address_s), .stage1_output(Soutput_wire));
s3sbox3(.stage1_input(address_s), .stage1_output(Soutput_wire));
s4sbox4(.stage1_input(address_s), .stage1_output(Soutput_wire));
s5sbox5(.stage1_input(address_s), .stage1_output(Soutput_wire));
s6sbox6(.stage1_input(address_s), .stage1_output(Soutput_wire));
s7sbox7(.stage1_input(address_s), .stage1_output(Soutput_wire));
s8sbox8(.stage1_input(address_s),.stage1_output(Soutput_wire));
   
always @(posedge clk or negedge reset)
begin   
if(reset == 1'b0)   
begin   
R_o <= 32'd0;   
L_o <= 32'd0;   
Key_o <= 56'd0;   
end   
else   
begin   
Key_o <= out_key;   
if(inter_num == 4'b1111)   
begin   
R_o <= R_i;   
L_o <= next_R;
   
end   
else   
begin   
R_o <= next_R;   
L_o <= R_i;    end
   
end
end
assignexpandedR =
                                        {R_i,R_i,R_i,R_i,R_i,R_i,                     
                                               
                                        R_i,R_i,R_i,R_i,R_i,R_i,
                                          
                                        R_i,R_i,R_i,R_i,R_i,R_i,      
                                                                          
                                        R_i,R_i,R_i,R_i,R_i,R_i,      
                                                                                  
                                        R_i,R_i,R_i,R_i,R_i,R_i,      
                                                                                  
                                        R_i,R_i,R_i,R_i,R_i,R_i,      
                                                                                  
                                        R_i,R_i,R_i,R_i,R_i,R_i,      
                                                                                  
                                        R_i,R_i,R_i,R_i,R_i,R_i};
   
assignp = {        Soutput,Soutput,Soutput,Soutput,      
         
                                        Soutput,Soutput,Soutput,Soutput,      
                                                                  
                                        Soutput,Soutput,Soutput,Soutput,      
                                                               
                                        Soutput,Soutput,Soutput,Soutput,      
                                                                  
                                        Soutput,Soutput,Soutput,Soutput,      
                                                               
                                        Soutput,Soutput,Soutput,Soutput,      
                                                               
                                        Soutput,Soutput,Soutput,Soutput,      
                                                               
                                        Soutput,Soutput,Soutput,Soutput};   
                                               
always @(*)
                begin   
                        pre_key = Key_i;   
                        inter_num = inter_num_i;
                               
                        new_key_tmp = new_key;
                               
                        address_s = new_key_tmp ^ expandedR;
                        Soutput = Soutput_wire;
                               
                        //??????????   
                        next_R = (L_i^p);   
                end
endmodule
页: [1]
查看完整版本: f函数的实现