我是 verilog 的新手,我正在研究定义两个模块的 verilg 代码。第一个模块计算 2 个数字的模数,第二个模块使用结果对其进行一些操作。
结果是错误的,并且有很多无关值,因为两个模块中使用了相同的 clk。任何建议请同步。
模组模块
module mod(m,a,b);
  input  [15:0] a,b;
  output [15:0] m;
  reg [31:0] mod;
  reg [31:0] mul;
  integer i;
  always @* begin
    mul = a*b;
    mod = 32'h80008000;
    for(i=0;i<16;i=i+1) begin
      if(mul > mod) begin
        mul = mul - mod;
        mod = mod >> 1;
      end 
      else begin
        mod = mod >> 1;
      end
    end
    assign m=mul[15:0];
 endmodule 
顶部模块的一部分:
initial begin
  keyp <= 2'b10;
  shift <= 1'b0;
end
 always @(posedge clk) begin
   if(load)
     case (keyp)
       2'b10: begin 
          key[127:64] <= {k1,k0};
          keyp        <= 2'b01;
       end
       2'b01: begin
         key[63:0] <= {k1,k0};
         keyp      <= 2'b00;
         shift     <= 1'b1;
       end
     //default: keyp <=2'b00;
     endcase
   else if (shift) begin
     //shift key for first round
     temp[24:0]    <= key[127:103];
     key[127:25]   <= key[102:0];
     key [24:0]    <= temp [24:0];
     shift         <= 1'b0;
   end
 end
 assign w1[2*SIZE-1:SIZE]   = d1+key[2*SIZE-1:SIZE];
 assign w1[3*SIZE-1:2*SIZE] = d2+key[3*SIZE-1:2*SIZE];
 mod mod1( w1[SIZE-1:0],        d0, key[SIZE-1:0]       );
 mod mod2( w1[4*SIZE-1:3*SIZE], d3, key[4*SIZE-1:3*SIZE]);