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

Subversion Repositories simple_fm_receiver

[/] [simple_fm_receiver/] [tags/] [VSFR_1/] [source/] [loop_filter.vhdl] - Blame information for rev 32

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 arif_endro
-- $Id: loop_filter.vhdl,v 1.1.1.1 2005-01-04 02:05:58 arif_endro Exp $
2
-------------------------------------------------------------------------------
3
-- Title       : Loop filter component
4
-- Project     : FM Receiver 
5
-------------------------------------------------------------------------------
6
-- File        : loop_filter.vhdl
7
-- Author      : "Arif E. Nugroho" <arif_endro@yahoo.com>
8
-- Created     : 2004/11/12
9
-- Last update : 
10
-- Simulators  : Modelsim 6.0
11
-- Synthesizers: 
12
-- Target      : 
13
-------------------------------------------------------------------------------
14
-- Description : loop filter in PLL loop
15
-------------------------------------------------------------------------------
16
-- Copyright (c) 2004 Arif E. Nugroho
17
-- 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
 
21
library IEEE;
22
use IEEE.STD_LOGIC_1164.ALL;
23
use IEEE.STD_LOGIC_arith.ALL;
24
 
25
entity loop_filter is
26
  port (
27
     input_loop   : in  bit_vector (07 downto 0);
28
     clock        : in  bit;
29
     output_loop  : out bit_vector (11 downto 0);
30
     clear        : in  bit
31
     );
32
end loop_filter;
33
 
34
architecture structural of loop_filter is
35
 
36
  component adder_12bit
37
     port (
38
     addend_12bit   : in  bit_vector (11 downto 0);
39
     augend_12bit   : in  bit_vector (11 downto 0);
40
     adder12_output : out bit_vector (12 downto 0)
41
     );
42
  end component;
43
 
44
  component sub_12bit
45
     port (
46
     addend_12bit        : in  bit_vector (11 downto 0);
47
     subtrahend_12bit    : in  bit_vector (11 downto 0);
48
     subtractor12_output : out bit_vector (11 downto 0)
49
     );
50
  end component;
51
 
52
  signal input_recv        : bit_vector (11 downto 0);
53
  signal loop_out          : bit_vector (11 downto 0);
54
  signal loop_out_div      : bit_vector (11 downto 0);
55
  signal loop_out_back1    : bit_vector (11 downto 0);
56
  signal multiply_output01 : bit_vector (11 downto 0);
57
  signal adder_output01    : bit_vector (12 downto 0);
58
  signal adder_output01_reg: bit_vector (12 downto 0);
59
 
60
  begin
61
 
62
  input_recv (11) <= input_loop (07); -- 1
63
  input_recv (10) <= input_loop (07); -- 1/2
64
  input_recv (09) <= input_loop (07); -- 1/4
65
  input_recv (08) <= input_loop (07); -- 1/8
66
  input_recv (07) <= input_loop (07); -- 1/16
67
  input_recv (06) <= input_loop (06);
68
  input_recv (05) <= input_loop (05);
69
  input_recv (04) <= input_loop (04);
70
  input_recv (03) <= input_loop (03);
71
  input_recv (02) <= input_loop (02);
72
  input_recv (01) <= input_loop (01);
73
  input_recv (00) <= input_loop (00);
74
 
75
adder01 : adder_12bit
76
  port map (
77
          addend_12bit    => loop_out_div,
78
          augend_12bit    => input_recv,
79
          adder12_output  => adder_output01
80
          );
81
 
82
  loop_out_back1(11)  <= loop_out(11); -- 1
83
  loop_out_back1(10)  <= loop_out(11); -- 1/2
84
  loop_out_back1(09)  <= loop_out(11); -- 1/4
85
  loop_out_back1(08)  <= loop_out(11); -- 1/8
86
  loop_out_back1(07)  <= loop_out(11); -- 1/16
87
  loop_out_back1(06)  <= loop_out(10);
88
  loop_out_back1(05)  <= loop_out(09);
89
  loop_out_back1(04)  <= loop_out(08);
90
  loop_out_back1(03)  <= loop_out(07);
91
  loop_out_back1(02)  <= loop_out(06);
92
  loop_out_back1(01)  <= loop_out(05);
93
  loop_out_back1(00)  <= loop_out(04);
94
 
95
multiply01 : sub_12bit
96
  port map (
97
          addend_12bit               => loop_out,
98
          subtrahend_12bit           => loop_out_back1,
99
          subtractor12_output        => multiply_output01
100
          );
101
 
102
  loop_out_div <= multiply_output01;
103
 
104
  adder_output01_reg (11) <= (adder_output01 (11) and not(clear));
105
  adder_output01_reg (10) <= (adder_output01 (10) and not(clear));
106
  adder_output01_reg (09) <= (adder_output01 (09) and not(clear));
107
  adder_output01_reg (08) <= (adder_output01 (08) and not(clear));
108
  adder_output01_reg (07) <= (adder_output01 (07) and not(clear));
109
  adder_output01_reg (06) <= (adder_output01 (06) and not(clear));
110
  adder_output01_reg (05) <= (adder_output01 (05) and not(clear));
111
  adder_output01_reg (04) <= (adder_output01 (04) and not(clear));
112
  adder_output01_reg (03) <= (adder_output01 (03) and not(clear));
113
  adder_output01_reg (02) <= (adder_output01 (02) and not(clear));
114
  adder_output01_reg (01) <= (adder_output01 (01) and not(clear));
115
  adder_output01_reg (00) <= (adder_output01 (00) and not(clear));
116
 
117
  process (clock)
118
  begin
119
 
120
--if (((clock = '1') and (not (clear = '1'))) and clock'event) then
121
  if ((clock = '1') and clock'event) then
122
-- loop_out (11) <= adder_output01_reg (12);
123
   loop_out (11) <= adder_output01_reg (11);
124
   loop_out (10) <= adder_output01_reg (10);
125
   loop_out (09) <= adder_output01_reg (09);
126
   loop_out (08) <= adder_output01_reg (08);
127
   loop_out (07) <= adder_output01_reg (07);
128
   loop_out (06) <= adder_output01_reg (06);
129
   loop_out (05) <= adder_output01_reg (05);
130
   loop_out (04) <= adder_output01_reg (04);
131
   loop_out (03) <= adder_output01_reg (03);
132
   loop_out (02) <= adder_output01_reg (02);
133
   loop_out (01) <= adder_output01_reg (01);
134
   loop_out (00) <= adder_output01_reg (00);
135
 
136
--  end if;
137
 
138
--  elsif (clear = '1') then -- can't be synhesized in Xilinx
139
--   loop_out <= (others => '0');
140
 
141
  end if;
142
  end process;
143
 
144
  output_loop <= loop_out;
145
 
146
end structural;

powered by: WebSVN 2.1.0

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