verilog - 如何将向量传递给模块而不改变值?

标签 verilog

我想写一个数组乘法器,我有两个模块ArrayMultiplier,Top。

在顶部模块中,我有三个数组结果,a1,a2。

module Top();
   reg [4*5-1:0] a1;
   reg [5*3-1:0] a2;
   wire [4*3-1:0] result;
   integer i,j;
   initial begin
     for(i=0;i<4;i=i+1) begin
       for(j=0;j<5;j=j+1) begin
         a1[i*5+j]=1'b1;
       end
     end
     for(i=0;i<5;i=i+1) begin
       for(j=0;j<3;j=j+1) begin
         a2[i*3+j]=1'b1;
       end
     end
   end  
   ArrayMultiplier #(4,5,3) test(result,a1,a2);
endmodule

和数组乘法器:

module ArrayMultiplier(result,a1,a2);
  parameter a1R=0;
  parameter a1C=0;//a1C=a2R.
  parameter a2C=0;
  output reg[(a1R*a2C)-1:0] result;
  input [(a1R*a1C)-1:0] a1;
  input [(a1C*a2C)-1:0] a2;
  integer i,j,k;
  initial begin
    //$display("a1R=%d a1C=%d a2C=%d",a1R,a1C,a2C);
    for(i=0;i<4;i=i+1)
      for(j=0;j<5;j=j+1)
        $display("%d a1=%d ",i,a1[i*5+j]);
    for(i=0;i<a1R;i=i+1) begin
      for(j=0;j<a2C;j=j+1) begin
        result[i*a2C+j]=0;
      end
    end
    for(i=0;i<a1R;i=i+1) begin
      for(j=0;j<a2C;j=j+1) begin
        for(k=0;k<a1C;k=k+1) begin
          result[i*a2C+j]=result[i*a2C+j]+(a1[i*a1C+k]*a2[k*a2C+j]);
          $display("res=%d a1=%d a2=%d",result[i*a2C+j],a1[i*a1C+k],a2[k*a2C+j]);
        end
      end
    end
  end
endmodule

我已经初始化了 a1、a2,但是当我将它们传递给 ArrayMultiplier 模块时,它们只有 x 值。

我不知道发生了什么。

请帮忙。

谢谢。

最佳答案

您没有覆盖 ArrayMultiplier 的参数模块。

默认情况下,参数如a1R , a1Ca2C初始化为0 ,如果在实例化模块覆盖这些向量,则向量 a1a2创建零大小

看看你的Top模块,映射a1R=4 , a1C=5a2C=3 ,并实例化该模块,解决了显示 x 的错误。模块实例化如下:

ArrayMultiplier #(4,5,3) test(result,a1,a2);

这可以解决您的问题。有关参数化模块的更多信息,请查看Parameterized ModulesModule Parameters in Verilog链接。

关于verilog - 如何将向量传递给模块而不改变值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34070228/

相关文章:

c - 如何将c函数转换为verilog模块?

verilog - 警告 : (vsim-7) Failed to open readmem file "mem_content_01.dat" in read mode

verilog - Verilog 中是否有 "? 1 : 0"的原因?

verilog - 是否可以访问加密模块内未加密模块实例中的信号?

warnings - 晶格钻石 : Setting up a clock

数组乘法的 Verilog For 循环

constraints - 系统Verilog随机化地址等于2以关闭电源

eclipse - 如何设置 Eclipse 以进行 VHDL 和 Verilog 中的 FPGA 设计?

verilog - verilog中参数化的周期延迟数?

verilog - 我使用verilog实现SIPO移位寄存器,但出现未知错误