2016-03-10 2 views
3

У меня очень разочаровывает опыт моей первой недели обучения Verilog.Синтаксическая ошибка Icarus Verilog при вычитании двух 32-битных входов?

Я пытаюсь скомпилировать код ниже - от mipsalu.v

module MIPSALU (ALUctl, A, B, ALUOut, Zero); 
    input [3:0] ALUctl; 
    input [31:0] A,B; 
    output reg [31:0] ALUOut; 
    output Zero; 
    assign Zero = (ALUOut==0); //Zero is true if ALUOut is 0; goes anywhere 
    always @(ALUctl, A, B) //reevaluate if these change 
    case (ALUctl) 
     0: ALUOut <= A & B; 
     1: ALUOut <= A | B; 
     2: ALUOut <= A + B; 
     3: ALUOut <= A^B; 
     6: ALUOut <= A – B; 
     7: ALUOut <= A < B ? 1:0; 
     12: ALUOut <= ~(A | B); // result is nor 
     default: ALUOut <= 0; //default to 0, should not happen; 
    endcase 
endmodule 

Когда я пытаюсь скомпилировать это с помощью iverilog -o test mipsalu.v, iverilog говорит мне

mipsalu.v:13: syntax error 
I give up. 

Когда я удалить ошибочную строку и скомпилировать снова, нет ошибок -

module MIPSALU (ALUctl, A, B, ALUOut, Zero); 
    input [3:0] ALUctl; 
    input [31:0] A,B; 
    output reg [31:0] ALUOut; 
    output Zero; 
    assign Zero = (ALUOut==0); //Zero is true if ALUOut is 0; goes anywhere 
    always @(ALUctl, A, B) //reevaluate if these change 
    case (ALUctl) 
     0: ALUOut <= A & B; 
     1: ALUOut <= A | B; 
     2: ALUOut <= A + B; 
     3: ALUOut <= A^B; 
     //6: ALUOut <= A – B; 
     7: ALUOut <= A < B ? 1:0; 
     12: ALUOut <= ~(A | B); // result is nor 
     default: ALUOut <= 0; //default to 0, should not happen; 
    endcase 
endmodule 

Любое понимание было бы очень признателен. Спасибо!

Edit: стоит отметить, что я бегу версии 10 Икара Verilog на ОС Windows 8.1 с использованием MinGW/MSYS

ответ

4

Не знаю, как вы сделали это, но ваш символ в расширенном формате ASCII в соответствии с ISO 8859- 1. Accrding to ascii-code.com ASCII-код - 150 DEC (код HTML &#150;). Verilog ожидает - Код ASCII 45 DEC (код HTML &#45;).

Два вида почти идентичны; – (&#150;) - это всего лишь несколько пикселей дольше, чем - (&#45;), по крайней мере, с некоторыми шрифтами.

Возможно, ваш текстовый редактор меняет его на лету, думая, что тире выглядит более читаемым, чем минус.


FYI: в Verilog обычно требуется логика комбинации должна быть назначена с блокирующими заданиями (=) и последовательной логикой быть назначено с неблокирующим назначением (<=). Вы используете неблокирование для комбинационной логики и должны перейти на блокировку.

always @(ALUctl, A, B) является законным, но имейте в виду, что также есть always @* (или always_comb для SystemVerilog), который является списком авточувствительности. Если вы пропустите элемент в списке чувствительности, функциональное поведение verilog при моделировании и синтезированном функциональном поведении может отличаться.

Если вы хотите уменьшить некоторую типизацию, вы можете попробовать стиль заголовка ANSI. Его обсуждали несколько раз с другими вопросами (https://stackoverflow.com/search?q=%5Bverilog%5D+ANSI)

+0

Ничего себе, это очень полезно. Я не писал этот код, но я обязательно изменю неблокирующие назначения на регулярные = присваивания – Zabitz

Смежные вопросы