Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 7.57 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 =>
  60.         Sa <= "01";
  61.         Sbb <= "0000";
  62.         Sba <= "0000";
  63.         Sid <="001";
  64.         Sbc <="0000";
  65.         MIO <='1';
  66.         Smar <='1';
  67.         Smbr <= '0';
  68.         WR <='0';
  69.         RD <='1';
  70.         Salu <="0000";
  71.         LDF <='0';
  72.         INTA <='0';
  73.     when decode =>
  74.         Sa <= "00";
  75.         Sbb <= "0000";
  76.         Sba <= "0000";
  77.         Sid <="000";
  78.         Sbc <="0000";
  79.         MIO <='1';
  80.         Smar <='0';
  81.         Smbr <= '0';
  82.         WR <='0';
  83.         RD <='0';
  84.         Salu <="0000";
  85.         LDF <='0';
  86.         INTA <='0';
  87.     when mov1 =>
  88.         Sa <= "10";
  89.         Sbb <= "1010";
  90.         Sba <= "0000"; --IR(11 downto 8);
  91.         Sid <="000";  
  92.         Sid <="011";
  93.         Sbc <="0000";
  94.         MIO <='1';
  95.         Smar <='1';
  96.         Smbr <= '1';
  97.         WR <='1';
  98.         RD <='0';
  99.         Salu <="0000";
  100.         LDF <='0';
  101.         INTA <='0';
  102.     when mov2 =>
  103.         Sa <= "10";
  104.         Sbb <= "1010";
  105.         Sba <= "0000";
  106.         Sid <="011";
  107.         Sbc <="0000";
  108.         MIO <='1';
  109.         Smar <='1';
  110.         Smbr <= '1';
  111.         WR <='1';
  112.         RD <='0';
  113.         Salu <="0000";
  114.         LDF <='0';
  115.         INTA <='0';
  116.     when add1 =>
  117.         Sa <= "10";
  118.         Sbb <= "1010";
  119.         Sba <= "0000";
  120.         Sid <="011";
  121.         Sbc <="0000";
  122.         MIO <='1';
  123.         Smar <='1';
  124.         Smbr <= '1';
  125.         WR <='1';
  126.         RD <='0';
  127.         Salu <="0010";
  128.         LDF <='0';
  129.         INTA <='0';
  130.     when add2 =>
  131.         Sa <= "10";
  132.         Sbb <= "1010";
  133.         Sba <= "0000";
  134.         Sid <="011";
  135.         Sbc <="0000";
  136.         MIO <='1';
  137.         Smar <='1';
  138.         Smbr <= '1';
  139.         WR <='1';
  140.         RD <='0';
  141.         Salu <="0010";
  142.         LDF <='0';
  143.         INTA <='0';
  144.     when sub1 =>
  145.         Sa <= "10";
  146.         Sbb <= "1010";
  147.         Sba <= "0000";
  148.         Sid <="011";
  149.         Sbc <="0000";
  150.         MIO <='1';
  151.         Smar <='1';
  152.         Smbr <= '1';
  153.         WR <='1';
  154.         RD <='0';
  155.         Salu <="0011";
  156.         LDF <='0';
  157.         INTA <='0';
  158.     when sub2 =>
  159.         Sa <= "10";
  160.         Sbb <= "1010";
  161.         Sba <= "0000";
  162.         Sid <="011";
  163.         Sbc <="0000";
  164.         MIO <='1';
  165.         Smar <='1';
  166.         Smbr <= '1';
  167.         WR <='1';
  168.         RD <='0';
  169.         Salu <="0011";
  170.         LDF <='0';
  171.         INTA <='0';
  172.     when st4s1 =>
  173.         Sa <= "10";
  174.         Sbb <= "1010";
  175.         Sba <= "0000";
  176.         Sid <="011";
  177.         Sbc <="0000";
  178.         MIO <='1';
  179.         Smar <='1';
  180.         Smbr <= '1';
  181.         WR <='1';
  182.         RD <='0';
  183.         Salu <="0000";
  184.         LDF <='0';
  185.         INTA <='0';
  186.     when st4s2 =>
  187.         Sa <= "10";
  188.         Sbb <= "1010";
  189.         Sba <= "0000";
  190.         Sid <="011";
  191.         Sbc <="0000";
  192.         MIO <='1';
  193.         Smar <='1';
  194.         Smbr <= '1';
  195.         WR <='1';
  196.         RD <='0';
  197.         Salu <="0000";
  198.         LDF <='0';
  199.         INTA <='0';
  200.     when st2s1 =>
  201.         Sa <= "10";
  202.         Sbb <= "1010";
  203.         Sba <= "0000";
  204.         Sid <="011";
  205.         Sbc <="0000";
  206.         MIO <='1';
  207.         Smar <='1';
  208.         Smbr <= '1';
  209.         WR <='1';
  210.         RD <='0';
  211.         Salu <="0000";
  212.         LDF <='0';
  213.         INTA <='0';
  214.     when st2s2 =>
  215.         Sa <= "10";
  216.         Sbb <= "1010";
  217.         Sba <= "0000";
  218.         Sid <="011";
  219.         Sbc <="0000";
  220.         MIO <='1';
  221.         Smar <='1';
  222.         Smbr <= '1';
  223.         WR <='1';
  224.         RD <='0';
  225.         Salu <="0000";
  226.         LDF <='0';
  227.         INTA <='0';
  228.     when l2b =>
  229.         Sa <= "10";
  230.         Sbb <= "1010";
  231.         Sba <= "0000";
  232.         Sid <="011";
  233.         Sbc <="0000";
  234.         MIO <='1';
  235.         Smar <='1';
  236.         Smbr <= '1';
  237.         WR <='1';
  238.         RD <='0';
  239.         Salu <="0100";
  240.         LDF <='0';
  241.         INTA <='0';
  242.     when l4b =>
  243.         Sa <= "10";
  244.         Sbb <= "1010";
  245.         Sba <= "0000";
  246.         Sid <="011";
  247.         Sbc <="0000";
  248.         MIO <='1';
  249.         Smar <='1';
  250.         Smbr <= '1';
  251.         WR <='1';
  252.         RD <='0';
  253.         Salu <="0101";
  254.         LDF <='0';
  255.         INTA <='0';
  256.     when and1 =>
  257.         Sa <= "10";
  258.         Sbb <= "1010";
  259.         Sba <= "0000";
  260.         Sid <="011";
  261.         Sbc <="0000";
  262.         MIO <='1';
  263.         Smar <='1';
  264.         Smbr <= '1';
  265.         WR <='1';
  266.         RD <='0';
  267.         Salu <="0110";
  268.         LDF <='0';
  269.         INTA <='0';
  270.     when and2 =>
  271.         Sa <= "10";
  272.         Sbb <= "1010";
  273.         Sba <= "0000";
  274.         Sid <="011";
  275.         Sbc <="0000";
  276.         MIO <='1';
  277.         Smar <='1';
  278.         Smbr <= '1';
  279.         WR <='1';
  280.         RD <='0';
  281.         Salu <="0110";
  282.         LDF <='0';
  283.         INTA <='0';
  284.     when and3 =>
  285.         Sa <= "10";
  286.         Sbb <= "1010";
  287.         Sba <= "0000";
  288.         Sid <="011";
  289.         Sbc <="0000";
  290.         MIO <='1';
  291.         Smar <='1';
  292.         Smbr <= '1';
  293.         WR <='1';
  294.         RD <='0';
  295.         Salu <="0110";
  296.         LDF <='0';
  297.         INTA <='0';
  298.     when beq =>
  299.         Sa <= "10";
  300.         Sbb <= "1010";
  301.         Sba <= "0000";
  302.         Sid <="011";
  303.         Sbc <="0000";
  304.         MIO <='1';
  305.         Smar <='1';
  306.         Smbr <= '1';
  307.         WR <='1';
  308.         RD <='0';
  309.         Salu <="0111";
  310.         LDF <='0';
  311.         INTA <='0';
  312.     when others =>
  313.         Sa <= "00";
  314.         Sbb <= "0000";
  315.         Sba <= "0000";
  316.         Sid <="000";
  317.         Sbc <="0000";
  318.         MIO <='1';
  319.         Smar <='0';
  320.         Smbr <= '0';
  321.         WR <='0';
  322.         RD <='0';
  323.         Salu <="0000";
  324.         LDF <='0';
  325.         INTA <='0';
  326.     end case;
  327. end process;
  328. end rtl;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement