⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 addr_combo_rtl.vhd

📁 design compile synthesis user guide
💻 VHD
字号:
------------------------------------------------------------------- Combinational address block for RTL Analyzer tutorial-- dependant on DATAPATH package------------------------------------------------------------------- Revision 1.3  1998/06/08  dannyb-- format---- Revision 1.2  1997/03/06  baldrik-- use datatypes---- Revision 1.1  1997/02/08  baldrik-- Initial revision-----------------------------------------------------------------library IEEE;use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;use IEEE.std_logic_unsigned.all;use work.DATAPATH.all;architecture rtl of addr_combo isconstant ADDRESS_width : natural := 32;subtype ADDRESS_TYPE is std_logic_vector(ADDRESS_width-1 downto 0);signal  ADDRESS          : ADDRESS_TYPE;signal  TRANSFER_COUNT   : CNT_TYPE;signal  WORD_COUNT_read  : CNT_TYPE;signal  WORD_COUNT_write : CNT_TYPE;signal  WORD_COUNT       : CNT_TYPE;signal  POINTER          : POINT_TYPE;signal  LOW              : std_logic_vector(3 downto 0);signal  DOUT_I           : ADDRESS_TYPE;begin  ADDR_PROC:  process (BASE, INST_OFFSET, READ_OFFSET, WRITE_OFFSET, ENABLE_SELECT, LOW,	    WRITE_POINTER, READ_POINTER)   begin    case ENABLE_SELECT is      when "001" =>	LOW                  <= INST_OFFSET(15 downto 12);	ADDRESS(11 downto 0) <= INST_OFFSET(11 downto 0);	       when "101" =>	LOW                  <= WRITE_OFFSET(15 downto 12);	ADDRESS(11 downto 0) <= WRITE_OFFSET(11 downto 0);	       when Others =>	LOW                  <= READ_OFFSET(15 downto 12);	ADDRESS(11 downto 0) <= READ_OFFSET(11 downto 0);    end case;	    ADDRESS(31 Downto 12) <= BASE + LOW;    if ENABLE_SELECT="111" then       POINTER  <= WRITE_POINTER;    else       POINTER  <= READ_POINTER;    end if;  end process ADDR_PROC;  WORD_COUNT <= datapath( POINTER => POINTER, ADDR => ADDR);  TCOUNT: process(WORD_COUNT, ENABLE_SELECT)   begin        if ((ENABLE_SELECT="001")       or (ENABLE_SELECT="010")       or (ENABLE_SELECT="100")) then       TRANSFER_COUNT(10 downto 0) <= "00000000001";    else       TRANSFER_COUNT(10 downto 0) <= WORD_COUNT;    end if;  end process TCOUNT;  SEL_DOUT: process(ADDRESS, TRANSFER_COUNT, DOUT_SELECT )   begin    if (DOUT_SELECT='1') then      DOUT_I <= ADDRESS;    else      DOUT_I <= (others => '0');      DOUT_I(10 downto 0) <= TRANSFER_COUNT;    end if;  end process SEL_DOUT;  -- tristate DOUT  DOUT <= DOUT_I when BUS_ENABLE = '1'          else (others => 'Z');end rtl;

⌨️ 快捷键说明

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