¿Por qué se retrasa esta asignación de vector lógico?

0

Soy un principiante en la programación de FPGA, y he encontrado este problema recientemente:

En un proceso síncrono, ¿cuál es la explicación lógica de que una señal no pueda leerse justo después de su asignación? (Tengo una idea de la respuesta, pero quiero escuchar tu opinión sobre esto)

En el siguiente fragmento de código VHDL:

if byteCnt = 0 then                -- On the 1st clock cycle, I assign the first byte of data to block_count's MSByte
    block_count(15 downto 8) <= rx_data;
    byteCnt := byteCnt+1;
elsif byteCnt = 1 then             -- On the 2nd, the LSByte is assigned
    block_count(7 downto 0) <= rx_data;
    cmd_internal <= block_count;   -- Here cmd_internal = 10101010UUUUUUUU, why?
end if;

Una solución rápida sería cmd_internal <= block_count(15 downto 8) & rx_data; pero ese no es el punto de mi pregunta :)

    
pregunta Fluffy

1 respuesta

1

Ya que está hablando de una asignación de señal temporizada, su código está inferiendo un registro D Flop. Del siguiente diagrama, debe quedar claro que la entrada actual (D) en cualquier reloj dado no estará disponible para leer (Q) en el mismo borde del reloj.

    
respondido por el ks0ze

Lea otras preguntas en las etiquetas