Una forma fácil de definir multiplexores de salida de cable en Verilog

0

Para el tipo de cable en Verilog, sé que puedo definir un multiplexor de la siguiente manera

wire a;

assign a = select ? 1'b0 : 1'b1;

Y para los de registro, puedo hacerlo de la siguiente manera

reg a;
always @ (select)
begin
    case(select)
    1'b0: a = 1'b0;
    1'b1: a = 1'b1;
    endcase
end

Ahora surge mi pregunta: es muy fácil describir multiplexores complejos utilizando regs / siempre bloques / declaraciones de procedimiento. Parece tan tedioso hacer lo mismo con los cables. ¿Qué sucede si quisiera describir un multiplexor muy complejo que maneja un cable? ¿Sería mi selección? ¿La línea es enorme?

    
pregunta AlfroJang80

2 respuestas

1

Simplemente use case y declare la señal como reg . La distinción entre wire y reg en Verilog es bastante artificial de todos modos: realmente no hay diferencia funcional entre ellos, solo algunas reglas de sintaxis (en su mayoría históricas).

    
respondido por el Dave Tweed
0

Puedes hacerlo

assign a = somefunction(select);
function somefunction(input sel);
begin
  case(sel)
  1'b0: a = 1'b0;
  1'b1: a = 1'b1;
  endcase
end
endfunction

La única complicación es que cada entrada a su bloque de lógica tiene que ser una entrada para su función.

Usando el formulario variable, puedes usar @* y no te preocupes por eso.

    
respondido por el dave_59

Lea otras preguntas en las etiquetas