📄 decode.v
字号:
OC8051_CLR_A : begin aluctl = CLR_OPR; first_opr = NON_VAL; second_opr = ACC_VAL; end OC8051_MOV_AR: begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; end OC8051_MOV_AI: begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; end OC8051_MOVX_AI:begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; end OC8051_MOV_DA: begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; end OC8051_MOVX_AP:begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; end OC8051_CPL_A : begin aluctl = CLR_OPR; first_opr = NON_VAL; second_opr = ACC_VAL; end OC8051_AJMP : begin aluctl = CLR_OPR; first_opr = NON_VAL; second_opr = ACC_VAL; end OC8051_ACALL : begin aluctl = CLR_OPR; first_opr = NON_VAL; second_opr = ACC_VAL; end default : begin aluctl = NON_OPR; first_opr = NON_VAL; second_opr = NON_VAL; end endcase always @(decode_inst) begin casex (decode_inst) OC8051_INC_R : begin dest_int_mem_addr = ; dest_ext_mem_addr = ; dest_reg_grp_addr = ; end OC8051_INC_I : begin aluctl = ADD_OPR; first_opr = INT_MEM; second_opr = IMMD_VAL; dest_opr = REG_GROUP; end OC8051_INC_A : begin aluctl = ADD_OPR; first_opr = ACC_MEM; second_opr = IMMD_VAL; dest_opr = REG_GROUP; end OC8051_INC_D : begin aluctl = ADD_OPR; first_opr = INT_MEM; second_opr = IMMD_VAL; dest_opr = REG_GROUP; end OC8051_RR : begin aluctl = SHF_RR_OPR; first_opr = ACC_MEM; second_opr = NONE_VAL; dest_opr = ACC_MEM; end OC8051_LJMP : OC8051_NOP : OC8051_DEC_R : begin aluctl = ADD_OPR; first_opr = REG_GROUP; second_opr = IMMD_VAL; dest_opr = REG_GROUP; end OC8051_DEC_I : begin aluctl = ADD_OPR; first_opr = INT_MEM; second_opr = IMMD_VAL; dest_opr = REG_GROUP; end OC8051_DEC_A : begin aluctl = ADD_OPR; first_opr = ACC_MEM; second_opr = IMMD_VAL; dest_opr = REG_GROUP; end OC8051_DEC_D : begin aluctl = ADD_OPR; first_opr = INT_MEM; second_opr = IMMD_VAL; dest_opr = REG_GROUP; end OC8051_RRC : begin aluctl = SHF_RRC_OPR;first_opr = ACC_MEM; second_opr = NONE_VAL; dest_opr = ACC_MEM; end OC8051_LCALL : OC8051_JBC : OC8051_ADD_R : begin aluctl = ADD_OPR; first_opr = ACC_MEM; second_opr = REG_GROUP;dest_opr = ACC_MEM; end OC8051_ADD_I : begin aluctl = ADD_OPR; first_opr = ACC_MEM; second_opr = INT_MEM; dest_opr = ACC_MEM; end OC8051_ADD_D : begin aluctl = ADD_OPR; first_opr = ACC_MEM; second_opr = INT_MEM; dest_opr = ACC_MEM; end OC8051_ADD_C : begin aluctl = ADD_OPR; first_opr = ACC_MEM; second_opr = IMMD_VAL; dest_opr = ACC_MEM; end OC8051_RL : begin aluctl = SHF_RL_OPR; first_opr = ACC_MEM; second_opr = NONE_VAL; dest_opr = ACC_MEM; end OC8051_RET : OC8051_JB : OC8051_ADDC_R: begin aluctl = ADD_OPR; first_opr = ACC_MEM; second_opr = REG_GROUP;dest_opr = ACC_MEM; end OC8051_ADDC_I: begin aluctl = ADD_OPR; first_opr = ACC_MEM; second_opr = INT_MEM; dest_opr = ACC_MEM; end OC8051_ADDC_D: begin aluctl = ADD_OPR; first_opr = ACC_MEM; second_opr = INT_MEM; dest_opr = ACC_MEM; end OC8051_ADDC_C: begin aluctl = ADD_OPR; first_opr = ACC_MEM; second_opr = IMMD_VAL; dest_opr = ACC_MEM; end OC8051_RLC : begin aluctl = SHF_RL_OPR; first_opr = ACC_MEM; second_opr = NONE_VAL; dest_opr = ACC_MEM; end OC8051_RET1 : OC8051_JNB : OC8051_ORL_R : begin aluctl = ORL_OPR; first_opr = ACC_MEM; second_opr = REG_GROUP;dest_opr = ACC_MEM; end OC8051_ORL_I : begin aluctl = ORL_OPR; first_opr = ACC_MEM; second_opr = INT_MEM; dest_opr = ACC_MEM; end OC8051_ORL_D : begin aluctl = ORL_OPR; first_opr = ACC_MEM; second_opr = INT_MEM; dest_opr = ACC_MEM; end OC8051_ORL_C : begin aluctl = ORL_OPR; first_opr = ACC_MEM; second_opr = IMMD_VAL; dest_opr = ACC_MEM; end OC8051_ORL_AD: begin aluctl = ORL_OPR; first_opr = INT_MEM; second_opr = ACC_MEM; dest_opr = INT_MEM; end OC8051_ORL_CD: begin aluctl = ORL_OPR; first_opr = INT_MEM; second_opr = IMMD_VAL; dest_opr = INT_MEM; end OC8051_JC : OC8051_ANL_R : begin aluctl = ANL_OPR; first_opr = ACC_MEM; second_opr = REG_GROUP;dest_opr = ACC_MEM; end OC8051_ANL_I : begin aluctl = ANL_OPR; first_opr = ACC_MEM; second_opr = INT_MEM; dest_opr = ACC_MEM; end OC8051_ANL_D : begin aluctl = ANL_OPR; first_opr = ACC_MEM; second_opr = INT_MEM; dest_opr = ACC_MEM; end OC8051_ANL_C : begin aluctl = ANL_OPR; first_opr = ACC_MEM; second_opr = IMMD_VAL; dest_opr = ACC_MEM; end OC8051_ANL_AD: begin aluctl = ANL_OPR; first_opr = INT_MEM; second_opr = ACC_MEM; dest_opr = INT_MEM; end OC8051_ANL_CD: begin aluctl = ANL_OPR; first_opr = INT_MEM; second_opr = IMMD_VAL; dest_opr = INT_MEM; end OC8051_JNC : OC8051_XRL_R : begin aluctl = XRL_OPR; first_opr = ACC_MEM; second_opr = REG_GROUP;dest_opr = ACC_MEM; end OC8051_XRL_I : begin aluctl = XRL_OPR; first_opr = ACC_MEM; second_opr = INT_MEM; dest_opr = ACC_MEM; end OC8051_XRL_D : begin aluctl = XRL_OPR; first_opr = ACC_MEM; second_opr = INT_MEM; dest_opr = ACC_MEM; end OC8051_XRL_C : begin aluctl = XRL_OPR; first_opr = ACC_MEM; second_opr = IMMD_VAL; dest_opr = ACC_MEM; end OC8051_XRL_AD: begin aluctl = XRL_OPR; first_opr = INT_MEM; second_opr = ACC_MEM; dest_opr = INT_MEM; end OC8051_XRL_CD: begin aluctl = XRL_OPR; first_opr = INT_MEM; second_opr = IMMD_VAL; dest_opr = INT_MEM; end OC8051_JZ : OC8051_MOV_CR: begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = REG_GRP; end OC8051_MOV_CI: begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = INT_MEM; end OC8051_MOV_C : begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = ACC_MEM; end OC8051_MOV_CD: begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = INT_MEM; end OC8051_ORL_B : OC8051_JMP_D : OC8051_JNZ : OC8051_MOV_RD: begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = REG_GRP; end OC8051_MOV_ID: begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = INT_MEM; end OC8051_MOVC_PC:begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = ACC_MEM; end OC8051_MOV_DD: begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = INT_MEM; end OC8051_DIV : OC8051_ANL_B : OC8051_SJMP : OC8051_SUBB_R: begin aluctl = ADD_OPR; first_opr = ACC_MEM; second_opr = REG_GROUP;dest_opr = ACC_MEM; end OC8051_SUBB_I: begin aluctl = ADD_OPR; first_opr = ACC_MEM; second_opr = INT_MEM; dest_opr = ACC_MEM; end OC8051_SUBB_D: begin aluctl = ADD_OPR; first_opr = ACC_MEM; second_opr = INT_MEM; dest_opr = ACC_MEM; end OC8051_SUBB_C: begin aluctl = ADD_OPR; first_opr = ACC_MEM; second_opr = IMMD_VAL; dest_opr = ACC_MEM; end OC8051_MOV_CB: begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = REG_GRP; end OC8051_MOV_DP: begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = INT_MEM; end OC8051_MOVC_DP:begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = ACC_MEM; end OC8051_MOV_DR: begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = REG_GRP; end OC8051_MOV_DI: begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = INT_MEM; end OC8051_MOV_BC: begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = ACC_MEM; end OC8051_MUL : begin aluctl = MUL_OPR; first_opr = ACC_VAL; second_opr = BCC_VAL; dest_opr = ACC_MEM; end OC8051_ORL_NB: begin OC8051_INC_DP: begin aluctl = ADD_OPR; first_opr = DPTR; second_opr = IMMD_VAL; dest_opr = DPTR; end OC8051_CJNE_R: begin aluctl = ADD_OPR; first_opr = REG_GRP; second_opr = IMMD_VAL; dest_opr = NON_MEM; end OC8051_CJNE_I: begin aluctl = ADD_OPR; first_opr = INT_MEM; second_opr = IMMD_VAL; dest_opr = NON_MEM; end OC8051_CJNE_D: begin aluctl = ADD_OPR; first_opr = ACC_MEM; second_opr = INT_MEM ; dest_opr = NON_MEM; end OC8051_CJNE_C: begin aluctl = ADD_OPR; first_opr = ACC_MEM; second_opr = IMMD_VAL; dest_opr = NON_MEM; end OC8051_ANL_NB: OC8051_CPL_C : OC8051_CPL_B : OC8051_XCH_R: begin aluctl = XCH_OPR; first_opr = ACC_MEM; second_opr = REG_GRP; dest_opr = REG_GRP; end OC8051_XCH_I: begin aluctl = XCH_OPR; first_opr = ACC_MEM; second_opr = INT_MEM; dest_opr = REG_GRP; end OC8051_XCH_D: begin aluctl = XCH_OPR; first_opr = ACC_MEM; second_opr = INT_MEM; dest_opr = REG_GRP; end OC8051_CLR_C: OC8051_CLR_B: OC8051_PUSH: OC8051_SWAP: begin aluctl = SWAP_OPR; first_opr = ACC_MEM; second_opr = NON_MEM; dest_opr = NON_MEM; end OC8051_DJNZ_R: begin aluctl = ADD_OPR; first_opr = REG_GRP; second_opr = IMMD_VAL; dest_opr = REG_GRP; end OC8051_XCHD: begin aluctl = XCHD_OPR; first_opr = ACC_MEM; second_opr = REG_GRP; dest_opr = REG_GRP; end OC8051_DJNZ_D: begin aluctl = XCH_OPR; first_opr = ACC_MEM; second_opr = INT_MEM; dest_opr = REG_GRP; end OC8051_POP: OC8051_SETB_C: OC8051_SETB_B: OC8051_DA: begin aluctl = DA_OPR; first_opr = ACC_MEM; second_opr = NON_MEM; dest_opr = NON_MEM; end OC8051_MOV_R: begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = REG_GRP; end OC8051_MOV_I: begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = INT_MEM; end OC8051_MOVX_IA:begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = ACC_MEM; end OC8051_MOV_D :begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = ACC_MEM; end OC8051_MOVX_PA:begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = ACC_MEM; end OC8051_CLR_A : OC8051_MOV_AR: begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = REG_GRP; end OC8051_MOV_AI: begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = INT_MEM; end OC8051_MOVX_AI:begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = ACC_MEM; end OC8051_MOV_DA :begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = ACC_MEM; end OC8051_MOVX_AP:begin aluctl = MOV_OPR; first_opr = NON_VAL; second_opr = IMMD_VAL; dest_opr = ACC_MEM; end OC8051_CPL_A: OC8051_AJMP: OC8051_ACALL: default : begin aluctl = NON_OPR; first_opr = NON_VAL; second_opr = NON_VAL; dest_opr = NON_VAL; end endcase end always @(posedge clock or posedge reset) begin if (reset) begin psw_reg <= 0; end else begin psw_reg <= (~dest_psw_ctl & psw_reg) | (dest_psw_ctl & psw_data_in); end end always @(decode_inst) begin casex (decode_inst) OC8051_INC_R : begin dest_psw_ctl = 8'b00011100;end OC8051_INC_I : begin aluctl = ADD_OPR; first_opr = INT_MEM; second_opr = IMMD_VAL; dest_opr = REG_GROUP; end OC8051_INC_A : begin aluctl = ADD_OPR; first_opr = ACC_MEM; second_opr = IMMD_VAL; dest_opr = REG_GROUP; end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -