verilog中的对象表示法

时间:2015-11-30 04:29:24

标签: mips verilog quartus

我是verilog hdl的新手。

为了测试单个循环mips cpu,我试图使用以下表示法来初始化来自testbench的寄存器。

CPU.IM.memory[i] = 32'b0

这里,CPU是一个模块,它具有IM(另一个模块)的声明,并且内存被声明为其中的reg。

然而,Quartus verilog编译器抱怨它无法找到对象引用。以上是否支持?我在内存中加载指令时遇到类似的问题,我不希望能够从测试平台上执行此操作,而不是在IM中进行硬编码或更改。

TestBench.v

for(i = 0; i < 32; i = i + 1) begin 
    CPU.IM.IMReg[i] = 32'b0; 
end 

CPU.v

IM IM( 
//inputs 
    .address (pc), 
    .clk (clk), 
    .out (Instruction) 
); 

IM.v

module IM ( address, clk, out); 
input [31:0] address; 
input clk; 
output reg[31:0] out; 
reg[31:0] IMReg[31:0];

抛出错误 错误(10207):TestBench.v(31)中的Verilog HDL错误:无法解析对象的引用&#34; IMReg&#34;

1 个答案:

答案 0 :(得分:0)

如果没有看到更多代码,很难说出你要做什么,但我猜测的是你正在尝试分配一个内部信号(即输入或输出端口上没有的信号) list)模块中来自不同模块的值。除非该值是常量parameter,否则您无法执行此操作。只有parameterslocalparams和端口列表中的信号(inputsoutputsinouts)在外部可见。

通常,内存是从.hex或.mif文件初始化的,可以将其更改为代表所需的初始状态。