Nothing Special   »   [go: up one dir, main page]

Figure 10.1 Color CRT and Phosphor Dots On Face of Display.: Scanning Electron Beam

Download as pdf or txt
Download as pdf or txt
You are on page 1of 24

Scanning Electron Beam Deflection Yoke Electron Gun

Grid

Phosphor Screen

Blue

Electron Guns
Red Green

Metal Mask

R B R G

B R B

G B G

R G R

B R B

G B G

R G R B

Phosphor Dots on Glass Face Plate

Glass Face Plate

Figure 10.1 Color CRT and Phosphor Dots on Face of Display.

640 Pixels in a row 0,0 639,0

480 Horizontal Scan Lines and Retrace


. . .

480 Pixels in a column

0,479

639,479

Figure 10.2 VGA Image - 640 by 480 Pixel Layout.

480 Horizontal Refresh Cycles Red, Green, Blue P i x e l D a ta Vertical Sync 64 s 16.6 ms

1.02 ms

15.24 ms

0.35 ms

Figure 10.3 Vertical Sync Signal Timing.

R ed, Green, B lu e P i xe l D a ta Horizontal Sync 3.77s

1.89 s

25.17 s

0.94 s

31.77 s

Figure 10.4 Horizontal Sync Signal Timing.

25 M hz C lo c k

S y n c G e n e r a tio n C o u n te rs R ow C ol

H o r iz o n t a l S ync V e r t ic a l S ync

D a ta fr o m D e s ig n

V G A S ig n a ls
P ix e l R A M o r C h a ra c te r G e n e ra to r R O M R G B

Figure 10.5 CLPD based generation of VGA Video Signals.

VGA_SYNC clock_48Mhz red green blue red_out green_out blue_out horiz_sync_out vert_sync_out video_on pixel_clock pixel_row[9..0] pixel_column[9..0] inst

UP3core VGA_SYNC

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY VGA_SYNC IS PORT( clock_25Mhz, red, green, blue red_out, green_out, blue_out horiz_sync_out, vert_sync_out pixel_row, pixel_column END VGA_SYNC;

: IN : OUT : OUT : OUT

STD_LOGIC; STD_LOGIC; STD_LOGIC; STD_LOGIC_VECTOR( 9 DOWNTO 0 ));

ARCHITECTURE a OF VGA_SYNC IS : STD_LOGIC; SIGNAL horiz_sync, vert_sync SIGNAL video_on, video_on_v, video_on_h : STD_LOGIC; : STD_LOGIC_VECTOR( 9 DOWNTO 0 ); SIGNAL h_count, v_count BEGIN -- video_on is High only when RGB data is displayed video_on <= video_on_H AND video_on_V;

