Use 3-8 MUX en lugar de la declaración del caso [cerrado]

0

He estado pensando en implementar una ALU muy simple, y encontré este enlace Verilog 8 Bit ALU . Esto parece ser una implementación muy ingenua y abstracta pero intuitiva. Estoy pensando en romper las capas de abstracción aquí, y llevar la implementación al nivel de la puerta. El primer paso en esta OMI sería usar un multiplexor 3-8 para seleccionar un módulo ALU particular en lugar de la declaración del caso. Sin embargo, no puedo pensar en una manera de hacerlo en verilog. ¿Alguien puede proporcionar un fragmento de código que haga esto o dirigirme a la dirección correcta?

Gracias,

    
pregunta Bilal Wasim

1 respuesta

2

La forma más habitual de escribir un multiplexor en Verilog es con una declaración de caso:

reg mux_out;
always @ (*)
begin : 
    case(sel ) 
        1'b0 : mux_out = din_0;
        1'b1 : mux_out = din_1;
    endcase 
end

Para un mux 2: 1 como este, podría ser tan claro escribirlo usando el operador ternario:

wire mux_out;
assign mux_out = sel ? din_1 : din_0;

Pero para muxes más grandes, la declaración del caso es más fácil de leer.

Por supuesto, puedes construir uno a partir de puertas, pero no hay razón para esperar que esto produzca un resultado diferente de la síntesis. Simplemente lo construirías a partir de la representación de SOP. Para un mux 2-1:

wire mux_out;
assign mux_out = ~sel & din_0 | sel & din_1;

Sin embargo, no recomendaría hacer esto porque hace que tu diseño sea más difícil de entender. En general, debería preferir codificar en el nivel más alto posible de abstracción, para que su código sea más claro para quien tenga que depurarlo.

    
respondido por el The Photon

Lea otras preguntas en las etiquetas