URL
https://opencores.org/ocsvn/pcie_ds_dma/pcie_ds_dma/trunk
Subversion Repositories pcie_ds_dma
[/] [pcie_ds_dma/] [trunk/] [core/] [adm/] [dio64/] [trd_admdio64_out_v4.vhd] - Rev 40
Go to most recent revision | Compare with Previous | Blame | View Log
--------------------------------------------------------------------------------------------------- -- -- Title : trd_admdio64_out_v1 -- Author : Ilya Ivanov -- Company : Instrumental System -- -- Version : 1.3 -- --------------------------------------------------------------------------------------------------- -- -- Description : Тетрада цифрового ввода. -- Модификация 1 - Используется FIFO 1024x64 -- --------------------------------------------------------------------------------------------------- -- -- Версия 1.3 18.07.2007 Dmitry Smekhov -- Добавлены выходы cmd_data_out2, start, bx_clk -- Убран вход b_clk -- --------------------------------------------------------------------------------------------------- -- -- Версия 1.2 18.08.2006 Dmitry Smekhov -- Используется cl_fifo1024x64_v2 -- --------------------------------------------------------------------------------------------------- -- -- Версия 1.1 07.09.2005 Dmitry Smekhov -- Добавлен выход fifo_cnt - число слов в FIFO -- и выходы регистров MODE0, MODE1, MODE2, MODE3 -- --------------------------------------------------------------------------------------------------- library ieee; use ieee.std_logic_1164.all; use IEEE.std_logic_unsigned.all ; library work; use work.cl_chn_v3_pkg.all; use work.adm2_pkg.all; package trd_admdio64_out_v4_pkg is constant ID_DIO_OUT : std_logic_vector( 15 downto 0 ):=x"0012"; -- идентификатор тетрады constant ID_MODE_DIO_OUT : std_logic_vector( 15 downto 0 ):=x"0001"; -- модификатор тетрады constant VER_DIO_OUT : std_logic_vector( 15 downto 0 ):=x"0103"; -- версия тетрады constant RES_DIO_OUT : std_logic_vector( 15 downto 0 ):=x"0020"; -- ресурсы тетрады constant FIFO_DIO_OUT : std_logic_vector( 15 downto 0 ):=x"0400"; -- размер FIFO constant FTYPE_DIO_OUT : std_logic_vector( 15 downto 0 ):=x"0040"; -- ширина FIFO component trd_admdio64_out_v4 is port( -- GLOBAL reset : in std_logic; -- 0 - сброс clk : in std_logic; -- тактовая частота -- Управление тетрадой data_in : in std_logic_vector( 63 downto 0 ); -- шина данных DATA cmd_data_in : in std_logic_vector( 15 downto 0 ); -- шина данных CMD_DATA cmd : in bl_cmd; -- сигналы управления cmd_data_out : out std_logic_vector( 15 downto 0 ); -- выходы регистров, через буфер cmd_data_out2 : out std_logic_vector( 15 downto 0 ); -- выходы регистров, без буфера bx_irq : out std_logic; -- 1 - прерывание от тетрады bx_drq : out bl_drq; -- управление DMA mode0 : out std_logic_vector( 15 downto 0 ); -- регистр MODE0 mode1 : out std_logic_vector( 15 downto 0 ); -- регистр MODE1 mode2 : out std_logic_vector( 15 downto 0 ); -- регистр MODE2 mode3 : out std_logic_vector( 15 downto 0 ); -- регистр MODE3 fifo_rst : out std_logic; -- 0 - сброс FIFO start : out std_logic; -- 1 - разрешение работы (MODE0[5]) -- Чтение из FIFO data_out : out std_logic_vector(63 downto 0); -- шина данных FIFO data_cs : in std_logic; -- 0 - чтение данных flag_rd : out bl_fifo_flag; -- флаги FIFO clk_rd : in std_logic; -- тактовая частота чтения данных fifo_cnt : out std_logic_vector( 12 downto 0 ); -- число слов в FIFO -- Тестовые выводы -- test : out std_logic_vector(7 downto 0) -------------------------------------------- ); end component; end trd_admdio64_out_v4_pkg; library ieee; use ieee.std_logic_1164.all; use IEEE.std_logic_unsigned.all ; library unisim; use unisim.vcomponents.all; library work; use work.cl_chn_v4_pkg.all; use work.adm2_pkg.all; use work.cl_fifo1024x65_v5_pkg.all; entity trd_admdio64_out_v4 is port( -- GLOBAL reset : in std_logic; -- 0 - сброс clk : in std_logic; -- тактовая частота -- Управление тетрадой data_in : in std_logic_vector( 63 downto 0 ); -- шина данных DATA cmd_data_in : in std_logic_vector( 15 downto 0 ); -- шина данных CMD_DATA cmd : in bl_cmd; -- сигналы управления cmd_data_out : out std_logic_vector( 15 downto 0 ); -- выходы регистров, через буфер cmd_data_out2 : out std_logic_vector( 15 downto 0 ); -- выходы регистров, без буфера bx_irq : out std_logic; -- 1 - прерывание от тетрады bx_drq : out bl_drq; -- управление DMA mode0 : out std_logic_vector( 15 downto 0 ); -- регистр MODE0 mode1 : out std_logic_vector( 15 downto 0 ); -- регистр MODE1 mode2 : out std_logic_vector( 15 downto 0 ); -- регистр MODE2 mode3 : out std_logic_vector( 15 downto 0 ); -- регистр MODE3 fifo_rst : out std_logic; -- 0 - сброс FIFO start : out std_logic; -- 1 - разрешение работы (MODE0[5]) -- Чтение из FIFO data_out : out std_logic_vector(63 downto 0); -- шина данных FIFO data_cs : in std_logic; -- 0 - чтение данных flag_rd : out bl_fifo_flag; -- флаги FIFO clk_rd : in std_logic; -- тактовая частота чтения данных fifo_cnt : out std_logic_vector( 12 downto 0 ); -- число слов в FIFO -- Тестовые выводы -- test : out std_logic_vector(7 downto 0) -------------------------------------------- ); end trd_admdio64_out_v4; architecture trd_admdio64_out_v4 of trd_admdio64_out_v4 is component ctrl_start_v3 is port( reset : in std_logic; -- 0 - сброс mode0 : in std_logic_vector( 15 downto 0 ); -- регистр MODE0 stmode : in std_logic_vector( 15 downto 0 ); -- регистр STMODE fmode : in std_logic_vector( 5 downto 0 ); -- регистр FMODE fdiv : in std_logic_vector( 15 downto 0 ); -- регистр FDIV fdiv_we : in std_logic; -- 1 - запись в регистр FDIV cnt0 : in std_logic_vector( 15 downto 0 ); -- счётчик начальной задержки cnt1 : in std_logic_vector( 15 downto 0 ); -- счётчик принимаемых слов cnt2 : in std_logic_vector( 15 downto 0 ); -- счётчик пропускаемых слов b_clk : in std_logic_vector( 15 downto 0 ); -- входы тактовой частоты b_start : in std_logic_vector( 15 downto 0 ); -- входы сигнала START bx_clk : out std_logic; -- выход тактовой частоты, глобальный bi_clk : out std_logic; -- выход тактовой частота, опережает bx_clk bx_start : out std_logic; -- выход сигнала start синхронный с bx_clk bx_start_a : out std_logic; -- асинхронный выход сигнала start bx_start_sync : out std_logic; -- импульс синхронизации goe0 : out std_logic; -- включение генератора 60MHz goe1 : out std_logic -- включение генератора 50MHz ); end component; component cl_fifo1024x64_v3 is port( -- сброс reset : in std_logic; -- 0 - сброс -- запись clk_wr : in std_logic; -- тактовая частота data_in : in std_logic_vector(63 downto 0); -- данные data_en : in std_logic; -- 1 - запись в fifo flag_wr : out bl_fifo_flag; -- флаги fifo, синхронно с clk_wr cnt_wr : out std_logic_vector( 9 downto 0 ); -- счётчик слов -- чтение clk_rd : in std_logic; -- тактовая частота data_out : out std_logic_vector(63 downto 0); -- данные data_cs : in std_logic; -- 0 - чтение из fifo flag_rd : out bl_fifo_flag; -- флаги fifo, синхронно с clk_rd cnt_rd : out std_logic_vector( 9 downto 0 ); -- счётчик слов cnt_pae : in std_logic_vector(12 downto 0); -- номер слова FIFO при котором оно еще почти пустое cnt_paf : in std_logic_vector(12 downto 0); -- номер слова FIFO при котором оно почти полное rt_mode : in std_logic -- 1 - retransmit ); end component; signal rst,fifo_rst0 : std_logic; signal flag_wr : bl_fifo_flag; signal c_mode0 : std_logic_vector(15 downto 0); signal fdiv,stmode,fmode : std_logic_vector(15 downto 0); signal status : std_logic_vector(15 downto 0); signal cnt0,cnt1,cnt2 : std_logic_vector(15 downto 0); signal fdiv_we : std_logic; signal clk_trd,start_trd : std_logic; signal clk_d,cw,cw0 : std_logic; signal cnt_wr : std_logic_vector( 9 downto 0 ); signal cnt_rd : std_logic_vector( 9 downto 0 ); signal sflag_pae : std_logic_vector( 15 downto 0 ); signal sflag_paf : std_logic_vector( 15 downto 0 ); begin xstatus: ctrl_buft16 port map( t => cmd.status_cs, i => status, o => cmd_data_out ); cmd_data_out2 <= status; chn: cl_chn_v4 generic map( -- 2 - out - для тетрады вывода -- 1 - in - для тетрады ввода chn_type => 2 ) port map ( reset => reset, clk => clk, -- Флаги cmd_rdy => '1', rdy => '1', --flag_wr.hf, fifo_flag => flag_wr, --st9 => ready, -- Тетрада data_in => cmd_data_in, cmd => cmd, bx_irq => bx_irq, bx_drq => bx_drq, status => status, -- Управление mode0 => c_mode0, mode1 => mode1, mode2 => mode2, mode3 => mode3, sflag_pae => sflag_pae, sflag_paf => sflag_paf, fdiv => fdiv, fdiv_we => fdiv_we, fmode => fmode, stmode => stmode, rst => rst, fifo_rst => fifo_rst0 ); x_fifo: cl_fifo1024x65_v5 port map( -- сброс reset => fifo_rst0, -- запись clk_wr => clk, data_in => data_in, data_en => cmd.data_we, flag_wr => flag_wr, --cnt_wr => cnt_wr, -- чтение clk_rd => clk_rd, data_out => data_out, data_cs => data_cs, flag_rd => flag_rd --cnt_rd => cnt_rd ); fifo_rst<=fifo_rst0; fifo_cnt( 9 downto 0 ) <= cnt_rd; fifo_cnt( 12 downto 10 ) <= (others=>'0'); mode0 <= c_mode0; start <= c_mode0(5); end trd_admdio64_out_v4;
Go to most recent revision | Compare with Previous | Blame | View Log