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

📄 multiio.vhd

📁 free hardware ip core about sparcv8,a soc cpu in vhdl
💻 VHD
字号:
----------------------------------------------------------------------  Package:        MultiIO--  File:           MultiIO.vhd--  Author:         Thomas Ameseder, Gleichmann Electronics--  Based on an orginal version by Manfred.Helzle@embedd.it--  --  Description:    APB Multiple digital I/O Types and Components----------------------------------------------------------------------  Functionality:--  8 LEDs,         active low or high, r/w--  dual 7Segment,  active low or high, w only--  8 DIL Switches, active low or high, r only--  8 Buttons,      active low or high, r only, with IRQ enables--------------------------------------------------------------------library ieee;use IEEE.STD_LOGIC_1164.all;library grlib;use grlib.amba.all;package MultiIO is  -- maximum number of switches and LEDs  -- specific number that is used can be defined via a generic  constant N_SWITCHMAX : integer := 8;  constant N_LEDMAX : integer := 8;  constant N_BUTTONS   : integer := 12;  -- number of push-buttons  -- data width of the words for the codec configuration interface  constant N_CODECBITS : integer := 16;  -- data width of the words for the i2s digital samples  constant N_CODECI2SBITS : integer := 16;  -- the number of register bits that are assigned to the LCD  -- the enable control bit is set automatically  -- this constant should comprise the number of data bits as well  -- as the RW and RS control bits  constant N_LCDBITS : integer := 10;  -- number of bits to hold information for the (single/dual)  -- seven segment display;  constant N_SEVSEGBITS : integer := 16;  -- number of expansion connector i/o bits  constant N_EXPBITS : integer := 40;  type asciichar_vect is array (16#30# to 16#46#) of character;  -- excerpt of the ASCII chart  constant ascii2char : asciichar_vect :=--  ---------------------------------------------  | 30   31   32   33   34   35   36   37   |--  -------------------------------------------    ('0', '1', '2', '3', '4', '5', '6', '7',--  ---------------------------------------------  | 38   39   3A   3B   3C   3D   3E   3F   |--  -------------------------------------------      '8', '9', ':', ';', '<', '=', '>', '?',--  ---------------------------------------------  | 40   41   42   43   44   45   46        |--  -------------------------------------------      '@', 'A', 'B', 'C', 'D', 'E', 'F');  ---------------------------------------------------------------------------------------  -- AUDIO CODEC  ---------------------------------------------------------------------------------------  subtype tReg is std_ulogic_vector(N_CODECBITS-1 downto 0);  type    tRegMap is array(10 downto 0) of tReg;  subtype tRegData is std_ulogic_vector(8 downto 0);  subtype tRegAddr is std_ulogic_vector(6 downto 0);  -- ADDRESS  constant cAddrLLI   : tRegAddr := "0000000";  -- Left line input channel volume control  constant cAddrRLI   : tRegAddr := "0000001";  -- Right line input channel volume control  constant cAddrLCH   : tRegAddr := "0000010";  -- Left channel headphone volume control  constant cAddrRCH   : tRegAddr := "0000011";  -- Right channel headphone volume control  constant cAddrAAP   : tRegAddr := "0000100";  -- Analog audio path control  constant cAddrDAP   : tRegAddr := "0000101";  -- Digital audio path control  constant cAddrPDC   : tRegAddr := "0000110";  -- Power down control  constant cAddrDAI   : tRegAddr := "0000111";  -- Digital audio interface format  constant cAddrSRC   : tRegAddr := "0001000";  -- Sample rate control  constant cAddrDIA   : tRegAddr := "0001001";  -- Digital interface activation  constant cAddrReset : tRegAddr := "0001111";  -- Reset register  -- Data  constant cDataLLI  : tRegData := "100011111";  constant cDataRLI  : tRegData := "100011111";  constant cDataLCH  : tRegData := "011111111";  constant cDataRCH  : tRegData := "011111111";  constant cDataAAP  : tRegData := "000011010";  constant cDataDAP  : tRegData := "000000000";  constant cDataPDC  : tRegData := "000001010";  constant cDataDAI  : tRegData := "000000010";  constant cDataSRC  : tRegData := "010000000";  constant cDataDIA  : tRegData := "000000001";  constant cdataInit : tRegData := "000000000";  -- Register  constant cRegLLI   : tReg := cAddrLLI & cDataLLI;  constant cRegRLI   : tReg := cAddrRLI & cDataRLI;  constant cRegLCH   : tReg := cAddrLCH & cDataLCH;  constant cRegRCH   : tReg := cAddrRCH & cDataRCH;  constant cRegAAP   : tReg := cAddrAAP & cDataAAP;  constant cRegDAP   : tReg := cAddrDAP & cDataDAP;  constant cRegPDC   : tReg := cAddrPDC & cDataPDC;  constant cRegDAI   : tReg := cAddrDAI & cDataDAI;  constant cRegSRC   : tReg := cAddrSRC & cDataSRC;  constant cRegDIA   : tReg := cAddrDIA & cDataDIA;  constant cRegReset : tReg := CAddrReset & cdataInit;  -- Register Map  constant cregmap : tRegMap := (    0  => cRegLLI,    1  => cRegRLI,    2  => cRegLCH,    3  => cRegRCH,    4  => cRegAAP,    5  => cRegDAP,    6  => cRegPDC,    7  => cRegDAI,    8  => cRegSRC,    9  => cRegDIA,    10 => cRegReset    );  ---------------------------------------------------------------------------------------  type MultiIO_in_type is    record      switch_in : std_logic_vector(N_SWITCHMAX-1 downto 0);  -- 8 DIL Switches      -- row input from the key matrix      row_in    : std_logic_vector(3 downto 0);      -- expansion connector input bits      exp_in    : std_logic_vector(N_EXPBITS/2-1 downto 0);    end record;    type MultiIO_out_type is    record      -- signals for the 7 segment display      -- data bits 0 to 7 of the LCD      led_a_out  : std_logic;      led_b_out  : std_logic;      led_c_out  : std_logic;      led_d_out  : std_logic;      led_e_out  : std_logic;      led_f_out  : std_logic;      led_g_out  : std_logic;      led_dp_out : std_logic;      -- common anode for enabling left and/or right digit      -- data bit 7 for the LCD      led_ca_out : std_logic_vector(1 downto 0);      -- LCD-only control signals      lcd_regsel : std_logic;      lcd_rw : std_logic;      lcd_enable : std_logic;      led_out : std_logic_vector(N_LEDMAX-1 downto 0);  -- 8 LEDs      -- column output to the key matrix      column_out : std_logic_vector(2 downto 0);      -- signals for the SPI audio codec      CODEC_MODE : std_ulogic;      CODEC_MCLK : std_ulogic;      CODEC_SCLK : std_ulogic;      CODEC_SDIN : std_ulogic;      CODEC_CS   : std_ulogic;      CODEC_DIN    :  std_ulogic;         -- I2S format serial data input to the sigma-delta stereo DAC      CODEC_BCLK   :  std_ulogic;         -- I2S serial-bit clock--  codec_dout   : in  std_ulogic;         -- I2S format serial data output from the sigma-delta stereo ADC      CODEC_LRCIN  :  std_ulogic;         -- I2S DAC-word clock signal      CODEC_LRCOUT :  std_ulogic;          -- I2S ADC-word clock signal      -- expansion connector output bits      exp_out    : std_logic_vector(N_EXPBITS/2-1 downto 0);    end record;    component MultiIO_APB    generic      (        pindex : integer := 0;          -- Leon-Index        paddr  : integer := 0;          -- Leon-Address        pmask  : integer := 16#FFF#;    -- Leon-Mask        pirq   : integer := 0;          -- Leon-IRQ        clk_freq_in : integer;          -- Leons clock to calculate timings        led7act   : std_logic := '0';   -- active level for 7Segment        ledact    : std_logic := '0';   -- active level for LED's        switchact : std_logic := '1';   -- active level for LED's        buttonact : std_logic := '1';   -- active level for LED's        n_switches  : integer := 8;   -- number of switches        n_leds      : integer := 8    -- number of LEDs        );    port (      rst_n       : in  std_ulogic;        -- global Reset, active low      clk         : in  std_ulogic;        -- global Clock      apbi        : in  apb_slv_in_type;   -- APB-Input      apbo        : out apb_slv_out_type;  -- APB-Output      MultiIO_in  : in  MultiIO_in_type;   -- MultIO-Inputs      MultiIO_out : out MultiIO_out_type   -- MultiIO-Outputs      );  end component;end package;

⌨️ 快捷键说明

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