VHDL: Varvastossut

Johdanto

Flip-flop on logiikkapiiri, joka pystyy ylläpitämään lähtönsä arvot tuloarvojen muutoksista riippumatta, eli joka käsittää ”muistitilan”. Tämä on elementti, joka mahdollistaa siirtymisen yhdistelmälogiikasta peräkkäiseen logiikkaan.

Varvastossuja on useita tyyppejä: Astable, Bstabiili ja Monostable.

Vakaa: Se on flip-flop, jossa on 2 epävakaata tilaa ja joka vaihtaa ajoittain (jakso T) ja spontaanisti yhdestä tilasta
toiselle.

Bstabiili: Kaksi vakaata tilaa. Logiikassa tämä tarkoittaa loogisia tiloja ”1” tai ”0”.

Monostabiili: Kun on vain yksi vakaa tila, toinen tila on väliaikainen.

Flip-flopseja on kahta tyyppiä: asynkroniset ja synkroniset. Synkronisissa kiikkuissa on kellotulo, mikä ei päde asynkronisiin kiikkuihin.

Asynkroniset varvastossut
– RS-rokkari
– D-salpa
Synkroniset varvastossut
– rokkari D
– JK-kytkin

Mitä eroa on flip-flopilla ja logiikkaportilla?

Flip-flop on logiikkapiiri, joka pystyy ylläpitämään lähtönsä arvot tuloarvojen muutoksista riippumatta, eli joka käsittää ”muistitilan”. Tämä on elementti, joka mahdollistaa siirtymisen yhdistelmälogiikasta peräkkäiseen logiikkaan.
Flip-flop koostuu usein useista logiikkaporteista. Tässä on esimerkki D-flip-flopista:

Mitä eroa on kytkimellä ja salvalla?

Suurin ero flip-flopin ja salvan välillä on, että kiikku tarkistaa tulot, mutta muuttaa lähtöä vain kellosignaalin tai muun ohjaussignaalin määritteleminä aikoina, kun taas salpa tarkistaa tulot jatkuvasti ja reagoi välittömästi tulon muutoksiin.

Flip-flop D

Tarkastelemme nyt D-kiikkua asynkronisella nollauksella. Tätä varten käytämme tietosyöttöä tiedoille, jotka haluat viestiä. Tarvitsemme kellon (clk), koska se on synkroninen flip-flop. Lopuksi reset-toiminto siirtää tiedot d:stä q:hen tai nollata flip-flop.

Miten D-flip-flop toimii?

  • Jos nollaus on 1, lähtö q saa arvon 0.
  • Jos nollaus on 0, lähetämme d:stä tulevan arvon q:lla jokaisen kellon tikityksen yhteydessä.
LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY bascule_D IS
PORT (d, clk, rst: IN STD_LOGIC;
q: OUT STD_LOGIC);
END bascule_D;

ARCHITECTURE comportement OF bascule_D IS
BEGIN
PROCESS (clk, rst)
BEGIN
IF (rst='1') THEN
q <= '0';
ELSIF (clk'EVENT AND clk='1') THEN
q <= d;
END IF;
END PROCESS;
END comportement;
Tässä on simulaation tulos:
1. kellon tikitys: Kello on korkea, nollaus myös, joten tulosignaali d ei pääse kulkemaan lähtösignaaliin q.

Flip-flop JK

JK-flip-flop on eräänlainen bistabiili flip-flop, mikä tarkoittaa, että sillä on kaksi erillistä vakaata tilaa. Sen nimi ”JK” tulee kirjaimista, jotka liittyvät sen tärkeimpiin tuloportteihin: J ja K.

Kun J:llä ja K:llä on eri arvot, JK-kiikku muuttaa tilaa tarkasti määritellyn sekvenssin mukaisesti. Jos J on korkea (1) ja K on alhainen (0), flip-flop siirtyy ”SET” (1) -tilaan. Jos J on alhainen (0) ja K on korkea (1), flip-flop siirtyy ”RESET” (0) -tilaan. Jos J ja K ovat molemmat korkeita (1), flip-flop vaihtuu vuorotellen tilojen välillä jokaisen kellopulssin kanssa.

library ieee;
use ieee.std_logic_1164.all;

entity Bascule is
 port(J,K,Clk,Set, Reset : in std_logic;
 Q, Q_bar : out std_logic);
end Bascule;

architecture bascule_JK of Bascule is 
 signal SIG : std_logic;
 signal JK : std_logic_vector (1 downto 0);
begin
 JK(1) <= J;
 JK(0) <= K;
 process(Clk, Set, Reset)
 begin
 if (Reset = '0'and Set = '0') then
    SIG <= '0';
 elsif (Reset = '0' and Set = '1') then
    Sig <= '0';
   elsif (Reset ='1' and Set ='0') then
 Sig <='1'; 
 elsif (Reset = '1' and Set ='1') then
 if (Clk'event and Clk ='0') then 
  case JK is 
   when "00" => SIG <= SIG;
   when "01" => SIG <= '0';
   when "10" => SIG <= '1';
   when "11" => SIG <= not SIG; 
   when others => SIG <= '-';
  end case; 
  else 
   SIG <= SIG;
  end if; 
 end if; 
 end process; 
 Q <= SIG; 
 Q_bar <= not SIG; 
end bascule_JK; 
 
Tässä on simulaation tulos: