为什么我在Verilog中遇到这个括号错误?
我正试图在Verilog(初学者)中启动一个顶级模块。 以下是顶级代码:为什么我在Verilog中遇到这个括号错误?,verilog,Verilog,我正试图在Verilog(初学者)中启动一个顶级模块。 以下是顶级代码: module top( //////////// SEG7 ////////// output [7:0] HEX0, output [7:0] HEX1, output [7:0] HEX2, output [7:0] HEX3, output [7:0] HEX4, o
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的那一行。非常感谢您的帮助!我看到您的代码有两个主要问题。首先,您在
始终
块中实例化模块。模块应该始终在“顶部”上实例化级别,即不在像始终
或分配
这样的程序块中,而只是在模块的主体中。请记住,模块不是函数,也不是像函数一样被调用,而是实例化的。其次,您不能使用.port[index](var)分配端口
语法,您需要将整个端口分配给单个变量。要执行您尝试执行的操作,您只需将SW
变量传递给select
port oftestgen
即可(同样,对所有变量使用该显式分配):
我可以看到您的代码有两个主要问题。首先,您在
始终块中实例化模块。模块应始终在“顶部”上实例化级别,即不在像始终
或分配
这样的程序块中,而只是在模块的主体中。请记住,模块不是函数,也不是像函数一样被调用,而是实例化的。其次,您不能使用.port[index](var)分配端口
语法,您需要将整个端口分配给单个变量。要执行您尝试执行的操作,您只需将SW
变量传递给select
port oftestgen
即可(同样,对所有变量使用该显式分配):
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