我正在尝试在Verilog(初学者)的顶层启动一个模块。 这是顶级代码:
module top(
//////////// SEG7 //////////
output [7:0] HEX0,
output [7:0] HEX1,
output [7:0] HEX2,
output [7:0] HEX3,
output [7:0] HEX4,
output [7:0] HEX5,
//////////// LED //////////
output [9:0] LEDR,
//////////// SW //////////
input [1:0] SW);
always@(SW) begin
testgen test(.select[1](SW[1]), .select[0](SW[0]), data0[3:0], data1 [3:0], data2[3:0], data2[3:0]);
end
endmodule
这是testgen(我正在尝试启动的模块
module testgen (
input [1:0] select,
output reg [3:0] data0,
output reg [3:0] data1,
output reg [3:0] data2,
output reg [3:0] data3
);
always @(*) begin
case (select)
2'b00: begin
data0 = 4'b0011; // 3
data1 = 4'b0010; // 2
data2 = 4'b0001; // 1
data3 = 4'b0000; // 0
end
2'b01: begin
data0 = 4'b1010; // A
data1 = 4'b1100; // C
data2 = 4'b1110; // E
data3 = 4'b1111; // F
end
2'b10: begin
data0 = 4'b0111; // 7
data1 = 4'b0001; // 1
data2 = 4'b0000; // 0
data3 = 4'b1010; // A
end
2'b11: begin
data0 = 4'b0101; // 5
data1 = 4'b1111; // F
data2 = 4'b1100; // C
data3 = 4'b0010; // 2
end
default: begin
data0 = 4'b0000; // 0 should never be selected
data1 = 4'b0000; // 0 should never be selected
data2 = 4'b0000; // 0 should never be selected
data3 = 4'b0000; // 0 should never be selected
end
endcase
end
endmodule
我想在顶层合并其他一些模块,但我只想知道为什么会出现以下错误
Error (10170): Verilog HDL syntax error at top.v(29) near text: "["; expecting "(".
我是否错误地实例化了?为什么会这样?第29行是我实例化testgen的行。任何帮助将不胜感激,谢谢!
答案 0 :(得分:2)
我可以看到您的代码存在两个主要问题。首先,您要在always
块中实例化模块。模块应始终在" top"上实例化。级别,即不在像always
或assign
这样的程序块中,而只是在模块的正文中。请记住,模块不是函数,不像函数那样调用,而是实例化。其次,您无法使用.port[index](var)
语法分配端口,您需要将整个端口分配给单个变量。要执行您要执行的操作,您应该将SW
变量传递到select
testgen
端口,如此(也可以使用所有变量的显式赋值):< / p>
testgen test(.select(SW), // Just connect these directly, will connect SW[0] to select[0], SW[1] to select[1]
.data0(data0), // Use .port explicit connection for all variables
.data1(data1), // Minor issue, the code you provided doesnt define data0-data2 in the top module, be careful of implicit declaration
.data2(data2), // Use "`default_nettype none" to avoid these issues
.data3(data2)); // You use data2 here and not data3, its unclear if that was intentional