Что это за синтаксическая ошибка в инструменте verilog ICARUS?

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
           

Выше код Verilog (я сохранил его под этим именем 8it_alu_code.v, без двойных кавычек) для 8-битного ALU, а ниже - тестовый стенд (я сохранил его под этим именем 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

Я получаю эту ошибку (я думаю, в файле testbench)

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. Но он не компилируется. Итак, пожалуйста, дайте несколько советов, что мне делать, чтобы от него избавиться.


person MR LUN    schedule 13.01.2021    source источник


Ответы (1)


Вы никогда не водите ALU_output, а умножаете драйв ALU_result. Эта строка:

assign ALU_result=ALU_output;

вероятно, следует изменить на:

assign ALU_output=ALU_result;

iverilog в настоящее время не поддерживает большую часть SystemVerilog. Оператор ++ был введен в SV. Изменять:

  for(i=0;i<4;i++)

to:

  for(i=0;i<4;i=i+1)

В двух строках отсутствовала точка с запятой (добавлено ниже):

alu test(A , B , selector , ALU_output , ALU_output_carry );

#10;
person toolic    schedule 13.01.2021