Verilog中语法错误接近尾声

时间:2016-09-10 15:37:01

标签: verilog hdl

我正在编写一个Verilog代码,为4:1多路复用器提供所有可能的输入组合。以下是测试代码的测试平台:

module FouthQuestion_tb;

reg d0, d1, d2, d3, s0, s1;
wire y;
reg o;

FourthQuestion mygate(.D0(d0), .D1(d1), .D2(d2), .D3(d3), .S0(s0), .S1(s1), .Y(y));

initial
begin
    $monitor(d0, d1, d2, d3, s0, s1, y);
    for(d0=0; d0<=1; d0=d0+1)
    begin
        for(d1=0; d1<=1; d1=d1+1)
        begin
            for(d2=0; d2<=1; d2=d2+1)
            begin
                for(d3=0; d3<=1; d3=d3+1)
                begin
                    for(s0=0; s0<=1; s0=s0+1)
                    begin
                        for(s1=0; s1<=1; s1=s1+1)
                        begin
                            #5
                        end
                    end
                end
            end
        end
    end
end

endmodule

但是,我总是收到错误“语法错误接近结束”。在这里可能出现的语法错误是什么?

2 个答案:

答案 0 :(得分:2)

您在#5之后缺少分号。它应该给你一个行号来指出哪个end导致问题

答案 1 :(得分:1)

问题(除了#5之后缺少的分号)是循环条件是<= 1,对于布尔类型(仅具有唯一)可能的值0和1)。因此它永远不会退出内循环而是永远只能切换s1

您应该使用可以采用大于您比较的值的循环变量,例如 int 。为简化起见,您可以使用一个包含至少比所有布尔变量多一位的循环变量,然后通过串联将多位结果分配给每个变量。请参阅以下示例。

integer i;

initial begin
  $monitor(d0, d1, d2, d3, s0, s1, y);
  for (i=0; i<2**6; i=i+1) begin
    {d0,d1,d2,d3,s0,s1} = i;
    #5;
  end
end