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

Subversion Repositories mdct

[/] [mdct/] [trunk/] [source/] [MDCT.VHD] - Blame information for rev 27

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 mikel262
--------------------------------------------------------------------------------
2
--                                                                            --
3
--                          V H D L    F I L E                                --
4 27 mikel262
--                          COPYRIGHT (C) 2006-2009                           --
5 2 mikel262
--                                                                            --
6
--------------------------------------------------------------------------------
7
--
8
-- Title       : DCT
9
-- Design      : MDCT Core
10
-- Author      : Michal Krepa
11
-- Company     : None
12
--
13
--------------------------------------------------------------------------------
14
--
15
-- File        : MDCT.VHD
16
-- Created     : Sat Feb 25 16:12 2006
17
--
18
--------------------------------------------------------------------------------
19
--
20
--  Description : Discrete Cosine Transform - chip top level (w/ memories)
21
--
22
--------------------------------------------------------------------------------
23
 
24
 
25
library IEEE;
26
  use IEEE.STD_LOGIC_1164.all;
27
 
28
library WORK;
29
  use WORK.MDCT_PKG.all;
30
 
31
 
32
entity MDCT is
33
        port(
34
                clk          : in STD_LOGIC;
35
                rst          : in std_logic;
36
    dcti         : in std_logic_vector(IP_W-1 downto 0);
37
    idv          : in STD_LOGIC;
38
 
39
    odv          : out STD_LOGIC;
40
    dcto         : out std_logic_vector(COE_W-1 downto 0);
41
    -- debug
42
    odv1         : out STD_LOGIC;
43
    dcto1        : out std_logic_vector(OP_W-1 downto 0)
44
 
45
                );
46
end MDCT;
47
 
48
architecture RTL of MDCT is
49
 
50 27 mikel262
  signal ramdatao_s           : STD_LOGIC_VECTOR(RAMDATA_W-1 downto 0);
51
  signal ramraddro_s          : STD_LOGIC_VECTOR(RAMADRR_W-1 downto 0);
52
  signal ramwaddro_s          : STD_LOGIC_VECTOR(RAMADRR_W-1 downto 0);
53
  signal ramdatai_s           : STD_LOGIC_VECTOR(RAMDATA_W-1 downto 0);
54
  signal ramwe_s              : STD_LOGIC;
55
 
56
  signal romedatao_s          : T_ROM1DATAO;
57
  signal romodatao_s          : T_ROM1DATAO;
58
  signal romeaddro_s          : T_ROM1ADDRO;
59
  signal romoaddro_s          : T_ROM1ADDRO;
60
 
61
  signal rome2datao_s         : T_ROM2DATAO;
62
  signal romo2datao_s         : T_ROM2DATAO;
63
  signal rome2addro_s         : T_ROM2ADDRO;
64
  signal romo2addro_s         : T_ROM2ADDRO;
65
 
66
  signal odv2_s                : STD_LOGIC;
67
  signal dcto2_s               : STD_LOGIC_VECTOR(OP_W-1 downto 0);
68
  signal trigger2_s            : STD_LOGIC;
69
  signal trigger1_s            : STD_LOGIC;
70
  signal ramdatao1_s           : STD_LOGIC_VECTOR(RAMDATA_W-1 downto 0);
71
  signal ramdatao2_s           : STD_LOGIC_VECTOR(RAMDATA_W-1 downto 0);
72
  signal ramwe1_s              : STD_LOGIC;
73
  signal ramwe2_s              : STD_LOGIC;
74
  signal memswitchrd_s         : STD_LOGIC;
75
  signal memswitchwr_s         : STD_LOGIC;
76
  signal wmemsel_s             : STD_LOGIC;
77
  signal rmemsel_s             : STD_LOGIC;
78
  signal dataready_s           : STD_LOGIC;
79
  signal datareadyack_s        : STD_LOGIC;
80 2 mikel262
 
81 27 mikel262
begin
82 2 mikel262
 
83
------------------------------
84
-- 1D DCT port map
85
------------------------------
86 27 mikel262
U_DCT1D : entity work.DCT1D
87 2 mikel262
  port map(
88
      clk          => clk,
89
      rst          => rst,
90
      dcti         => dcti,
91
      idv          => idv,
92 27 mikel262
      romedatao    => romedatao_s,
93
      romodatao    => romodatao_s,
94 15 mikel262
 
95 2 mikel262
      odv          => odv1,
96
      dcto         => dcto1,
97 27 mikel262
      romeaddro    => romeaddro_s,
98
      romoaddro    => romoaddro_s,
99 2 mikel262
      ramwaddro    => ramwaddro_s,
100
      ramdatai     => ramdatai_s,
101
      ramwe        => ramwe_s,
102 15 mikel262
      wmemsel      => wmemsel_s
103 2 mikel262
                );
104
 
105
------------------------------
106
-- 1D DCT port map
107
------------------------------
108 27 mikel262
U_DCT2D : entity work.DCT2D
109 2 mikel262
  port map(
110
      clk          => clk,
111
      rst          => rst,
112 27 mikel262
      romedatao    => rome2datao_s,
113
      romodatao    => romo2datao_s,
114 2 mikel262
      ramdatao     => ramdatao_s,
115
      dataready    => dataready_s,
116
 
117
      odv          => odv,
118
      dcto         => dcto,
119 27 mikel262
      romeaddro    => rome2addro_s,
120
      romoaddro    => romo2addro_s,
121 2 mikel262
      ramraddro    => ramraddro_s,
122 15 mikel262
      rmemsel      => rmemsel_s,
123
      datareadyack => datareadyack_s
124 2 mikel262
                );
125
 
126
------------------------------
127
-- RAM1 port map
128
------------------------------
129 27 mikel262
U1_RAM : entity work.RAM
130 2 mikel262
  port map (
131
        d          => ramdatai_s,
132
        waddr      => ramwaddro_s,
133
        raddr      => ramraddro_s,
134
        we         => ramwe1_s,
135
        clk        => clk,
136
 
137
        q          => ramdatao1_s
138
  );
139
 
140
------------------------------
141
-- RAM2 port map
142
------------------------------
143 27 mikel262
U2_RAM : entity work.RAM
144 2 mikel262
  port map (
145
        d          => ramdatai_s,
146
        waddr      => ramwaddro_s,
147
        raddr      => ramraddro_s,
148
        we         => ramwe2_s,
149
        clk        => clk,
150
 
151
        q          => ramdatao2_s
152
  );
153
 
154
-- double buffer switch
155
ramwe1_s     <= ramwe_s when memswitchwr_s = '0' else '0';
156
ramwe2_s     <= ramwe_s when memswitchwr_s = '1' else '0';
157
ramdatao_s   <= ramdatao1_s when memswitchrd_s = '0' else ramdatao2_s;
158
 
159
------------------------------
160
-- DBUFCTL
161
------------------------------
162 27 mikel262
U_DBUFCTL : entity work.DBUFCTL
163 2 mikel262
        port map(
164
                clk            => clk,
165
                rst            => rst,
166 15 mikel262
    wmemsel        => wmemsel_s,
167
    rmemsel        => rmemsel_s,
168
    datareadyack   => datareadyack_s,
169 2 mikel262
 
170
    memswitchwr    => memswitchwr_s,
171
    memswitchrd    => memswitchrd_s,
172
    dataready      => dataready_s
173
                );
174
 
175
------------------------------
176 27 mikel262
-- 1st stage ROMs
177 2 mikel262
------------------------------
178
 
179 27 mikel262
G_ROM_ST1 : for i in 0 to 8 generate
180
  U1_ROME : entity work.ROME
181 2 mikel262
  port map(
182 27 mikel262
       addr        => romeaddro_s(i),
183
       clk         => clk,
184 2 mikel262
 
185 27 mikel262
       datao       => romedatao_s(i)
186 2 mikel262
  );
187
 
188 27 mikel262
  U1_ROMO : entity work.ROMO
189 2 mikel262
  port map(
190 27 mikel262
       addr        => romoaddro_s(i),
191 11 mikel262
       clk         => clk,
192 2 mikel262
 
193 27 mikel262
       datao       => romodatao_s(i)
194
  );
195
end generate G_ROM_ST1;
196 2 mikel262
 
197
------------------------------
198 27 mikel262
-- 2nd stage ROMs
199 2 mikel262
------------------------------
200 27 mikel262
G_ROM_ST2 : for i in 0 to 10 generate
201
  U2_ROME : entity work.ROME
202 2 mikel262
  port map(
203 27 mikel262
       addr        => rome2addro_s(i),
204 11 mikel262
       clk         => clk,
205 2 mikel262
 
206 27 mikel262
       datao       => rome2datao_s(i)
207 2 mikel262
  );
208
 
209 27 mikel262
  U2_ROMO : entity work.ROMO
210 2 mikel262
  port map(
211 27 mikel262
       addr        => romo2addro_s(i),
212 11 mikel262
       clk         => clk,
213 2 mikel262
 
214 27 mikel262
       datao       => romo2datao_s(i)
215 2 mikel262
  );
216
 
217 27 mikel262
end generate G_ROM_ST2;
218 2 mikel262
 
219
end RTL;

powered by: WebSVN 2.1.0

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