在reg声明中得到解析错误

时间:2014-12-08 08:40:31

标签: compiler-errors verilog hdl icarus

我从此代码的第15行收到解析错误。

12: module DoShellSort(
13:    input [10*20-1:0] toSort,
14:    output [10*20-1:0] sorted
15:    reg arrBitSize
16: );

这是我的测试平台中我初始化输入和注册变量的部分。

module ShellSort_tb;
    reg [10*19:0] toSort, arrBitSize;
    wire [10*19:0] sorted;
    integer i;

    DoShellSort ss_tb ([10*19:0] toSort, [10*19:0] sorted, arrBitSize);

    // Input values you want to sort here
    // Note: Should be 20 bits in size
    initial $readmemh ("memory_hex.txt", toSort);

    initial begin
        #1 $display("\nThis program implements SHELL SORT to arrange values.\n");

        // Display initial array
        #10 $display("Array to sort: ");
        #10 for (i = 0; i < arrBitSize + 1; i = i + 1)
            $write("%h", toSort[i]);

        #10 arrBitSize = 4'd9;

        // ................
endmodule

我正在使用iVerilog进行合成。以下是错误消息:

enter image description here

任何人都可以帮我解释为什么我会收到解析错误吗?谢谢!

2 个答案:

答案 0 :(得分:2)

您定义端口的方式有误,您错过了逗号和端口方向,或者将rweg放在错误的位置并且丢失了逗号。你有:

 module DoShellSort(
    input [10*20-1:0] toSort,
    output [10*20-1:0] sorted //missing comma?
    reg arrBitSize            //missing port direction?
);

我认为你的意思是:

 module DoShellSort(
    input      [10*20-1:0] toSort,
    output reg [10*20-1:0] sorted, arrBitSize
);

我发现更好的做法是分别列出每个端口,因为这样可以更容易地更新代码,即使对那些不熟悉语言的人来说,界面也很清晰。

 module DoShellSort(
    input      [10*20-1:0] toSort,
    output reg [10*20-1:0] sorted, 
    output reg [10*20-1:0] arrBitSize
);

答案 1 :(得分:0)

您的端口连接不好。您的类型声明中不能包含其他未打包的维度。 DoShellSort ss_tb(toSort [10 * 19:0],排序[10 * 19:0],arrBitSize);

您的模块端口声明丢失&#34;,&#34;在输出[10 * 20-1:0]后排序。