Mips verilog中的对象表示法

Mips verilog中的对象表示法,mips,verilog,quartus,Mips,Verilog,Quartus,我是verilog hdl的新手 为了测试单周期mips cpu,我尝试使用以下符号从测试台初始化寄存器 CPU.IM.memory[i]=32'b0 这里,CPU是一个模块,它有IM(另一个模块)的声明,内存在其中声明为reg 然而,Quartus verilog编译器抱怨它找不到对象引用。是否支持上述建议?我在内存中加载指令时也有类似的问题,我不想在测试台上完成,而不是在IM中硬编码或更改指令 试验台 IM.v 抛出的错误 错误(10207):TestBench上的Verilog HDL错误

我是verilog hdl的新手

为了测试单周期mips cpu,我尝试使用以下符号从测试台初始化寄存器

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

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

然而,Quartus verilog编译器抱怨它找不到对象引用。是否支持上述建议?我在内存中加载指令时也有类似的问题,我不想在测试台上完成,而不是在IM中硬编码或更改指令

试验台

IM.v

抛出的错误
错误(10207):TestBench上的Verilog HDL错误。v(31):无法解析对对象“IMReg”的引用。

如果看不到更多的代码,很难判断您要做什么,但我猜您正在尝试分配一个内部信号(即输入或输出端口列表中不存在的信号)一个模块的值来自另一个模块内部。除非该值是常量
参数
,否则无法执行此操作。只有
参数
本地参数
,以及端口列表上的信号(
输入
输出
,以及
输入
)在外部可见


通常,内存是从.hex或.mif文件中初始化的,可以对其进行更改以表示所需的初始状态。

能否显示确切的错误和一些代码?在和中有一个关于此错误的条目,似乎是工具特定的问题。感谢wilcroft和@Sharvill111,我提供了代码段,希望它能让事情变得更清楚。是的,我很确定这种行为是不受支持的,或者你会收到多个司机的信号,这必然会导致短裤。如前所述,大多数内存模块应该支持某种类型的初始化文件。如果没有,则在IM.v中添加一个
initial
块,并在那里初始化值(通过读取文件或作为常量值)。
for(i = 0; i < 32; i = i + 1) begin 
    CPU.IM.IMReg[i] = 32'b0; 
end 
IM IM( 
//inputs 
    .address (pc), 
    .clk (clk), 
    .out (Instruction) 
); 
module IM ( address, clk, out); 
input [31:0] address; 
input clk; 
output reg[31:0] out; 
reg[31:0] IMReg[31:0];