URL
https://opencores.org/ocsvn/pcie_ds_dma/pcie_ds_dma/trunk
Subversion Repositories pcie_ds_dma
[/] [pcie_ds_dma/] [trunk/] [core/] [adm/] [trd_test_ctrl/] [ctrl_freq.vhd] - Rev 43
Go to most recent revision | Compare with Previous | Blame | View Log
------------------------------------------------------------------------------- -- -- Title : ctrl_freq -- Author : Dmitry Smekhov -- Company : Instrumental Systems -- E-mail : dsmv@insys.ru -- -- Version : 1.1 -- ------------------------------------------------------------------------------- -- -- Description : Определение значения тактовой частоты -- ------------------------------------------------------------------------------- -- -- Version 1.1 01.11.2008 -- Исправлен сигнал new_cnt -- ------------------------------------------------------------------------------- -- -- Version 1.0 Mon Jun 2 10:00:19 2008 -- ------------------------------------------------------------------------------- library ieee; use ieee.std_logic_1164.all; package ctrl_freq_pkg is component ctrl_freq is generic( SystemFreq : integer:= 1250; -- значение системной тактовой частоты FreqDiv : integer:= 2 -- коэффициент деления входной частоты -- ( 2 - на вход подаётся половина измеряемой частоты ) ); port( reset : in std_logic; -- 0 - сброс clk_sys : in std_logic; -- системная тактовая частота clk_in : in std_logic; -- входная тактовая частота АЦП freq_adc : out std_logic_vector(15 downto 0); -- ориентировочное значение тактовой частоты АЦП в МГц freq_en : out std_logic -- 1 - подсчитано значение тактовой частоты ); end component; end package; library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity ctrl_freq is generic( SystemFreq : integer:= 1250; -- значение системной тактовой частоты FreqDiv : integer:= 2 -- коэффициент деления входной частоты -- ( 2 - на вход подаётся половина измеряемой частоты ) ); port( reset : in std_logic; -- 0 - сброс clk_sys : in std_logic; -- системная тактовая частота clk_in : in std_logic; -- входная тактовая частота АЦП freq_adc : out std_logic_vector(15 downto 0); -- ориентировочное значение тактовой частоты АЦП в МГц freq_en : out std_logic -- 1 - подсчитано значение тактовой частоты ); end ctrl_freq; architecture ctrl_freq of ctrl_freq is component ctrl_multiplier_v1_0 port ( clk: IN std_logic; a: IN std_logic_VECTOR(15 downto 0); b: IN std_logic_VECTOR(10 downto 0); p: OUT std_logic_VECTOR(26 downto 0)); end component; constant Freq : integer:=SystemFreq*FreqDiv/2; signal cnt_value : std_logic_vector(12 downto 0); signal cnt_value_adc,cnt_value_adc0 : std_logic_vector(15 downto 0); signal freq_sys : std_logic_vector(10 downto 0); signal result_freq : std_logic_vector(26 downto 0); signal new_cnt_c : std_logic_vector(3 downto 0); signal new_cnt : std_logic; signal new_cnt_z : std_logic; signal new_cnt_z1 : std_logic; signal new_cnt_z2 : std_logic; begin -- определение ориентировочного значения тактовой частоты АЦП в МГц pr_value: process(clk_sys,reset) begin if(reset='0')then new_cnt<='0'; cnt_value<=(others=>'0'); new_cnt_c<=(others=>'0'); freq_adc<=(others=>'0'); freq_en <= '0'; elsif(rising_edge(clk_sys))then if(new_cnt='0')then cnt_value<=cnt_value+'1'; new_cnt_c<=(others=>'0'); new_cnt<=cnt_value(12); else if( new_cnt_z2='1' ) then new_cnt_c<=new_cnt_c+'1'; end if; cnt_value<=(others=>'0'); --new_cnt_c<=new_cnt_c+'1'; new_cnt<= not new_cnt_c(3); end if; if(new_cnt_c(2)='1')then freq_adc(15 downto 0)<= result_freq(26 downto 11)+result_freq(10); end if; freq_en <= new_cnt_c(3) after 1 ns; end if; end process; new_cnt_z <= new_cnt after 1 ns when rising_edge( clk_in ); new_cnt_z1 <= new_cnt_z after 1 ns when rising_edge( clk_in ); new_cnt_z2 <= new_cnt_z1 after 1 ns when rising_edge( clk_sys ); pr_value_adc: process(clk_in) begin if(rising_edge(clk_in))then if(new_cnt_z='0' and reset='1')then cnt_value_adc<=cnt_value_adc+'1'; cnt_value_adc0<= cnt_value_adc; else cnt_value_adc<=(others=>'0'); end if; end if; end process; freq_sys<= conv_std_logic_vector( Freq, 11 ); x_mult:ctrl_multiplier_v1_0 port map( clk=> clk_sys, a=> cnt_value_adc0, b=> freq_sys, p=> result_freq ); end ctrl_freq;
Go to most recent revision | Compare with Previous | Blame | View Log