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

Subversion Repositories graphiti

[/] [graphiti/] [trunk/] [xilinx/] [pal.vhd] - Blame information for rev 8

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 pototschni
-------------------------------------------------------------------------------
2
--      MiniGA
3
--  Author: Thomas Pototschnig (thomas.pototschnig@gmx.de)
4
--
5
--  License: Creative Commons Attribution-NonCommercial-ShareAlike 2.0 License
6
--           http://creativecommons.org/licenses/by-nc-sa/2.0/de/
7
--
8
--  If you want to use MiniGA for commercial purposes please contact the author
9
-------------------------------------------------------------------------------
10
library IEEE;
11
use IEEE.STD_LOGIC_1164.ALL;
12
use IEEE.STD_LOGIC_ARITH.ALL;
13
use IEEE.STD_LOGIC_UNSIGNED.ALL;
14
 
15
entity pal is
16
        Port (
17
                clk : in std_logic;
18
                clk15M : in std_logic;
19
                reset : in std_logic;
20
                output : out std_logic_vector (15 downto 0);
21
                in_r : in std_logic_vector (4 downto 0);
22
                in_g : in std_logic_vector (4 downto 0);
23
                in_b : in std_logic_vector (4 downto 0);
24
                framereset : out std_logic;
25
                en_bild : out std_logic;
26
                readmem: out std_logic
27
        );
28
end pal;
29
 
30
architecture behaviour of pal is
31
 
32
component paltimer is
33
    Port (
34
                clk : in std_logic;
35
                clk15m : in std_logic;
36
                reset : in std_logic;
37
                en_sync : out std_logic;
38
                en_schwarz : out std_logic;
39
                en_bild : out std_logic;
40
                en_vertbr : out std_logic;
41
                en_verteq : out std_logic;
42
                en_burst : out std_logic;
43
                phase : out std_logic;
44
                framereset : out std_logic;
45
                sync : out std_logic;
46
                readmem : out std_logic;
47
                austastung : out std_logic
48
        );
49
end component;
50
 
51
component dds is
52
    Port (
53
                        clk : in std_logic;
54
                        reset : in std_logic;
55
                        phase : in std_logic_vector (1 downto 0);
56
                        addi : out std_logic_vector (8 downto 0);
57
                        data : out std_logic_vector (15 downto 0)
58
        );
59
end component;
60
 
61
component rgb2yuv is
62
    Port (
63
                        clk : in std_logic;
64
                        reset : in std_logic;
65
                        in_r, in_g, in_b : in std_logic_vector (4 downto 0);
66
                        out_y, out_u, out_v : out std_logic_vector (11 downto 0)
67
        );
68
end component;
69
 
70
component myfir is
71
        generic (
72
                TAPS : integer := 16
73
        );
74
        port (
75
                clk : in std_logic;
76
                reset : in std_logic;
77
                input : in std_logic_vector(11 downto 0);
78
                output : out std_logic_vector(11 downto 0)
79
        );
80
end component;
81
 
82
component delay is
83
        generic (
84
                TAPS : integer := 8 -- group-delay der FIR-Filter ist 500ns
85
        );
86
        port (
87
                clk : in std_logic;
88
                reset : in std_logic;
89
                input : in std_logic_vector(11 downto 0);
90
                output : out std_logic_vector(11 downto 0)
91
        );
92
end component;
93
 
94
 
95
signal cos_data : signed (15 downto 0);
96
signal sin_data : signed (15 downto 0);
97
 
98
signal pre_yuv_y : signed (11 downto 0);
99
signal pre_yuv_u : signed (11 downto 0);
100
signal pre_yuv_v : signed (11 downto 0);
101
 
102
signal pre_yuv_u2 : signed (11 downto 0);
103
signal pre_yuv_v2 : signed (11 downto 0);
104
 
105
 
106
 
107
signal yuv_y : signed (11 downto 0);
108
signal yuv_u : signed (11 downto 0);
109
signal yuv_v : signed (11 downto 0);
110
 
111
 
112
signal tmr_phase : std_logic;
113
signal tmr_sync : std_logic;
114
signal tmr_austastung : std_logic;
115
signal tmr_en_bild : std_logic;
116
signal tmr_en_burst : std_logic;
117
 
118
--signal prevideo : signed (16 downto 0);
119
--signal preout_u : signed (16 downto 0);
120
--signal preout_v : signed (16 downto 0);
121
--signal preout_y : signed (16 downto 0);
122
 
123
--pipelining wegen geschwindigkeit
124
signal modu : signed(27 downto 0);
125
signal modv : signed(27 downto 0);
126
signal mody : signed (11 downto 0);
127
 
128
signal modus : signed(28 downto 0);
129
signal modvs : signed(28 downto 0);
130
signal modys : signed(28 downto 0);
131
 
132
 
133
-- workaround für xilinx
134
signal input_fir1 : std_logic_vector (11 downto 0);
135
signal input_fir2 : std_logic_vector (11 downto 0);
136
signal input_delay : std_logic_vector (11 downto 0);
137
 
138
signal output_fir1 : std_logic_vector (11 downto 0);
139
signal output_fir2 : std_logic_vector (11 downto 0);
140
signal output_delay : std_logic_vector (11 downto 0);
141
 
142
signal dds1_data : std_logic_vector (15 downto 0);
143
signal dds2_data : std_logic_vector (15 downto 0);
144
 
145
signal rgb_out_v : std_logic_vector (11 downto 0);
146
signal rgb_out_u : std_logic_vector (11 downto 0);
147
signal rgb_out_y : std_logic_vector (11 downto 0);
148
 
149
 
150
begin
151
        input_fir1 <= std_logic_vector(pre_yuv_u);
