【问题标题】:Passing array via module in verilog在verilog中通过模块传递数组
【发布时间】:2015-08-24 22:37:00
【问题描述】:

我有一个名为 dct_8p 的模块,其中我有一个包含 8 个元素的输入数组,其中每个元素是一个 4 位数字,8 个元素输出数组每个包含 5 个位数字。我想通过模块传递每个输入的 4 位数字。

我试图通过设计愿景来解读设计。它会产生一个错误:

/Farhana/Synopsys/dct_8p.v:56:非法引用内存 xin。 (VER-253)

我想我在数组声明中犯了非常愚蠢的错误,我无法理解。

module dct_8p(xin,cin,add,sub,xout);
input [3:0] xin [0:7]; 
input cin; 
output [4:0] xout[0:7]; 
input add,sub; 



//layer 1 
RCA3 #(.n(4), .approx(0)) l10(.p(xin[0]),.q(xin[]),.ci(cin),.op(add),.r(xout[0]));
.... 
.. 

module RCA3(p,q,ci,op,r); 
parameter n=4; 
input[n-1:0]p,q; 
input ci,op; 
output [n:0] r; 
parameter approx=0;
....
....

【问题讨论】:

  • Verilog 不支持二维数组端口;确保您启用了 SystemVerilog。建议 SystemVerilog 文件使用.v.sv 插入。
  • 检查您是否有第二个xin的索引?
  • 我已经尝试过 .sv 扩展名,但我仍然遇到同样的错误。我想在测试台脚本中传递 4 位寄存器值,但 l10 确实接收输入。
  • 谁能提供一个例子?
  • 尝试将 -sverilog 传递给 vcs 编译时开关。 (这是用于 SystemVerilog)

标签: arrays multidimensional-array verilog system-verilog


【解决方案1】:

我编译了您的代码here,它运行良好。正如您所告知的,我已使用 xin[7] 作为输入。

SystemVerilog 允许将多维数组作为输入传递给模块。您可以修改示例代码并验证这一事实。

使用synopsis-vcs执行SystemVerilog代码的命令如下:

vcs -timescale=1ns/1ns +vcs+flush+all +warn=all -sverilog -R

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多