2016-06-28 11 views
0

Ich habe 9 Flipflops und einen Reset-Eingang. Ich muss die Ausgänge von 8 Flipflops auf 0 setzen, wenn der Reset 0 ist. Und Ausgabe eines Flipflops zu 1. Dieses Flipflop ist einzigartig und hat sich nie verändert. Wie es geht?Verschiedene Flipflops - verschiedene Ausgänge für einen Reset-Eingang

Code of Flip-Flops:

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 

entity d_ff is 
    port 
    (
     clk : in std_logic; 
     rst : in std_logic;  
     d : in std_logic; 
     q : out std_logic 
    ); 
end entity d_ff; 

architecture logicFunc of d_ff is 
begin 
    process (clk) is 
    begin 
     if (rst='0') then 
      q <= '0'; 
     elsif (clk'event and clk = '1') then 
      q <= d; 
     end if; 
    end process; 
end architecture logicFunc; 

Jetzt setzt dieser Code alle Flip-Flops auf 0 beim Zurücksetzen 0 ist und ich kann nicht

Antwort

1

Die 8 Flip-Flops in Hauptprogramm Ausgang des ersten Flip-Flops ändern, die Wenn Sie auf '0' zurücksetzen, können Sie den angezeigten Code verwenden. Für die anderen Flip-Flops können Sie ein anderes Unternehmen d_ff1 erstellen:

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 

entity d_ff1 is 
    port 
    (
     clk : in std_logic; 
     rst : in std_logic;  
     d : in std_logic; 
     q : out std_logic 
    ); 
end entity d_ff1; 

architecture logicFunc of d_ff1 is 
begin 
    process (clk) is 
    begin 
     if (rst='0') then 
      q <= '1'; 
     elsif (clk'event and clk = '1') then 
      q <= d; 
     end if; 
    end process; 
end architecture logicFunc; 

Auf diese Weise ist mit der Art und Weise halten Sie eine separate Flip-Flop-Einheiten haben wollte.

+0

So einfache Lösung. Wie ich es nicht gemacht habe. Vielen Dank! – levshkatov

3

Eine Alternative ist die Verwendung von Generika. Auf diese Weise können Sie für alle Ihre d_ff-Instanzen den exakt gleichen Code verwenden. Zum Beispiel:

library IEEE; 
use IEEE.STD_LOGIC_1164.ALL; 

entity d_ff is 
    generic 
    (
     RESET_VALUE : std_logic 
    ); 
    port 
    (
     clk : in std_logic; 
     rst : in std_logic;  
     d : in std_logic; 
     q : out std_logic 
    ); 
end entity d_ff; 

architecture logicFunc of d_ff is 
begin 
    process (clk) is 
    begin 
     if (rst='0') then 
      q <= RESET_VALUE; 
     elsif (clk'event and clk = '1') then 
      q <= d; 
     end if; 
    end process; 
end architecture logicFunc; 

Dann, wenn Sie davon Gebrauch machen Ihre 8 FF zu erstellen, die auf eine ‚0‘ und 1 FF zurückgesetzt, die auf eine ‚1‘ setzt:

library ieee; 
use ieee.std_logic_1164.all; 

entity foo is 
    port map 
    (
    clk : in std_logic; 
    rst : in std_logic; 
    d : in std_logic_vector(8 downto 0); 
    q : out std_logic_vector(8 downto 0) 
) 
end entity foo; 

architecture structural of foo is 
begin 
    ff_gen : for i in 0 to 7 generate 
    begin 
    ff : entity work.d_ff 
    generic map 
    (
     RESET_VALUE => '0' 
    ) 
    port map 
    (
     clk => clk, 
     rst => rst, 
     d => d(i), 
     q => q(i) 
    ); 
    end generate ff_gen; 

    ff0_gen : entity work.d_ff 
    generic map 
    (
    RESET_VALUE => '1' 
) 
    port map 
    (
    clk => clk, 
    rst => rst, 
    d => d(8), 
    q => q(8) 
); 
end architecture structural; 
2

Warum haben eine d_ff Einheit überhaupt? Warum eine separate Hierarchieebene haben? Kein professioneller Benutzer von VHDL würde das tun, außer es gibt einen besonderen Grund dafür. Implementieren Sie stattdessen einfach Ihre 9 Flip-Flops als Prozess:

process (clk) is 
    begin 
     if rst='0' then 
      q < = "000000001"; 
     elsif rising_edge(clk) then 
      q <= d; 
     end if; 
    end process;