PROCESS BEGIN WAIT UNTIL( clock_25Mhz'EVENT ) AND ( clock_25Mhz = '1' );

--Generate Horizontal and Vertical Timing Signals for Video Signal -- H_count counts pixels (640 + extra time for sync signals) --- Horiz_sync -------------------------------------------________--------- H_count 0 640 659 755 799 -IF ( h_count = 799 ) THEN h_count <= "0000000000"; ELSE h_count <= h_count + 1; END IF; --Generate Horizontal Sync Signal using H_count IF ( h_count <= 755 ) AND (h_count => 659 ) THEN horiz_sync <= '0'; ELSE horiz_sync <= '1'; END IF;

--V_count counts rows of pixels (480 + extra time for sync signals) --- Vert_sync ----------------------------------------_______------------- V_count 0 480 493-494 524 -IF ( v_count >= 524 ) AND ( h_count => 699 ) THEN v_count <= "0000000000"; ELSIF ( h_count = 699 ) THEN v_count <= v_count + 1; END IF; -- Generate Vertical Sync Signal using V_count IF ( v_count <= 494 ) AND ( v_count = >493 ) THEN vert_sync <= '0'; ELSE vert_sync <= '1'; END IF;

-- Generate Video on Screen Signals for Pixel Data IF ( h_count <= 639 ) THEN video_on_h <= '1'; pixel_column <= h_count; ELSE video_on_h <= '0'; END IF; IF ( v_count <= 479 ) THEN video_on_v <= '1'; pixel_row <= v_count; ELSE video_on_v <= '0'; END IF; -- Put all video signals through DFFs to eliminate -- any delays that can cause a blurry image -- Turn off RGB outputs when outside video display area red_out <= red AND video_on; green_out <= green AND video_on; blue_out <= blue AND video_on; horiz_sync_out <= horiz_sync; vert_sync_out <= vert_sync; END PROCESS; END a;

VGA_SYNC

C lock_48M hz P BSW ITC H 4

INPUT VCC INPUT VCC

clock_48Mhz
red
green
blue

red_out
green_out
blue_out
horiz_sync_out
vert_sync_out
video_on
pixel_clock
pixel_row[9..0]
pixel_column[9..0]

OUTPUT
OUTPUT
OUTPUT

OUTPUT
OUTPUT

VGA_R ed VGA_Green VGA_Blue VGA_H Sync VGA_VSync

GND 11

Video LED Design Example

VGA_SYNC Clock_48Mhz
INPUT VCC

clock_48Mhz red green blue

red_out green_out blue_out horiz_sync_out vert_sync_out video_on pixel_clock

OUTPUT OUTPUT OUTPUT OUTPUT OUTPUT

VGA_Red VGA_Green VGA_Blue VGA_HSync VGA_VSync

Pixel_column[5] Pixel_column[6] Pixel_column[7] 1

Pixel_row[9..0]

pixel_row[9..0] pixel_column[9..0] Pixel_column[9..0]

Video Color Bar Design Example

Address 000001000 : 000001001 : 000001010 : 000001011 : 000001100 : 000001101 : 000001110 : 000001111 :

Font Data 00011000 ; 00111100 ; 01100110 ; 01111110 ; 01100110 ; 01100110 ; 01100110 ; 00000000 ;

Figure 10.6 Font Memory Data for the Character "A".

8 by 8 Font Pixel Data Character Address 000001 for A

Character Generation ROM


64 characters 512 by 8 ROM

Font Row Address 000...111

8 8-bit words per character

Figure 10.7 Accessing a Character Font Using a ROM.

Char_ROM clock character_address[5..0] f ont_row[2..0] f ont_col[2..0] rom_mux_output

inst

UP3core CHAR_ROM

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; LIBRARY lpm; USE lpm.lpm_components.ALL; ENTITY Char_ROM IS character_address PORT( font_row, font_col rom_mux_output END Char_ROM;

: IN : IN : OUT

STD_LOGIC_VECTOR( 5 DOWNTO 0 ); STD_LOGIC_VECTOR( 2 DOWNTO 0 ); STD_LOGIC);

ARCHITECTURE a OF Char_ROM IS : STD_LOGIC_VECTOR( 7 DOWNTO 0 ); SIGNAL rom_data : STD_LOGIC_VECTOR( 8 DOWNTO 0 ); SIGNAL rom_address BEGIN -- Small 8 by 8 Character Generator ROM for Video Display -- Each character is 8 8-bit words of pixel data char_gen_rom: lpm_rom GENERIC MAP ( lpm_widthad => 9, lpm_numwords => "512", lpm_outdata => "UNREGISTERED", lpm_address_control => "UNREGISTERED", -- Reads in mif file for character generator font data lpm_file => "tcgrom.mif", lpm_width => 8) PORT MAP ( address => rom_address, q = > rom_data); rom_address <= character_address & font_row; -- Mux to pick off correct rom data bit from 8-bit word -- for on screen character generation rom_mux_output <= rom_data ( (CONV_INTEGER( NOT font_col( 2 DOWNTO 0 ))) ); END a;

Table 10.1 Character Address Map for 8 by 8 Font ROM. CHAR ADDRESS CHAR ADDRESS CHAR ADDRESS CHAR ADDRESS

@ A B C D E F G H I J K L M N O

00 01 02 03 04 05 06 07 10 11 12 13 14 15 16 17

P Q R S T U V W X Y Z [
Dn Arrow

]
Up Arrow Lft Arrow

20 21 22 23 24 25 26 27 30 31 32 33 34 35 36 37

Space ! " # $ % & ( ) * + , . /

40 41 42 43 44 45 46 47 50 51 52 53 54 55 56 57

0 1 2 3 4 5 6 7 8 9 A B C D E F

60 61 62 63 64 65 66 67 70 71 72 73 74 75 76 77

VGA_SYNC

Clock_48Mhz
VCC

INPUT VCC

clock_48Mhz
red
green
blue

red_out
green_out
blue_out
horiz_sync_out
vert_sync_out
video_on
pixel_clock
pixel_row[9..0]
pixel_column[9..0]

OUTPUT
OUTPUT
OUTPUT

VGA_Red
VGA_Green
VGA_Blue

OUTPUT
OUTPUT

VGA_HSync
VGA_VSync

Pixel_row[9..0]

Pixel_column[9..0]

Char_ROM

clock
Pixel_row[9..4]
Pixel_row[3..1]
Pixel_column[3..1]

rom_mux_output

character_address[5..0]
f ont_row[2..0]
f ont_col[2..0]

inst

Character Test Design Example

Figure 10.8 MIPS Computer Video Output.

-- Character Format ROM for Video Display -- Displays constant format character data -- on left side of Display area format_rom: lpm_rom GENERIC MAP ( lpm_widthad lpm_numwords lpm_outdata lpm_address_control lpm_file lpm_width

=> 6, =>"60", => "UNREGISTERED", => "UNREGISTERED", -- Reads in mif file for data display titles =>"format.mif", => 6)

Horizontal Sync Counter 639 Compute New RGB Data

799

Displaying RGB Data

479 599 Vertical Sync Counter


Figure 10.9 Display and Compute clock cycles available in a single Video Frame.

Figure 10.10 Bouncing Ball Video Output.

ENTITY ball IS PORT( : OUT STD_LOGIC; SIGNAL Red, Green, Blue : IN STD_LOGIC; SIGNAL vert_sync_out SIGNAL pixel_row, pixel_column : IN STD_LOGIC_VECTOR( 9 DOWNTO 0 )); END ball; ARCHITECTURE behavior OF ball IS -- Video Display Signals SIGNAL reset, Ball_on, Direction : STD_LOGIC; : STD_LOGIC_VECTOR( 9 DOWNTO 0 ); SIGNAL Size : STD_LOGIC_VECTOR( 10 DOWNTO 0 ); SIGNAL Ball_Y_motion SIGNAL Ball_Y_pos, Ball_X_pos : STD_LOGIC_VECTOR( 10 DOWNTO 0 ); -- Size of Ball BEGIN Size <= CONV_STD_LOGIC_VECTOR (8,10 ); -- Ball center X address Ball_X_pos <= CONV_STD_LOGIC_VECTOR( 320,11 ); -- Colors for pixel data on video signal Red <= '1'; -- Turn off Green and Blue to make -- color Red when displaying ball Green <= NOT Ball_on; Blue <= NOT Ball_on;

RGB_Display: PROCESS ( Ball_X_pos, Ball_Y_pos, pixel_column, pixel_row, Size ) BEGIN -- Set Ball_on = '1' to display ball <= pixel_column + Size ) AND IF ( Ball_X_pos ( Ball_X_pos + Size >= pixel_column ) AND ( Ball_Y_pos <= pixel_row + Size ) AND ( Ball_Y_pos + Size >= pixel_row ) THEN Ball_on <= '1'; ELSE Ball_on <= '0'; END IF; END PROCESS RGB_Display; Move_Ball: PROCESS BEGIN -- Move ball once every vertical sync WAIT UNTIL Vert_sync'EVENT AND Vert_sync = '1'; -- Bounce off top or bottom of screen IF Ball_Y_pos >= 480 - Size THEN Ball_Y_motion <= - CONV_STD_LOGIC_VECTOR(2,11); ELSIF Ball_Y_pos <= Size THEN Ball_Y_motion <= CONV_STD_LOGIC_VECTOR(2,11); END IF; -- Compute next ball Y position Ball_Y_pos <= Ball_Y_pos + Ball_Y_motion; END PROCESS Move_Ball; END behavior;

You might also like