verilog ICARUS 工具中的以下语法错误是什么?
What is this following syntax error in verilog ICARUS tool?
module alu(input [7:0] A,B,
input [3:0] selector,
output [7:0] ALU_output,
output ALU_output_carry
);
reg [7:0] ALU_result;
wire [8:0] tmp;
assign ALU_result=ALU_output;
assign tmp={1'b0,A}+{1'b0,B};
assign ALU_output_carry= tmp[8];
always @(*) begin
case(selector)
4'b0000: ALU_result= A+B;
4'b0001: ALU_result=A-B;
4'b0010: ALU_result=A&B;
4'b0011:ALU_result=A|B;
default: ALU_result=A-B;
endcase
end
endmodule
上面是8位ALU的Verilog代码(我用这个名字保存的“8it_alu_code.v”,没有双引号),下面是它的testbench(我用这个名字保存它8it_alu_tb.v", 不带双引号).
`timescale 1ns/1ps
module alu_tb;
reg[7:0] A,B;
reg[3:0] selector;
wire[7:0] ALU_output;
wire ALU_output_carry;
integer i;
alu test(A , B , selector , ALU_output , ALU_output_carry )
initial begin
$dumpfile("dump.vcd");
$dumpvars(1,alu_tb);
A=8'b00000010;
B=8'b00000110;
selector=4'b0000;
for(i=0;i<4;i++)
begin
selector=selector+4'b0001;
#10
end
end
endmodule
当我在ICARUS Tool上编译时如下:
iverilog -o 8it_alu_code.v 8it_alu_tb.v
我收到此错误(我认为是在测试台文件中)
8it_alu_tb.v:1: syntax error
I give up.
然后,我认为模拟器可能有问题,所以我去了 'EDAplayground' 网站并 运行 在线模拟器中的两个文件。我得到以下错误,没有任何输出波形或任何东西:
No top level modules, and no -s option.
Exit code expected: 0, received: 1
我希望它在我的 'ICARUS+GTKWAVE' 上成功 运行 并提供一些波形输出,或者在 EDA Playground 在线模拟器上。但是,它没有编译成功。
所以,请给我一些建议,我应该怎么做才能摆脱它。
你从不开车 ALU_output
,而且你经常开车 ALU_result
。
这一行:
assign ALU_result=ALU_output;
可能应该改为:
assign ALU_output=ALU_result;
iverilog
目前不支持很多 SystemVerilog。 ++
运算符是在 SV 中引入的。变化:
for(i=0;i<4;i++)
至:
for(i=0;i<4;i=i+1)
两行缺少分号(在下面添加):
alu test(A , B , selector , ALU_output , ALU_output_carry );
#10;
module alu(input [7:0] A,B,
input [3:0] selector,
output [7:0] ALU_output,
output ALU_output_carry
);
reg [7:0] ALU_result;
wire [8:0] tmp;
assign ALU_result=ALU_output;
assign tmp={1'b0,A}+{1'b0,B};
assign ALU_output_carry= tmp[8];
always @(*) begin
case(selector)
4'b0000: ALU_result= A+B;
4'b0001: ALU_result=A-B;
4'b0010: ALU_result=A&B;
4'b0011:ALU_result=A|B;
default: ALU_result=A-B;
endcase
end
endmodule
上面是8位ALU的Verilog代码(我用这个名字保存的“8it_alu_code.v”,没有双引号),下面是它的testbench(我用这个名字保存它8it_alu_tb.v", 不带双引号).
`timescale 1ns/1ps
module alu_tb;
reg[7:0] A,B;
reg[3:0] selector;
wire[7:0] ALU_output;
wire ALU_output_carry;
integer i;
alu test(A , B , selector , ALU_output , ALU_output_carry )
initial begin
$dumpfile("dump.vcd");
$dumpvars(1,alu_tb);
A=8'b00000010;
B=8'b00000110;
selector=4'b0000;
for(i=0;i<4;i++)
begin
selector=selector+4'b0001;
#10
end
end
endmodule
当我在ICARUS Tool上编译时如下:
iverilog -o 8it_alu_code.v 8it_alu_tb.v
我收到此错误(我认为是在测试台文件中)
8it_alu_tb.v:1: syntax error
I give up.
然后,我认为模拟器可能有问题,所以我去了 'EDAplayground' 网站并 运行 在线模拟器中的两个文件。我得到以下错误,没有任何输出波形或任何东西:
No top level modules, and no -s option.
Exit code expected: 0, received: 1
我希望它在我的 'ICARUS+GTKWAVE' 上成功 运行 并提供一些波形输出,或者在 EDA Playground 在线模拟器上。但是,它没有编译成功。 所以,请给我一些建议,我应该怎么做才能摆脱它。
你从不开车 ALU_output
,而且你经常开车 ALU_result
。
这一行:
assign ALU_result=ALU_output;
可能应该改为:
assign ALU_output=ALU_result;
iverilog
目前不支持很多 SystemVerilog。 ++
运算符是在 SV 中引入的。变化:
for(i=0;i<4;i++)
至:
for(i=0;i<4;i=i+1)
两行缺少分号(在下面添加):
alu test(A , B , selector , ALU_output , ALU_output_carry );
#10;