Advertisement
Paimoe

Untitled

May 16th, 2024
1,039
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 4.86 KB | None | 0 0
  1. LIBRARY ieee;
  2. USE ieee.std_logic_1164.ALL;
  3. USE ieee.std_logic_unsigned.ALL;
  4.  
  5. ENTITY CSCD IS
  6.  
  7.   PORT (
  8.     SWCBA : IN STD_LOGIC_VECTOR(2 DOWNTO 0);
  9.     IR : IN STD_LOGIC_VECTOR(7 DOWNTO 4);
  10.     C, Z : IN STD_LOGIC;
  11.     W : IN STD_LOGIC_VECTOR(3 DOWNTO 1);
  12.     T3, QD : IN STD_LOGIC;
  13.     CLR : IN STD_LOGIC;
  14.     DRW, MEMW : OUT STD_LOGIC;
  15.     PCINC, ARINC : OUT STD_LOGIC;
  16.     LPC, LAR, LIR : OUT STD_LOGIC;
  17.     PCADD : OUT STD_LOGIC;
  18.     SELCTL : OUT STD_LOGIC;
  19.     STOP : OUT STD_LOGIC;
  20.     LDZ, LDC : OUT STD_LOGIC;
  21.     CIN : OUT STD_LOGIC;
  22.     S : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
  23.     M : OUT STD_LOGIC;
  24.     ABUS, SBUS, MBUS : OUT STD_LOGIC;
  25.     SHORT, LONG : OUT STD_LOGIC;
  26.     SEL : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)
  27.   );
  28.  
  29. END CSCD;
  30.  
  31. ARCHITECTURE struct OF CSCD IS
  32.   SIGNAL ST0, SST0 : STD_LOGIC;
  33. BEGIN
  34.   PROCESS (W, T3, SWCBA, IR, CLR)
  35.   BEGIN
  36.     S <= "0000";
  37.     SEL <= "0000";
  38.     DRW <= '0';
  39.     MEMW <= '0';
  40.     PCINC <= '0';
  41.     PCADD <= '0';
  42.     LPC <= '0';
  43.     LAR <= '0';
  44.     LIR <= '0';
  45.     LDZ <= '0';
  46.     LDC <= '0';
  47.     ARINC <= '0';
  48.     STOP <= '0';
  49.     SELCTL <= '0';
  50.     CIN <= '0';
  51.     M <= '0';
  52.     MEMW <= '0';
  53.     ABUS <= '0';
  54.     SBUS <= '0';
  55.     MBUS <= '0';
  56.     SHORT <= '0';
  57.     LONG <= '0';
  58.  
  59.     IF CLR = '0' THEN
  60.       ST0 <= '0';
  61.       SST0 <= '0';
  62.     ELSIF falling_edge(T3) THEN
  63.       IF SST0 = '1' THEN
  64.         ST0 <= '1';
  65.       END IF;
  66.     END IF;
  67.  
  68.     CASE SWCBA IS
  69.       WHEN "001" =>
  70.         SBUS <= W(1);
  71.         STOP <= W(1);
  72.         SHORT <= W(1);
  73.         SELCTL <= W(1);
  74.         LAR <= W(1) AND NOT ST0;
  75.         SST0 <= W(1) AND NOT ST0;
  76.         MEMW <= W(1) AND ST0;
  77.         ARINC <= W(1) AND ST0;
  78.       WHEN "010" =>
  79.         STOP <= W(1);
  80.         SHORT <= W(1);
  81.         SELCTL <= W(1);
  82.         SST0 <= W(1) AND NOT ST0;
  83.         SBUS <= W(1) AND NOT ST0;
  84.         LAR <= W(1) AND NOT ST0;
  85.         MBUS <= W(1) AND ST0;
  86.         ARINC <= W(1) AND ST0;
  87.       WHEN "011" =>
  88.         SBUS <= W(1) OR W(2);
  89.         SEL(3) <= ST0;
  90.         SEL(2) <= W(2);
  91.         SEL(1) <= (NOT ST0 AND W(1)) OR (ST0 AND W(2));
  92.         SEL(0) <= W(1);
  93.         SST0 <= W(1) AND NOT ST0;
  94.         SELCTL <= W(1) OR W(2);
  95.         DRW <= W(1) OR W(2);
  96.         STOP <= W(1) OR W(2);
  97.       WHEN "100" =>
  98.         SEL(3) <= W(2);
  99.         SEL(2) <= '0';
  100.         SEL(1) <= W(2);
  101.         SEL(0) <= W(1) OR W(2);
  102.         SELCTL <= W(1) OR W(2);
  103.         STOP <= W(1) OR W(2);
  104.       WHEN "000" =>
  105.         IF ST0 = '0' THEN
  106.           SBUS <= W(1);
  107.           LPC <= W(1);
  108.           STOP <= W(1);
  109.           SELCTL <= W(1);
  110.           SHORT <= W(1);
  111.           SST0 <= W(1);
  112.         ELSE
  113.           LIR <= W(1);
  114.           PCINC <= W(1);
  115.           CASE IR IS
  116.             WHEN "0001" => --ADD
  117.               S(3) <= W(2);
  118.               S(0) <= W(2);
  119.               CIN <= W(2);
  120.               ABUS <= W(2);
  121.               DRW <= W(2);
  122.               LDZ <= W(2);
  123.               LDC <= W(2);
  124.             WHEN "0010" => --SUB
  125.               S(2) <= W(2);
  126.               S(1) <= W(2);
  127.               ABUS <= W(2);
  128.               DRW <= W(2);
  129.               LDZ <= W(2);
  130.               LDC <= W(2);
  131.             WHEN "0011" => --AND
  132.               M <= W(2);
  133.               S(3) <= W(2);
  134.               S(1) <= W(2);
  135.               S(0) <= W(2);
  136.               ABUS <= W(2);
  137.               DRW <= W(2);
  138.               LDZ <= W(2);
  139.             WHEN "0100" => --INC
  140.               ABUS <= W(2);
  141.               DRW <= W(2);
  142.               LDZ <= W(2);
  143.               LDC <= W(2);
  144.             WHEN "0101" => --LD
  145.               M <= W(2);
  146.               S(3) <= W(2);
  147.               S(1) <= W(2);
  148.               ABUS <= W(2);
  149.               LAR <= W(2);
  150.               LONG <= W(2);
  151.               DRW <= W(3);
  152.               MBUS <= W(3);
  153.             WHEN "0110" => --ST
  154.               M <= W(2) OR W(3);
  155.               S(3) <= W(2) OR W(3);
  156.               S(2) <= W(2);
  157.               S(1) <= W(2) OR W(3);
  158.               S(0) <= W(2);
  159.               ABUS <= W(2) OR W(3);
  160.               LAR <= W(2);
  161.               LONG <= W(2);
  162.               MEMW <= W(3);
  163.             WHEN "0111" => --JC
  164.               IF C = '1' THEN
  165.                 PCADD <= W(2);
  166.               END IF;
  167.             WHEN "1000" => --JZ
  168.               IF Z = '1' THEN
  169.                 PCADD <= W(2);
  170.               END IF;
  171.             WHEN "1001" => --JMP
  172.               M <= W(2);
  173.               S(3) <= W(2);
  174.               S(2) <= W(2);
  175.               S(1) <= W(2);
  176.               S(0) <= W(2);
  177.               ABUS <= W(2);
  178.               LPC <= W(2);
  179.             WHEN "1010" => --OUT
  180.             WHEN "1011" => --IRET
  181.             WHEN "1100" => --DI
  182.             WHEN "1101" => --EI
  183.             WHEN "1110" => --STP
  184.               STOP <= W(2);
  185.             WHEN OTHERS => NULL;
  186.           END CASE;
  187.         END IF;
  188.       WHEN OTHERS => NULL;
  189.     END CASE;
  190.   END PROCESS;
  191. END struct;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement