Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 5.37 KB | None | 0 0
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. use ieee.numeric_std.all;
  4. entity control is
  5. port(
  6.             clk : in std_logic;
  7.             IR : in signed(15 downto 0);
  8.             reset, C, Z, S, INT : in std_logic;
  9.             Salu, Sbb, Sbc, Sba : out bit_vector(3 downto 0);
  10.             Sid : out bit_vector(2 downto 0);
  11.             Sa : out bit_vector(1 downto 0);
  12.             LDF, Smar, Smbr, WR, RD, INTA, MIO : out bit
  13. );
  14. end entity;
  15.  
  16. architecture rtl of control is
  17. type state_type is (    fetch, decode, mov1, mov2, add1, add2, sub1, sub2, st4s1, st4s2, st2s1, st2s2,
  18.                             l2b, l4b, and1, and2, and3, beq );
  19. signal state : state_type;
  20. begin
  21. process (clk, reset)
  22. begin
  23.     if reset = '1' then
  24.     state <= fetch;
  25.     elsif (clk'event and clk='1') then
  26.     case state is
  27.         when fetch => state <= decode;
  28.         when decode => case IR(15 downto 13) is
  29.             when "000" => state <= fetch;
  30.             when "001" => case IR(12 downto 8) is
  31.                 when "00000" => state <= mov1;
  32.                 when "00001" => state <= mov2;
  33.                 when "00010" => state <= add1;
  34.                 when "00011" => state <= add2;
  35.                 when "00100" => state <= sub1;
  36.                 when "00101" => state <= sub2;
  37.                 when "00110" => state <= st4s1;
  38.                 when "00111" => state <= st4s2;
  39.                 when "01000" => state <= st2s1;
  40.                 when "01001" => state <= st2s2;
  41.                 when "01010" => state <= l2b;
  42.                 when "01011" => state <= l4b;
  43.                 when "01100" => state <= and1;
  44.                 when "01101" => state <= and2;
  45.                 when "01110" => state <= and3;
  46.                 when "01111" => state <= beq;  
  47.  
  48.                 when others => state <= fetch;
  49.             end case;
  50.             when others => state <= fetch;
  51.      end case;
  52.      end case;
  53.  
  54.     end if;
  55.     end process;
  56.     process (state)
  57.     begin
  58.     case state is
  59.     when fetch => Sa <= "01"; Sbb <= "0000"; Sba <= "0000"; Sid <="001"; Sbc <="0000"; MIO <='1'; Smar <='1'; Smbr <= '0'; WR <='0'; RD <='1'; Salu <="0000"; LDF <='0'; INTA <='0';
  60.     when decode => Sa <= "00"; Sbb <= "0000"; Sba <= "0000"Sid <="000"; Sbc <="0000"; MIO <='1'; Smar <='0'; Smbr <= '0'; WR <='0'; RD <='0'; Salu <="0000"; LDF <='0'; INTA <='0';
  61.     when mov1 => Sa <= "10"; Sbb <= "1010"; Sba <= "0000";  Sid <="000";  Sid <="011"; Sbc <="0000"; MIO <='1'; Smar <='1'; Smbr <= '1'; WR <='1'; RD <='0'; Salu <="0000"; LDF <='0'; INTA <='0';
  62.     when mov2 => Sa <= "10"; Sbb <= "1010"; Sba <= "0000"; Sid <="011"; Sbc <="0000"; MIO <='1'; Smar <='1'; Smbr <= '1'; WR <='1'; RD <='0'; Salu <="0000"; LDF <='0'; INTA <='0';
  63.     when add1 => Sa <= "10"; Sbb <= "1010"; Sba <= "0000"; Sid <="011"; Sbc <="0000"; MIO <='1'; Smar <='1'; Smbr <= '1'; WR <='1'; RD <='0'; Salu <="0010"; LDF <='0'; INTA <='0';
  64.     when add2 => Sa <= "10"; Sbb <= "1010"; Sba <= "0000"; Sid <="011"; Sbc <="0000"; MIO <='1'; Smar <='1'; Smbr <= '1'; WR <='1'; RD <='0'; Salu <="0010"; LDF <='0'; INTA <='0';
  65.     when sub1 => Sa <= "10"; Sbb <= "1010"; Sba <= "0000"; Sid <="011"; Sbc <="0000"; MIO <='1'; Smar <='1'; Smbr <= '1'; WR <='1'; RD <='0'; Salu <="0011"; LDF <='0'; INTA <='0';
  66.     when sub2 =>Sa <= "10"; Sbb <= "1010"; Sba <= "0000"; Sid <="011"; Sbc <="0000"; MIO <='1'; Smar <='1'; Smbr <= '1'; WR <='1'; RD <='0'; Salu <="0011"; LDF <='0'; INTA <='0';
  67.     when st4s1 => Sa <= "10"; Sbb <= "1010"; Sba <= "0000"; Sid <="011"; Sbc <="0000"; MIO <='1'; Smar <='1'; Smbr <= '1'; WR <='1'; RD <='0'; Salu <="0000"; LDF <='0'; INTA <='0';
  68.     when st4s2 => Sa <= "10"; Sbb <= "1010"; Sba <= "0000"; Sid <="011"; Sbc <="0000"; MIO <='1'; Smar <='1'; Smbr <= '1'; WR <='1'; RD <='0'; Salu <="0000"; LDF <='0'; INTA <='0';
  69.     when st2s1 => Sa <= "10"; Sbb <= "1010"; Sba <= "0000"; Sid <="011"; Sbc <="0000"; MIO <='1'; Smar <='1'; Smbr <= '1'; WR <='1'; RD <='0'; Salu <="0000"; LDF <='0'; INTA <='0';
  70.     when st2s2 => Sa <= "10"; Sbb <= "1010"; Sba <= "0000"; Sid <="011"; Sbc <="0000"; MIO <='1'; Smar <='1'; Smbr <= '1'; WR <='1'; RD <='0'; Salu <="0000"; LDF <='0'; INTA <='0';
  71.     when l2b => Sa <= "10"; Sbb <= "1010"; Sba <= "0000"; Sid <="011"; Sbc <="0000"; MIO <='1'; Smar <='1'; Smbr <= '1'; WR <='1'; RD <='0'; Salu <="0100"; LDF <='0'; INTA <='0';
  72.     when l4b => Sa <= "10"; Sbb <= "1010"; Sba <= "0000"; Sid <="011"; Sbc <="0000"; MIO <='1'; Smar <='1'; Smbr <= '1'; WR <='1'; RD <='0'; Salu <="0101"; LDF <='0'; INTA <='0';
  73.     when and1 => Sa <= "10"; Sbb <= "1010"; Sba <= "0000"; Sid <="011"; Sbc <="0000"; MIO <='1'; Smar <='1'; Smbr <= '1'; WR <='1'; RD <='0'; Salu <="0110"; LDF <='0'; INTA <='0';
  74.     when and2 => Sa <= "10"; Sbb <= "1010"; Sba <= "0000"; Sid <="011"; Sbc <="0000"; MIO <='1'; Smar <='1'; Smbr <= '1'; WR <='1'; RD <='0'; Salu <="0110"; LDF <='0';INTA <='0';
  75.     when and3 => Sa <= "10"; Sbb <= "1010"; Sba <= "0000"; Sid <="011"; Sbc <="0000"; MIO <='1'; Smar <='1'; Smbr <= '1'; WR <='1'; RD <='0'; Salu <="0110"; LDF <='0'; INTA <='0';
  76.     when beq => Sa <= "10"; Sbb <= "1010"; Sba <= "0000"; Sid <="011"; Sbc <="0000"; MIO <='1'; Smar <='1'; Smbr <= '1'; WR <='1'; RD <='0'; Salu <="0111"; LDF <='0'; INTA <='0';
  77.     when others => Sa <= "00"; Sbb <= "0000"; Sba <= "0000"; Sid <="000"; Sbc <="0000"; MIO <='1'; Smar <='0'; Smbr <= '0'; WR <='0'; RD <='0'; Salu <="0000"; LDF <='0'; INTA <='0';
  78.     end case;
  79. end process;
  80. end rtl;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement