En Verilog, dados los cables a
y b
, hay una diferencia entre:
assign a = b;
Y
assign b = a;
?
En Verilog, dados los cables a
y b
, hay una diferencia entre:
assign a = b;
Y
assign b = a;
?
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
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.
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.
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.
Lea otras preguntas en las etiquetas verilog