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

Subversion Repositories cfft

[/] [cfft/] [trunk/] [src/] [p2r_cordic.vhd] - Blame information for rev 14

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 sradio
--
2
--      VHDL implementation of cordic algorithm
3
--
4
-- File: p2r_cordic.vhd
5
-- author: Richard Herveille
6
-- rev. 1.0 initial release
7
--
8
 
9
--
10
--
11
-- This file is come from www.opencores.org
12
-- 
13
-- It has been modified by zhaom to enable 20 bit phase input
14
--
15
---------------------------------------------------------------------------------------------------
16
--
17
-- Title       : p2r_cordic
18
-- Design      : cfft
19
--
20
---------------------------------------------------------------------------------------------------
21
--
22
-- File        : p2r_cordic.vhd
23
--
24
---------------------------------------------------------------------------------------------------
25
--
26
-- Description : Cordic arith pilepline 
27
--
28
---------------------------------------------------------------------------------------------------
29
--
30
-- Revisions       :    0
31
-- Revision Number :    1
32
-- Version         :    1
33
-- Date            :    Oct 17 2002
34
-- Modifier        :    ZHAO Ming <sradio@opencores.org>
35
-- Desccription    :    Data width configurable 
36
--
37
---------------------------------------------------------------------------------------------------
38
 
39
 
40
library ieee;
41
use ieee.std_logic_1164.all;
42
use ieee.std_logic_arith.all;
43
 
44
entity p2r_cordic is
45
        generic(
46
                PIPELINE : integer := 15;
47
                WIDTH    : integer := 16);
48
        port(
49
                clk     : in std_logic;
50
                ena : in std_logic;
51
 
52
                Xi      : in signed(WIDTH -1 downto 0);
53
                Yi : in signed(WIDTH -1 downto 0) := (others => '0');
54
                Zi      : in signed(19 downto 0);
55
 
56
                Xo      : out signed(WIDTH -1 downto 0);
57
                Yo      : out signed(WIDTH -1 downto 0)
58
        );
59
end entity p2r_Cordic;
60
 
61
 
62
architecture dataflow of p2r_cordic is
63
 
64
        --
65
        --      TYPE defenitions
66
        --
67
        type XYVector is array(PIPELINE downto 0) of signed(WIDTH -1 downto 0);
68
        type ZVector is array(PIPELINE downto 0) of signed(19 downto 0);
69
 
70
        --
71
        --      COMPONENT declarations
72
        --
73
        component p2r_CordicPipe
74
        generic(
75
                WIDTH   : natural := 16;
76
                PIPEID  : natural := 1
77
        );
78
        port(
79
                clk             : in std_logic;
80
                ena             : in std_logic;
81
 
82
                Xi              : in signed(WIDTH -1 downto 0);
83
                Yi              : in signed(WIDTH -1 downto 0);
84
                Zi              : in signed(19 downto 0);
85
 
86
                Xo              : out signed(WIDTH -1 downto 0);
87
                Yo              : out signed(WIDTH -1 downto 0);
88
                Zo              : out signed(19 downto 0)
89
        );
90
        end component p2r_CordicPipe;
91
 
92
        --
93
        --      SIGNALS
94
        --
95
        signal X, Y     : XYVector;
96
        signal Z        : ZVector;
97
 
98
        --
99
        --      ACHITECTURE BODY
100
        --
101
begin
102
        -- fill first nodes
103
 
104
        -- fill X
105
        X(0) <= Xi;
106
 
107
        -- fill Y
108
        Y(0) <= Yi;
109
 
110
        -- fill Z
111
        Z(0)(19 downto 0) <= Zi;                          -- modified by zhaom
112
        --Z(0)(3 downto 0) <= (others => '0');  -- modified by zhaom
113
 
114
        --
115
        -- generate pipeline
116
        --
117
        gen_pipe:
118
        for n in 1 to PIPELINE generate
119
                Pipe: p2r_CordicPipe
120
                        generic map(WIDTH => WIDTH, PIPEID => n -1)
121
                        port map ( clk, ena, X(n-1), Y(n-1), Z(n-1), X(n), Y(n), Z(n) );
122
        end generate gen_pipe;
123
 
124
        --
125
        -- assign outputs
126
        --
127
        Xo <= X(PIPELINE);
128
        Yo <= Y(PIPELINE);
129
end dataflow;
130
 
131
 

powered by: WebSVN 2.1.0

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