1 | library IEEE;
|
2 | use IEEE.STD_LOGIC_1164.ALL;
|
3 | use IEEE.NUMERIC_STD.ALL;
|
4 | use IEEE.MATH_REAL.ALL;
|
5 | use std.textio.all;
|
6 |
|
7 | entity core_logic is
|
8 | generic(
|
9 | C_S_AXI_ACLK_FREQ_HZ : integer := 50_000_000;
|
10 | sample_rate : integer := 9_600_000
|
11 | );
|
12 | port(
|
13 | clk : in STD_LOGIC;
|
14 | ...
|
15 | architecture Behavioral of core_logic is
|
16 |
|
17 | signal sample_en : integer range 0 to 15 := 0;
|
18 | ...
|
19 | sample_en_process : process begin
|
20 | wait until rising_edge(clk);
|
21 | if sample_en = counter-1 then
|
22 | sample_en <= 0;
|
23 | sample_cnt <= sample_cnt +1;
|
24 | else
|
25 | if sample_rdy_i = '1' then
|
26 | sample_en <= 0;
|
27 | sample_cnt <= 0;
|
28 | else
|
29 | sample_en <= sample_en + 1;
|
30 | end if;
|
31 | end if;
|
32 | end process;
|
33 |
|
34 | counter_process : process begin
|
35 | wait until rising_edge(clk);
|
36 | case sample_cnt is
|
37 | when 0 => counter <= (ROUND((C_S_AXI_ACLK_FREQ_HZ/sample_rate)));--5;
|
38 | when 1 => counter <= (ROUND(1*(C_S_AXI_ACLK_FREQ_HZ/sample_rate)-ROUND(1*(C_S_AXI_ACLK_FREQ_HZ/sample_rate))+(C_S_AXI_ACLK_FREQ_HZ/sample_rate)));
|
39 | when 2 => counter <= (ROUND(2*(C_S_AXI_ACLK_FREQ_HZ/sample_rate)-ROUND(2*(C_S_AXI_ACLK_FREQ_HZ/sample_rate))+(C_S_AXI_ACLK_FREQ_HZ/sample_rate)));
|
40 | when 3 => counter <= (ROUND(3*(C_S_AXI_ACLK_FREQ_HZ/sample_rate)-ROUND(3*(C_S_AXI_ACLK_FREQ_HZ/sample_rate))+(C_S_AXI_ACLK_FREQ_HZ/sample_rate)));
|
41 | when 4 => counter <= (ROUND(4*(C_S_AXI_ACLK_FREQ_HZ/sample_rate)-ROUND(4*(C_S_AXI_ACLK_FREQ_HZ/sample_rate))+(C_S_AXI_ACLK_FREQ_HZ/sample_rate)));
|
42 | when 5 => counter <= (ROUND(5*(C_S_AXI_ACLK_FREQ_HZ/sample_rate)-ROUND(5*(C_S_AXI_ACLK_FREQ_HZ/sample_rate))+(C_S_AXI_ACLK_FREQ_HZ/sample_rate)));
|
43 | when 6 => counter <= (ROUND(6*(C_S_AXI_ACLK_FREQ_HZ/sample_rate)-ROUND(6*(C_S_AXI_ACLK_FREQ_HZ/sample_rate))+(C_S_AXI_ACLK_FREQ_HZ/sample_rate)));
|
44 | when 7 => counter <= (ROUND(7*(C_S_AXI_ACLK_FREQ_HZ/sample_rate)-ROUND(7*(C_S_AXI_ACLK_FREQ_HZ/sample_rate))+(C_S_AXI_ACLK_FREQ_HZ/sample_rate)));
|
45 | when 8 => counter <= (ROUND(8*(C_S_AXI_ACLK_FREQ_HZ/sample_rate)-ROUND(8*(C_S_AXI_ACLK_FREQ_HZ/sample_rate))+(C_S_AXI_ACLK_FREQ_HZ/sample_rate)));
|
46 | when 9 => counter <= (ROUND(9*(C_S_AXI_ACLK_FREQ_HZ/sample_rate)-ROUND(9*(C_S_AXI_ACLK_FREQ_HZ/sample_rate))+(C_S_AXI_ACLK_FREQ_HZ/sample_rate)));
|
47 | when 10 => counter <= (ROUND(10*(C_S_AXI_ACLK_FREQ_HZ/sample_rate)-ROUND(10*(C_S_AXI_ACLK_FREQ_HZ/sample_rate))+(C_S_AXI_ACLK_FREQ_HZ/sample_rate)));
|
48 | when 11 => counter <= (ROUND(11*(C_S_AXI_ACLK_FREQ_HZ/sample_rate)-ROUND(11*(C_S_AXI_ACLK_FREQ_HZ/sample_rate))+(C_S_AXI_ACLK_FREQ_HZ/sample_rate)));
|
49 | when 12 => counter <= (ROUND(12*(C_S_AXI_ACLK_FREQ_HZ/sample_rate)-ROUND(12*(C_S_AXI_ACLK_FREQ_HZ/sample_rate))+(C_S_AXI_ACLK_FREQ_HZ/sample_rate)));
|
50 | when 13 => counter <= (ROUND(13*(C_S_AXI_ACLK_FREQ_HZ/sample_rate)-ROUND(13*(C_S_AXI_ACLK_FREQ_HZ/sample_rate))+(C_S_AXI_ACLK_FREQ_HZ/sample_rate)));
|
51 | when 14 => counter <= (ROUND(14*(C_S_AXI_ACLK_FREQ_HZ/sample_rate)-ROUND(14*(C_S_AXI_ACLK_FREQ_HZ/sample_rate))+(C_S_AXI_ACLK_FREQ_HZ/sample_rate)));
|
52 | when 15 => counter <= (ROUND(15*(C_S_AXI_ACLK_FREQ_HZ/sample_rate)-ROUND(15*(C_S_AXI_ACLK_FREQ_HZ/sample_rate))+(C_S_AXI_ACLK_FREQ_HZ/sample_rate)));
|
53 | when others => counter <= (ROUND(15*(C_S_AXI_ACLK_FREQ_HZ/sample_rate)-ROUND(15*(C_S_AXI_ACLK_FREQ_HZ/sample_rate))+(C_S_AXI_ACLK_FREQ_HZ/sample_rate)));
|
54 | end case;
|
55 | end process;
|
56 | ...
|
57 | data_sampling_process : process begin
|
58 | wait until rising_edge(clk) and sample_en = 0;
|
59 | ch1_out_i <= ch1_out_i(14 downto 0) & channel1_i;
|
60 | ch2_out_i <= ch2_out_i(14 downto 0) & channel2_i;
|
61 | end process;
|