我是systemverilog的新手,我遇到了这个我似乎无法弄清楚的错误。这是错误消息:
错误(10897):TopLevel.sv(103)中的SystemVerilog错误:不能 在实例“control_module”上隐式连接端口“ALU_SRC_B” 模块“控制” - 在当前范围内没有此类对象可见
这是失败的代码:
// Control module
Control control_module (
.Instruction(Instruction[8:5]),
.ALU_OP,
.ALU_SRC_B,
.REG_WRITE,
.BRANCH,
.MEM_WRITE,
.MEM_READ,
.REG_DST,
.MEM_TO_REG,
.HALT(HALT)
);
这是我的控制模块:
module Control(
input [8:0] Instruction,
output logic [3:0] ALU_OP,
output logic [1:0] ALU_SRC_B,
output logic REG_WRITE,
output logic BRANCH,
output logic MEM_WRITE,
output logic MEM_READ,
output logic REG_DST,
output logic MEM_TO_REG,
output logic HALT
);
logic [3:0] OPCODE = Instruction[8:5];
always_comb begin
...
控制模块位于正确的目录中,为什么我会收到此错误?
答案 0 :(得分:2)
我尝试了您的代码,您收到消息的原因是,对于 control_module 中未连接的端口,您需要显示空括号以指示它未连接。否则,您会收到如图所示的消息(这有点神秘)。
TESTBENCH:
module tb;
wire[8:0] Instruction;
wire HALT;
// Control module
Control control_module (
.Instruction(Instruction[8:5]),
.ALU_OP(),
.ALU_SRC_B(),
.REG_WRITE(),
.BRANCH(),
.MEM_WRITE(),
.MEM_READ(),
.REG_DST(),
.MEM_TO_REG(),
.HALT(HALT)
);
initial begin
#100ns
$finish;
end
endmodule
设计:
// Code your design here
module Control(
input [8:0] Instruction,
output logic [3:0] ALU_OP,
output logic [1:0] ALU_SRC_B,
output logic REG_WRITE,
output logic BRANCH,
output logic MEM_WRITE,
output logic MEM_READ,
output logic REG_DST,
output logic MEM_TO_REG,
output logic HALT
);
endmodule
您可以在此处找到一个有效的示例:https://www.edaplayground.com/x/63Eq
尝试取出其中一个空括号,注意您收到相同的错误消息..