¿Es necesario que una señal esté en un proceso sincronizado para registrarse (VHDL)?

1

Entiendo que es una buena práctica registrar los resultados de todos los módulos; entonces quiero hacer eso Sin embargo, no estoy seguro de qué significa exactamente registrar una señal de salida.

I.e. ¿Tengo que incluir la señal en un proceso cronometrado para asegurarme de que esté registrada? ¿O puedo simplemente usar una declaración concurrente?

Podría ser una de dos maneras:

entity mgmt_regs is
  port map
  (
    -- Internal host bus interface
    clk             : in std_logic,
    in_signal       : in std_logic,
    out_signal      : out std_logic
  );
end mgmt_regs;

architecture RTL of mgmt_regs is
signal sIn_signal    : std_logic;
signal sOut_signal   : std_logic;

begin

sIn_signal <= in_signal;

-------------------- THIS ONE?? -------------
out_signal <= sOut_signal;-------------------

process(clk)
begin 
   if (rising_edge(clk)) then
       --do other stuff

       ------------------------- OR THIS ONE?? -----------
       out_signal <= sOut_signal; ------------------------
   end if;
end process;

end architecture RTL;

Además, me preguntaba sobre los casos en los que tengo una entidad principal. Si mis subcomponentes tienen sus señales que se conectarán a la parte de salida de mi entidad superior y dentro de esas entidades inferiores se registrará su señal, ¿todavía tengo que registrar la señal de salida en la hoja superior o puedo simplemente conectarlo a la puerto de salida?

    
pregunta Klik

2 respuestas

2

En general (99% del tiempo) necesitará una señal de reloj para cada registro.

Pero, verilog / VHDL no tiene que especificar la implementación exacta del registro.
Solo dígaselo, este es un bitnode que está activado por nivel o por flanco ascendente controlado por algunas señales.

Por ejemplo, si está utilizando un estilo de diseño menos común, como MS-CMOS, es posible que no necesite un reloj para cada registro. En este caso, el registro podría representarse utilizando un latch SR, que no necesita un reloj. Pero incluso en este caso, sería común "estabilizar" la salida del latch SR usando un flip flop de tipo normal (que requiere un reloj). Hay otros ejemplos pero variarían mucho.

Cada vez que agregue un registro a una ruta en serie, creará un límite de ciclo (un sistema de bloqueo y tipo de dique controlado por el reloj). En lo que respecta a su última pregunta, depende de la funcionalidad deseada. Pero creo que tu caso no, no necesitas registrar las salidas. Si todas las entradas provienen de registros, la salida estará 'en ese ciclo'. Si agrega un registro en la salida, empujará esa salida al próximo ciclo.

    
respondido por el jbord39
0

El término 'registro' se refiere a un elemento de memoria lógica, que es casi siempre un flip-flop. La mayoría de las veces, en los diseños, encontrarás que será un Flip-Flop tipo D o DFF.

La idea de que todas las salidas de los módulos sean de registros a veces se expone como una regla general a la que apuntar. Sin embargo, es muy subjetivo.

Es una buena idea si, por ejemplo, hay muchos módulos que se reutilizan en diferentes diseños para FPGA / ASIC con muchos registros.

Es una mala idea si no puede permitirse, o no quiere perder tiempo, la latencia causada por los relojes adicionales para que las señales lleguen a los destinos. O si está utilizando un dispositivo de puerta pequeña o si su dispositivo de destino estará muy lleno de todos modos.

(Estoy seguro de que hay más razones por las que la gente puede dar, pero te entiendes. Estoy a favor del campo 'no', pero mis circunstancias suelen ser las que he enumerado como 'mala idea'. Mis diseños a menudo los produce yo solo desde cero.)

    
respondido por el TonyM

Lea otras preguntas en las etiquetas