Mips verilog中的对象表示法
我是verilog hdl的新手 为了测试单周期mips cpu,我尝试使用以下符号从测试台初始化寄存器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错误
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];