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

Subversion Repositories simple_fm_receiver

[/] [simple_fm_receiver/] [trunk/] [source/] [mult_8bit.vhdl] - Blame information for rev 13

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 13 arif_endro
-- $Id: mult_8bit.vhdl,v 1.2 2005-02-21 06:54:52 arif_endro Exp $
2 2 arif_endro
-------------------------------------------------------------------------------
3
-- Title       : Eight bit multiplier
4
-- Project     : FM Receiver 
5
-------------------------------------------------------------------------------
6
-- File        : mult_8bit.vhdl
7
-- Author      : "Arif E. Nugroho" <arif_endro@yahoo.com>
8
-- Created     : 2004/12/20
9
-- Last update : 
10 13 arif_endro
-- Simulators  : 
11 2 arif_endro
-- Synthesizers: 
12
-- Target      : 
13
-------------------------------------------------------------------------------
14
-- Description : Multiplier used in phase detector
15
-------------------------------------------------------------------------------
16 13 arif_endro
-- Copyright (C) 2004 Arif E. Nugroho
17 2 arif_endro
-- This VHDL design file is an open design; you can redistribute it and/or
18
-- modify it and/or implement it after contacting the author
19
-------------------------------------------------------------------------------
20 13 arif_endro
--------------------------------------------------------------------------------
21
-- 
22
--      THIS SOURCE FILE MAY BE USED AND DISTRIBUTED WITHOUT RESTRICTION
23
-- PROVIDED THAT THIS COPYRIGHT STATEMENT IS NOT REMOVED FROM THE FILE AND THAT
24
-- ANY DERIVATIVE WORK CONTAINS THE ORIGINAL COPYRIGHT NOTICE AND THE
25
-- ASSOCIATED DISCLAIMER.
26
-- 
27
--------------------------------------------------------------------------------
28
-- 
29
--      THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
30
-- IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
31
-- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO
32
-- EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
33
-- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
34
-- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
35
-- OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
36
-- WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
37
-- OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
38
-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39
-- 
40
--------------------------------------------------------------------------------
41 2 arif_endro
 
42
library IEEE;
43
use IEEE.STD_LOGIC_1164.ALL;
44
use IEEE.STD_LOGIC_arith.ALL;
45
 
46
entity mult_8bit is
47
   port (
48
   mult_01     : in  bit_vector (07 downto 0);
49
   mult_02     : in  bit_vector (07 downto 0);
50
   result_mult : out bit_vector (15 downto 0)
51
   );
52
end mult_8bit;
53
 
54
architecture structural of mult_8bit is
55
   component adder_16bit
56
     port (
57
     addend_16bit   : in  bit_vector (15 downto 0);
58
     augend_16bit   : in  bit_vector (15 downto 0);
59
     adder16_output : out bit_vector (16 downto 0)
60
     );
61
   end component;
62
 
63
   component adder_16bit_u
64
     port (
65
     addend_16bit   : in  bit_vector (15 downto 0);
66
     augend_16bit   : in  bit_vector (15 downto 0);
67
     adder16_output : out bit_vector (15 downto 0)
68
     );
69
   end component;
70
 
71
   component adder_15bit
72
     port (
73
     addend_15bit   : in  bit_vector (14 downto 0);
74
     augend_15bit   : in  bit_vector (14 downto 0);
75
     adder15_output : out bit_vector (15 downto 0)
76
     );
77
   end component;
78
 
79
   component adder_14bit
80
     port (
81
     addend_14bit   : in  bit_vector (13 downto 0);
82
     augend_14bit   : in  bit_vector (13 downto 0);
83
     adder14_output : out bit_vector (14 downto 0)
84
     );
85
   end component;
86
 
87
   component adder_13bit
88
     port (
89
     addend_13bit   : in  bit_vector (12 downto 0);
90
     augend_13bit   : in  bit_vector (12 downto 0);
91
     adder13_output : out bit_vector (13 downto 0)
92
     );
93
   end component;
94
 
95
   component adder_12bit
96
     port (
97
     addend_12bit   : in  bit_vector (11 downto 0);
98
     augend_12bit   : in  bit_vector (11 downto 0);
99
     adder12_output : out bit_vector (12 downto 0)
100
     );
101
   end component;
102
 
103
   component adder_11bit
104
     port (
105
     addend_11bit   : in  bit_vector (10 downto 0);
106
     augend_11bit   : in  bit_vector (10 downto 0);
107
     adder11_output : out bit_vector (11 downto 0)
108
     );
109
   end component;
110
 
111
   component adder_10bit
