Siirry sisältöön

VHDL-kieli FPGA-suunnittelussa/4-bittinen siirtorekisteri

Wikikirjastosta

4-bittinen siirtorekisteri

[muokkaa | muokkaa wikitekstiä]

Siirtorekisterillä tarkoitetaan digitaalitekniikassa peräkkäin kytketyistä kiikuista koostuvaa järjestelmää, jossa rekisterin sisältö liikkuu kellotulon määräämässä tahdissa eteenpäin. 4-bittisessä siirtorekisterissä on neljä muistipaikkaa. Niiden tärkeä sovellus on sarjamuotoisen signaalin muuttaminen rinnakkaismuotoon ja päinvastoin.

Rakenne & toteutus

[muokkaa | muokkaa wikitekstiä]

Tiedon syöttäminen rekisteriin ja sen lukeminen voidaan toteuttaa eri tavoilla. On olemassa SIPO-rekistereitä (serial-in parallel-out), SISO-rekistereitä (serial-in serial-out), PIPO-rekistereitä (parallel-in parallel-out) ja PISO-rekistereitä (parallel-in serial-out). Jokaisella on oma käyttötarkoituksensa. Myös käytettävät kiikut voivat vaihdella: Siirtorekisteri voidaan rakentaa esimerkiksi D-kiikuilla tai JK-kiikuilla.

SIPO-siirtorekisteri

[muokkaa | muokkaa wikitekstiä]
Rakenne: Yksinkertaistettu 4-bittinen SIPO-siirtorekisteri D-kiikuilla toteutettuna.


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

-- 4-bittinen SIPO-siirtorekisteri vhdl:llä toteutettuna.
--
-- Ulostulot tulevat olemaan määrittelemättömässä tilassa,
-- kunnes niihin ensimmäisen kerran tuodaan signaali

entity dkiikku1_vhdl is
    Port ( INPUT : in  STD_LOGIC;
           CLK : in  STD_LOGIC;
			  OUT1 : out  STD_LOGIC;
			  OUT2 : out  STD_LOGIC;
			  OUT3 : out  STD_LOGIC;
			  OUT4 : out  STD_LOGIC);
end dkiikku1_vhdl;

architecture Behavioral of dkiikku1_vhdl is
	signal temp: STD_LOGIC_VECTOR(3 downto 0);
	
begin
   process
   begin
      wait until CLK'event and CLK='1';
            for i in 0 to 2 loop
               temp(i) <= temp(i+1);
            end loop;
            temp(3) <= INPUT;
    end process;
	 
	 OUT1 <= temp(3);
	 OUT2 <= temp(2);
	 OUT3 <= temp(1);
	 OUT4 <= temp(0);

end Behavioral;


SISO-siirtorekisteri

[muokkaa | muokkaa wikitekstiä]
4-bittinen SISO-siirtorekisteri.


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

-- Yksinkertaistettu 4-bittinen SISO-siirtorekisteri vhdl:llä toteutettuna.

entity dkiikku1_vhdl is
    Port ( INPUT : in  STD_LOGIC;
           CLK : in  STD_LOGIC;
	   OUTPUT : out  STD_LOGIC);
end dkiikku1_vhdl;

architecture Behavioral of dkiikku1_vhdl is
	signal temp: STD_LOGIC_VECTOR(3 downto 0);
	
begin
   process
   begin
      wait until CLK'event and CLK='1';
            for i in 0 to 2 loop
               temp(i) <= temp(i+1);
            end loop;
            temp(3) <= INPUT;
    end process;
	 
	 OUTPUT <= temp(0);

end Behavioral;


PISO-siirtorekisteri

[muokkaa | muokkaa wikitekstiä]
4-bittinen PISO-siirtorekisteri. Komponentteina D-kiikkuja ja multipleksereitä.


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
 
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
-- 4-bittinen PISO-siirtorekisteri vhdl:llä toteutettuna.
--
-- Ulostulot tulevat olemaan määrittelemättömässä tilassa,
-- kunnes niihin ensimmäisen kerran tuodaan signaali.
--
-- SELECT on varattu termi vhdl:ssä, korvataan nimellä SEL.
-- Kun tämä on aktiivinen, ladataan rinnakkaisista sisääntuloista
-- arvot koko ketjuun. Kun tämä ei ole aktiivinen, muuttuu siirtorekisteri
-- SIPO-malliseksi, eli vain ensimmäinen rinnakkaissisääntulo vaikuttaa
-- siirtorekisterin seuraaviin arvoihin. Tässä suhteessa vhdl-versio
-- eroaa edellä esitetystä kaaviosta, jossa on täysin erillinen sisään-
-- tulo SER_IN tällaista tilannetta varten, kun SEL on 0.
 
entity piso_vhdl is
    Port ( DIN : in  STD_LOGIC_VECTOR(3 downto 0);
           CLK : in  STD_LOGIC;
			  SEL : in STD_LOGIC;
                          SER_OUT : out  STD_LOGIC);
end piso_vhdl;
 
architecture Behavioral of piso_vhdl is
        signal temp: STD_LOGIC_VECTOR(3 downto 0);
 
begin
   process
   begin
	
      wait until CLK'event and CLK='1';
				if (SEL = '1') then
					temp(3) <= DIN(3);
					temp(2) <= DIN(2);
					temp(1) <= DIN(1);
					temp(0) <= DIN(0);
				elsif (SEL = '0') then				
					for i in 0 to 2 loop
						temp(i) <= temp(i+1);
					end loop;
					temp(3) <= DIN(3);
				end if;
    end process;
 
         SER_OUT <= temp(0);
 
end Behavioral;


PIPO-siirtorekisteri

[muokkaa | muokkaa wikitekstiä]
4-bittinen PIPO-siirtorekisteri. Sisääntulo SER_IN on olemassa piirien ketjuttamisen varalle.


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
 
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
-- 4-bittinen PIPO-siirtorekisteri vhdl:llä toteutettuna.
--
-- Ulostulot tulevat olemaan määrittelemättömässä tilassa,
-- kunnes niihin ensimmäisen kerran tuodaan signaali.
--
-- SELECT on varattu termi vhdl:ssä, korvataan nimellä SEL.
-- Kun tämä on aktiivinen, ladataan rinnakkaisista sisääntuloista
-- arvot koko ketjuun. Kun tämä ei ole aktiivinen, muuttuu siirtorekisteri
-- SIPO-malliseksi, eli vain ensimmäinen rinnakkaissisääntulo vaikuttaa
-- siirtorekisterin seuraaviin arvoihin. Myös tässä tapauksessa vhdl-versio
-- eroaa edellä esitetystä kaaviosta SER_IN sisääntulon suhteen samoin kuin
-- edellä esitetyn PISO-tyyppisen siirtorekisterinkin tapauksessa.
 
entity pipo_vhdl is
    Port ( DIN : in  STD_LOGIC_VECTOR(3 downto 0);
           CLK : in  STD_LOGIC;
			  SEL : in STD_LOGIC;
                          DOUT1 : out  STD_LOGIC;
                          DOUT2 : out  STD_LOGIC;
                          DOUT3 : out  STD_LOGIC;
                          DOUT4 : out  STD_LOGIC);
end pipo_vhdl;
 
architecture Behavioral of pipo_vhdl is
        signal temp: STD_LOGIC_VECTOR(3 downto 0);
 
begin
   process
   begin
	
      wait until CLK'event and CLK='1';
				if (SEL = '1') then
					temp(3) <= DIN(3);
					temp(2) <= DIN(2);
					temp(1) <= DIN(1);
					temp(0) <= DIN(0);
				elsif (SEL = '0') then				
					for i in 0 to 2 loop
						temp(i) <= temp(i+1);
					end loop;
					temp(3) <= DIN(3);
				end if;
    end process;
 
         DOUT1 <= temp(3);
         DOUT2 <= temp(2);
         DOUT3 <= temp(1);
         DOUT4 <= temp(0);
 
end Behavioral;


Esimerkiksi alussa esitetyn SIPO-siirtorekisterin piirikaviototeutuksen simulaatio:

Yksinkertaistetun 4-bittisen siirtorekisterin piirikaavioesityksen simulaatiotulos.