152
        input_fir2 <= std_logic_vector(pre_yuv_v);
153
        input_delay <= std_logic_vector(pre_yuv_y);
154
 
155
        yuv_u <= signed(output_fir1);
156
        yuv_v <= signed(output_fir2);
157
        yuv_y <= signed(output_delay);
158
 
159
I_4: myfir port map (
160
        clk => clk15M,
161
        reset => reset,
162
        input => input_fir1,
163
        output => output_fir1
164
);
165
 
166
I_5: myfir port map (
167
        clk => clk15M,
168
        reset => reset,
169
        input => input_fir2,
170
        output => output_fir2
171
);
172
 
173
I_6: delay port map (
174
        clk => clk15M,
175
        reset => reset,
176
        input => input_delay,
177
        output => output_delay
178
 
179
);
180
 
181
I_0:    paltimer        port map (
182
                        clk => clk,
183
                        clk15m => clk15m,
184
                        reset => reset,
185
                        en_sync => open,
186
                        en_schwarz => open,
187
                        en_bild => tmr_en_bild,
188
                        en_vertbr => open,
189
                        en_verteq => open,
190
                        en_burst => tmr_en_burst,
191
                        phase => tmr_phase,
192
                        sync => tmr_sync,
193
                        austastung => tmr_austastung,
194
                        framereset => framereset,
195
                        readmem => readmem
196
                );
197
 
198
I_1:    dds     port map (
199
                        clk => clk,
200
                        reset => reset,
201
                        phase => "01",  -- cosinus
202
                        addi => open,
203
                        data => dds1_data
204
                );
205
 
206
        cos_data <= signed(dds1_data);
207
        sin_data <= signed(dds2_data);
208
 
209
I_2:    dds     port map (
210
                        clk => clk,
211
                        reset => reset,
212
                        phase => "00",  -- sinus
213
                        addi => open,
214
                        data => dds2_data
215
                );
216
 
217
I_3:    rgb2yuv port map (
218
                        clk => clk15m,
219
                        reset => reset,
220
                        in_r => in_r,
221
                        in_g => in_g,
222
                        in_b => in_b,
223
                        out_y => rgb_out_y,
224
                        out_u => rgb_out_u,
225
                        out_v => rgb_out_v
226
                );
227
 
228
pre_yuv_y <= signed(rgb_out_y);
229
pre_yuv_u2 <= signed(rgb_out_u);
230
pre_yuv_v2 <= signed(rgb_out_v);
231
 
232
 
233
en_bild <= tmr_en_bild;
234
 
235
 
236
process (tmr_en_burst, tmr_austastung, tmr_en_bild, pre_yuv_u2, pre_yuv_v2)
237
begin
238
        if tmr_austastung = '1' then
239
                if tmr_en_bild='1' then
240
                        pre_yuv_u <= pre_yuv_u2;
241
                        pre_yuv_v <= pre_yuv_v2;
242
                elsif tmr_en_burst = '1' then
243
                        pre_yuv_u <= conv_signed(-171,12);
244
                        pre_yuv_v <= conv_signed(171,12);
245
                else
246
                        pre_yuv_u <= conv_signed(0,12);
247
                        pre_yuv_v <= conv_signed(0,12);
248
                end if;
249
        else
250
                pre_yuv_u <= conv_signed(0,12);
251
                pre_yuv_v <= conv_signed(0,12);
252
        end if;
253
end process;
254
 
255
process (clk, reset)
256
 
257
variable skaleuv : signed(16 downto 0) := conv_signed(30000,17);--40000
258
variable skaley : signed(16 downto 0) := conv_signed(36408,17);
259
variable skaleburst : signed (11 downto 0) := conv_signed(240,12);
260
variable psin : signed (15 downto 0);
261
 
262
variable preout_u : signed (16 downto 0);
263
variable preout_v : signed (16 downto 0);
264
variable preout_y : signed (16 downto 0);
265
variable prevideo : signed (16 downto 0);
266
 
267
variable bursts : signed (27 downto 0);
268
 
269
variable burstsin : signed (17 downto 0);
270
variable burstcos : signed (17 downto 0);
271
variable burst17 : signed (16 downto 0);
272
 
273
variable i_output : signed (16 downto 0);
274
 
275
begin
276
 
277
        if reset='0' then
278
           output <= (others => '0');
279
        elsif clk'event and clk='1' then
280
                if tmr_phase='1' then
281
                        psin := -sin_data;
282
                else
283
                        psin := sin_data;
284
                end if;
285
 
286
-- u und v modulieren           
287
                modu <= cos_data * yuv_u;
288
                modv <= psin * yuv_v;
289
                mody <= yuv_y;
290
 
291
-- jetzt skalieren
292
                modus <= modu (26 downto 15) * skaleuv;
293
                modvs <= modv (26 downto 15) * skaleuv;
294
                modys <= mody * skaley; -- yuv_y
295
 
296
                preout_u := modus (26 downto 10);
297
                preout_v := modvs (26 downto 10);
298
                preout_y := modys (26 downto 10);
299
 
300
-- Y, U und V jetzt zum Signal zusammenbauen
301
                prevideo := preout_u + preout_v;
302
 
303
                if tmr_austastung = '1' and tmr_en_bild='1' then
304
                        prevideo := prevideo + preout_y;
305
                end if;
306
 
307
                if tmr_sync ='0' then
308
                        i_output := (others => '0');
309
                else
310
                                i_output := conv_signed(14563,17) + prevideo;
311
                end if;
312
 
313
                output <= conv_std_logic_vector (i_output (15 downto 0),16);
314
 
315
        end if;
316
end process;
317
 
318
end behaviour;

powered by: WebSVN 2.1.0

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