📄 cpu.v
字号:
ACALL_5 :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0110 ;
end
CPL_BIT :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
CPL_C :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
CJNE_A_N :
begin
nr_bytes_a = 2'b11 ;
nr_cycles_a = 4'b0100 ;
end
CJNE_A_ADDR :
begin
nr_bytes_a = 2'b11 ;
nr_cycles_a = 4'b0100 ;
end
CJNE_IR0_N :
begin
nr_bytes_a = 2'b11 ;
nr_cycles_a = 4'b0100 ;
end
CJNE_IR1_N :
begin
nr_bytes_a = 2'b11 ;
nr_cycles_a = 4'b0100 ;
end
CJNE_R0_N :
begin
nr_bytes_a = 2'b11 ;
nr_cycles_a = 4'b0100 ;
end
CJNE_R1_N :
begin
nr_bytes_a = 2'b11 ;
nr_cycles_a = 4'b0100 ;
end
CJNE_R2_N :
begin
nr_bytes_a = 2'b11 ;
nr_cycles_a = 4'b0100 ;
end
CJNE_R3_N :
begin
nr_bytes_a = 2'b11 ;
nr_cycles_a = 4'b0100 ;
end
CJNE_R4_N :
begin
nr_bytes_a = 2'b11 ;
nr_cycles_a = 4'b0100 ;
end
CJNE_R5_N :
begin
nr_bytes_a = 2'b11 ;
nr_cycles_a = 4'b0100 ;
end
CJNE_R6_N :
begin
nr_bytes_a = 2'b11 ;
nr_cycles_a = 4'b0100 ;
end
CJNE_R7_N :
begin
nr_bytes_a = 2'b11 ;
nr_cycles_a = 4'b0100 ;
end
//-----------------------------------
// C0h
//-----------------------------------
PUSH :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0100 ;
end
AJMP_6 :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
CLR_BIT :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
CLR_C :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
SWAP_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
XCH_ADDR :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
XCH_IR0 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0011 ;
end
XCH_IR1 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0011 ;
end
XCH_R0 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
XCH_R1 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
XCH_R2 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
XCH_R3 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
XCH_R4 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
XCH_R5 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
XCH_R6 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
XCH_R7 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
//-----------------------------------
// D0h
//-----------------------------------
POP :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
ACALL_6 :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0110 ;
end
SETB_BIT :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
SETB_C :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
DA_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
DJNZ_ADDR :
begin
nr_bytes_a = 2'b11 ;
nr_cycles_a = 4'b0100 ;
end
XCHD_IR0 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0011 ;
end
XCHD_IR1 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0011 ;
end
DJNZ_R0 :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
DJNZ_R1 :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
DJNZ_R2 :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
DJNZ_R3 :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
DJNZ_R4 :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
DJNZ_R5 :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
DJNZ_R6 :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
DJNZ_R7 :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
//-----------------------------------
// E0h
//-----------------------------------
MOVX_A_IDPTR :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0011 ;
end
AJMP_7 :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
MOVX_A_IR0 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0011 ;
end
MOVX_A_IR1 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0011 ;
end
CLR_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
MOV_A_ADDR :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0010 ;
end
MOV_A_IR0 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
MOV_A_IR1 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
MOV_A_R0 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
MOV_A_R1 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
MOV_A_R2 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
MOV_A_R3 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
MOV_A_R4 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
MOV_A_R5 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
MOV_A_R6 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
MOV_A_R7 :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
//-----------------------------------
// F0h
//-----------------------------------
MOVX_IDPTR_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0100 ;
end
ACALL_7 :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0110 ;
end
MOVX_IR0_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0100 ;
end
MOVX_IR1_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0100 ;
end
CPL_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
MOV_ADDR_A :
begin
nr_bytes_a = 2'b10 ;
nr_cycles_a = 4'b0011 ;
end
MOV_IR0_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0011 ;
end
MOV_IR1_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0011 ;
end
MOV_R0_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
MOV_R1_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
MOV_R2_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
MOV_R3_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
MOV_R4_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
MOV_R5_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
MOV_R6_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
MOV_R7_A :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0010 ;
end
default :
begin
nr_bytes_a = 2'b01 ;
nr_cycles_a = 4'b0001 ;
end
endcase
end
//------------------------------------------------------------------
// Instruction decoder
// Sequential part
//------------------------------------------------------------------
always @(posedge clk)
begin : nr_decoder_proc
//------------------------------------------------------------------
if (rst)
//-----------------------------------
// Synchronous reset
//-----------------------------------
begin
nr_bytes <= 2'b01 ;
nr_cycles <= 4'b0001 ;
end
else
//-----------------------------------
// Synchronous write
//-----------------------------------
// nr_bytes and nr_cycles flip-flops
//--------------------------------
begin
if (stoppmu)
begin
nr_bytes <= 2'b01; // NOP
nr_cycles <= 4'b0001; // NOP
end
else if ((code_fetch_e | debug_fetch_e) & mempsackint)
begin
if (intreq) // Interrupt request
begin
nr_bytes <= 2'b11 ;
nr_cycles <= 4'b0110 ;
end
else
begin
nr_bytes <= nr_bytes_a ;
nr_cycles <= nr_cycles_a ;
end
end
else if ((curcycle==nr_cycles) & (a5instr | debugreq))
begin
nr_bytes <= 2'b01; // NOP
nr_cycles <= 4'b0001; // NOP
end
end
end
endmodule
//*******************************************************************--
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -