URL
https://opencores.org/ocsvn/pcie_ds_dma/pcie_ds_dma/trunk
Subversion Repositories pcie_ds_dma
[/] [pcie_ds_dma/] [trunk/] [core/] [ds_dma64/] [pcie_src/] [components/] [pcie_core/] [pcie_core64_m7.vhd] - Rev 2
Compare with Previous | Blame | View Log
------------------------------------------------------------------------------- -- -- Title : pcie_core64_m7 -- Author : Dmitry Smekhov -- Company : Instrumental Systems -- E-mail : dsmv@insys.ru -- -- Version : 1.0 -- ------------------------------------------------------------------------------- -- -- Description : Контроллер PCI Express -- Модификация 7 - Spartan-6 PCI Express v1.1 x1 -- Шина LC_BUS 64 разряда -- Блок PE_MAIN -- ------------------------------------------------------------------------------- library ieee; use ieee.std_logic_1164.all; package pcie_core64_m7_pkg is --! контроллер PCI-Express component pcie_core64_m7 is generic ( Device_ID : in std_logic_vector( 15 downto 0 ):=x"0000"; -- идентификатор модуля Revision : in std_logic_vector( 15 downto 0 ):=x"0000"; -- версия модуля PLD_VER : in std_logic_vector( 15 downto 0 ):=x"0000"; -- версия ПЛИС is_simulation : integer:=0 --! 0 - синтез, 1 - моделирование ); port ( ---- PCI-Express ---- txp : out std_logic_vector( 0 downto 0 ); txn : out std_logic_vector( 0 downto 0 ); rxp : in std_logic_vector( 0 downto 0 ); rxn : in std_logic_vector( 0 downto 0 ); mgt125 : in std_logic; -- тактовая частота 125 MHz от PCI_Express perst : in std_logic; -- 0 - сброс px : out std_logic_vector( 7 downto 0 ); --! контрольные точки pcie_lstatus : out std_logic_vector( 15 downto 0 ); -- регистр LSTATUS pcie_link_up : out std_logic; -- 0 - завершена инициализация PCI-Express ---- Локальная шина ---- clk250_out : out std_logic; --! тактовая частота 250 MHz reset_out : out std_logic; --! 0 - сброс dcm_rstp : out std_logic; --! 1 - сброс DCM 266 МГц clk : in std_logic; --! тактовая частота локальной шины - 266 МГц clk_lock : in std_logic; --! 1 - захват частоты ---- BAR1 ---- lc_adr : out std_logic_vector( 31 downto 0 ); --! шина адреса lc_host_data : out std_logic_vector( 63 downto 0 ); --! шина данных - выход lc_data : in std_logic_vector( 63 downto 0 ); --! шина данных - вход lc_wr : out std_logic; --! 1 - запись lc_rd : out std_logic; --! 1 - чтение, данные должны быть на шестой такт после rd lc_dma_req : in std_logic_vector( 1 downto 0 ); --! 1 - запрос DMA lc_irq : in std_logic --! 1 - запрос прерывания ); end component; end package; library ieee; use ieee.std_logic_1164.all; use work.core64_type_pkg.all; use work.pcie_core64_m6_pkg.all; use work.core64_pb_transaction_pkg.all; use work.block_pe_main_pkg.all; --! контроллер PCI-Express entity pcie_core64_m7 is generic ( Device_ID : in std_logic_vector( 15 downto 0 ):=x"0000"; -- идентификатор модуля Revision : in std_logic_vector( 15 downto 0 ):=x"0000"; -- версия модуля PLD_VER : in std_logic_vector( 15 downto 0 ):=x"0000"; -- версия ПЛИС is_simulation : integer:=0 --! 0 - синтез, 1 - моделирование ); port ( ---- PCI-Express ---- txp : out std_logic_vector( 0 downto 0 ); txn : out std_logic_vector( 0 downto 0 ); rxp : in std_logic_vector( 0 downto 0 ); rxn : in std_logic_vector( 0 downto 0 ); mgt125 : in std_logic; -- тактовая частота 125 MHz от PCI_Express perst : in std_logic; -- 0 - сброс px : out std_logic_vector( 7 downto 0 ); --! контрольные точки pcie_lstatus : out std_logic_vector( 15 downto 0 ); -- регистр LSTATUS pcie_link_up : out std_logic; -- 0 - завершена инициализация PCI-Express ---- Локальная шина ---- clk250_out : out std_logic; --! тактовая частота 250 MHz reset_out : out std_logic; --! 0 - сброс dcm_rstp : out std_logic; --! 1 - сброс DCM 266 МГц clk : in std_logic; --! тактовая частота локальной шины - 266 МГц clk_lock : in std_logic; --! 1 - захват частота ---- BAR1 ---- lc_adr : out std_logic_vector( 31 downto 0 ); --! шина адреса lc_host_data : out std_logic_vector( 63 downto 0 ); --! шина данных - выход lc_data : in std_logic_vector( 63 downto 0 ); --! шина данных - вход lc_wr : out std_logic; --! 1 - запись lc_rd : out std_logic; --! 1 - чтение, данные должны быть на четвёртый такт после rd lc_dma_req : in std_logic_vector( 1 downto 0 ); --! 1 - запрос DMA lc_irq : in std_logic --! 1 - запрос прерывания ); end pcie_core64_m7; architecture pcie_core64_m7 of pcie_core64_m7 is ---- BAR0 - блоки управления ---- signal bp_host_data : std_logic_vector( 31 downto 0 ); --! шина данных - выход signal bp_data : std_logic_vector( 31 downto 0 ); --! шина данных - вход signal bp_adr : std_logic_vector( 19 downto 0 ); --! адрес регистра внутри блока signal bp_we : std_logic_vector( 3 downto 0 ); --! 1 - запись в регистры signal bp_rd : std_logic_vector( 3 downto 0 ); --! 1 - чтение из регистров блока signal bp_sel : std_logic_vector( 1 downto 0 ); --! номер блока для чтения signal bp_reg_we : std_logic; --! 1 - запись в регистр по адресам 0x100000 - 0x1FFFFF signal bp_reg_rd : std_logic; --! 1 - чтение из регистра по адресам 0x100000 - 0x1FFFFF signal bp_irq : std_logic; --! 1 - запрос прерывания signal clk250 : std_logic; signal reset : std_logic; signal pb_master : type_pb_master; --! запрос signal pb_slave : type_pb_slave; --! ответ signal pb_reset : std_logic; signal brd_mode : std_logic_vector( 15 downto 0 ); signal bp0_data : std_logic_vector( 31 downto 0 ); begin core: pcie_core64_m6 generic map( is_simulation => is_simulation --! 0 - синтез, 1 - моделирование ) port map( ---- PCI-Express ---- txp => txp, txn => txn, rxp => rxp, rxn => rxn, mgt125 => mgt125, perst => perst, px => px, pcie_lstatus => pcie_lstatus, pcie_link_up => pcie_link_up, ---- Локальная шина ---- clk_out => clk250, reset_out => reset, dcm_rstp => dcm_rstp, ---- BAR1 ---- aclk => clk, aclk_lock => clk_lock, pb_master => pb_master, pb_slave => pb_slave, ---- BAR0 - блоки управления ---- bp_host_data => bp_host_data, bp_data => bp_data, bp_adr => bp_adr, bp_we => bp_we, bp_rd => bp_rd, bp_sel => bp_sel, bp_reg_we => bp_reg_we, bp_reg_rd => bp_reg_rd, bp_irq => bp_irq ); reset_out <= reset; clk250_out <= clk250; bp_data <= bp0_data when bp_sel="00" else (others=>'0'); tz: core64_pb_transaction port map( reset => reset, --! 0 - сброс clk => clk, --! тактовая частота локальной шины - 266 МГц ---- BAR1 ---- pb_master => pb_master, --! запрос pb_slave => pb_slave, --! ответ ---- локальная шина ----- lc_adr => lc_adr, lc_host_data => lc_host_data, lc_data => lc_data, lc_wr => lc_wr, lc_rd => lc_rd, lc_dma_req => lc_dma_req, lc_irq => lc_irq ); main: block_pe_main generic map( Device_ID => Device_ID, -- идентификатор модуля Revision => Revision, -- версия модуля PLD_VER => PLD_VER, -- версия ПЛИС BLOCK_CNT => x"0008" -- число блоков управления ) port map( ---- Global ---- reset_hr1 => reset, -- 0 - сброс clk => clk250, -- Тактовая частота DSP pb_reset => pb_reset, -- 0 - сброс ведомой ПЛИС ---- HOST ---- bl_adr => bp_adr( 4 downto 0 ), -- адрес bl_data_in => bp_host_data, -- данные bl_data_out => bp0_data, -- данные bl_data_we => bp_we(0), -- 1 - запись данных ---- Управление ---- brd_mode => brd_mode -- регистр BRD_MODE ); end pcie_core64_m7;