EmbDev.net

Forum: FPGA, VHDL & Verilog VGA pins compatibility for Spartan 3 and Altera DE2 (verilog)


von Charan Mehta (Guest)


Rate this post
useful
not useful
There's a Verilog description written for Spartan 3, which is supposed 
to display something on a VGA. It has a 3-bit output "rgb" for the VGA 
(declared as output [2:0] rgb). In the pin assignments, there are 3 pins 
designated for the 3-bit rgb output.

If we want to write the Verilog description with the same functionality 
(displaying on the VGA) for an Altera DE2, do we have to change this VGA 
output for it to work properly? I'm confused because the standard pin 
assignments for the DE2 include 30 bits output for VGA. That is, there 
are 10 pins assigned each for VGA_R, VGA_G, and VGA_B.

So, how are we supposed to display the output on VGA of the Verilog 
description for Spartan 3 on an Altera DE2? What's the matter regarding 
the VGA pin assignments (3-bit vs. 30-bit) and how do we go about this 
compatibility issue?

von Duke Scarring (Guest)


Rate this post
useful
not useful
Charan Mehta wrote:
> What's the matter regarding
> the VGA pin assignments (3-bit vs. 30-bit)
It's the numer of selectable colors: 3 bit = 8 colors, 30 bit = 2^30 
colors.
You just need a mapping. The way from 8 to 2^30 is easy. Just copy the 
bit for the color (eg. red) in the vector of ten bits.

Duke

von Embe S. (Company: Sparrow SoftTech) (embesys)


Rate this post
useful
not useful
Helllo

1
Here I want to display "A" on my display using xc6lx9 tqg144 spartan 6 package..If I pass continuous '0' or '1' then its working very well But I f I am passing any particular pattern then it does not ...It will mix up data and randering in pixel....
2
 
3
Code is given below :
4
 
