Advertisement
Guest User

Untitled

a guest
Sep 15th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 8.91 KB | None | 0 0
  1. library ieee;
  2.  
  3. use ieee.std_logic_1164.all;
  4.  
  5. entity Registers is
  6.     port (
  7.         CPU_CLOCK   : in  std_logic;
  8.        
  9.         INTERRUPT   : in  std_logic;
  10.        
  11.         ACC_INPUT   : in  std_logic_vector (7 downto 0);
  12.         ACC_OUTPUT  : out std_logic_vector (7 downto 0);
  13.         ACC_CONTROL : in  std_logic;
  14.        
  15.         BCC_INPUT   : in  std_logic_vector (7 downto 0);
  16.         BCC_OUTPUT  : out std_logic_vector (7 downto 0);
  17.         BCC_CONTROL : in  std_logic;
  18.        
  19.         SG1_INPUT   : in  std_logic_vector (5 downto 0);
  20.         SG1_OUTPUT  : out std_logic_vector (5 downto 0);
  21.         SG1_CONTROL : in  std_logic;
  22.        
  23.         SG2_INPUT   : in  std_logic_vector (5 downto 0);
  24.         SG2_OUTPUT  : out std_logic_vector (5 downto 0);
  25.         SG2_CONTROL : in  std_logic;
  26.        
  27.         FLG_INPUT   : in  std_logic_vector (7 downto 0);
  28.         FLG_OUTPUT  : out std_logic_vector (7 downto 0);
  29.         FLG_CONTROL : in  std_logic;
  30.        
  31.         STP_INPUT   : in  std_logic_vector (15 downto 0);
  32.         STP_OUTPUT  : out std_logic_vector (15 downto 0);
  33.         STP_CONTROL : in  std_logic;
  34.        
  35.         CPC_INPUT   : in  std_logic_vector (15 downto 0);
  36.         CPC_OUTPUT  : out std_logic_vector (15 downto 0);
  37.         CPC_CONTROL : in  std_logic
  38.     );
  39. end entity Registers;
  40.  
  41.  
  42. architecture RTL of Registers is
  43.  
  44.     -- constants
  45.    
  46.     constant c_StartStack   : std_logic_vector (127 downto 0) := "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111110111111111"; -- 65023
  47.     constant c_StartAddress : std_logic_vector (127 downto 0) := "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100000000"; -- 768
  48.  
  49.     -- main CPU
  50.     signal W_ACC1_InputWire       : std_logic_vector (7 downto 0);
  51.     signal w_ACC1_OutputWire      : std_logic_vector (7 downto 0);
  52.     signal w_ACC1_ControlSignal  : std_logic;
  53.    
  54.     signal w_BCC1_InputWire       : std_logic_vector (7 downto 0);
  55.     signal w_BCC1_OutputWire      : std_logic_vector (7 downto 0);
  56.     signal w_BCC1_ControlSignal  : std_logic;
  57.    
  58.     signal w_SG11_InputWire       : std_logic_vector (5 downto 0);
  59.     signal w_SG11_OutputWire      : std_logic_vector (5 downto 0);
  60.     signal w_SG11_ControlSignal  : std_logic;
  61.    
  62.     signal w_SG21_InputWire       : std_logic_vector (5 downto 0);
  63.     signal w_SG21_OutputWire      : std_logic_vector (5 downto 0);
  64.     signal w_SG21_ControlSignal  : std_logic;
  65.    
  66.     signal w_FLG1_InputWire       : std_logic_vector (7 downto 0);
  67.     signal w_FLG1_OutputWire      : std_logic_vector (7 downto 0);
  68.     signal w_FLG1_ControlSignal  : std_logic;
  69.  
  70.     signal w_STP1_InputWire       : std_logic_vector (15 downto 0);
  71.     signal w_STP1_OutputWire      : std_logic_vector (15 downto 0);
  72.     signal w_STP1_ControlSignal  : std_logic;
  73.    
  74.     signal w_CPC1_InputWire       : std_logic_vector (15 downto 0);
  75.     signal w_CPC1_OutputWire      : std_logic_vector (15 downto 0);
  76.     signal w_CPC1_ControlSignal  : std_logic;
  77.    
  78.     -- interrupt CPU
  79.     signal W_ACC2_InputWire       : std_logic_vector (7 downto 0);
  80.     signal w_ACC2_OutputWire      : std_logic_vector (7 downto 0);
  81.     signal w_ACC2_ControlSignal  : std_logic;
  82.    
  83.     signal w_BCC2_InputWire       : std_logic_vector (7 downto 0);
  84.     signal w_BCC2_OutputWire      : std_logic_vector (7 downto 0);
  85.     signal w_BCC2_ControlSignal  : std_logic;
  86.    
  87.     signal w_SG12_InputWire       : std_logic_vector (5 downto 0);
  88.     signal w_SG12_OutputWire      : std_logic_vector (5 downto 0);
  89.     signal w_SG12_ControlSignal  : std_logic;
  90.    
  91.     signal w_SG22_InputWire       : std_logic_vector (5 downto 0);
  92.     signal w_SG22_OutputWire      : std_logic_vector (5 downto 0);
  93.     signal w_SG22_ControlSignal  : std_logic;
  94.    
  95.     signal w_FLG2_InputWire       : std_logic_vector (7 downto 0);
  96.     signal w_FLG2_OutputWire      : std_logic_vector (7 downto 0);
  97.     signal w_FLG2_ControlSignal  : std_logic;
  98.  
  99.     signal w_STP2_InputWire       : std_logic_vector (15 downto 0);
  100.     signal w_STP2_OutputWire      : std_logic_vector (15 downto 0);
  101.     signal w_STP2_ControlSignal  : std_logic;
  102.    
  103.     signal w_CPC2_InputWire       : std_logic_vector (15 downto 0);
  104.     signal w_CPC2_OutputWire      : std_logic_vector (15 downto 0);
  105.     signal w_CPC2_ControlSignal  : std_logic;
  106.  
  107. begin
  108.    
  109.     -- registers
  110.    
  111.     p_CPUSelector : process (INTERRUPT,
  112.                                     ACC_INPUT, w_ACC1_OutputWire, w_ACC2_OutputWire, ACC_CONTROL,
  113.                                      BCC_INPUT, w_BCC1_OutputWire, w_BCC2_OutputWire, BCC_CONTROL,
  114.                                      SG1_INPUT, w_SG11_OutputWire, w_SG12_OutputWire, SG1_CONTROL,
  115.                                      SG2_INPUT, w_SG21_OutputWire, w_SG22_OutputWire, SG2_CONTROL,
  116.                                      FLG_INPUT, w_FLG1_OutputWire, w_FLG2_OutputWire, FLG_CONTROL,
  117.                                      STP_INPUT, w_STP1_OutputWire, w_STP2_OutputWire, STP_CONTROL,
  118.                                      CPC_INPUT, w_CPC1_OutputWire, w_CPC2_OutputWire, CPC_CONTROL) is begin
  119.        
  120.         w_ACC1_ControlSignal <= ACC_CONTROL;
  121.         w_ACC1_InputWire     <= ACC_INPUT;
  122.         ACC_OUTPUT              <= w_ACC1_OutputWire;
  123.        
  124.         w_BCC1_ControlSignal <= BCC_CONTROL;
  125.         w_BCC1_InputWire     <= BCC_INPUT;
  126.         BCC_OUTPUT             <= w_BCC1_OutputWire;
  127.        
  128.         w_SG11_ControlSignal <= SG1_CONTROL;
  129.         w_SG11_InputWire     <= SG1_INPUT;
  130.         SG1_OUTPUT           <= w_SG11_OutputWire;
  131.        
  132.         w_SG21_ControlSignal <= SG2_CONTROL;
  133.         w_SG21_InputWire     <= SG2_INPUT;
  134.         SG2_OUTPUT           <= w_SG21_OutputWire;
  135.        
  136.         w_FLG1_ControlSignal <= FLG_CONTROL;
  137.         w_FLG1_InputWire     <= FLG_INPUT;
  138.         FLG_OUTPUT           <= w_FLG1_OutputWire;
  139.        
  140.         w_STP1_ControlSignal <= STP_CONTROL;
  141.         w_STP1_InputWire     <= STP_INPUT;
  142.         STP_OUTPUT           <= w_STP1_OutputWire;
  143.        
  144.         w_CPC1_ControlSignal <= CPC_CONTROL;
  145.         w_CPC1_InputWire     <= CPC_INPUT;
  146.         CPC_OUTPUT           <= w_CPC1_OutputWire;
  147.        
  148.         if INTERRUPT = '1' then
  149.            w_ACC2_ControlSignal <= ACC_CONTROL;
  150.             w_ACC2_InputWire     <= ACC_INPUT;
  151.             ACC_OUTPUT              <= w_ACC2_OutputWire;
  152.            
  153.             w_BCC2_ControlSignal <= BCC_CONTROL;
  154.             w_BCC2_InputWire     <= BCC_INPUT;
  155.             BCC_OUTPUT             <= w_BCC2_OutputWire;
  156.            
  157.             w_SG12_ControlSignal <= SG1_CONTROL;
  158.             w_SG12_InputWire     <= SG1_INPUT;
  159.             SG1_OUTPUT           <= w_SG12_OutputWire;
  160.            
  161.             w_SG22_ControlSignal <= SG2_CONTROL;
  162.             w_SG22_InputWire     <= SG2_INPUT;
  163.             SG2_OUTPUT           <= w_SG22_OutputWire;
  164.            
  165.             w_FLG2_ControlSignal <= FLG_CONTROL;
  166.             w_FLG2_InputWire     <= FLG_INPUT;
  167.             FLG_OUTPUT           <= w_FLG2_OutputWire;
  168.            
  169.             w_STP2_ControlSignal <= STP_CONTROL;
  170.             w_STP2_InputWire     <= STP_INPUT;
  171.             STP_OUTPUT           <= w_STP2_OutputWire;
  172.            
  173.             w_CPC2_ControlSignal <= CPC_CONTROL;
  174.             w_CPC2_InputWire     <= CPC_INPUT;
  175.             CPC_OUTPUT           <= w_CPC2_OutputWire;
  176.         end if;
  177.        
  178.     end process p_CPUSelector;
  179.    
  180.     e_ACC : entity work.CpuRegister
  181.         port map (CLOCK => CPU_CLOCK, INPUT => w_ACC1_InputWire, OUTPUT => w_ACC1_OutputWire, UPDATE => w_ACC1_ControlSignal);
  182.    
  183.     e_BCC : entity work.CpuRegister
  184.         port map (CLOCK => CPU_CLOCK, INPUT => w_BCC1_InputWire, OUTPUT => w_BCC1_OutputWire, UPDATE => w_BCC1_ControlSignal);
  185.    
  186.     e_SG1 : entity work.CpuRegister
  187.         generic map (g_BitSize => 6)
  188.         port map (CLOCK => CPU_CLOCK, INPUT => w_SG11_InputWire, OUTPUT => w_SG11_OutputWire, UPDATE => w_SG11_ControlSignal);
  189.        
  190.     e_SG2 : entity work.CpuRegister
  191.         generic map (g_BitSize => 6)
  192.         port map (CLOCK => CPU_CLOCK, INPUT => w_SG21_InputWire, OUTPUT => w_SG21_OutputWire, UPDATE => w_SG21_ControlSignal);
  193.    
  194.     e_FLG : entity work.CpuRegister
  195.         port map (CLOCK => CPU_CLOCK, INPUT => w_FLG1_InputWire, OUTPUT => w_FLG1_OutputWire, UPDATE => w_FLG1_ControlSignal);
  196.        
  197.     e_STP : entity work.CpuRegister
  198.         generic map (g_BitSize => 16, g_InitialValue => c_StartStack)
  199.         port map (CLOCK => CPU_CLOCK, INPUT => w_STP1_InputWire, OUTPUT => w_STP1_OutputWire, UPDATE => w_STP1_ControlSignal);
  200.        
  201.     e_CPC : entity work.CpuRegister
  202.         generic map (g_BitSize => 16, g_InitialValue => c_StartAddress)
  203.         port map (CLOCK => CPU_CLOCK, INPUT => w_CPC1_InputWire, OUTPUT => w_CPC1_OutputWire, UPDATE => w_CPC1_ControlSignal);
  204.        
  205.     -- interrupt CPU   
  206.    
  207.     e_ACC2 : entity work.CpuRegister
  208.         port map (CLOCK => CPU_CLOCK, INPUT => w_ACC2_InputWire, OUTPUT => w_ACC2_OutputWire, UPDATE => w_ACC2_ControlSignal);
  209.    
  210.     e_BCC2 : entity work.CpuRegister
  211.         port map (CLOCK => CPU_CLOCK, INPUT => w_BCC2_InputWire, OUTPUT => w_BCC2_OutputWire, UPDATE => w_BCC2_ControlSignal);
  212.    
  213.     e_SG12 : entity work.CpuRegister
  214.         generic map (g_BitSize => 6)
  215.         port map (CLOCK => CPU_CLOCK, INPUT => w_SG12_InputWire, OUTPUT => w_SG12_OutputWire, UPDATE => w_SG12_ControlSignal);
  216.        
  217.     e_SG22 : entity work.CpuRegister
  218.         generic map (g_BitSize => 6)
  219.         port map (CLOCK => CPU_CLOCK, INPUT => w_SG22_InputWire, OUTPUT => w_SG22_OutputWire, UPDATE => w_SG22_ControlSignal);
  220.    
  221.     e_FLG2 : entity work.CpuRegister
  222.         port map (CLOCK => CPU_CLOCK, INPUT => w_FLG2_InputWire, OUTPUT => w_FLG2_OutputWire, UPDATE => w_FLG2_ControlSignal);
  223.        
  224.     e_STP2 : entity work.CpuRegister
  225.         generic map (g_BitSize => 16)
  226.         port map (CLOCK => CPU_CLOCK, INPUT => w_STP2_InputWire, OUTPUT => w_STP2_OutputWire, UPDATE => w_STP2_ControlSignal);
  227.        
  228.     e_CPC2 : entity work.CpuRegister
  229.         generic map (g_BitSize => 16)
  230.         port map (CLOCK => CPU_CLOCK, INPUT => w_CPC2_InputWire, OUTPUT => w_CPC2_OutputWire, UPDATE => w_CPC2_ControlSignal);
  231.  
  232. end architecture RTL;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement