📄 cpu86.vhd
字号:
next_state <= Serror;
ELSE
muxabus <="00";
next_state <= Sack;
END IF;
WHEN Sflush1 =>
flush_ack<='1';
IF (flush_req='0') THEN
muxabus<="01";
next_state <= Sflush2;
ELSE
next_state <= Sflush1;
END IF;
WHEN Sfull =>
latcho <= regnbok and opc_req;
IF (write_req='1') THEN
muxabus <="01";
latchrw <= '1' ;
next_state <= Swrite;
ELSIF (read_req='1') THEN
muxabus <="01";
latchrw <= '1' ;
next_state <= Sread;
ELSIF (flush_req = '1') THEN
next_state <= Sflush1;
ELSIF (irq='1' AND opc_req='1') THEN
next_state <= Sint;
ELSIF (reg4free = '1' AND
flush_coming='0' AND
irq='0') THEN
latchrw <= '1' ;
next_state <= Srdopc;
ELSIF (regnbok = '0' and
reg4free = '0') THEN
next_state <= Serror;
ELSE
next_state <= Sfull;
END IF;
WHEN Sint =>
latcho <= opc_req;
if irq_type="00" then inta1<='1';
end if;
next_state <= Sintws;
WHEN Sintws =>
if irq_type="00" then inta1<='1';
end if;
irq_clr <= '1';
next_state <= Sfull;
WHEN Sflush2 =>
latchabus<='1';
addrplus4<='0';
latchrw <= '1' ;
muxabus <="01";
next_state <= Srdopc;
WHEN OTHERS =>
next_state <= Sreset;
END CASE;
END PROCESS nextstate_proc;
-- Concurrent Statements
-- Clocked output assignments
biu_error <= biu_error_cld;
rwmem3_s <= '1' when (w_biufsm_s='1' and oddflag_s='0') else '0';
END fsm;
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
entity a_table is
port ( addr : in std_logic_vector(15 downto 0);
dout : out std_logic_vector(2 downto 0));
end a_table;
architecture rtl of a_table is
begin
process(addr)
begin
case addr is
when "1110101100000000" => dout <= "001";
when "1110100100000000" => dout <= "010";
when "1111111111100000" => dout <= "000";
when "1111111100100110" => dout <= "100";
when "1111111100100000" => dout <= "000";
when "1111111101100000" => dout <= "011";
when "1111111110100000" => dout <= "100";
when "1110101000000000" => dout <= "010";
when "1111111100101110" => dout <= "100";
when "1111111100101000" => dout <= "000";
when "1111111101101000" => dout <= "011";
when "1111111110101000" => dout <= "100";
when "1110100000000000" => dout <= "010";
when "1111111111010000" => dout <= "000";
when "1111111100010110" => dout <= "100";
when "1111111100010000" => dout <= "000";
when "1111111101010000" => dout <= "011";
when "1111111110010000" => dout <= "100";
when "1001101000000000" => dout <= "010";
when "1111111100011110" => dout <= "100";
when "1111111100011000" => dout <= "000";
when "1111111101011000" => dout <= "011";
when "1111111110011000" => dout <= "100";
when "1100001100000000" => dout <= "000";
when "1100001000000000" => dout <= "000";
when "1100101100000000" => dout <= "000";
when "1100101000000000" => dout <= "000";
when "0111010000000000" => dout <= "001";
when "0111110000000000" => dout <= "001";
when "0111111000000000" => dout <= "001";
when "0111001000000000" => dout <= "001";
when "0111011000000000" => dout <= "001";
when "0111101000000000" => dout <= "001";
when "0111000000000000" => dout <= "001";
when "0111100000000000" => dout <= "001";
when "0111010100000000" => dout <= "001";
when "0111110100000000" => dout <= "001";
when "0111111100000000" => dout <= "001";
when "0111001100000000" => dout <= "001";
when "0111011100000000" => dout <= "001";
when "0111101100000000" => dout <= "001";
when "0111000100000000" => dout <= "001";
when "0111100100000000" => dout <= "001";
when "1110001100000000" => dout <= "001";
when "1110001000000000" => dout <= "001";
when "1110000100000000" => dout <= "001";
when "1110000000000000" => dout <= "001";
when "1100110100000000" => dout <= "101";
when "1100110000000000" => dout <= "110";
when "1100111000000000" => dout <= "111";
when "1100111100000000" => dout <= "000";
when "1111100000000000" => dout <= "000";
when "1111010100000000" => dout <= "000";
when "1111100100000000" => dout <= "000";
when "1111110000000000" => dout <= "000";
when "1111110100000000" => dout <= "000";
when "1111101000000000" => dout <= "000";
when "1111101100000000" => dout <= "000";
when "1111010000000000" => dout <= "000";
when "1001101100000000" => dout <= "000";
when "1111000000000000" => dout <= "000";
when "1001000000000000" => dout <= "000";
when "0010011000000000" => dout <= "000";
when "0010111000000000" => dout <= "000";
when "0011011000000000" => dout <= "000";
when "0011111000000000" => dout <= "000";
when "1000100011000000" => dout <= "000";
when "1000100000000000" => dout <= "000";
when "1000100001000000" => dout <= "011";
when "1000100010000000" => dout <= "100";
when "1000100000000110" => dout <= "100";
when "1000100111000000" => dout <= "000";
when "1000100100000000" => dout <= "000";
when "1000100101000000" => dout <= "011";
when "1000100110000000" => dout <= "100";
when "1000100100000110" => dout <= "100";
when "1000101011000000" => dout <= "000";
when "1000101000000000" => dout <= "000";
when "1000101001000000" => dout <= "011";
when "1000101010000000" => dout <= "100";
when "1000101000000110" => dout <= "100";
when "1000101111000000" => dout <= "000";
when "1000101100000000" => dout <= "000";
when "1000101101000000" => dout <= "011";
when "1000101110000000" => dout <= "100";
when "1000101100000110" => dout <= "100";
when "1100011000000000" => dout <= "000";
when "1100011001000000" => dout <= "011";
when "1100011010000000" => dout <= "100";
when "1100011000000110" => dout <= "100";
when "1100011100000000" => dout <= "000";
when "1100011101000000" => dout <= "011";
when "1100011110000000" => dout <= "100";
when "1100011100000110" => dout <= "100";
when "1011000000000000" => dout <= "000";
when "1011000100000000" => dout <= "000";
when "1011001000000000" => dout <= "000";
when "1011001100000000" => dout <= "000";
when "1011010000000000" => dout <= "000";
when "1011010100000000" => dout <= "000";
when "1011011000000000" => dout <= "000";
when "1011011100000000" => dout <= "000";
when "1011100000000000" => dout <= "000";
when "1011100100000000" => dout <= "000";
when "1011101000000000" => dout <= "000";
when "1011101100000000" => dout <= "000";
when "1011110000000000" => dout <= "000";
when "1011110100000000" => dout <= "000";
when "1011111000000000" => dout <= "000";
when "1011111100000000" => dout <= "000";
when "1010000000000000" => dout <= "010";
when "1010000100000000" => dout <= "010";
when "1010001000000000" => dout <= "010";
when "1010001100000000" => dout <= "010";
when "1000111011000000" => dout <= "000";
when "1000111000000000" => dout <= "000";
when "1000111001000000" => dout <= "011";
when "1000111010000000" => dout <= "100";
when "1000111000000110" => dout <= "100";
when "1000110011000000" => dout <= "000";
when "1000110000000000" => dout <= "000";
when "1000110001000000" => dout <= "011";
when "1000110010000000" => dout <= "100";
when "1000110000000110" => dout <= "100";
when "1111111100110000" => dout <= "000";
when "1111111101110000" => dout <= "011";
when "1111111110110000" => dout <= "100";
when "1111111100110110" => dout <= "100";
when "0101000000000000" => dout <= "000";
when "0101000100000000" => dout <= "000";
when "0101001000000000" => dout <= "000";
when "0101001100000000" => dout <= "000";
when "0101010000000000" => dout <= "000";
when "0101010100000000" => dout <= "000";
when "0101011000000000" => dout <= "000";
when "0101011100000000" => dout <= "000";
when "0000011000000000" => dout <= "000";
when "0000111000000000" => dout <= "000";
when "0001011000000000" => dout <= "000";
when "0001111000000000" => dout <= "000";
when "1000111100000000" => dout <= "000";
when "1000111101000000" => dout <= "011";
when "1000111110000000" => dout <= "100";
when "1000111100000110" => dout <= "100";
when "1000111111000000" => dout <= "000";
when "0101100000000000" => dout <= "000";
when "0101100100000000" => dout <= "000";
when "0101101000000000" => dout <= "000";
when "0101101100000000" => dout <= "000";
when "0101110000000000" => dout <= "000";
when "0101110100000000" => dout <= "000";
when "0101111000000000" => dout <= "000";
when "0101111100000000" => dout <= "000";
when "0000011100000000" => dout <= "000";
when "0001011100000000" => dout <= "000";
when "0001111100000000" => dout <= "000";
when "1000011011000000" => dout <= "000";
when "1000011000000000" => dout <= "000";
when "1000011001000000" => dout <= "011";
when "1000011010000000" => dout <= "100";
when "1000011000000110" => dout <= "100";
when "1000011111000000" => dout <= "000";
when "1000011100000000" => dout <= "000";
when "1000011101000000" => dout <= "011";
when "1000011110000000" => dout <= "100";
when "1000011100000110" => dout <= "100";
when "1001000100000000" => dout <= "000";
when "1001001000000000" => dout <= "000";
when "1001001100000000" => dout <= "000";
when "1001010000000000" => dout <= "000";
when "1001010100000000" => dout <= "000";
when "1001011000000000" => dout <= "000";
when "1001011100000000" => dout <= "000";
when "1110010000000000" => dout <= "101";
when "1110010100000000" => dout <= "101";
when "1110110000000000" => dout <= "000";
when "1110110100000000" => dout <= "000";
when "1110011000000000" => dout <= "101";
when "1110011100000000" => dout <= "101";
when "1110111100000000" => dout <= "000";
when "1110111000000000" => dout <= "000";
when "1101011100000000" => dout <= "000";
when "1001111100000000" => dout <= "000";
when "1001111000000000" => dout <= "000";
when "1001110000000000" => dout <= "000";
when "1001110100000000" => dout <= "000";
when "1000110100000110" => dout <= "100";
when "1000110111000000" => dout <= "000";
when "1000110100000000" => dout <= "000";
when "1000110101000000" => dout <= "011";
when "1000110110000000" => dout <= "100";
when "1100010100000110" => dout <= "100";
when "1100010100000000" => dout <= "000";
when "1100010101000000" => dout <= "011";
when "1100010110000000" => dout <= "100";
when "1100010000000110" => dout <= "100";
when "1100010000000000" => dout <= "000";
when "1100010001000000" => dout <= "011";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -