OpenCores
URL https://opencores.org/ocsvn/fir_filter/fir_filter/trunk

Subversion Repositories fir_filter

[/] [fir_filter/] [tags/] [testbench/] [FIR_low_area_tb.vhd] - Blame information for rev 10

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 10 arroxo2
 
2
--  CREATION DATE .......:  08 April 2015
3
--  AUTHOR ..............:  DIEGO PARDO (arroxo2@yahoo.es)
4
--  REVISION ............:  1.0
5
--  LAST UPDATE .........:  08 April 2015
6
--  UPDATED BY ..........:  DIEGO PARDO 
7
 
8
--  TITLE "CONFIGURABLE FIR FILTER TESTBENCH";
9
--
10
--  http://t-filter.appspot.com/fir/index.html
11
 
12
--=============================================================================
13
--================================ TESTBENCH ==================================
14
--=============================================================================
15
 
16
LIBRARY ieee;
17
USE ieee.std_logic_1164.all;
18
USE ieee.std_logic_arith.all;
19
USE ieee.std_logic_signed.all;
20
USE ieee.math_real.all;
21
 
22
LIBRARY work;
23
USE work.fir_package.all;
24
 
25
 
26
ENTITY FIR_low_area_tb IS
27
END FIR_low_area_tb;
28
 
29
 
30
ARCHITECTURE FIR_low_area_tb_arch OF FIR_low_area_tb IS
31
 
32
-- TESTCASE SETTINGS
33
--.............................................................................
34
  CONSTANT freq_xn     : REAL        := 900.0e3;   -- input frequency
35
  CONSTANT data_length : NATURAL     := 12;        -- input bit size
36
 
37
  CONSTANT fs_Hz       : REAL        := 8.0e6;     -- sampling frequency
38
  CONSTANT taps        : NATURAL     := 15;        -- order+1
39
  -- transition band: 800e3 to 1.6e6
40
  CONSTANT hn          : COEFF_ARRAY := (-0.01259277478717816,
41
                                         -0.02704833486706803,
42
                                         -0.031157016036431583,
43
                                         -0.0033516667471792812,
44
                                         0.06651710329324828,
45
                                         0.1635643048779222,
46
                                         0.249729473226146,
47
                                         0.2842779082622769,
48
                                         0.249729473226146,
49
                                         0.1635643048779222,
50
                                         0.06651710329324827,
51
                                         -0.0033516667471792812,
52
                                         -0.031157016036431583,
53
                                         -0.027048334867068043,
54
                                         -0.01259277478717816,
55
                                          others=>0.0);
56
  CONSTANT bits_resol  : NATURAL := 12;
57
--..............................................................................
58
 
59
  SIGNAL areset        : STD_LOGIC;
60
  SIGNAL clock_fs      : STD_LOGIC := '1';
61
  SIGNAL xn_signed     : STD_LOGIC_VECTOR(data_length-1 DOWNTO 0);
62
  SIGNAL xn_unsigned   : STD_LOGIC_VECTOR(data_length-1 DOWNTO 0);
63
  SIGNAL yn_signed     : STD_LOGIC_VECTOR(data_length-1 DOWNTO 0);
64
  SIGNAL yn_unsigned   : STD_LOGIC_VECTOR(data_length-1 DOWNTO 0);
65
 
66
  SIGNAL radians       : REAL := 0.0;
67
  SIGNAL radian_step   : REAL := 1.0/(fs_Hz/freq_xn);
68
 
69
  CONSTANT PI          : REAL    := 3.1415926535897932;
70
  CONSTANT num_cycles  : NATURAL := 16;
71
  CONSTANT fs_period   : TIME    := integer(1.0e12/fs_Hz)* 1 ps;
72
  CONSTANT num_samples : NATURAL := num_cycles*integer(round(fs_Hz/freq_xn));
73
  CONSTANT amplitude   : REAL    := 2.0**real(data_length-1)-1.0;
74
 
75
BEGIN
76
 
77
  duv_fir_signed: ENTITY work.FIR_low_area
78
  --.............................................
79
  generic map(
80
    data_length  => data_length,
81
    data_signed  => true,
82
    improv_t     => false,
83
    bits_resol   => bits_resol,
84
    taps         => taps,
85
    coefficients => hn)
86
  port map(
87
    areset   => areset,
88
    sreset   => '0',
89
    clock_fs => clock_fs,
90
    enable   => '1',
91
    xn       => xn_signed,
92
    yn       => yn_signed
93
    );
94
 
95
  duv_fir_unsigned: ENTITY work.FIR_low_area
96
  --.............................................
97
  generic map(
98
    data_length  => data_length,
99
    data_signed  => false,
100
    improv_t     => false,
101
    bits_resol   => bits_resol,
102
    taps         => taps,
103
    coefficients => hn)
104
  port map(
105
    areset   => areset,
106
    sreset   => '0',
107
    clock_fs => clock_fs,
108
    enable   => '1',
109
    xn       => xn_unsigned,
110
    yn       => yn_unsigned
111
    );
112
 
113
  sampling_clock: process
114
  --.............................................
115
  begin
116
    clock_fs <= '1';
117
    wait for fs_period/2;
118
    clock_fs <= '0';
119
    wait for fs_period/2;
120
  end process;
121
 
122
  xn_sinus: process
123
  --.............................................
124
    variable seed1,seed2 : positive;
125
    variable rand        : real;
126
    variable noise_n     : real;
127
    variable sinus_n     : real;
128
  begin
129
    UNIFORM(seed1, seed2, rand);     -- uniform  0.0 to 1.0
130
    noise_n := 2.0*(rand-0.5) * (amplitude/20.0);
131
    sinus_n := amplitude * sin(2.0*PI*radians) + noise_n;
132
 
133
    -- saturation control
134
    if sinus_n > amplitude then
135
      sinus_n := amplitude;
136
    elsif sinus_n < -amplitude then
137
      sinus_n := -amplitude;
138
    end if;
139
 
140
    xn_signed   <= std_logic_vector(conv_signed(integer(round(sinus_n)),data_length));
141
    xn_unsigned <= std_logic_vector(conv_unsigned(integer(round(amplitude + sinus_n)),data_length));
142
 
143
    if radians >= 1.0 then
144
      radians <= 0.0;
145
    else
146
      radians <= radians + radian_step;
147
    end if;
148
    wait until rising_edge(clock_fs);
149
  end process;
150
 
151
  reset: process
152
  --.............................................
153
  begin
154
    areset <= '1';
155
    wait for 10 ns;
156
    areset <= '0';
157
    wait;
158
  end process;
159
 
160
  sim_time: process
161
  --.............................................
162
  begin
163
    wait for num_samples*fs_period;
164
    assert false report "SIMULATION END" severity failure;
165
  end process;
166
 
167
 
168
END FIR_low_area_tb_arch;
169
 
170
 

powered by: WebSVN 2.1.0

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