我正在编写一个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
但是,我总是收到错误“语法错误接近结束”。在这里可能出现的语法错误是什么?
答案 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