m3s003bo.vhd

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

VHD
446
字号
 port map(           S => ALU_SUM(7 downto 4),          P => ALU_PROP(7 downto 4),          G => ALU_GEN(6 downto 4),          C_IN => DA,          C_EN => CBEN         );--*********************************************************************--Process Definiions--*********************************************************************general1:process(ALUC,ACC0,DB,AV,NMULAB,NDIVAB)begin   CMUX <= (NMULAB or ACC0) and (( DB xor AV) or NDIVAB);   CBEN <= ALUC(4) or ALUC(5);   CARI  <= DB xor AV;end process general1;--*********************************************************************general2:process(CARI,CMUX,AAF,ALUC)begin   CAM <= CARI and CMUX;   QCI <= not (ALUC(5) xor not AAF);end process general2;--*********************************************************************misc1:process(ALU_PROP,ALU_GEN,QCI,CBEN,LBBIT,ALUC,ACLDAT,NDIVAB)begin   AA <= ALU_GEN(0) and ALU_PROP(1) and ALU_PROP(2) and ALU_PROP(3);   AB <= ALU_GEN(1) and ALU_PROP(2) and ALU_PROP(3);   AC <= ALU_GEN(2) and ALU_PROP(3);   AD <= ALU_GEN(4) and ALU_PROP(5) and ALU_PROP(6) and ALU_PROP(7);   AE <= ALU_GEN(5) and ALU_PROP(6) and ALU_PROP(7);   AF <= ALU_GEN(6) and ALU_PROP(7);   PROP_LO <= ALU_PROP(0) and ALU_PROP(1) and ALU_PROP(2) and ALU_PROP(3);   AH <= ALU_PROP(4) and ALU_PROP(5) and ALU_PROP(6) and ALU_PROP(7);     AR <= (not ACLDAT(9)) and (not LBBIT) and ALUC(9);   AS <= (not ACLDAT(9)) and LBBIT and ALUC(10);   AT <= ACLDAT(9) and LBBIT and ALUC(11);   AU <= ACLDAT(9) and (not LBBIT) and ALUC(12);   AV <= ALUC(5) and NDIVAB;   AW <= ALUC(7) and ALUC(15);end process misc1;--*********************************************************************misc2:process(AA,AB,AC,AD,AE,AF,AR,AS,AT,AU,AW,AAA,AAB,AAD,AAE,ALU_GEN,ALUC,NMULAB,NDIVAB)begin   GEN_LO <= AA or AB or AC or ALU_GEN(3);   BB <= AD or AE or AF or ALU_GEN(7);   BC <= AR or AS or AT or AU;   BD <= AW or not ALUC(14);   BE <= AAA or AAB or ALU_GEN(6);   BF <= AAD and not NMULAB;   BG <= AAE or NDIVAB;end process misc2;--*********************************************************************misc3:process(PROP_LO,AH,GEN_LO,BB,BE,BF,BG,AAC,QCI)begin   CA <= (QCI or GEN_LO) and (GEN_LO or PROP_LO);   CB <= QCI or GEN_LO or BB;   CC <= PROP_LO or GEN_LO or BB;    CD <= BB or AH;   CE <= QCI or GEN_LO or BE;   CF <= PROP_LO or GEN_LO or BE;   CG <= AAC or BE;   CH <= BF or not BG;end process misc3;--*********************************************************************misc4:process(CA,CB,CC,CD,CE,CF,CG,CBEN)begin   DA <= CA and CBEN;   DB <= CB and CC and CD;   DC <= CE and CF and CG;end process misc4;--*********************************************************************misc5:process(DC, CARI, LOCALF, DAA, ALUC)begin   EJ <= LOCALF or (DAA and CARI);   EK <= (DC xor ALUC(5)) xor CARI;end process misc5;--*********************************************************************misc6:process(ALU_GEN,ALU_PROP,ALUP,TMPDAT,ACLDAT,ALUC,CBEN)begin   AAA <= ALU_GEN(4) and ALU_PROP(5) and ALU_PROP(6);   AAB <= ALU_GEN(5) and ALU_PROP(6);   AAC <= ALU_PROP(4) and ALU_PROP(5) and ALU_PROP(6);   AAD <= ALUP(0) or ALUP(1) or ALUP(2) or ALUP(3) or ALUP(4) or          ALUP(5) or ALUP(6) or ALUP(7);   AAE <= TMPDAT(0) or TMPDAT(1) or TMPDAT(2) or TMPDAT(3) or TMPDAT(4) or          TMPDAT(5) or TMPDAT(6) or TMPDAT(7);    AAF <= ACLDAT(9) and ALUC(13) and CBEN;end process misc6;--*********************************************************************set_dataa:process(ALU_SUM,ACLDAT,CMUX)begin   case CMUX is       when '0' => LDATAA <= ACLDAT(7 downto 0);       when '1' => LDATAA <= ALU_SUM;       when others => LDATAA <= "XXXXXXXX";   end case;end process set_dataa;--*********************************************************************set_loca:process(ACCDAT,ACLDAT,NDIVAB)begin   case NDIVAB is       when '0' => LOCALA <= ACCDAT(7);       when '1' => LOCALA <= ACLDAT(7);       when others => LOCALA <= 'X';   end case;end process set_loca;--*********************************************************************set_locb:process(CAM,ACLDAT,NMULAB)begin   case NMULAB is       when '0' => LOCALB <= CAM;       when '1' => LOCALB <= ACLDAT(9);       when others => LOCALB <= 'X';   end case;end process set_locb;--*********************************************************************set_locc:process(LOCALA,LDATAA,ACLDAT,LOCALB,ALUC)begin   case ALUC(15) is       when '0' => LOCALC <= LOCALA;LOCALD <= LDATAA(0);       when '1' => LOCALC <= ACLDAT(9);LOCALD <= LOCALB;       when others => LOCALC <= 'X';LOCALD <= 'X';   end case;end process set_locc;--*********************************************************************set_loce:process(CA,ACLDAT,ALUC)begin   case ALUC(8) is       when '0' => LOCALE <= ACLDAT(8);       when '1' => LOCALE <= CA;       when others => LOCALE <= 'X';   end case;end process set_loce;--*********************************************************************set_locf:process(BC,ACLDAT,ALUC)begin   case ALUC(16) is       when '0' => LOCALF <= BC;       when '1' => LOCALF <= ACLDAT(9);       when others => LOCALF <= 'X';   end case;end process set_locf;--*********************************************************************set_alup:process(LDATAA,LOCALC,LOCALD,ALUC)begin   case ALUC(7 downto 6) is       when "00" => ALUP <= LDATAA;       when "01" => ALUP(6 downto 0) <= LDATAA(7 downto 1);ALUP(7) <= LOCALD;       when "10" => ALUP(0) <= LOCALC;ALUP(7 downto 1) <= LDATAA(6 downto 0);       when "11" => ALUP(3 downto 0) <= LDATAA(7 downto 4);                    ALUP(7 downto 4) <= LDATAA(3 downto 0);       when others => ALUP <= "XXXXXXXX";   end case;end process set_alup;--*********************************************************************setmuxvect:process(ALUC,BD)begin   MUXVECT1(1 downto 0) <= ALUC(15)&BD;end process setmuxvect; --*********************************************************************set_coout:process(LDATAA,CARI,EJ,MUXVECT1)begin   case MUXVECT1(1 downto 0) is       when "00" => CO <= EJ;       when "01" => CO <= CARI;       when "10" => CO <= LDATAA(0);       when "11" => CO <= LDATAA(7);       when others => CO <= 'X';   end case;end process set_coout;--*********************************************************************set_bbit:process(ACLDAT,BIT_POSN)begin   case BIT_POSN(2 downto 0) is     when "000" => LBBIT <= ACLDAT(0);     when "001" => LBBIT <= ACLDAT(1);     when "010" => LBBIT <= ACLDAT(2);     when "011" => LBBIT <= ACLDAT(3);     when "100" => LBBIT <= ACLDAT(4);     when "101" => LBBIT <= ACLDAT(5);     when "110" => LBBIT <= ACLDAT(6);     when "111" => LBBIT <= ACLDAT(7);     when others => LBBIT <= 'X';   end case;end process set_bbit;--*********************************************************************set_aludat:process(BC,BIT_POSN,ALUP,ALUC)begin   if ALUC(17) = '1' then      ALUDAT <= ALUP;   else      case BIT_POSN(2 downto 0) is      when "000" => ALUDAT(0) <= BC;ALUDAT(7 downto 1) <=ALUP(7 downto 1);      when "001" => ALUDAT(0) <= ALUP(0);ALUDAT(1) <= BC;                     ALUDAT(7 downto 2) <= ALUP(7 downto 2);      when "010" => ALUDAT(1 downto 0) <=ALUP(1 downto 0);                    ALUDAT(2) <= BC; ALUDAT(7 downto 3) <= ALUP(7 downto 3);      when "011" => ALUDAT(2 downto 0) <=ALUP(2 downto 0);                    ALUDAT(3) <= BC; ALUDAT(7 downto 4) <= ALUP(7 downto 4);      when "100" => ALUDAT(3 downto 0) <=ALUP(3 downto 0);                    ALUDAT(4) <= BC; ALUDAT(7 downto 5) <= ALUP(7 downto 5);      when "101" => ALUDAT(4 downto 0) <=ALUP(4 downto 0);                    ALUDAT(5) <= BC; ALUDAT(7 downto 6) <= ALUP(7 downto 6);      when "110" => ALUDAT(5 downto 0) <=ALUP(5 downto 0);                    ALUDAT(6) <= BC; ALUDAT(7) <= ALUP(7);      when "111" => ALUDAT(6 downto 0) <=ALUP(6 downto 0);                    ALUDAT(7) <= BC;      when others => ALUDAT <= "XXXXXXXX";      end case;   end if;end process set_aludat;--*********************************************************************genout:process(CH,EK,LDATAA,LOCALE,ALUC,LBBIT,NMULAB,NDIVAB)begin   ACO <= LOCALE xor ALUC(5);      CPRDDM <= LDATAA;   OV <= (EK and NMULAB and NDIVAB) or CH;   BBIT <= LBBIT;end process genout;--*********************************************************************end m3s003bo_rtl;--*********************************************************************

⌨️ 快捷键说明

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