init aus gzip
[dide_16.git] / bsp4 / Angabe / vga_control_arc.vhd
1 -------------------------------------------------------------------------------\r
2 -- Title      : vga_control architecture\r
3 -- Project    : LU Digital Design\r
4 -------------------------------------------------------------------------------\r
5 -- File       : vga_control.vhd\r
6 -- Author     : Thomas Handl\r
7 -- Company    : TU Wien\r
8 -- Created    : 2004-12-15\r
9 -- Last update: 2006-02-24\r
10 -------------------------------------------------------------------------------\r
11 -- Description: generation of colors (RGB)\r
12 -------------------------------------------------------------------------------\r
13 -- Copyright (c) 2004 TU Wien\r
14 -------------------------------------------------------------------------------\r
15 -- Revisions  :\r
16 -- Date        Version  Author  Description\r
17 -- 2004-12-15  1.0      handl   Created\r
18 -- 2006-02-24  2.0      ST      revised\r
19 -------------------------------------------------------------------------------\r
20 \r
21 -------------------------------------------------------------------------------\r
22 -- LIBRARIES\r
23 -------------------------------------------------------------------------------\r
24 \r
25 library IEEE;\r
26 use IEEE.std_logic_1164.all;\r
27 use IEEE.std_logic_unsigned.all;\r
28 use IEEE.std_logic_arith.all;\r
29 \r
30 use work.vga_pak.all;\r
31 \r
32 -------------------------------------------------------------------------------\r
33 -- ARCHITECTURE\r
34 -------------------------------------------------------------------------------\r
35 \r
36 architecture behav of vga_control is\r
37 \r
38 \r
39   attribute syn_preserve          : boolean;\r
40   attribute syn_preserve of behav : architecture is true;\r
41 \r
42 \r
43   -- signal and constant declarations  \r
44   signal   r_next, g_next, b_next  : std_logic;                                 -- auxiliary signals for next state logic\r
45   signal   toggle_sig   : std_logic;                                            -- auxiliary signal to allow read back of toggle\r
46   signal   toggle_counter_sig  : std_logic_vector(TOG_CNT_WIDTH-1 downto 0);    -- auxiliary signal to allow read back of blinker\r
47   signal   toggle_next  : std_logic;                                            -- auxiliary signal for next state logic\r
48   signal   toggle_counter_next : std_logic_vector(TOG_CNT_WIDTH-1 downto 0);    -- auxiliary signal for next state logic\r
49   constant HALFPERIOD   : std_logic_vector(TOG_CNT_WIDTH-1 downto 0) := "1100000000010001111011000";\r
50                                                                                 -- define half period of toggle frequency in clock ticks\r
51 \r
52 begin  \r
53   -----------------------------------------------------------------------------\r
54   -- draw rectangle on screen\r
55   -----------------------------------------------------------------------------\r
56     \r
57   DRAW_SQUARE_syn: process(clk, reset)\r
58   begin\r
59     if (reset = RES_ACT) then   -- draw black screen upon reset\r
60       r <= COLR_OFF;\r
61       g <= COLR_OFF;\r
62       b <= COLR_OFF;\r
63     elsif (clk'event and clk = '1') then     -- synchronous capture\r
64       r <= r_next;\r
65       g <= g_next;\r
66       b <= b_next;\r
67     end if;\r
68   end process;\r
69 \r
70 \r
71   DRAW_SQUARE_next: process (column_counter, line_counter, v_enable, h_enable, toggle_sig)\r
72   begin\r
73     if v_enable = ENABLE and h_enable = ENABLE then        \r
74       if (column_counter >= X_MIN and column_counter <= X_MAX and    -- if pixel within the rectangle borders\r
75           line_counter   >= Y_MIN and line_counter   <= Y_MAX) then\r
76         r_next <= toggle_sig;                                        -- ...red\r
77         g_next <= COLR_OFF;                                          -- ...green\r
78         b_next <= not toggle_sig;                                    -- ...blue\r
79       else                                                           -- if somewhere else on screen...\r
80         r_next <= COLR_OFF;\r
81         g_next <= COLR_OFF;                                          -- ... draw background color\r
82         b_next <= COLR_OFF;\r
83       end if;\r
84     else                                                             -- if out of screen...\r
85       r_next <= COLR_OFF;\r
86       g_next <= COLR_OFF;                                            -- ... do not activate any color\r
87       b_next <= COLR_OFF;                                            --     (black screen)\r
88     end if;\r
89   end process;\r
90 \r
91 \r
92   -----------------------------------------------------------------------------\r
93   -- control blinking of rectangle\r
94   -----------------------------------------------------------------------------\r
95 \r
96   BLINKER_syn: process(clk, reset)\r
97   begin\r
98     if (reset = RES_ACT) then                       -- asyn reset\r
99       toggle_counter_sig  <= (others => '0');\r
100       toggle_sig  <= COLR_OFF;\r
101     elsif(clk'event and clk = '1') then             -- synchronous capture\r
102       toggle_counter_sig <= toggle_counter_next;\r
103       toggle_sig  <= toggle_next;\r
104     end if;\r
105   end process;\r
106 \r
107 \r
108   BLINKER_next : process(toggle_counter_sig, toggle_sig)\r
109   begin\r
110     if toggle_counter_sig >= HALFPERIOD then           -- after half period ...\r
111       toggle_counter_next <= (others => '0');          -- ... clear counter\r
112       toggle_next  <= not(toggle_sig);                 -- ... and toggle colour.\r
113     else                                               -- before half period ...\r
114       toggle_counter_next <= toggle_counter_sig + '1'; -- ... increment counter\r
115       toggle_next  <= toggle_sig;                      -- ... and hold colour\r
116     end if;\r
117   end process;\r
118 \r
119 \r
120 -- assign auxiliary signals to module outputs\r
121 toggle <= toggle_sig;\r
122 toggle_counter <= toggle_counter_sig;\r
123 \r
124 end behav;\r
125 \r
126 -------------------------------------------------------------------------------\r
127 -- END ARCHITECTURE\r
128 -------------------------------------------------------------------------------\r