biu.vhd

来自「X8086的VHDL源码」· VHDL 代码 · 共 367 行

VHD
367
字号
library IEEE;
use IEEE.STD_LOGIC_1164.all;
library synplify;
use synplify.attributes.all;
  
entity BIU is
	port( I_CLK        :  in std_logic;
          I_RST        :  in std_logic;
          I_RDY        :  in std_logic;
          I_MOD        :  in std_logic_vector( 1 downto 0 );
          I_BW         :  in std_logic;
          I_RM         :  in std_logic_vector( 2 downto 0 );
          I_CSR        :  in std_logic;
          I_SRSEL      :  in std_logic_vector( 1 downto 0 );
          I_EUDATA     :  in std_logic_vector(15 downto 0 );
          I_EARQ       :  in std_logic;
          I_RDQUE      :  in std_logic;
          I_RD         :  in std_logic;
          I_WR         :  in std_logic;
          I_WRIP       :  in std_logic;
          I_WRSR       :  in std_logic;
          I_EAPLUS2    :  in std_logic;
          I_2SR        :  in std_logic;
          I_OADR       :  in std_logic_vector(15 downto 0 );
          I_ADROUT     :  in std_logic;
          I_EUCDATA    :  in std_logic_vector(15 downto 0 );
          I_HLT        :  in std_logic;
          I_IO         :  in std_logic;
          I_MDTF       :  in std_logic;
          I_NFE        :  in std_logic;
          I_PLUSMOD    :  in std_logic_vector( 1 downto 0 );
          I_PLUSOP     :  in std_logic_vector( 2 downto 0 );
          I_QUERST     :  in std_logic;
          I_RDIR       :  in std_logic;
          I_EUCRST     :  in std_logic;
          I_2BIU       :  in std_logic;
          I_2EU        :  in std_logic;
          I_ORPCSR     :  in std_logic;
          I_ORPSRSEL   :  in std_logic_vector( 1 downto 0 );
          I_RDSR       :  in std_logic;
          I_WRIR       :  in std_logic;
          I_WRPLUS     :  in std_logic;
          I_EXTBUS     :  in std_logic_vector(15 downto 0 );
          O_CS_V       : out std_logic_vector(15 downto 0 );
          O_DS_V       : out std_logic_vector(15 downto 0 );
          O_ES_V       : out std_logic_vector(15 downto 0 );
          O_SS_V       : out std_logic_vector(15 downto 0 );
          O_BCUSTATE_V : out std_logic_vector( 2 downto 0 );
		  O_DCSTATE_V  : out std_logic_vector( 3 downto 0 );
          O_DEN_N      : out std_logic;
          O_DTR        : out std_logic;
          O_QUEEMPTY   : out std_logic;
          O_QUEFULL    : out std_logic;
		  O_ALE        : out std_logic;
          O_BHE        : out std_logic;
          O_NOP_V      : out std_logic;
          O_A19A16     : out std_logic_vector( 3 downto 0 );
          O_EXTBUS     : out std_logic_vector(15 downto 0 );
          O_ENDRC      : out std_logic;
          O_ENDWC      : out std_logic;
          O_IO         : out std_logic;
          O_BDATA      : out std_logic_vector( 7 downto 0 );
          O_BIUDATA    : out std_logic_vector(15 downto 0 );
          O_NEXTIP     : out std_logic_vector(15 downto 0 );
          O_RD_N       : out std_logic;
          O_WR_N       : out std_logic 
		  );
end BIU;
  
architecture RTL of BIU is
 
signal FIFO_FE        : std_logic;
signal ADDADR_ADR20   : std_logic_vector(19 downto 0 );
signal DC_RCF         : std_logic;
signal DC_DATA2EU     : std_logic_vector(15 downto 0 );
signal DC_DATA2QUE    : std_logic_vector(15 downto 0 );
signal DC_WCF         : std_logic;
signal DC_ODD         : std_logic;
signal DC_QUEF        : std_logic;
signal DTMPX_DATA2MEM : std_logic_vector(15 downto 0 );
signal DTMPX_DATA2SR  : std_logic_vector(15 downto 0 );
signal FIFO_WRQUE     : std_logic;
signal IP_IPF         : std_logic;
signal IPIRMPX_DATA   : std_logic_vector(15 downto 0 );
signal IR_IRF         : std_logic;
signal IR_DATA        : std_logic_vector(15 downto 0 );
signal EUSRMPX_DATA   : std_logic_vector(15 downto 0 );
signal REGST_DATA     : std_logic_vector(15 downto 0 );

component ADDADR
	generic( SRW   : integer;
	         IRW   : integer;
			 PADRW : integer
			 );
    port( I_SREGDATA :  in std_logic_vector(SRW-1 downto 0); --input segment data
          I_IPIRDATA :  in std_logic_vector(IRW-1 downto 0); --input IP or IR 
		  I_EAPLUS2  :  in std_logic ; -- '1' => EA+2	
		  O_PADR     : out std_logic_vector(PADRW-1 downto 0)  --OUT Adress(20bit)
		   );                    		  
end component;

component BCU
	port( I_CLK        :  in std_logic;
          I_RST        :  in std_logic;	
          I_RDY        :  in std_logic;	  
          I_RD         :  in std_logic;
          I_BW         :  in std_logic;
          I_WR         :  in std_logic;
          I_ADROUT     :  in std_logic;
          I_IO         :  in std_logic;
          I_EUCRST     :  in std_logic;
          I_FE         :  in std_logic;
          I_IPF        :  in std_logic;
          I_IRF        :  in std_logic;
          I_OADR       :  in std_logic_vector(15 downto 0 );
          I_PADR       :  in std_logic_vector(19 downto 0 );
          I_DATA2MEM   :  in std_logic_vector(15 downto 0 );
          I_EXTBUS     :  in std_logic_vector(15 downto 0 );
          O_ENDRC      : out std_logic;
          O_ENDWC      : out std_logic;
          O_IO         : out std_logic;
          O_ODD        : out std_logic;
          O_QUEF       : out std_logic;
          O_BHE        : out std_logic;
          O_DATA2EU    : out std_logic_vector(15 downto 0 );
          O_DATA2QUE   : out std_logic_vector(15 downto 0 );
          O_DEN_N      : out std_logic;
          O_DTR        : out std_logic;
          O_RD_N       : out std_logic;
		  O_ALE        : out std_logic;
          O_WR_N       : out std_logic;
          O_BCUSTATE_V : out std_logic_vector( 2 downto 0 );
		  O_DCSTATE_V  : out std_logic_vector( 3 downto 0 );
          O_A19A16     : out std_logic_vector( 3 downto 0 );
          O_EXTBUS     : out std_logic_vector(15 downto 0 )
		  ); 
end component;
						
component FETCH
	port( I_CLK      :  in std_logic;
          I_RST      :  in std_logic;
          I_RDQUE    :  in std_logic;
          I_DATA     :  in std_logic_vector(15 downto 0 );
          I_ODD      :  in std_logic;
          I_QUEF     :  in std_logic;
          I_QUERST   :  in std_logic;
          I_EUCRST   :  in std_logic;
          O_BDATA    : out std_logic_vector(7 downto 0 );
          O_FE       : out std_logic;
          O_CQUEF    : out std_logic;
          O_QUEEMPTY : out std_logic;
          O_QUEFULL  : out std_logic
          ); 
end component;

component SRIR
	port( I_CLK      :  in std_logic;
          I_RST      :  in std_logic;
          I_MOD      :  in std_logic_vector( 1 downto 0 );
          I_RM       :  in std_logic_vector( 2 downto 0 );
          I_NFE      :  in std_logic;
          I_RD       :  in std_logic;
          I_WR       :  in std_logic;
          I_WRIP     :  in std_logic;
          I_WRIR     :  in std_logic;
          I_RDSR     :  in std_logic;
          I_WRSR     :  in std_logic;
          I_WRPLUS   :  in std_logic;
          I_HLT      :  in std_logic;
          I_MDTF     :  in std_logic;
          I_PLUSMOD  :  in std_logic_vector( 1 downto 0 );
          I_PLUSOP   :  in std_logic_vector( 2 downto 0 );
          I_EUCRST   :  in std_logic;
          I_CSR      :  in std_logic;
          I_ORPCSR   :  in std_logic;
          I_SRSEL    :  in std_logic_vector( 1 downto 0 );
          I_ORPSRSEL :  in std_logic_vector( 1 downto 0 );
          I_EARQ     :  in std_logic;
          I_WRQUE    :  in std_logic;
          I_FE       :  in std_logic;
          I_ENDRC    :  in std_logic;
          I_ENDWC    :  in std_logic;
          I_EUDATA   :  in std_logic_vector(15 downto 0 );
          I_BIUDATA  :  in std_logic_vector(15 downto 0 );
          O_NOP_V    : out std_logic;
          O_IPF      : out std_logic;
          O_IRF      : out std_logic;
          O_IRDATA   : out std_logic_vector(15 downto 0 );
          O_IPIRDATA : out std_logic_vector(15 downto 0 );
          O_NEXTIP   : out std_logic_vector(15 downto 0 );
          O_SREGDATA : out std_logic_vector(15 downto 0 );
          O_CS_V     : out std_logic_vector(15 downto 0 );
          O_DS_V     : out std_logic_vector(15 downto 0 );
          O_ES_V     : out std_logic_vector(15 downto 0 );
          O_SS_V     : out std_logic_vector(15 downto 0 )
		  ); 
end component;
 
component DTMPX
    port( I_EUDATA   :  in std_logic_vector(15 downto 0 ); --DATA from EA
	      I_WRIP     :  in std_logic; --write signal to IP
		  I_WRIR     :  in std_logic; --write signal to IR
		  I_WRSR     :  in std_logic; --write signal to Segment REGISTAR
		  I_EARQ     :  in std_logic; --EA out => '1'
		  I_EUCDATA  :  in std_logic_vector(15 downto 0 ); --EUC DATA
		  I_2BIU     :  in std_logic; --EUC DATA to BIU signal
		  I_2SR      :  in std_logic; --EUC DATA(address) to Segment Registar
          O_DATA2SR  : out std_logic_vector(15 downto 0 ); --OUTPUT DATA to REGISTAR
          O_DATA2MEM : out std_logic_vector(15 downto 0 ) --OUTPUT DATA to MEMORY
		  );
end component;

component EUSRMPX
    port( I_SREGDATA :  in std_logic_vector(15 downto 0 ); --segment register data
	      I_BCUDATA  :  in std_logic_vector(15 downto 0 ); --BIU data
		  I_IRDATA   :  in std_logic_vector(15 downto 0 ); --IR data
		  I_EUCDATA  :  in std_logic_vector(15 downto 0 ); --EUC data
		  I_2EU      :  in std_logic; --Set EUC data signal 
		  I_RDIR     :  in std_logic; --read IR signal
          I_RDSR     :  in std_logic; --segment register read signal
          O_BIUDATA  : out std_logic_vector(15 downto 0 ) --out data to EU
		  ); 
end component; 

begin
 
	ADDADR_BIU : ADDADR
	generic map(
		SRW => 16,
		IRW => 16,
		PADRW => 20
		)
    port map( 
		I_SREGDATA => REGST_DATA,
        I_IPIRDATA => IPIRMPX_DATA,
		I_EAPLUS2 => I_EAPLUS2,
		O_PADR => ADDADR_ADR20
		);                    		  
 
	T_BCU_BIU : BCU
	port map( 
		I_CLK => I_CLK,
        I_RST => I_RST,
        I_RDY => I_RDY,
        I_RD => I_RD,
        I_BW => I_BW,
        I_WR => I_WR,
        I_ADROUT => I_ADROUT,
        I_IO => I_IO,
        I_EUCRST => I_EUCRST,
        I_FE => FIFO_FE,
        I_IPF => IP_IPF,
        I_IRF => IR_IRF,
        I_OADR => I_OADR,
        I_PADR => ADDADR_ADR20,
        I_DATA2MEM => DTMPX_DATA2MEM,
        I_EXTBUS => I_EXTBUS,
        O_ENDRC => DC_RCF,
        O_ENDWC => DC_WCF,
        O_IO => O_IO,
        O_ODD => DC_ODD,
        O_QUEF => DC_QUEF,
        O_BHE => O_BHE,
        O_DATA2EU => DC_DATA2EU,
        O_DATA2QUE => DC_DATA2QUE,
        O_DEN_N => O_DEN_N,
        O_DTR => O_DTR,
        O_RD_N => O_RD_N,
		O_ALE => O_ALE,
        O_WR_N => O_WR_N,
        O_BCUSTATE_V => O_BCUSTATE_V,
		O_DCSTATE_V => O_DCSTATE_V,
        O_A19A16 => O_A19A16,
        O_EXTBUS => O_EXTBUS
		); 

	T_FETCH_BIU : FETCH
	port map ( 
		I_CLK => I_CLK,
        I_RST => I_RST,
        I_RDQUE => I_RDQUE,  
        I_DATA => DC_DATA2QUE,
        I_ODD => DC_ODD,
        I_QUEF => DC_QUEF,
        I_QUERST => I_QUERST,
        I_EUCRST => I_EUCRST,
        O_BDATA => O_BDATA,
        O_FE => FIFO_FE,
        O_CQUEF => FIFO_WRQUE,
        O_QUEEMPTY => O_QUEEMPTY,
        O_QUEFULL => O_QUEFULL
        ); 

	SRIR_BIU : SRIR
	port map( 
		I_CLK => I_CLK,
        I_RST => I_RST,
        I_MOD => I_MOD,
        I_RM => I_RM,
        I_NFE => I_NFE,
        I_RD => I_RD,
        I_WR => I_WR,
        I_WRIP => I_WRIP,
        I_WRIR => I_WRIR,
        I_RDSR => I_RDSR,
        I_WRSR => I_WRSR,
        I_WRPLUS => I_WRPLUS,
        I_HLT => I_HLT,
        I_MDTF => I_MDTF,
        I_PLUSMOD => I_PLUSMOD,
        I_PLUSOP => I_PLUSOP,
        I_EUCRST => I_EUCRST,
        I_CSR => I_CSR,
        I_ORPCSR => I_ORPCSR,
        I_SRSEL => I_SRSEL,
        I_ORPSRSEL => I_ORPSRSEL,
        I_EARQ => I_EARQ,
        I_WRQUE => FIFO_WRQUE,
        I_FE => FIFO_FE,
        I_ENDRC => DC_RCF,
        I_ENDWC => DC_WCF,
        I_EUDATA => DTMPX_DATA2SR,
        I_BIUDATA => EUSRMPX_DATA,
        O_NOP_V => O_NOP_V,
        O_IPF => IP_IPF,
        O_IRF => IR_IRF,
        O_IRDATA => IR_DATA,
        O_IPIRDATA => IPIRMPX_DATA,
        O_NEXTIP => O_NEXTIP,
        O_SREGDATA => REGST_DATA,
        O_CS_V => O_CS_V,
        O_DS_V => O_DS_V,
        O_ES_V => O_ES_V,
        O_SS_V => O_SS_V
		); 

	DTMPX_BIU : DTMPX
    port map( 
		I_EUDATA => I_EUDATA,
	    I_WRIP => I_WRIP,
		I_WRIR => I_WRIR,
		I_WRSR => I_WRSR,
		I_EARQ => I_EARQ,
		I_EUCDATA => I_EUCDATA,
		I_2BIU => I_2BIU,
		I_2SR => I_2SR,
        O_DATA2SR => DTMPX_DATA2SR,
        O_DATA2MEM => DTMPX_DATA2MEM
		);
 
	EUSRMPX_BIU : EUSRMPX
    port map( 
		I_SREGDATA => REGST_DATA,  
	    I_BCUDATA => DC_DATA2EU,
		I_IRDATA => IR_DATA,
		I_EUCDATA => I_EUCDATA,
		I_2EU => I_2EU,
		I_RDIR => I_RDIR,
        I_RDSR => I_RDSR,
        O_BIUDATA => EUSRMPX_DATA
		); 

	O_BIUDATA  <= EUSRMPX_DATA;
	O_ENDRC    <= DC_RCF;
	O_ENDWC    <= DC_WCF;

end RTL;

⌨️ 快捷键说明

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