112
     port (
113
     addend_10bit   : in  bit_vector (09 downto 0);
114
     augend_10bit   : in  bit_vector (09 downto 0);
115
     adder10_output : out bit_vector (10 downto 0)
116
     );
117
   end component;
118
 
119
   component adder_09bit
120
     port (
121
     addend_09bit   : in  bit_vector (08 downto 0);
122
     augend_09bit   : in  bit_vector (08 downto 0);
123
     adder09_output : out bit_vector (09 downto 0)
124
     );
125
   end component;
126
 
127
   signal input_phase    : bit_vector (07 downto 0);
128
   signal signal_nco     : bit_vector (07 downto 0);
129
 
130
   signal sum_part01     : bit_vector (08 downto 0);
131
   signal sum_part01_z   : bit_vector (08 downto 0);
132
   signal sum_part02     : bit_vector (09 downto 0);
133
   signal sum_part03     : bit_vector (10 downto 0);
134
   signal sum_part04     : bit_vector (11 downto 0);
135
   signal sum_part05     : bit_vector (12 downto 0);
136
   signal sum_part06     : bit_vector (13 downto 0);
137
   signal sum_part07     : bit_vector (14 downto 0);
138
   signal sum_part08_t   : bit_vector (15 downto 0);
139
   signal sum_part08_o   : bit_vector (15 downto 0);
140
   signal sum_part08_a   : bit_vector (15 downto 0);
141
   signal sum_part08     : bit_vector (15 downto 0);
142
 
143
   signal adder_stage_01 : bit_vector (09 downto 0);
144
   signal adder_stage_02 : bit_vector (10 downto 0);
145
   signal adder_stage_03 : bit_vector (11 downto 0);
146
   signal adder_stage_04 : bit_vector (12 downto 0);
147
   signal adder_stage_05 : bit_vector (13 downto 0);
148
   signal adder_stage_06 : bit_vector (14 downto 0);
149
   signal adder_stage_07 : bit_vector (15 downto 0);
150
   signal adder_stage_08 : bit_vector (16 downto 0);
151
 
152
   begin
153
 
154
   sum_part01_z (00) <= '0';
155
   sum_part01_z (01) <= '0';
156
   sum_part01_z (02) <= '0';
157
   sum_part01_z (03) <= '0';
158
   sum_part01_z (04) <= '0';
159
   sum_part01_z (05) <= '0';
160
   sum_part01_z (06) <= '0';
161
   sum_part01_z (07) <= '0';
162
   sum_part01_z (08) <= '0';
163
 
164
   sum_part01(00) <= signal_nco(0) and input_phase(0);
165
   sum_part01(01) <= signal_nco(0) and input_phase(1);
166
   sum_part01(02) <= signal_nco(0) and input_phase(2);
167
   sum_part01(03) <= signal_nco(0) and input_phase(3);
168
   sum_part01(04) <= signal_nco(0) and input_phase(4);
169
   sum_part01(05) <= signal_nco(0) and input_phase(5);
170
   sum_part01(06) <= signal_nco(0) and input_phase(6);
171
   sum_part01(07) <= signal_nco(0) and input_phase(7);
172
   sum_part01(08) <= signal_nco(0) and input_phase(7);
173
 
174
   sum_part02(00) <= '0';
175
   sum_part02(01) <= signal_nco(1) and input_phase(0);
176
   sum_part02(02) <= signal_nco(1) and input_phase(1);
177
   sum_part02(03) <= signal_nco(1) and input_phase(2);
178
   sum_part02(04) <= signal_nco(1) and input_phase(3);
179
   sum_part02(05) <= signal_nco(1) and input_phase(4);
180
   sum_part02(06) <= signal_nco(1) and input_phase(5);
181
   sum_part02(07) <= signal_nco(1) and input_phase(6);
182
   sum_part02(08) <= signal_nco(1) and input_phase(7);
183
   sum_part02(09) <= signal_nco(1) and input_phase(7);
184
 
185
   sum_part03(00) <= '0';
186
   sum_part03(01) <= '0';
187
   sum_part03(02) <= signal_nco(2) and input_phase(0);
188
   sum_part03(03) <= signal_nco(2) and input_phase(1);
189
   sum_part03(04) <= signal_nco(2) and input_phase(2);
190
   sum_part03(05) <= signal_nco(2) and input_phase(3);
191
   sum_part03(06) <= signal_nco(2) and input_phase(4);
192
   sum_part03(07) <= signal_nco(2) and input_phase(5);
193
   sum_part03(08) <= signal_nco(2) and input_phase(6);
194
   sum_part03(09) <= signal_nco(2) and input_phase(7);
195
   sum_part03(10) <= signal_nco(2) and input_phase(7);
196
 
197
   sum_part04(00) <= '0';
198
   sum_part04(01) <= '0';
199
   sum_part04(02) <= '0';
200
   sum_part04(03) <= signal_nco(3) and input_phase(0);
201
   sum_part04(04) <= signal_nco(3) and input_phase(1);
202
   sum_part04(05) <= signal_nco(3) and input_phase(2);
203
   sum_part04(06) <= signal_nco(3) and input_phase(3);
204
   sum_part04(07) <= signal_nco(3) and input_phase(4);
205
   sum_part04(08) <= signal_nco(3) and input_phase(5);
206
   sum_part04(09) <= signal_nco(3) and input_phase(6);
207
   sum_part04(10) <= signal_nco(3) and input_phase(7);
208
   sum_part04(11) <= signal_nco(3) and input_phase(7);
209
 
210
   sum_part05(00) <= '0';
211
   sum_part05(01) <= '0';
212
   sum_part05(02) <= '0';
213
   sum_part05(03) <= '0';
214
   sum_part05(04) <= signal_nco(4) and input_phase(0);
215
   sum_part05(05) <= signal_nco(4) and input_phase(1);
216
   sum_part05(06) <= signal_nco(4) and input_phase(2);
217
   sum_part05(07) <= signal_nco(4) and input_phase(3);
218
   sum_part05(08) <= signal_nco(4) and input_phase(4);
219
   sum_part05(09) <= signal_nco(4) and input_phase(5);
220
   sum_part05(10) <= signal_nco(4) and input_phase(6);
221
   sum_part05(11) <= signal_nco(4) and input_phase(7);
222
   sum_part05(12) <= signal_nco(4) and input_phase(7);
223
 
224
   sum_part06(00) <= '0';
225
   sum_part06(01) <= '0';
226
   sum_part06(02) <= '0';
227
   sum_part06(03) <= '0';
228
   sum_part06(04) <= '0';
229
   sum_part06(05) <= signal_nco(5) and input_phase(0);
230
   sum_part06(06) <= signal_nco(5) and input_phase(1);
231
   sum_part06(07) <= signal_nco(5) and input_phase(2);
232
   sum_part06(08) <= signal_nco(5) and input_phase(3);
233
   sum_part06(09) <= signal_nco(5) and input_phase(4);
234
   sum_part06(10) <= signal_nco(5) and input_phase(5);
235
   sum_part06(11) <= signal_nco(5) and input_phase(6);
236
   sum_part06(12) <= signal_nco(5) and input_phase(7);
237
   sum_part06(13) <= signal_nco(5) and input_phase(7);
238
 
239
   sum_part07(00) <= '0';
240
   sum_part07(01) <= '0';
241
   sum_part07(02) <= '0';
242
   sum_part07(03) <= '0';
243
   sum_part07(04) <= '0';
244
   sum_part07(05) <= '0';
245
   sum_part07(06) <= signal_nco(6) and input_phase(0);
246
   sum_part07(07) <= signal_nco(6) and input_phase(1);
247
   sum_part07(08) <= signal_nco(6) and input_phase(2);
248
   sum_part07(09) <= signal_nco(6) and input_phase(3);
249
   sum_part07(10) <= signal_nco(6) and input_phase(4);
250
   sum_part07(11) <= signal_nco(6) and input_phase(5);
251
   sum_part07(12) <= signal_nco(6) and input_phase(6);
252
   sum_part07(13) <= signal_nco(6) and input_phase(7);
253
   sum_part07(14) <= signal_nco(6) and input_phase(7);
254
 
255
   sum_part08(00) <= '0';
256
   sum_part08(01) <= '0';
257
   sum_part08(02) <= '0';
258
   sum_part08(03) <= '0';
259
   sum_part08(04) <= '0';
260
   sum_part08(05) <= '0';
261
   sum_part08(06) <= '0';
262
   sum_part08(07) <= signal_nco(7) and input_phase(0);
263
   sum_part08(08) <= signal_nco(7) and input_phase(1);
264
   sum_part08(09) <= signal_nco(7) and input_phase(2);
265
   sum_part08(10) <= signal_nco(7) and input_phase(3);
266
   sum_part08(11) <= signal_nco(7) and input_phase(4);
267
   sum_part08(12) <= signal_nco(7) and input_phase(5);
268
   sum_part08(13) <= signal_nco(7) and input_phase(6);
269
   sum_part08(14) <= signal_nco(7) and input_phase(7);
270
   sum_part08(15) <= signal_nco(7) and input_phase(7);
271
 
272
   sum_part08_t (00) <= (not (sum_part08 (00)));
273
   sum_part08_t (01) <= (not (sum_part08 (01)));
274
   sum_part08_t (02) <= (not (sum_part08 (02)));
275
   sum_part08_t (03) <= (not (sum_part08 (03)));
276
   sum_part08_t (04) <= (not (sum_part08 (04)));
277
   sum_part08_t (05) <= (not (sum_part08 (05)));
278
   sum_part08_t (06) <= (not (sum_part08 (06)));
279
   sum_part08_t (07) <= (not (sum_part08 (07)));
280
   sum_part08_t (08) <= (not (sum_part08 (08)));
281
   sum_part08_t (09) <= (not (sum_part08 (09)));
282
   sum_part08_t (10) <= (not (sum_part08 (10)));
283
   sum_part08_t (11) <= (not (sum_part08 (11)));
284
   sum_part08_t (12) <= (not (sum_part08 (12)));
285
   sum_part08_t (13) <= (not (sum_part08 (13)));
286
   sum_part08_t (14) <= (not (sum_part08 (14)));
287
   sum_part08_t (15) <= (not (sum_part08 (15)));
288
 
289
   sum_part08_o (00) <= '1';
290
   sum_part08_o (01) <= '0';
291
   sum_part08_o (02) <= '0';
292
   sum_part08_o (03) <= '0';
293
   sum_part08_o (04) <= '0';
294
   sum_part08_o (05) <= '0';
295
   sum_part08_o (06) <= '0';
296
   sum_part08_o (07) <= '0';
297
   sum_part08_o (08) <= '0';
298
   sum_part08_o (09) <= '0';
299
   sum_part08_o (10) <= '0';
300
   sum_part08_o (11) <= '0';
301
   sum_part08_o (12) <= '0';
302
   sum_part08_o (13) <= '0';
303
   sum_part08_o (14) <= '0';
304
   sum_part08_o (15) <= '0';
305
 
306
stage_01 : adder_09bit
307
   port map (
308
   addend_09bit   (08 downto 0)  => sum_part01_z,
309
   augend_09bit   (08 downto 0)  => sum_part01,
310
   adder09_output (09 downto 0)  => adder_stage_01
311
   );
312
 
313
stage_02 : adder_10bit
314
   port map (
315
   addend_10bit   (09 downto 0)  => adder_stage_01,
316
   augend_10bit   (09 downto 0)  => sum_part02,
317
   adder10_output (10 downto 0)  => adder_stage_02
318
   );
319
 
320
stage_03 : adder_11bit
321
   port map (
322
   addend_11bit   (10 downto 0)  => adder_stage_02,
323
   augend_11bit   (10 downto 0)  => sum_part03,
324
   adder11_output (11 downto 0)  => adder_stage_03
325
   );
326
 
327
stage_04 : adder_12bit
328
   port map (
329
   addend_12bit   (11 downto 0)  => adder_stage_03,
330
   augend_12bit   (11 downto 0)  => sum_part04,
331
   adder12_output (12 downto 0)  => adder_stage_04
332
   );
333
 
334
stage_05 : adder_13bit
335
   port map (
336
   addend_13bit   (12 downto 0)  => adder_stage_04,
337
   augend_13bit   (12 downto 0)  => sum_part05,
338
   adder13_output (13 downto 0)  => adder_stage_05
339
   );
340
 
341
stage_06 : adder_14bit
342
   port map (
343
   addend_14bit   (13 downto 0)  => adder_stage_05,
344
   augend_14bit   (13 downto 0)  => sum_part06,
345
   adder14_output (14 downto 0)  => adder_stage_06
346
   );
347
 
348
stage_07 : adder_15bit
349
   port map (
350
   addend_15bit   (14 downto 0)  => adder_stage_06,
351
   augend_15bit   (14 downto 0)  => sum_part07,
352
   adder15_output (15 downto 0)  => adder_stage_07
353
   );
354
 
355
stage_08_a : adder_16bit_u
356
   port map (
357
   addend_16bit   (15 downto 0)  => sum_part08_t,
358
   augend_16bit   (15 downto 0)  => sum_part08_o,
359
   adder16_output (15 downto 0)  => sum_part08_a
360
   );
361
 
362
stage_08 : adder_16bit
363
   port map (
364
   addend_16bit   (15 downto 0)  => adder_stage_07,
365
   augend_16bit   (15 downto 0)  => sum_part08_a,
366
   adder16_output (16 downto 0)  => adder_stage_08
367
   );
368
 
369
   input_phase <= mult_01;
370
   signal_nco  <= mult_02;
371
   result_mult <= adder_stage_08(15 downto 0);
372
 
373
end structural;

powered by: WebSVN 2.1.0

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