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

Subversion Repositories simple_fm_receiver

[/] [simple_fm_receiver/] [trunk/] [source/] [fir.vhdl] - Blame information for rev 46

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 46 arif_endro
-- ------------------------------------------------------------------------
2 39 arif_endro
-- Copyright (C) 2004 Arif Endro Nugroho
3 46 arif_endro
-- All rights reserved.
4 12 arif_endro
-- 
5 46 arif_endro
-- Redistribution and use in source and binary forms, with or without
6
-- modification, are permitted provided that the following conditions
7
-- are met:
8 12 arif_endro
-- 
9 46 arif_endro
-- 1. Redistributions of source code must retain the above copyright
10
--    notice, this list of conditions and the following disclaimer.
11
-- 2. Redistributions in binary form must reproduce the above copyright
12
--    notice, this list of conditions and the following disclaimer in the
13
--    documentation and/or other materials provided with the distribution.
14 12 arif_endro
-- 
15 46 arif_endro
-- THIS SOFTWARE IS PROVIDED BY ARIF ENDRO NUGROHO "AS IS" AND ANY EXPRESS
16
-- OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17
-- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
-- DISCLAIMED. IN NO EVENT SHALL ARIF ENDRO NUGROHO BE LIABLE FOR ANY
19
-- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20
-- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21
-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22
-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
23
-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
24
-- ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25
-- POSSIBILITY OF SUCH DAMAGE.
26 12 arif_endro
-- 
27 46 arif_endro
-- End Of License.
28
-- ------------------------------------------------------------------------
29 2 arif_endro
 
30
library IEEE;
31
use IEEE.STD_LOGIC_1164.ALL;
32
 
33
entity fir is
34
  port(
35
  clock  : in  bit;
36
  clear  : in  bit;
37
  fir_in : in  bit_vector (11 downto 0); -- <12,4,t>
38
  dmout  : out bit_vector (11 downto 0)  -- <12,4,t>
39
  );
40
end fir;
41
 
42
architecture structural of fir is
43
  component adder_15bit
44
  port (
45
  addend_15bit   : in  bit_vector (14 downto 0);
46
  augend_15bit   : in  bit_vector (14 downto 0);
47
  adder15_output : out bit_vector (15 downto 0)
48
  );
49
  end component;
50
  component adder_14bit
51
  port (
52
  addend_14bit   : in  bit_vector (13 downto 0);
53
  augend_14bit   : in  bit_vector (13 downto 0);
54
  adder14_output : out bit_vector (14 downto 0)
55
  );
56
  end component;
57
  component adder_13bit
58
  port (
59
  addend_13bit   : in  bit_vector (12 downto 0);
60
  augend_13bit   : in  bit_vector (12 downto 0);
61
  adder13_output : out bit_vector (13 downto 0)
62
  );
63
  end component;
64
  component adder_12bit
65
  port (
66
  addend_12bit   : in  bit_vector (11 downto 0);
67
  augend_12bit   : in  bit_vector (11 downto 0);
68
  adder12_output : out bit_vector (12 downto 0)
69
  );
70
  end component;
71
 
72
  signal  fir_out        : bit_vector (11 downto 0);
73
  signal  fir_in_01      : bit_vector (11 downto 0);
74
  signal  fir_in_02      : bit_vector (11 downto 0);
75
  signal  fir_in_03      : bit_vector (11 downto 0);
76
  signal  fir_in_04      : bit_vector (11 downto 0);
77
  signal  fir_in_05      : bit_vector (11 downto 0);
78
  signal  fir_in_06      : bit_vector (11 downto 0);
79
  signal  fir_in_07      : bit_vector (11 downto 0);
80
  signal  fir_in_08      : bit_vector (11 downto 0);
81
  signal  fir_in_09      : bit_vector (11 downto 0);
82
  signal  fir_in_10      : bit_vector (11 downto 0);
83
  signal  fir_in_11      : bit_vector (11 downto 0);
84
  signal  fir_in_12      : bit_vector (11 downto 0);
85
  signal  fir_in_13      : bit_vector (11 downto 0);
86
  signal  fir_in_14      : bit_vector (11 downto 0);
87
  signal  fir_in_15      : bit_vector (11 downto 0);
88
  signal  fir_in_16      : bit_vector (11 downto 0);
89
  signal  result_adder01 : bit_vector (12 downto 0);
90
  signal  result_adder02 : bit_vector (12 downto 0);
91
  signal  result_adder03 : bit_vector (12 downto 0);
92
  signal  result_adder04 : bit_vector (12 downto 0);
93
  signal  result_adder05 : bit_vector (12 downto 0);
94
  signal  result_adder06 : bit_vector (12 downto 0);
95
  signal  result_adder07 : bit_vector (12 downto 0);
96
  signal  result_adder08 : bit_vector (12 downto 0);
97
  signal  result_adder09 : bit_vector (13 downto 0);
98
  signal  result_adder10 : bit_vector (13 downto 0);
99
  signal  result_adder11 : bit_vector (13 downto 0);
100
  signal  result_adder12 : bit_vector (13 downto 0);
101
  signal  result_adder13 : bit_vector (14 downto 0);
102
  signal  result_adder14 : bit_vector (14 downto 0);
103
  signal  result_adder15 : bit_vector (15 downto 0);
104
 
105
 
106
begin
107
  fir_in_01  <= fir_in;
108
 
109
adder01 : adder_12bit
110
  port map (
111
  addend_12bit(11 downto 0)   => fir_in_01,
112
  augend_12bit(11 downto 0)   => fir_in_02,
113
  adder12_output              => result_adder01
114
  );
115
 
116
adder02 : adder_12bit
117
  port map (
118
  addend_12bit(11 downto 0)   => fir_in_03,
119
  augend_12bit(11 downto 0)   => fir_in_04,
120
  adder12_output              => result_adder02
121
  );
122
 
123
adder03 : adder_12bit
124
  port map (
125
  addend_12bit(11 downto 0)   => fir_in_05,
126
  augend_12bit(11 downto 0)   => fir_in_06,
127
  adder12_output              => result_adder03
128
  );
129
 
130
adder04 : adder_12bit
131
  port map (
132
  addend_12bit(11 downto 0)   => fir_in_07,
133
  augend_12bit(11 downto 0)   => fir_in_08,
134
  adder12_output              => result_adder04
135
  );
136
 
137
adder05 : adder_12bit
138
  port map (
139
  addend_12bit(11 downto 0)   => fir_in_09,
140
  augend_12bit(11 downto 0)   => fir_in_10,
141
  adder12_output              => result_adder05
142
  );
143
 
144
adder06 : adder_12bit
145
  port map (
146
  addend_12bit(11 downto 0)   => fir_in_11,
147
  augend_12bit(11 downto 0)   => fir_in_12,
148
  adder12_output              => result_adder06
149
  );
150
 
151
adder07 : adder_12bit
152
  port map (
153
  addend_12bit(11 downto 0)   => fir_in_13,
154
  augend_12bit(11 downto 0)   => fir_in_14,
155
  adder12_output              => result_adder07
156
  );
157
 
158
adder08 : adder_12bit
159
  port map (
160
  addend_12bit(11 downto 0)   => fir_in_15,
161
  augend_12bit(11 downto 0)   => fir_in_16,
162
  adder12_output              => result_adder08
163
  );
164
 
165
adder09 : adder_13bit
166
  port map (
167
  addend_13bit(12 downto 0)   => result_adder01,
168
  augend_13bit(12 downto 0)   => result_adder02,
169
  adder13_output              => result_adder09
170
  );
171
 
172
adder10 : adder_13bit
173
  port map (
174
  addend_13bit(12 downto 0)   => result_adder03,
175
  augend_13bit(12 downto 0)   => result_adder04,
176
  adder13_output              => result_adder10
177
  );
178
 
179
adder11 : adder_13bit
180
  port map (
181
  addend_13bit(12 downto 0)   => result_adder05,
182
  augend_13bit(12 downto 0)   => result_adder06,
183
  adder13_output              => result_adder11
184
  );
185
 
186
adder12 : adder_13bit
187
  port map (
188
  addend_13bit(12 downto 0)   => result_adder07,
189
  augend_13bit(12 downto 0)   => result_adder08,
190
  adder13_output              => result_adder12
191
  );
192
 
193
adder13 : adder_14bit
194
  port map (
195
  addend_14bit(13 downto 0)   => result_adder09,
196
  augend_14bit(13 downto 0)   => result_adder10,
197
  adder14_output              => result_adder13
198
  );
199
 
200
adder14 : adder_14bit
201
  port map (
202
  addend_14bit(13 downto 0)   => result_adder11,
203
  augend_14bit(13 downto 0)   => result_adder12,
204
  adder14_output              => result_adder14
205
  );
206
 
207
adder15 : adder_15bit
208
  port map (
209
  addend_15bit(14 downto 0)   => result_adder13,
210
  augend_15bit(14 downto 0)   => result_adder14,
211
  adder15_output              => result_adder15
212
  );
213
 
214 16 arif_endro
-- FIR constants that have effect on output trasition.
215
-- This constant if set to low values (e.g x < 1/8 ) will make 
216
-- the transition output more looks like steps, noise will be reduced
217
-- but it's loss of fidelity of output signal.
218
-- for example:
219
-- set values to 1/16 will make the output trasition more look's like step
220
-- than an curve.
221
-- Just try another values to see the result. ^_^
222
 
223 12 arif_endro
fir_out(11)    <= (result_adder15(15)); -- 1
224 16 arif_endro
fir_out(10)    <= (result_adder15(14)); -- 1/2
225
fir_out(09)    <= (result_adder15(13)); -- 1/4
226
fir_out(08)    <= (result_adder15(12)); -- 1/8
227
fir_out(07)    <= (result_adder15(11)); -- 1/16
228
fir_out(06)    <= (result_adder15(10));
229
fir_out(05)    <= (result_adder15(09));
230
fir_out(04)    <= (result_adder15(08));
231
fir_out(03)    <= (result_adder15(07));
232
fir_out(02)    <= (result_adder15(06));
233
fir_out(01)    <= (result_adder15(05));
234
fir_out(00)    <= (result_adder15(04));
235 2 arif_endro
 
236 23 arif_endro
-- 20080625
237
-- fixme
238
-- how to enable clear signal in here... :(
239 2 arif_endro
 
240 23 arif_endro
--   process (clock, clear)
241
   process (clock)
242
 
243 12 arif_endro
   begin
244
 
245 23 arif_endro
--   if    (clear = '1') then
246
   if ((clock = '1') and clock'event) then
247 12 arif_endro
 
248 23 arif_endro
--      dmout     <= (others => '0');
249 12 arif_endro
 
250 23 arif_endro
--   elsif (((clock = '1') and (not(clear) = '1')) and clock'event) then
251 12 arif_endro
 
252 2 arif_endro
        fir_in_02 <= fir_in_01;
253
        fir_in_03 <= fir_in_02;
254
        fir_in_04 <= fir_in_03;
255
        fir_in_05 <= fir_in_04;
256
        fir_in_06 <= fir_in_05;
257
        fir_in_07 <= fir_in_06;
258
        fir_in_08 <= fir_in_07;
259
        fir_in_09 <= fir_in_08;
260
        fir_in_10 <= fir_in_09;
261
        fir_in_11 <= fir_in_10;
262
        fir_in_12 <= fir_in_11;
263
        fir_in_13 <= fir_in_12;
264
        fir_in_14 <= fir_in_13;
265
        fir_in_15 <= fir_in_14;
266
        fir_in_16 <= fir_in_15;
267
 
268
        dmout     <= fir_out;
269
 
270
   end if;
271 12 arif_endro
 
272
   end process;
273
 
274 2 arif_endro
end structural;

powered by: WebSVN 2.1.0

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