2014-11-08 3 views
-1

Так я получаю ошибкуModelSim Регистрация незаконна ошибка

** Ошибка: C: /Modeltech_pe_edu_10.3c/examples/HW6/alu.v (53): Регистр является незаконным в левой части непрерывного присвоение

для оператора присваивания [присваивать результат = 32'd0;] любые идеи, почему? я пробовал перемещать этот кластер операторов по всему коду, и единственный способ его работы - полностью удалить часть кода.

Проблема в том, что мне нужно, чтобы запустить стенд. Любые идеи о том, что означает эта ошибка и как ее решить?

// 
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 

    module alu 
    (
     //-------------------------- 
     // Input Ports 
     //-------------------------- 
      input [31:0] operand0, 
     input [31:0] operand1, 
     input [3:0] control, 
     //-------------------------- 
     // Output Ports 
     //-------------------------- 
      output reg [31:0] result, 
     output   zero, 
     output  overflow 



    ); 
     //-------------------------- 
     // Bidirectional Ports 
     //-------------------------- 
     // < Enter Bidirectional Ports in Alphabetical Order > 
     // None 

     /////////////////////////////////////////////////////////////////// 
     // Begin Design 
     /////////////////////////////////////////////////////////////////// 


      assign result = 32'd0; 
     assign zero  = 1'b1; 
     assign overflow = 1'b0; 




    always @(*) 


    begin 
    case(control) 




    4'b0000: result = operand0 && operand1; 

    4'b0001: result = operand0 || operand1; 

    4'b0010: result = operand0^operand1; 

    4'b0011: result = !(operand0 || operand1); 

    4'b0100: result = operand0 + operand1; 

    4'b0110: result = operand0 - operand1; 

    4'b1000: result = operand0 < operand1; 

    4'b1001: result = operand0 << operand1; 

    4'b1010: result = operand0 >> operand1; 

    4'b1011: result = operand0 >>> operand1; 
    endcase 

    end 



    endmodule 

ответ

0

Во-первых: тип reg не может быть назначен в assign заявлении; это правило Веролога. «Регистр незаконен в левой части непрерывного присвоения» означает, что регистр не может быть назначен оператором assign. левая сторона, как в левой части =.

Second: Даже если тип reg может быть назначен в операторе assign, у вас будет несколько драйверов на result, поскольку он назначается в всегда блоке. Операторы assign являются непрерывными драйверами, то есть они всегда будут применять значение к сигналу независимо от того, что другие блоки делают с одним и тем же сигналом. Если есть какие-либо конфликты (например, один применяется 1, а другой применяется 0), результат будет 'bx;

Решение: Удалить строку: assign result = 32'd0;result является комбинационной логикой и не требует начального значения.

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