¿El orden de los cables para asignar es importante?

-2

En Verilog, dados los cables a y b , hay una diferencia entre:

assign a = b;

Y

assign b = a;

?

    
pregunta oconnor0

2 respuestas

2

Sí, sí importa.

assign a = b; asigna a para obtener cualquier valor que tenga b , cada vez que cambie b .

En la simulación, esto significa que también tienes un lugar

assign a = c | d & e;

entonces

  1. Tendrías un conflicto porque a está asignado en dos lugares.

Esto podría resolverse declarando las dos asignaciones con diferentes configuraciones de fuerza, por ejemplo

assign weak a = b;
assign strong a = c & d | e;

Pero esto probablemente no sería sintetizable, al menos para los objetivos FPGA.

  1. Los cambios en c , d o e no afectarán a b .

En síntesis, el assign a=b; podría inferir simplemente que a y b son la misma red, o podría inferir un búfer que conecta b a a . El que realmente se produce depende del capricho de su herramienta de síntesis.

    
respondido por el The Photon
0

Di que tienes esto:

reg a;

always @ (posedge clock) begin
    a <= someAmazingSignal;
end

Entonces importaría. Esto estaría bien:

assign b = a; //Assuming that b is of course a wire and not a reg.

Por otro lado, esto no:

assign a = b; //Because a is a register and you can't assign to one of those.

Y no funcionaría incluso si tuvieras:

wire a;
assign a = someAmazingSignal;

Porque aquí ya hemos asignado a algo, por lo que no podemos asignarle b.

Como nota al margen, sin ningún contexto es muy difícil darle una respuesta. Dependiendo de qué es a y qué es b , la respuesta será si sí hace una diferencia o no, no.

    
respondido por el Tom Carpenter

Lea otras preguntas en las etiquetas