5
--------------------------------------------------------------------------------
6
--
7
-- FileName: vga_controller.vhd
8
-- Dependencies: none
9
-- Design Software: Quartus II 64-bit Version 12.1 Build 177 SJ Full Version
10
--
11
-- HDL CODE IS PROVIDED "AS IS." DIGI-KEY EXPRESSLY DISCLAIMS ANY
12
-- WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING BUT NOT
13
-- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
14
-- PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL DIGI-KEY
15
-- BE LIABLE FOR ANY INCIDENTAL, SPECIAL, INDIRECT OR CONSEQUENTIAL
16
-- DAMAGES, LOST PROFITS OR LOST DATA, HARM TO YOUR EQUIPMENT, COST OF
17
-- PROCUREMENT OF SUBSTITUTE GOODS, TECHNOLOGY OR SERVICES, ANY CLAIMS
18
-- BY THIRD PARTIES (INCLUDING BUT NOT LIMITED TO ANY DEFENSE THEREOF),
19
-- ANY CLAIMS FOR INDEMNITY OR CONTRIBUTION, OR OTHER SIMILAR COSTS.
20
--
21
-- Version History
22
-- Version 1.0 05/10/2013 Scott Larson
23
-- Initial Public Release
24
-- 
25
--------------------------------------------------------------------------------
26
LIBRARY ieee;
27
USE ieee.std_logic_1164.all;
28
USE ieee.numeric_std.all;
29
--USE ieee.std_logic_arith.all;
30
ENTITY vga_controller IS
31
GENERIC(
32
OFFSET : INTEGER := 1;
33
HEIGHT : INTEGER := 16;
34
WIDTH : INTEGER := 8;
35
START_X : INTEGER := 100;
36
START_Y : INTEGER := 80;
37
h_pulse : INTEGER := 120; --horiztonal sync pulse width in pixels
38
h_bp : INTEGER := 64; --horiztonal back porch width in pixels
39
h_pixels : INTEGER := 800; --horiztonal display width in pixels
40
h_fp : INTEGER := 56; --horiztonal front porch width in pixels
41
h_pol : STD_LOGIC := '1'; --horizontal sync pulse polarity (1 = positive, 0 = negative)
42
v_pulse : INTEGER := 6; --vertical sync pulse width in rows
43
v_bp : INTEGER := 23; --vertical back porch width in rows
44
v_pixels : INTEGER := 600; --vertical display width in rows
45
v_fp : INTEGER := 37; --vertical front porch width in rows
46
v_pol : STD_LOGIC := '1'); --vertical sync pulse polarity (1 = positive, 0 = negative)
47
PORT(
48
--cnt : inout std_logi
49
payal: inout std_logic_vector(1 downto 0):="10";
50
Y : inout std_logic:='0';
51
BELL : out std_logic;
52
clk25: in std_logic;
53
addr: inout std_logic_vector(10 downto 0);
54
data: inout std_logic_vector(7 downto 0):="00000000";
55
blue : out std_logic;
56
green : out std_logic;
57
red : out std_logic;
58
--clk25 : IN STD_LOGIC; --pixel clock at frequency of VGA mode being used
59
reset_n : IN STD_LOGIC; --active low asycnchronous reset
60
h_sync : INOUT STD_LOGIC; --horiztonal sync pulse
61
v_sync : OUT STD_LOGIC; --vertical sync pulse
62
disp_ena : INOUT STD_LOGIC; --display enable ('1' = display time, '0' = blanking time)
63
column : INOUT INTEGER; --horizontal pixel coordinate
64
row : INOUT INTEGER; --vertical pixel coordinate
65
n_blank : OUT STD_LOGIC; --direct blacking output to DAC
66
n_sync : OUT STD_LOGIC); --sync-on-green output to DAC
67
END vga_controller;
68
ARCHITECTURE behavior OF vga_controller IS
69
--signal clk25 : std_logic;
70
-- component clocking
71
-- port (
72
-- clk50 : in std_logic;
73
-- clk25 : out std_logic
74
-- );
75
-- end component;
76
--COMPONENT text 
77
--PORT(
78
-- --cnt : out std_logic;
79
-- clk: in std_logic;
80
-- addr: inout std_logic_vector(10 downto 0);
81
-- data: out std_logic_vector(7 downto 0);
82
-- Y : inout std_logic
83
--
84
--);
85
--END COMPONENT;
86
CONSTANT h_period : INTEGER := h_pulse + h_bp + h_pixels + h_fp; --total number of pixel clocks in a row
87
CONSTANT v_period : INTEGER := v_pulse + v_bp + v_pixels + v_fp; --total number of rows in column
88
89
type rom_type is array (0 to 15)
90
of std_logic_vector(7 downto 0);
91
-- ROM definition
92
constant ROM: rom_type:=(
93
"00000000", -- 0
94
"00000000", -- 1
95
"00010000", -- 2 *
96
"00111000", -- 3 ***
97
"01101100", -- 4 ** **
98
"11000110", -- 5 ** **
99
"11000110", -- 6 ** **
100
"11111110", -- 7 *******
101
"11000110", -- 8 ** **
102
"11000110", -- 9 ** **
103
"11000110", -- a ** **
104
"11000110", -- b ** **
105
"00000000", -- c
106
"00000000", -- d
107
"00000000", -- e
108
"00000000" -- f
109
); 
110
111
BEGIN
112
-- CLKMGNT : clocking
113
-- port map (
114
-- clk50 => clk50,
115
-- clk25 => clk25
116
-- 
117
-- );
118
--generator : text
119
--port map(
120
--Y => Y,
121
--clk => pixel_clk,
122
--data => data,
123
--addr => addr
124
--);
125
BELL <= '1';
126
n_blank <= '1'; --no direct blanking
127
n_sync <= '0'; --no sync on green
128
-- pppp <= "11111111";
129
P1:PROCESS(clk25)
130
VARIABLE h_count : INTEGER RANGE 0 TO h_period - 1 := 0; --horizontal counter (counts the columns)
131
VARIABLE v_count : INTEGER RANGE 0 TO v_period - 1 := 0; --vertical counter (counts the rows)
132
BEGIN
133
134
-- IF(reset_n = '0') THEN --reset asserted
135
-- h_count := 0; --reset horizontal counter
136
-- v_count := 0; --reset vertical counter
137
-- h_sync <= NOT h_pol; --deassert horizontal sync
138
-- v_sync <= NOT v_pol; --deassert vertical sync
139
-- disp_ena <= '0'; --disable display
140
-- column <= 0; --reset column pixel coordinate
141
-- row <= 0; --reset row pixel coordinate
142
-- 
143
IF(clk25'EVENT AND clk25 = '1') THEN
144
--counters
145
146
IF(h_count < h_period - 1) THEN --horizontal counter (pixels)
147
h_count := h_count + 1;
148
ELSE
149
h_count := 0;
150
IF(v_count < v_period - 1) THEN --veritcal counter (rows)
151
v_count := v_count + 1;
152
ELSE
153
v_count := 0;
154
END IF;
155
END IF;
156
--horizontal sync signal
157
IF(h_count < h_pixels + h_fp OR h_count > h_pixels + h_fp + h_pulse) THEN
158
h_sync <= NOT h_pol; --deassert horiztonal sync pulse
159
ELSE
160
h_sync <= h_pol; --assert horiztonal sync pulse
161
END IF;
162
--cnt <= h_sync; 
163
--vertical sync signal
164
IF(v_count < v_pixels + v_fp OR v_count > v_pixels + v_fp + v_pulse) THEN
165
v_sync <= NOT v_pol; --deassert vertical sync pulse
166
ELSE
167
v_sync <= v_pol; --assert vertical sync pulse
168
END IF;
169
170
--set pixel coordinates
171
IF(h_count < h_pixels) THEN --horiztonal display time
172
column <= h_count; --set horiztonal pixel coordinate
173
END IF;
174
IF(v_count < v_pixels) THEN --vertical display time
175
row <= v_count; --set vertical pixel coordinate
176
END IF;
177
--set display enable output
178
IF(h_count < h_pixels AND v_count < v_pixels) THEN --display time
179
disp_ena <= '1'; --enable display
180
ELSE --blanking time
181
disp_ena <= '0'; --disable display
182
END IF;
183
END IF;
184
END PROCESS;
185
P2:PROCESS(disp_ena, row, column , h_sync)
186
VARIABLE I : INTEGER RANGE 0 TO 7 := 0;
187
VARIABLE CHARX : INTEGER RANGE 0 TO 7 := 0;
188
VARIABLE CHARY : INTEGER RANGE 0 TO 15 := 0;
189
BEGIN
190
IF(disp_ena = '1') THEN
191
if(column = START_X-1) then
192
if(row = START_Y)then
193
Y<= '1';
194
end if;
195
end if;
196
197
if(row > (START_Y - OFFSET)and row < START_Y + HEIGHT) then
198
if(column > (START_X - OFFSET )and column < START_X + WIDTH) then
199
200
201
if(data(CHARX) = '0' or data(CHARX) = '1') then
202
IF (data(CHARX) = '0') THEN 
203
red <='1';
204
green <= '1';
205
blue <= '1';
206
ELSE IF(data(CHARX) = '1') THEN 
207
red <='0';
208
green <= '0';
209
blue <= '1';
210
END IF;
211
END IF;
212
if(CHARX = 7) then
213
CHARX := 0;
214
215
if (CHARY = 15 ) then
216
CHARY := 0; 
217
else
218
CHARY := CHARY+ 1;
219
Y<= '1';
220
end if;
221
222
223
else
224
CHARX :=CHARX + 1;
225
if (Y = '1') then
226
Y <= '0'; 
227
end if;
228
229
-- IF(I = 7)THEN
230
-- I := 0;
231
-- Y<= '1';
232
-- ELSE
233
-- I := I+1;
234
-- if (Y = '1') then
235
-- Y <= '0';
236
-- end if;
237
-- END IF;
238
end if;
239
end if;
240
else
241
-- if (Y = '1') then
242
-- Y <= '0';
243
-- end if;
244
red <='1';
245
green <= '1';
246
blue <= '1'; 
247
end if;
248
else
249
red <='1';
250
green <= '1';
251
blue <= '1'; 
252
-- if (Y = '1') then
253
-- Y <= '0';
254
-- end if; 
255
CHARX := 0; 
256
end if;
257
ELSE
258
red <='0';
259
green <= '0';
260
blue <= '0';
261
END IF;
262
END PROCESS;
263
P3 : PROCESS (Y)
264
VARIABLE CNT : INTEGER RANGE 0 TO 15 := 0;
265
BEGIN
266
IF(Y = '1') THEN
267
data <= ROM(CNT); 
268
IF (CNT = 15 )THEN
269
CNT := 0;
270
ELSE
271
CNT := CNT+1;
272
END IF;
273
274
ELSE
275
data <= ROM(CNT); 
276
END IF;
277
END PROCESS;
278
END behavior;

von Embe S. (Company: Sparrow SoftTech) (embesys)


Rate this post
useful
not useful
jyhjgjnhgj

Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
No account? Register here.