Advertisement
milanmetal

[VHDL] REGISTER 4-bit SIPO / CE, RE, WE, PRESET, CLEAR

Apr 28th, 2017
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 3.10 KB | None | 0 0
  1. ----------------------------------------------------------------------------------
  2. -- Company:
  3. -- Engineer:
  4. --
  5. -- Create Date:    17:20:24 04/28/2017
  6.  
  7. --Zadatak 3:
  8. --Napisati VHDL model 4-bitnog registra sa serijskim upisom i paralelnim čitanjem koji će pored ulanzog porta za podatke
  9. --imati i sledeće ulazne portove:
  10. -- clock enable (ce) signal za selekciju rastućih ivica clk ulaza na koje registar treba da reaguje
  11. -- ulazni port dozvole upisa novog sadržaja u registar - we (write enable)
  12. -- ulazni port dozvole čitanja trenutnog sadržaja iz registra - read ili re (read enable).
  13. -- Kada je re port jednak 0 na Q izlazu registra treba da stoji vrednost "0000",
  14. -- a ako je re port jednak 1 na Q izlazu registra treba da stoji tekuća vrednost koja se nalazi smeštena u registru.
  15. -- ulazni portove za inicijalizaciju sadržaja registra - clear i preset
  16. --Za razvijeni VHDL model napisai odgovarajući testbenč pomoću kojega će biti moguće izvršiti funkcionalnu verifikaciju modela.
  17. ----------------------------------------------------------------------------------
  18. library IEEE;
  19. use IEEE.STD_LOGIC_1164.ALL;
  20.  
  21.  
  22. entity REGISTER_4BIT_SIPO is
  23.     PORT(
  24.             CLK : in std_logic;
  25.             D : in std_logic;
  26.             CE: in std_logic;
  27.             WE: in std_logic;
  28.             RE: in std_logic;
  29.             CLEAR:  in std_logic;
  30.             PRESET: in std_logic;
  31.             Q:  out std_logic_vector(3 downto 0)
  32.     );
  33. end REGISTER_4BIT_SIPO;
  34.  
  35. architecture Behavioral of REGISTER_4BIT_SIPO is
  36. signal REG_FILE_s : std_logic_vector(3 downto 0);
  37. begin
  38.     SIPO_REG : process(CLK, PRESET, CLEAR)
  39.     begin
  40.         -- preset ima veci priroritet ovaj put - nije receno - biram prozvoljno
  41.         if (PRESET = '1') then
  42.                 REG_FILE_s <= (others => '1');
  43.         else
  44.             if(CLEAR = '1') then
  45.                 REG_FILE_s <= (others => '0');
  46.             else
  47.                 -- unutar CLK if-dela, ne treba nikakav else za signale, nece praviti LATCHEVE!
  48.                 -- PRAVICE FLIP-FLOPOVE OD TOGA PA NEMA INCOMPLETE ASSIGNMENTA!
  49.                 if(CLK'event and CLK = '1') then
  50.                     if(CE = '1') then
  51.                         if(WE = '1') then
  52.                        
  53. --                      When used in arrays, downto corresponds to little endian.
  54. --                      This means that the least significant bit is stored at the lowest position.
  55. --                      So in L downto R, L corresponds to the Most Significant Bit (MSB) and R to
  56. --                      the Least Significant Bit (LSB). to corresponds to big endian. So in L to R, L is the LSB and R the MSB.
  57.  
  58. --                  STD_LOGIC_VECTOR(15 donwto 0) ===> 15 je indeks MSB-a
  59.                        
  60.                             REG_FILE_s <= REG_FILE_s(2 downto 0) & D;   -- Q = 1101 , Q(3 downto 1) = 110
  61.                                                                                     -- Q(2 downto 0) = 101
  62.                                                                                     -- D cu da kacim na LSB!
  63.                                                                                     -- znaci Q pomeram u levo 1 mesto
  64.                                                                                     -- i imam 101 i D lepim sa desne strane
  65.                                                                                     -- Dakle Q(2 downto 0) & D
  66.                                                                                     -- 101 & D
  67.                                                                        
  68.                         -- REG_FILE_s <= D & Q(3 downto 1); -- ovako bi bilo da sam ULAZ gurao na MSB
  69.                                                                         -- U OVOM SLUCAJU LSB OTPADA SVAKI PUT
  70.                         end if;
  71.                     end if;
  72.                 end if;
  73.             end if;
  74.         end if;
  75.     end process;
  76.     Q <= REG_FILE_s when RE = '1' else X"0";
  77.    
  78. end Behavioral;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement