OpenCores
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] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dsmv
-------------------------------------------------------------------------------
2
--
3
-- Title       : ctrl_freq
4
-- Author      : Dmitry Smekhov
5
-- Company     : Instrumental Systems
6
-- E-mail      : dsmv@insys.ru
7
--
8
-- Version     : 1.1
9
--
10
-------------------------------------------------------------------------------
11
--
12
-- Description :  Определение значения тактовой частоты
13
--
14
-------------------------------------------------------------------------------
15
--
16
-- Version   1.1  01.11.2008
17
--                       Исправлен сигнал new_cnt
18
--
19
-------------------------------------------------------------------------------
20
--
21
-- Version   1.0  Mon Jun  2 10:00:19 2008
22
--
23
-------------------------------------------------------------------------------
24
 
25
library ieee;
26
use ieee.std_logic_1164.all;
27
 
28
package ctrl_freq_pkg is
29
 
30
component ctrl_freq is
31
        generic(
32
                SystemFreq      : integer:= 1250;       -- значение системной тактовой частоты
33
                FreqDiv         : integer:= 2           -- коэффициент деления входной частоты
34
                                                                                -- ( 2 - на вход подаётся половина измеряемой частоты )
35
        );
36
 
37
        port(
38
                reset           : in std_logic;         -- 0 - сброс
39
                clk_sys         : in std_logic;         -- системная тактовая частота
40
                clk_in          : in std_logic;         -- входная тактовая частота АЦП
41
 
42
                freq_adc        : out std_logic_vector(15 downto 0);     -- ориентировочное значение тактовой частоты АЦП в МГц
43
                freq_en         : out std_logic         -- 1 - подсчитано значение тактовой частоты
44
 
45
        );
46
end component;
47
 
48
end package;
49
 
50
 
51
 
52
library ieee;
53
use ieee.std_logic_1164.all;
54
use ieee.std_logic_arith.all;
55
use ieee.std_logic_unsigned.all;
56
 
57
entity ctrl_freq is
58
        generic(
59
                SystemFreq      : integer:= 1250;       -- значение системной тактовой частоты
60
                FreqDiv         : integer:= 2           -- коэффициент деления входной частоты
61
                                                                                -- ( 2 - на вход подаётся половина измеряемой частоты )
62
        );
63
 
64
        port(
65
                reset           : in std_logic;         -- 0 - сброс
66
                clk_sys         : in std_logic;         -- системная тактовая частота
67
                clk_in          : in std_logic;         -- входная тактовая частота АЦП
68
 
69
                freq_adc        : out std_logic_vector(15 downto 0);     -- ориентировочное значение тактовой частоты АЦП в МГц
70
                freq_en         : out std_logic         -- 1 - подсчитано значение тактовой частоты
71
 
72
        );
73
end ctrl_freq;
74
 
75
 
76
architecture ctrl_freq of ctrl_freq is
77
 
78
component ctrl_multiplier_v1_0
79
        port (
80
        clk: IN std_logic;
81
        a: IN std_logic_VECTOR(15 downto 0);
82
        b: IN std_logic_VECTOR(10 downto 0);
83
        p: OUT std_logic_VECTOR(26 downto 0));
84
end component;
85
 
86
constant        Freq                    : integer:=SystemFreq*FreqDiv/2;
87
 
88
signal cnt_value                        : std_logic_vector(12 downto 0);
89
signal cnt_value_adc,cnt_value_adc0             : std_logic_vector(15 downto 0);
90
signal freq_sys                         : std_logic_vector(10 downto 0);
91
signal result_freq                      : std_logic_vector(26 downto 0);
92
signal new_cnt_c                        : std_logic_vector(3 downto 0);
93
signal new_cnt                          : std_logic;
94
signal new_cnt_z                        : std_logic;
95
signal new_cnt_z1                       : std_logic;
96
signal new_cnt_z2                       : std_logic;
97
 
98
 
99
begin
100
 
101
-- определение ориентировочного значения тактовой частоты АЦП в МГц     
102
 
103
pr_value: process(clk_sys,reset)
104
begin
105
        if(reset='0')then
106
                new_cnt<='0';
107
                cnt_value<=(others=>'0');
108
                new_cnt_c<=(others=>'0');
109
                freq_adc<=(others=>'0');
110
                freq_en <= '0';
111
        elsif(rising_edge(clk_sys))then
112
                if(new_cnt='0')then
113
                        cnt_value<=cnt_value+'1';
114
                        new_cnt_c<=(others=>'0');
115
 
116
                        new_cnt<=cnt_value(12);
117
                else
118
                        if( new_cnt_z2='1' ) then
119
                                new_cnt_c<=new_cnt_c+'1';
120
                        end if;
121
 
122
                        cnt_value<=(others=>'0');
123
                        --new_cnt_c<=new_cnt_c+'1';
124
                        new_cnt<= not new_cnt_c(3);
125
 
126
                end if;
127
                if(new_cnt_c(2)='1')then
128
                        freq_adc(15 downto 0)<= result_freq(26 downto 11)+result_freq(10);
129
                end if;
130
 
131
                freq_en <= new_cnt_c(3) after 1 ns;
132
 
133
        end if;
134
end process;
135
 
136
new_cnt_z <= new_cnt after 1 ns when rising_edge( clk_in );
137
new_cnt_z1 <= new_cnt_z after 1 ns when rising_edge( clk_in );
138
new_cnt_z2 <= new_cnt_z1 after 1 ns when rising_edge( clk_sys );
139
 
140
pr_value_adc: process(clk_in)
141
begin
142
        if(rising_edge(clk_in))then
143
                if(new_cnt_z='0' and reset='1')then
144
                        cnt_value_adc<=cnt_value_adc+'1';
145
                        cnt_value_adc0<= cnt_value_adc;
146
                else
147
                        cnt_value_adc<=(others=>'0');
148
                end if;
149
        end if;
150
end process;
151
 
152
 
153
freq_sys<=      conv_std_logic_vector( Freq, 11 );
154
 
155
 
156
x_mult:ctrl_multiplier_v1_0
157
        port map(
158
        clk=> clk_sys,
159
        a=> cnt_value_adc0,
160
        b=> freq_sys,
161
        p=> result_freq
162
);
163
 
164
 
165
 
166
 
167
end ctrl_freq;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.