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

Subversion Repositories vga_lcd

[/] [vga_lcd/] [tags/] [beta/] [pgen.vhd] - Blame information for rev 62

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 rherveille
--
2
-- File pgen.vhd, Video Pixel Generator
3
-- Project: VGA
4
-- Author : Richard Herveille
5
-- rev.: 0.1 April 19th, 2001
6
--
7
--
8
--
9
 
10
library ieee;
11
use ieee.std_logic_1164.all;
12
use ieee.std_logic_arith.all;
13
 
14
entity Pgen is
15
        port(
16
                mclk : in std_logic;                        -- master clock
17
                pclk : in std_logic;                        -- pixel clock
18
 
19
                ctrl_Ven : in std_logic;                    -- VideoEnable signal
20
 
21
                -- horizontal timing settings
22
                ctrl_HSyncL : in std_logic;                 -- horizontal sync pulse polarization level (pos/neg)
23
                Thsync : in unsigned(7 downto 0);           -- horizontal sync pulse width (in pixels)
24
                Thgdel : in unsigned(7 downto 0);           -- horizontal gate delay (in pixels)
25
                Thgate : in unsigned(15 downto 0);          -- horizontal gate (number of visible pixels per line)
26
                Thlen  : in unsigned(15 downto 0);          -- horizontal length (number of pixels per line)
27
 
28
                -- vertical timing settings
29
                ctrl_VSyncL : in std_logic;                 -- vertical sync pulse polarization level (pos/neg)
30
                Tvsync : in unsigned(7 downto 0);           -- vertical sync width (in lines)
31
                Tvgdel : in unsigned(7 downto 0);           -- vertical gate delay (in lines)
32
                Tvgate : in unsigned(15 downto 0);          -- vertical gate (visible number of lines in frame)
33
                Tvlen  : in unsigned(15 downto 0);          -- vertical length (number of lines in frame)
34
 
35
                ctrl_CSyncL : in std_logic;                 -- composite sync pulse polarization level
36
                ctrl_BlankL : in std_logic;                 -- blank signal polarization level
37
 
38
                -- status outputs
39
                eoh,                                        -- end of horizontal
40
                eov,                                        -- end of vertical
41
                Gate : out std_logic;                       -- vertical AND horizontal gate (logical AND function)
42
 
43
                -- pixel control outputs
44
                Hsync,                                      -- horizontal sync pulse
45
                Vsync,                                      -- vertical sync pulse
46
                Csync,                                      -- composite sync: Hsync OR Vsync (logical OR function)
47
                Blank : out std_logic                       -- blank signals
48
        );
49
end entity Pgen;
50
 
51
architecture dataflow of Pgen is
52
        --
53
        -- Component declarations
54
        --
55
        component tgen is
56
        port(
57
                clk : in std_logic;
58
                rst : in std_logic;
59
 
60
                -- horizontal timing settings
61
                HSyncL : in std_logic;              -- horizontal sync pulse polarization level (pos/neg)
62
                Thsync : in unsigned(7 downto 0);   -- horizontal sync pulse width (in pixels)
63
                Thgdel : in unsigned(7 downto 0);   -- horizontal gate delay (in pixels)
64
                Thgate : in unsigned(15 downto 0);  -- horizontal gate (number of visible pixels per line)
65
                Thlen  : in unsigned(15 downto 0);  -- horizontal length (number of pixels per line)
66
 
67
                -- vertical timing settings
68
                VSyncL : in std_logic;              -- vertical sync pulse polarization level (pos/neg)
69
                Tvsync : in unsigned(7 downto 0);   -- vertical sync width (in lines)
70
                Tvgdel : in unsigned(7 downto 0);   -- vertical gate delay (in lines)
71
                Tvgate : in unsigned(15 downto 0);  -- vertical gate (visible number of lines in frame)
72
                Tvlen  : in unsigned(15 downto 0);  -- vertical length (number of lines in frame)
73
 
74
                CSyncL : in std_logic;              -- composite sync pulse polarization level (pos/neg)
75
                BlankL : in std_logic;              -- blank signal polarization level
76
 
77
                eol,                                -- end of line
78
                eof,                                -- end of frame
79
                gate,                               -- vertical AND horizontal gate (logical and function)
80
 
81
                Hsync,                              -- horizontal sync pulse
82
                Vsync,                              -- vertical sync pulse
83
                Csync,                              -- composite sync pulse
84
                Blank : out std_logic               -- blank signal
85
        );
86
        end component tgen;
87
 
88
        --
89
        -- signals
90
        --
91
        signal eol, eof : std_logic;
92
begin
93
        --
94
        -- timing block
95
        --
96
        tblk: block
97
                signal nVen : std_logic;                 -- video enable signal (active low)
98
                signal sHSyncL : std_logic;              -- horizontal sync pulse polarization level (pos/neg)
99
                signal sThsync : unsigned(7 downto 0);   -- horizontal sync pulse width (in pixels)
100
                signal sThgdel : unsigned(7 downto 0);   -- horizontal gate delay (in pixels)
101
                signal sThgate : unsigned(15 downto 0);  -- horizontal gate (number of visible pixels per line)
102
                signal sThlen  : unsigned(15 downto 0);  -- horizontal length (number of pixels per line)
103
 
104
                -- vertical timing settings
105
                signal sVSyncL : std_logic;              -- vertical sync pulse polarization level (pos/neg)
106
                signal sTvsync : unsigned(7 downto 0);   -- vertical sync width (in lines)
107
                signal sTvgdel : unsigned(7 downto 0);   -- vertical gate delay (in lines)
108
                signal sTvgate : unsigned(15 downto 0);  -- vertical gate (visible number of lines in frame)
109
                signal sTvlen  : unsigned(15 downto 0);  -- vertical length (number of lines in frame)
110
 
111
                signal sCSyncL : std_logic;              -- composite sync pulse polarization level (pos/neg)
112
                signal sBlankL : std_logic;              -- blank signal polarization level
113
        begin
114
                -- synchronize timing/control settings (from master-clock-domain to pixel-clock-domain)
115
                sync_settings: process(pclk)
116
                begin
117
                        if (pclk'event and pclk = '1') then
118
                                nVen    <= not ctrl_Ven;
119
                                sHSyncL <= ctrl_HSyncL;
120
                                sThsync <= Thsync;
121
                                sThgdel <= Thgdel;
122
                                sThgate <= Thgate;
123
                                sThlen  <= Thlen;
124
                                sVSyncL <= ctrl_VSyncL;
125
                                sTvsync <= Tvsync;
126
                                sTvgdel <= Tvgdel;
127
                                sTvgate <= Tvgate;
128
                                sTvlen  <= Tvlen;
129
                                sCSyncL <= ctrl_CSyncL;
130
                                sBlankL <= ctrl_BlankL;
131
                        end if;
132
                end process sync_settings;
133
 
134
                -- hookup video timing generator
135
                vtgen: tgen port map (clk => pclk, rst => nVen, HSyncL => sHSyncL, Thsync => sThsync, Thgdel => sThgdel, Thgate => sThgate, Thlen => sThlen,
136
                                                                                                VsyncL => sVsyncL, Tvsync => sTvsync, Tvgdel => sTvgdel, Tvgate => sTvgate, Tvlen => sTvlen, CSyncL => sCSyncL,
137
                                                                                                BlankL => sBlankL, eol => eol, eof => eof, gate => gate, Hsync => Hsync, Vsync => Vsync, Csync => Csync, Blank => Blank);
138
        end block tblk;
139
 
140
        --
141
        -- pixel clock
142
        --
143
        pblk: block
144
                signal seol, seof : std_logic;           -- synchronized end-of-line, end-of-frame
145
                signal dseol, dseof : std_logic;         -- delayed synchronized eol, eof
146
        begin
147
                -- synchronize eol, eof (from pixel-clock-domain to master-clock-domain)
148
                sync_eol_eof: process(mclk)
149
                begin
150
                        if (mclk'event and mclk = '1') then
151
                                seol  <= eol;
152
                                dseol <= seol;
153
                                seof  <= eof;
154
                                dseof <= seof;
155
                                eoh <= seol and not dseol;
156
                                eov <= seof and not dseof;
157
                        end if;
158
                end process sync_eol_eof;
159
        end block pblk;
160
 
161
end architecture dataflow;
162
 

powered by: WebSVN 2.1.0

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