m3s004bo.vhd

来自「another 8051 core porocesssor vhdl sourc」· VHDL 代码 · 共 575 行 · 第 1/2 页

VHD
575
字号
signal LLOGDI, LCJNE, NDJNZD, NDJNZR, DJNZ: std_logic;signal PCLONG, LO5TOF, NLOGDA, LMULDIV: std_logic;signal NCALL, NLCALL, LRET, LRETI, LEITHER_RET, NPOP, NPUSH: std_logic;signal LLODEC: std_logic_vector(7 downto 0);signal HIDEC:  std_logic_vector(15 downto 0);signal LALUC:  std_logic_vector(17 downto 0);--*********************************************************************--Port Mapping--*********************************************************************begin--*********************************************************************U1:m3s022boport map(         LODEC => LLODEC,         HIDEC => HIDEC,          OPC => OPC          );--*********************************************************************U2:m3s024boport map(         ALUC => LALUC,         LODEC_4TOF => LODEC_4TOF,         NDIVAB => LNDIVAB,         NDJNZD => NDJNZD,         NDJNZR => NDJNZR,         NMULAB => LNMULAB,         DAA => LDAA,         NLJMP => NLJMP,         NLCALL => NLCALL,         NOP16 => NOP16,         NCPLB => NCPLB,         NSETB => NSETB,         NSETC => NSETC,         NORLCN => NORLCN,         NORLCB => NORLCB,         NMOVCB => NMOVCB,         NCLRB => NCLRB,         NCLRC => NCLRC,         NANLCN => NANLCN,         NANLCB => NANLCB,         JBC => LJBC,         NCPLC => NCPLC,         HIDEC => HIDEC,         LODEC(5 downto 0) => LLODEC(5 downto 0),          OPC(3 downto 1) => OPC(3 downto 1),         RET => LRET,         RETI => LRETI          );   --*********************************************************************U3:m3s033boport map(         ACCADD => ACCADD,         NMOVPC => NMOVPC,         NINCDP => NINCDP,         NSWAPN => NSWAPN,         NMOVBC => NMOVBC,         LOGDI => LLOGDI,         HIDEC(14 downto 0) => HIDEC(14 downto 0),         LODEC => LLODEC,         OPC(7 downto 3) => OPC(7 downto 3),         LODEC_4TOF => LODEC_4TOF,         NOP16 => NOP16,         MULDIV => LMULDIV,         INDXR => AI,         INDOP => INDIRECT_OPS,         NDIV => LNDIVAB,         NDJD => NDJNZD,         NDJR => NDJNZR,         NBEN => LALUC(17),         CJNE => LCJNE,         NMUL => LNMULAB,         NMCB => NMOVCB         );   --*********************************************************************U4:m3s032boport map(         TMPADD => TMPADD,         PCLONG => PCLONG,         LO5TOF => LO5TOF,         NLOGDA => NLOGDA,         HIDEC(11 downto 2) => HIDEC(11 downto 2),         LODEC(5 downto 2) => LLODEC(5 downto 2),         LODEC_4TOF => LODEC_4TOF,         ND16 => NOP16,         MULDIV => LMULDIV,         NMPC => NMOVPC,         NLCA => NLCALL,         NLJM => NLJMP,         EITHER_RET => LEITHER_RET,         LOGDI => LLOGDI         );    --*********************************************************************U5:m3s034boport map(         PCADD => PCADD,         HIDEC(15 downto 0) => HIDEC(15 downto 0),         LODEC(5 downto 0) => LLODEC(5 downto 0),         OPC(7 downto 3) => OPC(7 downto 3),         NLCALL => NLCALL,         BRET => LEITHER_RET,         PCL0 => PCLONG,         DJNZ => DJNZ,         CJNE => LCJNE,         NIDP => NINCDP,         INDOP => INDIRECT_OPS,         LOGDI => LLOGDI,         NDJR => NDJNZR,         NDJD => NDJNZD         );       --*********************************************************************U6:m3s035boport map(          REGADD => REGADD,         NCALL => NCALL,         NPOP => NPOP,         NPUSH => NPUSH,         HIDA => HIDEC(3 downto 0),         LODEC(2 downto 0) => LLODEC(2 downto 0),         OPC(4 downto 3) => OPC(4 downto 3),         HIDB => HIDEC(8 downto 7),         HIDC => HIDEC(13 downto 10),         HI15 => HIDEC(15),         L5TF => LO5TOF,         NLCA => NLCALL,         BRET => LEITHER_RET,         INDOP => INDIRECT_OPS,         INDXR => AI,         INDXW => AJ,         NLDA => NLOGDA,         LOGDI => LLOGDI,         NMBC => NMOVBC,         JBC => LJBC,         NBEN => LALUC(17),         NSWA => NSWAPN,         NMCB => NMOVCB         );       --*********************************************************************--Notes--       --*********************************************************************--Process Definitions--*********************************************************************misc1:process(LNMULAB,HIDEC,LLODEC,NOP16,NORLCB,NLJMP,NLCALL,NMOVBC)begin   AB <= LLODEC(1) or (LLODEC(0) and not HIDEC(0));   AC <= NOP16 and LNMULAB and NORLCB and NLJMP and NLCALL and NMOVBC;end process misc1;--*********************************************************************misc2:process(HIDEC, LLODEC, OPC, LODEC_4TOF)begin   LCJNE <= HIDEC(11) and LODEC_4TOF;   LRET <=  HIDEC(2) and LLODEC(2);   LRETI <= HIDEC(3) and LLODEC(2);   LEITHER_RET <= not OPC(7) and not OPC(6) and OPC(5) and LLODEC(2);   INDIRECT_OPS <= OPC(1) and OPC(2) and (not OPC(3));   MOVDAI <= HIDEC(7) and LLODEC(5);   AI <= HIDEC(14) and (LLODEC(2) or LLODEC(3));   AJ <= HIDEC(15) and (LLODEC(2) or LLODEC(3));   AK <= (HIDEC(0) or HIDEC(1)) and LODEC_4TOF;   end process misc2;--*********************************************************************misc3:process(HIDEC, LLODEC, OPC, DAAL, DAAH, NDJNZR, NDJNZD, LDAA,              INDIRECT_OPS, LODEC_4TOF)begin    DJNZ <= not(NDJNZR and NDJNZD);    AM <= DAAL and LDAA;    AN <= DAAH and LDAA;    ARITH_OPS <= (HIDEC(2) or HIDEC(3) or HIDEC(9)) and LODEC_4TOF;    CARRY_OPS1 <= HIDEC(11) and LODEC_4TOF;    CARRY_OPS2 <= (HIDEC(1) or HIDEC(3)) and LLODEC(3);    AU <= HIDEC(14) and LLODEC(0);    AV <= HIDEC(15) and LLODEC(0);    AY <= (HIDEC(0) or HIDEC(1)) and LLODEC(5);    MOVRDA <= (OPC(3) or INDIRECT_OPS) and HIDEC(10);end process misc3;--*********************************************************************misc4:process(NORLCN,NANLCN,NORLCB,NANLCB,NMOVCB,NCPLC,NCLRC,NSETC)begin    CARRY_OPS3 <= not(NORLCN and NANLCN and NORLCB and NANLCB and NMOVCB                      and NCPLC and NCLRC and NSETC);end process misc4;--*********************************************************************misc5:process(AI,AJ,LJBC,NLOGDA,NMOVBC,NCPLB,NCLRB,NSETB,NDJNZD,LLOGDI)begin    AW <= (not AI) and (not AJ);    AX <= (not LJBC) and NLOGDA and NMOVBC and NCPLB and NCLRB and NSETB and NDJNZD and not LLOGDI;end process misc5;--*********************************************************************misc6:process(LCJNE, LEITHER_RET, MOVRDA, MOVDAI, LLOGDI)begin    BA <= LCJNE or LEITHER_RET or MOVRDA or MOVDAI or LLOGDI;end process misc6;--*********************************************************************out1:process(AB, AC, AI, AJ, AY, AX, BA, LDAA, NOP16, LNDIVAB, LNMULAB,             HIDEC, LLODEC, LLOGDI, LCJNE, PCLONG, NDJNZD, OPC, DJNZ)begin   GOCYC2 <= AB or not AC or AI or AJ or BA or HIDEC(8) or DJNZ;   LMULDIV <=  not(LNDIVAB and LNMULAB);    DAA <= LDAA;   RMW <= AY or not AX or (OPC(4) and (HIDEC(0) or HIDEC(1) or HIDEC(13)));   IMMB3 <= (LLODEC(0) and (HIDEC(1) or HIDEC(2) or HIDEC(3) or HIDEC(9))) or           ((HIDEC(7) or HIDEC(8)) and LLODEC(5)) or LCJNE or LLOGDI or PCLONG or not NDJNZD;   IMMB4 <= not NOP16;   JMPADPTR <= HIDEC(7) and LLODEC(3);end process out1;--*********************************************************************alucout:process(LALUC)begin   ALUC <= LALUC;end process alucout;--*********************************************************************codatout:process(AK, DJNZ, AM, AN)begin    CODAT(0) <= AK or DJNZ;    CODAT(1) <= AM;    CODAT(2) <= AN;end process codatout; --*********************************************************************movx_control:process(AU,AV,AW,AJ,AI)-- External data access (MOVX) controller-- -- Bit Definitions:-- MOVX(0): Enable MOVX-- MOVX(1): MOVX @Ri-- MOVX(2): MOVX @DPTR-- MOVX(3): MOVX WRITE-- MOVX(4): MOVX READ-- begin   MOVX(0) <= AU or AV or not AW;   MOVX(1) <= not AW;   MOVX(2) <= AU or AV;   MOVX(3) <= AV or AJ;   MOVX(4) <= AU or AI;end process movx_control;--*********************************************************************psw_control:process(ARITH_OPS, LMULDIV, LDAA, CARRY_OPS1, CARRY_OPS2,                    CARRY_OPS3)-- Program Status Word Flag Controller-- -- Bit Definitions:-- PSWC(0): Enable Overflow Flag Load.-- PSWC(1): Enable Half-Carry Flag Load,-- PSWC(2): Enable Carry Flag Load,--begin   PSWC(0) <= ARITH_OPS or LMULDIV;   PSWC(1) <= ARITH_OPS;   PSWC(2) <= ARITH_OPS or LMULDIV or LDAA or CARRY_OPS1 or CARRY_OPS2              or CARRY_OPS3;end process psw_control;--*********************************************************************spc_control:process(LEITHER_RET, NPOP, NPUSH, NCALL)-- Stack Pointer Load, Increment and Decrement Controller---- Bit Definitions:-- SPC(0): Stack Pointer Decrement-- SPC(1): Stack Pointer Increment-- SPC(2): Clock Stack Pointer in Machine Cycle 1 -- SPC(3): Clock Stack Pointer in Machine Cycle 2 begin   SPC(0) <= LEITHER_RET or not NPOP;   SPC(1) <= not(NPUSH and NCALL);   SPC(2) <= not NPUSH or not NCALL or LEITHER_RET;    SPC(3) <= not NCALL or not NPOP or LEITHER_RET;end process spc_control;--*********************************************************************--localout:process(LLODEC,LLOGDI,LMULDIV, LJBC, LCJNE, LNMULAB, LNDIVAB, LRETI, LEITHER_RET)-- Map local signal names to global names--beginADDR_11BIT <= LLODEC(1);LOGDI <= LLOGDI;MULDIV <= LMULDIV;NMULAB <= LNMULAB;NDIVAB <= LNDIVAB;JBC <= LJBC;CJNE <= LCJNE;RETI <= LRETI;EITHER_RET <= LEITHER_RET;--end process localout;--*********************************************************************end m3s004bo_rtl;--*********************************************************************

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?