为什么我在Verilog中出现这个括号错误?

时间:2018-04-25 22:25:36

标签: 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,
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的行。任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:2)

我可以看到您的代码存在两个主要问题。首先,您要在always块中实例化模块。模块应始终在&#34; top&#34;上实例化。级别,即不在像alwaysassign这样的程序块中,而只是在模块的正文中。请记住,模块不是函数,不像函数那样调用,而是实例化。其次,您无法使用.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