Guest User

Untitled

a guest
Sep 9th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VHDL 2.10 KB | None | 0 0
  1. architecture arch of cpu_ctrl is
  2.     signal in_data: std_logic_vector(7 downto 0);
  3.     signal out_data: std_logic_vector(7 downto 0);
  4.     signal buf_ce_n: std_logic;
  5.     signal buf_we_n: std_logic;
  6.     signal buf_oe_n: std_logic;
  7.  
  8.     signal npc: std_logic_vector(15 downto 0); -- Next PC
  9.     signal state: std_logic_vector(3 downto 0);
  10.  
  11.     signal opcode: std_logic_vector(15 downto 0);
  12.     constant STATE_FETCH1: std_logic_vector(3 downto 0) := "0000";
  13.     constant STATE_FETCH2: std_logic_vector(3 downto 0) := "0001";
  14.     constant STATE_DECODE: std_logic_vector(3 downto 0) := "0010";
  15. begin
  16.     ce_n <= buf_ce_n;
  17.     we_n <= buf_we_n;
  18.     oe_n <= buf_oe_n;
  19.  
  20.     process(clk, ready_n, reset_n)
  21.     begin
  22.         if(rising_edge(clk)) then
  23.             if(reset_n = '0') then
  24.                 addr <= (others => '1');
  25.                 buf_ce_n <= '1';
  26.                 buf_oe_n <= '1';
  27.                 buf_we_n <= '1';
  28.                 state <= STATE_FETCH1; -- Reset the current state
  29.             else
  30.                 if(ready_n = '0') then
  31.                     case state is
  32.                         when STATE_FETCH1 =>
  33.                             pc <= "ZZZZZZZZZZZZZZZZ";
  34.                             addr <= pc;
  35.                             buf_ce_n <= '0';
  36.                             buf_oe_n <= '0';
  37.                             buf_we_n <= '1';
  38.                             state <= STATE_FETCH2;
  39.  
  40.                         when STATE_FETCH2 =>
  41.                             pc <= "ZZZZZZZZZZZZZZZZ";
  42.                             addr <= pc + 1;
  43.                             npc <= pc + 2;
  44.                             buf_ce_n <= '0';
  45.                             buf_oe_n <= '0';
  46.                             buf_we_n <= '1';
  47.                             data <= "ZZZZZZZZ";
  48.                             opcode(15 downto 8) <= data;
  49.                             state <= STATE_DECODE;
  50.  
  51.                         when STATE_DECODE =>
  52.                             pc <= npc;
  53.                             pc <= "ZZZZZZZZZZZZZZZZ";
  54.                             buf_ce_n <= '1';
  55.                             buf_oe_n <= '1';
  56.                             buf_we_n <= '1';
  57.                             data <= "ZZZZZZZZ";
  58.                             opcode(7 downto 0) <= data;
  59.                             state <= "1000";
  60.  
  61.                         when others =>
  62.                             addr <= opcode;
  63.                             buf_ce_n <= '1';
  64.                             buf_oe_n <= '1';
  65.                             buf_we_n <= '1';
  66.                     end case;
  67.                 end if;
  68.             end if;
  69.         end if;
  70.     end process;
  71.  
  72.     process(ready_n, buf_ce_n, buf_we_n, buf_oe_n)
  73.     begin
  74.         if(ready_n = '0') then
  75.             if(buf_ce_n = '0') then
  76.                 if(buf_we_n = '0') then
  77.                     data <= out_data;
  78.                 elsif(buf_oe_n = '0') then
  79.                     data <= "ZZZZZZZZ";
  80.                     in_data <= data;
  81.                 end if;
  82.             end if;
  83.         end if;
  84.     end process;
  85.  
  86. end;
Add Comment
Please, Sign In to add comment