📄 mc8051_p.vhd
字号:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_arith.all;
package mc8051_p is
-----------------------------------------------------------------------------
-- Set data width of mc8051_alu (no other than 8 supported at the moment!)
-- Default: 8
constant C_DWIDTH : integer := 8;
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- Select whether to implement (1) or skip (0) the multiplier
-- Default: 1
constant C_IMPL_MUL : integer := 1;
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- Select whether to implement (1) or skip (0) the divider
-- Default: 1
constant C_IMPL_DIV : integer := 1;
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- Select whether to implement (1) or skip (0) the decimal adjustment command
-- Default: 1
constant C_IMPL_DA : integer := 1;
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- Select how many timer/counter units should be implemented
-- Default: 1
constant C_IMPL_N_TMR : integer := 1;
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- Select how many serial interface units should be implemented
-- Default: C_IMPL_N_TMR ---(DO NOT CHANGE!)---
constant C_IMPL_N_SIU : integer := C_IMPL_N_TMR;
-----------------------------------------------------------------------------
-----------------------------------------------------------------------------
-- Select how many external interrupt-inputs should be implemented
-- Default: C_IMPL_N_TMR ---(DO NOT CHANGE!)---
constant C_IMPL_N_EXT : integer := C_IMPL_N_TMR;
-----------------------------------------------------------------------------
constant OFF : std_logic_vector(5 downto 0) := "000000";
constant DA : std_logic_vector(5 downto 0) := "100000";
constant ADD_ACC_RAM : std_logic_vector(5 downto 0) := "100001";
constant ADD_ACC_ROM : std_logic_vector(5 downto 0) := "100010";
constant ADDC_ACC_RAM : std_logic_vector(5 downto 0) := "100011";
constant ADDC_ACC_ROM : std_logic_vector(5 downto 0) := "100100";
constant AND_ACC_RAM : std_logic_vector(5 downto 0) := "100101";
constant AND_ACC_ROM : std_logic_vector(5 downto 0) := "100110";
constant AND_RAM_ROM : std_logic_vector(5 downto 0) := "100111";
constant SUB_ACC_RAM : std_logic_vector(5 downto 0) := "101000";
constant SUB_ACC_ROM : std_logic_vector(5 downto 0) := "101001";
constant MUL_ACC_RAM : std_logic_vector(5 downto 0) := "101010";
constant DIV_ACC_RAM : std_logic_vector(5 downto 0) := "101011";
constant OR_RAM_ACC : std_logic_vector(5 downto 0) := "101100";
constant OR_ROM_ACC : std_logic_vector(5 downto 0) := "101101";
constant OR_ROM_RAM : std_logic_vector(5 downto 0) := "101110";
constant XOR_RAM_ACC : std_logic_vector(5 downto 0) := "101111";
constant XOR_ROM_ACC : std_logic_vector(5 downto 0) := "110000";
constant XOR_ROM_RAM : std_logic_vector(5 downto 0) := "110001";
constant RL_ACC : std_logic_vector(5 downto 0) := "110010";
constant RLC_ACC : std_logic_vector(5 downto 0) := "110011";
constant RR_ACC : std_logic_vector(5 downto 0) := "110100";
constant RRC_ACC : std_logic_vector(5 downto 0) := "110101";
constant INV_ACC : std_logic_vector(5 downto 0) := "110110";
constant INV_RAM : std_logic_vector(5 downto 0) := "110111";
constant DEC_ACC : std_logic_vector(5 downto 0) := "111000";
constant DEC_RAM : std_logic_vector(5 downto 0) := "111001";
constant COMP_RAM_ACC : std_logic_vector(5 downto 0) := "111010";
constant COMP_ROM_ACC : std_logic_vector(5 downto 0) := "111011";
constant COMP_ROM_RAM : std_logic_vector(5 downto 0) := "111100";
constant INC_ACC : std_logic_vector(5 downto 0) := "111110";
constant INC_RAM : std_logic_vector(5 downto 0) := "111111";
constant ACALL : std_logic_vector(4 downto 0) := "10001";
constant ADD_A_RR : std_logic_vector(4 downto 0) := "00101";
constant ADD_A_D : std_logic_vector(7 downto 0) := "00100101";
constant ADD_A_ATRI : std_logic_vector(6 downto 0) := "0010011";
constant ADD_A_DATA : std_logic_vector(7 downto 0) := "00100100";
constant ADDC_A_RR : std_logic_vector(4 downto 0) := "00111";
constant ADDC_A_D : std_logic_vector(7 downto 0) := "00110101";
constant ADDC_A_ATRI : std_logic_vector(6 downto 0) := "0011011";
constant ADDC_A_DATA : std_logic_vector(7 downto 0) := "00110100";
constant AJMP : std_logic_vector(4 downto 0) := "00001";
constant ANL_A_RR : std_logic_vector(4 downto 0) := "01011";
constant ANL_A_D : std_logic_vector(7 downto 0) := "01010101";
constant ANL_A_ATRI : std_logic_vector(6 downto 0) := "0101011";
constant ANL_A_DATA : std_logic_vector(7 downto 0) := "01010100";
constant ANL_D_A : std_logic_vector(7 downto 0) := "01010010";
constant ANL_D_DATA : std_logic_vector(7 downto 0) := "01010011";
constant ANL_C_BIT : std_logic_vector(7 downto 0) := "10000010";
constant ANL_C_NBIT : std_logic_vector(7 downto 0) := "10110000";
constant CJNE_A_D : std_logic_vector(7 downto 0) := "10110101";
constant CJNE_A_DATA : std_logic_vector(7 downto 0) := "10110100";
constant CJNE_RR_DATA : std_logic_vector(4 downto 0) := "10111";
constant CJNE_ATRI_DATA: std_logic_vector(6 downto 0) := "1011011" ;
constant CLR_A : std_logic_vector(7 downto 0) := "11100100";
constant CLR_C : std_logic_vector(7 downto 0) := "11000011";
constant CLR_BIT : std_logic_vector(7 downto 0) := "11000010";
constant CPL_A : std_logic_vector(7 downto 0) := "11110100";
constant CPL_C : std_logic_vector(7 downto 0) := "10110011";
constant CPL_BIT : std_logic_vector(7 downto 0) := "10110010";
constant DA_A : std_logic_vector(7 downto 0) := "11010100";
constant DEC_A : std_logic_vector(7 downto 0) := "00010100";
constant DEC_RR : std_logic_vector(4 downto 0) := "00011";
constant DEC_D : std_logic_vector(7 downto 0) := "00010101";
constant DEC_ATRI : std_logic_vector(6 downto 0) := "0001011";
constant DIV_AB : std_logic_vector(7 downto 0) := "10000100";
constant DJNZ_RR : std_logic_vector(4 downto 0) := "11011";
constant DJNZ_D : std_logic_vector(7 downto 0) := "11010101";
constant INC_A : std_logic_vector(7 downto 0) := "00000100";
constant INC_RR : std_logic_vector(4 downto 0) := "00001";
constant INC_D : std_logic_vector(7 downto 0) := "00000101";
constant INC_ATRI : std_logic_vector(6 downto 0) := "0000011";
constant INC_DPTR : std_logic_vector(7 downto 0) := "10100011";
constant JB : std_logic_vector(7 downto 0) := "00100000";
constant JBC : std_logic_vector(7 downto 0) := "00010000";
constant JC : std_logic_vector(7 downto 0) := "01000000";
constant JMP_A_DPTR : std_logic_vector(7 downto 0) := "01110011";
constant JNB : std_logic_vector(7 downto 0) := "00110000";
constant JNC : std_logic_vector(7 downto 0) := "01010000";
constant JNZ : std_logic_vector(7 downto 0) := "01110000";
constant JZ : std_logic_vector(7 downto 0) := "01100000";
constant LCALL : std_logic_vector(7 downto 0) := "00010010";
constant LJMP : std_logic_vector(7 downto 0) := "00000010";
constant MOV_A_RR : std_logic_vector(4 downto 0) := "11101";
constant MOV_A_D : std_logic_vector(7 downto 0) := "11100101";
constant MOV_A_ATRI : std_logic_vector(6 downto 0) := "1110011";
constant MOV_A_DATA : std_logic_vector(7 downto 0) := "01110100";
constant MOV_RR_A : std_logic_vector(4 downto 0) := "11111";
constant MOV_RR_D : std_logic_vector(4 downto 0) := "10101";
constant MOV_RR_DATA : std_logic_vector(4 downto 0) := "01111";
constant MOV_D_A : std_logic_vector(7 downto 0) := "11110101";
constant MOV_D_RR : std_logic_vector(4 downto 0) := "10001";
constant MOV_D_D : std_logic_vector(7 downto 0) := "10000101";
constant MOV_D_ATRI : std_logic_vector(6 downto 0) := "1000011";
constant MOV_D_DATA : std_logic_vector(7 downto 0) := "01110101";
constant MOV_ATRI_A : std_logic_vector(6 downto 0) := "1111011";
constant MOV_ATRI_D : std_logic_vector(6 downto 0) := "1010011";
constant MOV_ATRI_DATA : std_logic_vector(6 downto 0) := "0111011";
constant MOVC_A_ATDPTR : std_logic_vector(7 downto 0) := "10010011";
constant MOVC_A_ATPC : std_logic_vector(7 downto 0) := "10000011";
constant MOVX_A_ATRI : std_logic_vector(6 downto 0) := "1110001";
constant MOVX_A_ATDPTR : std_logic_vector(7 downto 0) := "11100000";
constant MOVX_ATRI_A : std_logic_vector(6 downto 0) := "1111001";
constant MOVX_ATDPTR_A : std_logic_vector(7 downto 0) := "11110000";
constant MOV_C_BIT : std_logic_vector(7 downto 0) := "10100010";
constant MOV_BIT_C : std_logic_vector(7 downto 0) := "10010010";
constant MOV_DPTR_DATA : std_logic_vector(7 downto 0) := "10010000";
constant MUL_AB : std_logic_vector(7 downto 0) := "10100100";
constant NOP : std_logic_vector(7 downto 0) := "00000000";
constant ORL_A_RR : std_logic_vector(4 downto 0) := "01001";
constant ORL_A_D : std_logic_vector(7 downto 0) := "01000101";
constant ORL_A_ATRI : std_logic_vector(6 downto 0) := "0100011";
constant ORL_A_DATA : std_logic_vector(7 downto 0) := "01000100";
constant ORL_D_A : std_logic_vector(7 downto 0) := "01000010";
constant ORL_D_DATA : std_logic_vector(7 downto 0) := "01000011";
constant ORL_C_BIT : std_logic_vector(7 downto 0) := "01110010";
constant ORL_C_NBIT : std_logic_vector(7 downto 0) := "10100000";
constant POP : std_logic_vector(7 downto 0) := "11010000";
constant PUSH : std_logic_vector(7 downto 0) := "11000000";
constant RET : std_logic_vector(7 downto 0) := "00100010";
constant RETI : std_logic_vector(7 downto 0) := "00110010";
constant RL_A : std_logic_vector(7 downto 0) := "00100011";
constant RLC_A : std_logic_vector(7 downto 0) := "00110011";
constant RR_A : std_logic_vector(7 downto 0) := "00000011";
constant RRC_A : std_logic_vector(7 downto 0) := "00010011";
constant SETB_C : std_logic_vector(7 downto 0) := "11010011";
constant SETB_BIT : std_logic_vector(7 downto 0) := "11010010";
constant SJMP : std_logic_vector(7 downto 0) := "10000000";
constant SUBB_A_RR : std_logic_vector(4 downto 0) := "10011";
constant SUBB_A_D : std_logic_vector(7 downto 0) := "10010101";
constant SUBB_A_ATRI : std_logic_vector(6 downto 0) := "1001011";
constant SUBB_A_DATA : std_logic_vector(7 downto 0) := "10010100";
constant SWAP_A : std_logic_vector(7 downto 0) := "11000100";
constant XCH_A_RR : std_logic_vector(4 downto 0) := "11001";
constant XCH_A_D : std_logic_vector(7 downto 0) := "11000101";
constant XCH_A_ATRI : std_logic_vector(6 downto 0) := "1100011";
constant XCHD_A_ATRI : std_logic_vector(6 downto 0) := "1101011";
constant XRL_A_RR : std_logic_vector(4 downto 0) := "01101";
constant XRL_A_D : std_logic_vector(7 downto 0) := "01100101";
constant XRL_A_ATRI : std_logic_vector(6 downto 0) := "0110011";
constant XRL_A_DATA : std_logic_vector(7 downto 0) := "01100100";
constant XRL_D_A : std_logic_vector(7 downto 0) := "01100010";
constant XRL_D_DATA : std_logic_vector(7 downto 0) := "01100011";
type t_state is (STARTUP,
FETCH,
EXEC1,
EXEC2,
EXEC3);
type t_instr_category is (IC_ACALL,
IC_ADD_A_RR,
IC_ADD_A_D,
IC_ADD_A_ATRI,
IC_ADD_A_DATA,
IC_ADDC_A_RR,
IC_ADDC_A_D,
IC_ADDC_A_ATRI,
IC_ADDC_A_DATA,
IC_AJMP,
IC_ANL_A_RR,
IC_ANL_A_D,
IC_ANL_A_ATRI,
IC_ANL_A_DATA,
IC_ANL_D_A,
IC_ANL_D_DATA,
IC_ANL_C_BIT,
IC_ANL_C_NBIT,
IC_CJNE_A_D,
IC_CJNE_A_DATA,
IC_CJNE_RR_DATA,
IC_CJNE_ATRI_DATA,
IC_CLR_A,
IC_CLR_C,
IC_CLR_BIT,
IC_CPL_A,
IC_CPL_C,
IC_CPL_BIT,
IC_DA_A,
IC_DEC_A,
IC_DEC_RR,
IC_DEC_D,
IC_DEC_ATRI,
IC_DIV_AB,
IC_DJNZ_RR,
IC_DJNZ_D,
IC_INC_A,
IC_INC_RR,
IC_INC_D,
IC_INC_ATRI,
IC_INC_DPTR,
IC_JB,
IC_JBC,
IC_JC,
IC_JMP_A_DPTR,
IC_JNB,
IC_JNC,
IC_JNZ,
IC_JZ,
IC_LCALL,
IC_LJMP,
IC_MOV_A_RR,
IC_MOV_A_D,
IC_MOV_A_ATRI,
IC_MOV_A_DATA,
IC_MOV_RR_A,
IC_MOV_RR_D,
IC_MOV_RR_DATA,
IC_MOV_D_A,
IC_MOV_D_RR,
IC_MOV_D_D,
IC_MOV_D_ATRI,
IC_MOV_D_DATA,
IC_MOV_ATRI_A,
IC_MOV_ATRI_D,
IC_MOV_ATRI_DATA,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -