📄 cpu.v
字号:
else
//-----------------------------------
// Synchronous write
//-----------------------------------
// Read-Modify-Write flip-flop
//--------------------------------
begin
if (mempsackint)
begin
if (code_fetch_e | debug_fetch_e)
begin
rmwinstr <= rmwinstr_a ;
end
end
end
end
//------------------------------------------------------------------
// Instruction decoder
// Combinational part
//------------------------------------------------------------------
always @(memdatai)
begin : nr_decoder_hand
//------------------------------------------------------------------
case (memdatai)
//-----------------------------------
// 00h
//-----------------------------------
NOP :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
AJMP_0 :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
LJMP :
begin
nr_bytes_a = 2'b11 ;
nr_cycles_a = 4'b0100 ;
end
RR_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
INC_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
INC_ADDR :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
INC_IR0 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0011 ;
end
INC_IR1 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0011 ;
end
INC_R0 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
INC_R1 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
INC_R2 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
INC_R3 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
INC_R4 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
INC_R5 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
INC_R6 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
INC_R7 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
//-----------------------------------
// 10h
//-----------------------------------
JBC_BIT :
begin
nr_bytes_a = 2'b11 ;
nr_cycles_a = 4'b0100 ;
end
ACALL_0 :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0110 ;
end
LCALL :
begin
nr_bytes_a = 2'b11 ;
nr_cycles_a = 4'b0110 ;
end
RRC_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
DEC_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
DEC_ADDR :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
DEC_IR0 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0011 ;
end
DEC_IR1 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0011 ;
end
DEC_R0 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
DEC_R1 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
DEC_R2 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
DEC_R3 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
DEC_R4 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
DEC_R5 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
DEC_R6 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
DEC_R7 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
//-----------------------------------
// 20h
//-----------------------------------
JB_BIT :
begin
nr_bytes_a = 2'b11 ;
nr_cycles_a = 4'b0100 ;
end
AJMP_1 :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
RET :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0100 ;
end
RL_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ADD_N :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0010 ;
end
ADD_ADDR :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0010 ;
end
ADD_IR0 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
ADD_IR1 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
ADD_R0 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ADD_R1 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ADD_R2 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ADD_R3 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ADD_R4 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ADD_R5 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ADD_R6 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ADD_R7 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
//-----------------------------------
// 30h
//-----------------------------------
JNB_BIT :
begin
nr_bytes_a = 2'b11 ;
nr_cycles_a = 4'b0100 ;
end
ACALL_1 :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0110 ;
end
RETI :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0100 ;
end
RLC_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ADDC_N :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0010 ;
end
ADDC_ADDR :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0010 ;
end
ADDC_IR0 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
ADDC_IR1 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
ADDC_R0 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ADDC_R1 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ADDC_R2 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ADDC_R3 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ADDC_R4 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ADDC_R5 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ADDC_R6 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ADDC_R7 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
//-----------------------------------
// 40h
//-----------------------------------
JC :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
AJMP_2 :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
ORL_ADDR_A :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
ORL_ADDR_N :
begin
nr_bytes_a = 2'b11 ;
nr_cycles_a = 4'b0100 ;
end
ORL_A_N :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0010 ;
end
ORL_A_ADDR :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0010 ;
end
ORL_A_IR0 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
ORL_A_IR1 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
ORL_A_R0 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ORL_A_R1 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ORL_A_R2 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ORL_A_R3 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ORL_A_R4 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ORL_A_R5 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ORL_A_R6 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
ORL_A_R7 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
//-----------------------------------
// 50h
//-----------------------------------
JNC :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
ACALL_2 :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0110 ;
end
ANL_ADDR_A :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
ANL_ADDR_N :
begin
nr_bytes_a = 2'b11 ;
nr_cycles_a = 4'b0100 ;
end
ANL_A_N :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0010 ;
end
ANL_A_ADDR :
begin
nr_bytes_a = 2'b10 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -