VHDL flip-flop asíncrono tipo D

0

Acabo de empezar a aprender el código vhdl y escribí este código para un flip flop asíncrono tipo D. ¿Cómo debo modificar mi código para que tenga un segundo tipo D, y la entrada al segundo se alimenta de la salida del primero?

library ieee;
use ieee.std_logic_1164.all;

entity FLIPFLOP is
port ( 
  clk : in  std_logic ;
  clr : in  std_logic ;
  D   : in  std_logic ;
  Q   : out  std_logic
  );
end FLIPFLOP;

architecture behav of FLIPFLOP is
begin
process (clk,clr,D)
begin
if clr = '1' then
Q<= '0';
elsif rising_edge (clk) then
Q<= D;
end if;
end process;
end behav;
    
pregunta super95

2 respuestas

2

Me gusta mantener los registros de desplazamiento definidos como vectores. Esto ayuda a mantener el código a largo plazo. Descubrirá que esto es solo 2 líneas más de lo que ya tenía (es decir, una línea para la declaración std_logic_vector y otra línea para asignar la salida).

Prueba esto:

entity dualff is
port (
    clk : in  std_logic;
    clr : in  std_logic;
    d   : in  std_logic;
    q   : out std_logic );
end dualff;

architecture Behavioral of dualff is signal dffs : std_logic_vector (1 downto 0) := b"00"; begin q <= dffs(1); process (clk, clr) begin if clr = '1' then dffs <= "00"; elsif rising_edge (clk) then dffs <= dffs(0) & d; end if; end process; end Behavioral;

RTL:

    
respondido por el Blair Fonville
0

Puedes hacer esto en un solo proceso.

Declare una señal q0 y modifique el proceso como se muestra a continuación.

process(clr, clk)
begin
  if clr = '1' then
    q0 <= '0';
    Q <= '0';
  elsif rising_edge(clk) then
    q0 <= D;
    Q <= q0;
  end if;
end process;

Esto se compilará en dos flip-flops D con compensación asíncrona y la salida Q del primer flip-flop que alimenta la entrada D del segundo.

    
respondido por el rvkrysh

Lea otras preguntas en las etiquetas