Как подключить порт включения к мультиплексору 4×1 в verilog?

#verilog

#verilog

Вопрос:

Я пытаюсь реализовать мультиплексор 4×1 в Verilog. Я хочу подключить enable (en) в качестве порта, ввод которого ‘1’ (high) может НА мультиплексоре, а ‘0’ (low) отключить этот мультиплексор. Пожалуйста, предложите некоторые изменения в моем коде. Заранее спасибо.

 module mux_4_to_1(
    input d,c,b,a,      //Inputs
    input s1,s0,               //Select Lines
    input en,                  //enable
    output reg y                   //output
    );

always @ (*)
begin
    case (s0 | s1)
    2'b00 : y <= a;
    2'b01 : y <= b;
    2'b10 : y <= c;
    2'b11 : y <= d;
    default : y <= 0;
    endcase
end
endmodule
  

Ответ №1:

Вы хотите en действовать как глобальный коммутатор для включения или выключения мультиплексора, чтобы он получал наивысший приоритет.

 always @ (*)
begin
    if (en) begin
        case ({s0, s1})  // pay attention here
        2'b00 : y = a;
        2'b01 : y = b;
        2'b10 : y = c;
        2'b11 : y = d;
        default : y = 0;
        endcase
    end
    else begin
        y = 1'b0;  // your question didn't specify the expected output when OFF
    end
end
  

Пожалуйста, обратите внимание, что я изменился case (s0 | s1) на case ({s0, s1}) .
s0 | s1 возвращает результат шириной в 1 бит, в то время как вам нужна конкатенация s0 и s1 .

Кроме того, я заменил все NBA <= на BA = .

И default ветвь на самом деле не могла произойти в silicon, потому что вы указали все возможные комбинации. Но если вы считаете, что это может быть полезно при моделировании, вы можете оставить его.