Verilog 中接近尾声的语法错误
Syntax error near end in Verilog
我正在编写 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
但是,我总是收到错误 "syntax error near end"。此处可能出现的语法错误是什么?
您在 #5
后少了一个分号。它应该给你一个行号来指出是哪个end
导致了问题
问题(除了 #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
我正在编写 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
但是,我总是收到错误 "syntax error near end"。此处可能出现的语法错误是什么?
您在 #5
后少了一个分号。它应该给你一个行号来指出是哪个end
导致了问题
问题(除了 #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