Построить 8-битный ALU, используя Verilog

Я пытаюсь построить 8-битный канал данных в ALU, который может добавить, sub, OR, и два операнда.

Я хочу использовать оператор case для каждой операции в коде, но продолжаю получать сообщения об ошибках.

Вот как это выглядит до сих пор:

    module alu (
      input     [7:0] xa,xb,
      input     [7:0] op_sel,
      input wire ctrl,
      output reg    0Zero, 0Carry,
//0Zero infers latch: can only be assigned to 1/ always reg
      output reg [7:0] result_out,
      );
    always @(*)
    8'hE0 :
    //4 bit for now
        begin
            out = 8'b0;
            0Carry = 1'b0;
            //calculate value
                    case (1) //alu controlled by ctrl signal
                        8'hA0: out = xa&xb;
                        //
                        8'hB0: (0Carry ,out) = xa+xb;
                        //
                        8'hC0: (0Zero , 0Carry, out) = xa-xb;
                        //
                        8'hD0: out = ~(xa|xb);
                        //
                    endcase
                end

1 ответ

Ваше выражение case равно 1, вы должны изменить его на некоторую переменную. Вот пример заявления случая:

reg [1:0] address;
case (address)
  2'b00 : statement1;
  2'b01, 2'b10 : statement2;
  default : statement3;
endcase

Если значение адреса 2'b00, то будет выполняться оператор1. Statement2 выполняется, когда значение адреса равно 2'b01 или 2'b10. В противном случае оператор 3 выполняется.

Другие вопросы по тегам