рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рд╡реАрдПрдЪрдбреАрдПрд▓ рдореЗрдВ рд▓рд┐рдЦрд╛ рдПрдХ рд╡реАрдЬреАрдП рдкрд╛рда рдореЙрдбреНрдпреВрд▓ рдкреЗрд╢ рдХрд░реВрдВрдЧрд╛ред рдмреЛрд░реНрдб рдХреЛ рдбрд┐рдмрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдореЙрдбреНрдпреВрд▓ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдХрдо рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
рдореЙрдбреНрдпреВрд▓ 50 рдореЗрдЧрд╛рд╣рд░реНрдЯреНрдЬ рдХреА рдШрдбрд╝реА рдЖрд╡реГрддреНрддрд┐ рдкрд░ рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдпрд╣ 60Hz рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде 640x480 рдХреЗ рд╕рдВрдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдПрдХ рддрд╕реНрд╡реАрд░ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИред
рдЪрд░рд┐рддреНрд░ рдХрд╛ рдЖрдХрд╛рд░ 8x16 рдкрд┐рдХреНрд╕реЗрд▓ рд╣реИред рд╕реНрдХреНрд░реАрди рдореЗрдВ 80x25 рдЕрдХреНрд╖рд░ рд╣реИрдВред
рдкреИрд▓реЗрдЯ 32 рд░рдВрдЧреЛрдВ рдХреЗ рд▓рд┐рдПред
FPGA рдореЗрдВ рд╡реНрдпрд╛рдкреНрдд рд╕рдВрд╕рд╛рдзрди:

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдХреНрд▓реЙрдХ рдЬрдирд░реЗрдЯрд░ (clk), рд╡реАрдЬреАрдП-рдХрдиреЗрдХреНрдЯрд░ (рдЖрд░, рдЬреА, рдмреА, vsync, hsync) рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдмрд╕ (рдПрдбреНрд░, рдбреЗрдЯрд╛, рдЗрд░реЛ, рдбрд╛рдЙрдЯ) рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдореИрдВрдиреЗ рдЬрд┐рд╕ рдмреЛрд░реНрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рдЙрд╕рдореЗрдВ рддреАрди рдЯреБрдХрдбрд╝реЛрдВ (рдкреНрд░рддреНрдпреЗрдХ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ) рдХреА рдорд╛рддреНрд░рд╛ рдореЗрдВ 8-рдмрд┐рдЯ рдбреАрдПрд╕реА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рд╕реЗ 8-рдмрд┐рдЯ рд▓рд╛рдЗрдиреЗрдВ рд░рдВрдЧреЛрдВ рдореЗрдВ рдЖрддреА рд╣реИрдВред рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░рдВрдЧ рдХрд╛ рд░рдВрдЧ рд▓реЗрддреЗ рд╣реБрдП, рд╣рдореЗрдВ DAC рдХреЗ рдмрд┐рдирд╛ рдмреЛрд░реНрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓рддрд╛ рд╣реИред

рд╕рдВрд╕реНрдерд╛ vga_text рд╣реИ
рдкреЛрд░реНрдЯ ( clk : STD_LOGIC рдореЗрдВ ;
iowr : STD_LOGIC рдореЗрдВ ;
addr : STD_LOGIC_VECTOR ( 31 рдбрд╛рдЙрдиреЛ 0 ) ;
рдбреЗрдЯрд╛ : STD_LOGIC_VECTOR рдореЗрдВ ( 31 рдбрд╛рдЙрдиреНрдЯреЛ 0 ) ;
dout : std_logic_vector ( 31 рдбрд╛рдЙрдирдЯрд╛рдЙрди 0 ) ;
r : рдмрд╛рд╣рд░ STD_LOGIC_VECTOR ( 0 рд╕реЗ рдиреАрдЪреЗ 7 ) ;
g : рдмрд╛рд╣рд░ STD_LOGIC_VECTOR ( 0 рд╕реЗ рдиреАрдЪреЗ 7 ) ;
b : STD_LOGIC_VECTOR ( 7 рдбрд╛рдЙрдирдЯрд╛рдЙрди 0 ) ;
vga_blank : STD_LOGIC ;
vsync : рдмрд╛рд╣рд░ STD_LOGIC ;
hsync : STD_LOGIC рд╕реЗ рдмрд╛рд╣рд░ ) ;
рдЕрдВрдд vga_text ;
рдореЙрдирд┐рдЯрд░ рдХреЛ 3 рд╕рд┐рдВрдХ рд╕рд┐рдЧреНрдирд▓ рдФрд░ 3 рдХрд▓рд░ рд╕рд┐рдЧреНрдирд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕рд┐рдЧреНрдирд▓ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, VCounter рдФрд░ HCounter рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрд░реЗрдЦ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕рд┐рдЧреНрдирд▓ рдЬрд╛рд░реА рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдХрд╛рдЙрдВрдЯрд░ рдХреЛрдб:
рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ Vga_text рд╣реИ
рд╕рдВрдХреЗрдд рдХреБрд▓рдкрддрд┐ : рдкреВрд░реНрдгрд╛рдВрдХ рд╕реАрдорд╛ 0 рд╕реЗ 520 : = 0 ;
рд╕рдВрдХреЗрдд HCounter : рдкреВрд░реНрдгрд╛рдВрдХ рд╕реАрдорд╛ 0 рд╕реЗ 800 : = 0 ;
рд╕рдВрдХреЗрдд div : std_logic : = ' 0 ' ;
рд╢реБрд░реВ рдХрд░рдирд╛
рдкреНрд░рдХреНрд░рд┐рдпрд╛ ( clk )
рд╢реБрд░реВ рдХрд░рдирд╛
рдЕрдЧрд░ рдЙрда рд░рд╣рд╛ рд╣реИ рддреЛ ( clk ) рддрдм
div <= рдирд╣реАрдВ ( div ) ;
рдЕрдЧрд░ div = ' 1 ' рддреЛ
рдЕрдЧрд░ HC рдореБрдарднреЗрдбрд╝ = 799 рддреЛ
рдПрдЪрд╕реАрд░рд┐рдПрд░ <= 0 ;
рдЕрдЧрд░ рдХреБрд▓рдкрддрд┐ = 520 рддреЛ
рдХреБрд▓рдкрддрд┐ <= 0 ;
рдЕрдиреНрдпрдерд╛
рд╡реАрд╕реА рдПрдирдХрд╛рдЙрдВрдЯрд░ <= рд╡реАрдХрд╛рдЙрдВрдЯрд░ + 1 ;
рдЕрдВрдд рдпрджрд┐ ;
рдЕрдиреНрдпрдерд╛
HCounter <= HCounter + 1 ;
рдЕрдВрдд рдпрджрд┐ ;
рдЕрдВрдд рдпрджрд┐ ;
рдЕрдВрдд рдпрджрд┐ ;
рдЕрдВрддрд┐рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ ;
рдЕрдВрдд рд╡реНрдпрд╡рд╣рд╛рд░ ;
рддреБрд▓реНрдпрдХрд╛рд▓рди рд╕рдВрдХреЗрддреЛрдВ рдХреА рдкреАрдврд╝реА:
vsync <= ' 0 ' рдЬрдм VCounter < 2 рдФрд░ ' 1 ' ;
hsync <= ' 0 ' рдЬрдм HCounter < 96 рдФрд░ ' 1 ' ;
vga_blank <= ' 1 ' рдЬрдм ( ( HC рдореБрдарднреЗрдбрд╝ ) 143 ) рдФрд░ ( HCounter < 784 ) рдФрд░
( рд╡реАрд╕реА рдПрдирдХрд╛рдЙрдВрдЯрд░ > 30 ) рдФрд░ ( рд╡реАрд╕реА рдПрдирдХрд╛рдЙрдВрдЯрд░ < 511 ) ) ' 0 ' ;
рдПрдХ рд╡рд░реНрдг рдХрд╛ рдЖрдХрд╛рд░ 8x16 рдкрд┐рдХреНрд╕реЗрд▓ рд╣реИред рдЪрд░рд┐рддреНрд░ рд╕рд░рдгреА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ 128 рдмрд┐рдЯреНрд╕ рдХреЗ 256 рд╕реЗрд▓ рд╣реЛрдВрдЧреЗред рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдЯ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреЛрдИ рдмрд┐рдВрджреБ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдореЗрдореЛрд░реА рд╕реЗрд▓ рдореЗрдВ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рд╕реНрдерд╛рди:

FPGA рдореЗрдВ 1024x18 рдмрд┐рдЯ (18432 рдмрд┐рдЯ) рдХрд╛ рдмреНрд▓реЙрдХ рдореЗрдореЛрд░реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИ, рдЬрд┐рд╕ рдкрд░ рд╣рдо рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рд╕реАрдПрдбреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдРрд╕реЗ рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рднреА рдЪрдпрдирд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рддреЛ, рдЪрд░рд┐рддреНрд░ рд╕реНрдореГрддрд┐ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ 256x128 рдмрд┐рдЯреНрд╕ = 32768 рдмрд┐рдЯреНрд╕ рдореЗрдореЛрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ 2 рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХ (BRAM) рд▓реЗрдЧреАред
рдкреНрд░рддреАрдХ рдореЗрдореЛрд░реА рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рджреМрд░рд╛рди рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдЕрдиреНрдп рдЖрд╡рд╢реНрдпрдХ рдореЗрдореЛрд░реА рд╕реНрдХреНрд░реАрди (рджреГрд╢реНрдп рдХреНрд╖реЗрддреНрд░) рдореЗрдореЛрд░реА рд╣реИред рдЗрд╕ рдореЗрдореЛрд░реА рдореЗрдВ, рд╣рдо рдкреНрд░рддреАрдХ рд╕рдВрдЦреНрдпрд╛, рдкреНрд░рддреАрдХ рд░рдВрдЧ рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рд░рдВрдЧ рдХреЛ рдПрдирдХреЛрдб рдХрд░рддреЗ рд╣реИрдВред рд░рдВрдЧ рдореЗрдореЛрд░реА рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреИрд▓реЗрдЯ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдПрдирдХреЛрдб рдХрд░реЗрдВред 18 рдмрд┐рдЯреНрд╕ рдХреЗ рд╕реЗрд▓ рдХреЗ рд╕рд╛рде рдореЗрдореЛрд░реА рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдкреНрд░рддреАрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ 8 рдмрд┐рдЯреНрд╕, рдкреНрд░рддреАрдХ рд░рдВрдЧ рдХреЛ 5 рдмрд┐рдЯреНрд╕ рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рд░рдВрдЧ рдХреЛ 5 рдмрд┐рдЯреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдкреИрд▓реЗрдЯ рдХреЗ рддрд╣рдд, 32 рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ 24 рдмрд┐рдЯреНрд╕ (рдкреНрд░рддреНрдпреЗрдХ рд░рдВрдЧ рдкреНрд░рддрд┐ 8 рдмрд┐рдЯреНрд╕) рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рдЪрд░рд┐рддреНрд░ рдХреЗ рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдФрд░ рдЖрдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, 80x30 рд╡рд░реНрдг рд╕реНрдХреНрд░реАрди рдкрд░ рдлрд┐рдЯ рд╣реЛрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрдореЛрд░реА рдореЗрдВ 2,400 рд╕реЗрд▓ (3 рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХ) рд▓реЗрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐, рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рд╕реЗ, рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдиреНрдпреВрдирддрдо рдЖрдХрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, 5 рдирд┐рдЪрд▓рд╛ рд░реЗрдЦрд╛рдПрдВ рдХрд╛рдЯ рджреА рдЧрдИ рдереАрдВред рдирддреАрдЬрддрди, рд╣рдореЗрдВ 80x25 рдкреНрд░рджрд░реНрд╢рд┐рдд рд╡рд░реНрдг рдорд┐рд▓рддреЗ рд╣реИрдВ, рдЬреЛ 2000 рдореЗрдореЛрд░реА рдХреЛрд╢рд┐рдХрд╛рдУрдВ (2 рдореЗрдореЛрд░реА рдмреНрд▓реЙрдХ) рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддрд╛ рд╣реИред
рдХреЛрд░рдЧреЗрдиреЗрд░реЗрдЯрд░ рдореЗрдВ рдЪрд░рд┐рддреНрд░ рд╕реНрдореГрддрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдореЗрдореЛрд░реА рдХрдиреЗрдХреНрд╢рди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
рд╕рдВрдХреЗрдд SAddrA : std_logic_vector ( 0 рд╕реЗ 7 ) ;
рд╕рдВрдХреЗрдд SAddrRead, SAddrWrite : рдкреВрд░реНрдгрд╛рдВрдХ рд╕реАрдорд╛ 0 рд╕реЗ 255 ;
рд╕рдВрдХреЗрдд SDataA, SDINA : std_logic_vector ( 127 рдбрд╛рдЙрдирдЯрд╛рдЙрди 0 ) ;
рд╕рдВрдХреЗрдд SWeA : std_logic ;
- ...
рдШрдЯрдХ vga640_symbols
рдмрдВрджрд░рдЧрд╛рд╣ (
addr : IN std_logic_VECTOR ( 7 downto 0 ) ;
clk : IN std_logic ;
рджрд┐рди : std_logic_VECTOR рдореЗрдВ ( 127 рдбрд╛рдЙрдирдЯрд╛рдЙрди 0 ) ;
dout : OUT std_logic_VECTOR ( 127 рдбрд╛рдЙрдирдЯрд╛рдЙрди 0 ) ;
рд╣рдо : std_logic рдореЗрдВ ) ;
рдЕрдВрддрд┐рдо рдШрдЯрдХ ;
- ...
рд╢реБрд░реВ рдХрд░рдирд╛
- ...
vga640_symbols_0 : vga640_symbols
рдкреЛрд░реНрдЯ рдореИрдк (
addr => SAddrA,
clk => clk,
рдбрд╛рдЗрди => рдиреНрдпреВрд╕рд┐рдореНрдмрд▓,
dout => SDataA,
рд╣рдо => рд╕реНрд╡реЗ
) ;
SWeA <= ' 1 ' рдЬрдм ( isLowLevel = ' 1 ' ) рдФрд░ ( conv_integer ( addr ) = 337 рдФрд░ iowr = ' 1 ' ) рдмрд╛рдХреА ' 0 ' ;
SAddrA <= conv_std_logic_vector ( SAddrWrite, 8 ) рдЬрдм ( isLowLevel = ' 1 ' ) рдФрд░ ( conv_integer ( addr ) = 337 рдФрд░ iowy = ' 1 ' ) рдФрд░ conv_std_logic_vector ( SAddrRead, 8 ) ;
рд╕реНрдХреНрд░реАрди рдореЗрдореЛрд░реА рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рд▓рд┐рдЦрдХрд░ рдмрдирд╛рдИ рдЧрдИ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЖрдк рдЪрд░рд┐рддреНрд░ рдореЗрдореЛрд░реА рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
рдкреНрд░рдХрд╛рд░ TSрд╕реНрдХреНрд░реАрди std_logic_vector рдХреА рд╕рд░рдгреА ( 0 рд╕реЗ 1999 ) рд╣реИ ( 0 рд╕реЗ 0 ) ;
рд╕рд┐рдЧреНрдирд▓ рд╕реНрдХреНрд░реАрди : рдЯреАрдПрд╕рд╕реНрдХреНрд░реАрди ;
рд╕рдВрдХреЗрдд scrAddrA, scrAddrB : рдкреВрд░реНрдгрд╛рдВрдХ рд╕реАрдорд╛ 0 рд╕реЗ 1999 ;
рд╕рдВрдХреЗрдд scrDataA, scrDataB, scrDinB : std_logic_vector ( 0 рд╕реЗ 0 рддрдХ ) ;
рд╕рдВрдХреЗрдд scrWeB : std_logic ;
- ...
рд╢реБрд░реВ рдХрд░рдирд╛
- ...
рдкреНрд░рдХреНрд░рд┐рдпрд╛ ( clk )
рд╢реБрд░реВ рдХрд░рдирд╛
рдЕрдЧрд░ рдЙрда рд░рд╣рд╛ рд╣реИ рддреЛ ( clk ) рддрдм
рдЕрдЧрд░ scrWeB = ' 1 ' рд╣реИ рддреЛ
рд╕реНрдХреНрд░реАрди ( scrAddrB ) <= scrDinB ;
рдЕрдВрдд рдпрджрд┐ ;
scrDataA <= рд╕реНрдХреНрд░реАрди ( scrAddrA ) ;
scrDataB <= рд╕реНрдХреНрд░реАрди ( scrAddrB ) ;
рдЕрдВрдд рдпрджрд┐ ;
рдЕрдВрддрд┐рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ ;
scrDinB <= scrDinBLowLevel рдЬрдм isLowLevel = ' 1 ' рдФрд░ рдлрд┐рд░ scrDinBN рдЕрд╕рд╛рдорд╛рдиреНрдп ;
scrWeb <= scrWeBLowLevel рдЬрдм isLowLevel = ' 1 ' рдФрд░ рдЕрдиреНрдп
scrAddrB <= scrAddrBLowLevel рдЬрдм isLowLevel = ' 1 ' рдФрд░ рд╣реИ ;
scrDinBLowLevel <= рдбреЗрдЯрд╛ ( 0 рд╕реЗ 17 ) ;
scrWeBLowLevel <= ' 1 ' рдЬрдм ( conv_integer ( addr ) = 300 рдпрд╛ conv_integer ( addr ) = 309 ) рдФрд░ iowr = ' 1 ' рдФрд░ ' 0 ' ;
scrAddrBNormal <= GotoY * 80 + GotoX ;
scrDiNBNormal <= BgColor & Color & data ( 7 downto 0 ) ;
scrWebNormal <= ' 1 ' рдЬрдм conv_integer ( addr ) = 306 рдФрд░ iowr = ' 1 ' рдФрд░ ' 0 ' ;
рдкреИрд▓реЗрдЯ рдХрд╛ рд░рдВрдЧ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗрдЯ рдХрд░рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИред
рдЯрд╛рдЗрдк TColor std_logic_vector рдХреА рд╕рд░рдгреА ( 0 рд╕реЗ 31 ) рд╣реИ ( 0 рд╕реЗ 23 ) ;
рд╕рд┐рдЧреНрдирд▓ рдкреИрд▓реЗрдЯреЗрд▓рд░ : рдЯреАрд╕реАрдХрд▓рд░ : =
(
0 => x "000000" ,
1 => x "0000FF" ,
2 => x "00FF00" ,
3 => x "00FFFF" ,
4 => x "FF0000" ,
5 => x "FF00FF" ,
6 => x "FFFF00" ,
7 => x "FFFFFF" ,
рдЕрдиреНрдп => x "FFFFFF"
) ;
рд╕рдВрдХреЗрдд PalleteAddr : рдкреВрд░реНрдгрд╛рдВрдХ рд╕реАрдорд╛ 0 рд╕реЗ 31 ;
рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдореЗрдореЛрд░реА рдмрдирддреА рд╣реИ, рдЕрдм рдЖрдк рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рддреИрдпрд╛рд░реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд░реНрддрдорд╛рди FPGA рдбрд┐рдЬрд╛рдЗрди рд░реБрдЭрд╛рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдбрд┐рдЬрд╛рдЗрди рдХрд╛ рдорддрд▓рдм рд╣реИред рд╣рдо рдЗрди рд░реБрдЭрд╛рдиреЛрдВ рд╕реЗ рдирд╣реАрдВ рд╣рдЯреЗрдВрдЧреЗ, рдФрд░ рд╣рдо рдЕрдЧрд▓реЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗред рдЗрдирдкреБрдЯ рдореЗрдВ HCount рдФрд░ VCount рдХрд╛рдЙрдВрдЯрд░ рд╣реЛрдВрдЧреЗ рдЬреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рд░рдВрдЧ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧрд╛ред
рдХрдиреНрд╡реЗрдпрд░ рдЪрд░рдгреЛрдВ:
- рд╕реНрдХреНрд░реИрдХреНрд╕ рдХреА рдЧрдгрдирд╛, рд╕реНрдХреНрд░реИрдЪ рд╕рд┐рдЧреНрдирд▓ рдЬреЛ рд╕реНрдХреНрд░реАрди рдХреЗ рджреГрд╢реНрдп рднрд╛рдЧ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
- рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рддреАрдХ рдХреЗ рд╕рд╛рде рд╕реНрдХреНрд░реАрди рдореЗрдореЛрд░реА рдореЗрдВ рдПрдХ рд╕реЗрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдХреЗрддреЛрдВ рдХреА рдЧрдгрдирд╛
textX = scrX / 8
textY = рд╕реНрдХреНрд░рд┐ / резрем
рдПрдХ рдЪрд░рд┐рддреНрд░ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рд╕рдВрдХреЗрддреЛрдВ рдХреА рдЧрдгрдирд╛
SymbolX = scrX mod 8 - 1
рдкреНрд░рддреАрдХ = рд╕рд╛рдлрд╝ рдХрд░рдирд╛ mod 16
рдЬрд╣рд╛рдБ mod рд╡рд┐рднрд╛рдЬрди рдХрд╛ рд╢реЗрд╖ рднрд╛рдЧ рд╣реИред - рд╕рдВрдХреЗрддреЛрдВ рдкрд░ рдкрддреЛрдВ рдХреА рдЧрдгрдирд╛ X, Yред
- рд╡рд░реНрддрдорд╛рди рдЪрд░рд┐рддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред
- рд╡рд░реНрддрдорд╛рди рдкрд┐рдХреНрд╕реЗрд▓ рдФрд░ рд░рдВрдЧ рдЧрдарди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред
рдкреНрд░рдХреНрд░рд┐рдпрд╛ ( clk )
рд╢реБрд░реВ рдХрд░рдирд╛
рдЕрдЧрд░ рдЙрда рд░рд╣рд╛ рд╣реИ рддреЛ ( clk ) рддрдм
рдЕрдЧрд░ div = ' 1 ' рддреЛ
- 1
scrX <= conv_std_logic_vector ( HC рдореБрдарднреЗрдбрд╝ - 139 , 10 ) ;
scrY <= conv_std_logic_vector ( рдХреБрд▓рдкрддрд┐рдпреЛрдВ - 70 , 10 ) ;
- реи
textX <= conv_integer ( scrX ( 9 downto 3 ) ) ;
textY <= conv_integer ( scrY ( 9 downto 4 ) ) ;
рдкреНрд░рддреАрдХ <= scrX ( 2 рдбрд╛рдЙрдиреЛ 0 ) - 1 ;
рдкреНрд░рддреАрдХ <= рд╕рд╛рдлрд╝ ( 3 рдбрд╛рдЙрдиреЛ 0 ) ;
- рей
scrAddrA <= textY * 80 + textX ;
рдкреНрд░рддреАрдХ рдЪрд┐рд╣реНрди <= conv_integer ( рдкреНрд░рддреАрдХ ) * 8 + 7 - conv_integer ( рдкреНрд░рддреАрдХ ) ;
- 4
SAddrRead <= conv_integer ( scrDataA ( 7 downto 0 ) ) ;
scrData <= scrDataA ;
- 5
рдЕрдЧрд░ ( рд╡реАрд╕реА рдореБрдарднреЗрдбрд╝ > 69 ) рдФрд░ ( рд╡реАрд╕реА рдореБрдарднреЗрдбрд╝ < 470 ) рддрдм
рдпрджрд┐ SDataA ( рдкреНрд░рддреАрдХ рдЪрд┐рд╣реНрди ) = ' 1 ' рддрдм
curColor <= PalleteColor ( conv_integer ( scrData ( 8 downto 8 ) ) ) ;
рдЕрдиреНрдпрдерд╛
curColor <= PalleteColor ( conv_integer ( scrData ( 13 downto 13 ) ) )) ;
рдЕрдВрдд рдпрджрд┐ ;
рдЕрдиреНрдпрдерд╛
curColor <= x "000000" ;
рдЕрдВрдд рдпрджрд┐ ;
рдЕрдВрдд рдпрджрд┐ ;
рдЕрдВрдд рдпрджрд┐ ;
рдЕрдВрддрд┐рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ ;
b <= curColor ( 23 рдбрд╛рдЙрдирдЯрд╛рдЙрди 16 ) рдЬрдм ( vga_blank = ' 1 ' ) рдФрд░ "00000000" ;
g <= curColor ( 8 рдбрд╛рдЙрди 15 ) рдЬрдм ( vga_blank = ' 1 ' ) рдмрд╛рдХреА "00000000" ;
r <= curColor ( 7 downto 0 ) рдЬрдм ( vga_blank = ' 1 ' ) рдмрд╛рдХреА "00000000" ;
рд╣рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рдмрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ
- Addr (32 рдмрд┐рдЯ) - рдкрддрд╛
- рдбреЗрдЯрд╛ (32 рдмрд┐рдЯ) - рдбреЗрдЯрд╛
- Iowr (1 рдмрд┐рдЯ) - рд░рд┐рдХреЙрд░реНрдб (рдмрд╛рд╣рд░)
- Dout (32 рдмрд┐рдЯ) - рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдбреЗрдЯрд╛ (INPORT)
рдмрд╕ рдЙрд╕реА FPGA рдкрд░ рд▓рд╛рдЧреВ рдПрдХ
рдХрд┐рд▓реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред OUTPORT рдХрдорд╛рдВрдб рдкрд░, Addr, Data рд▓рд╛рдЗрдиреЗрдВ рд╕реЗрдЯ рдХреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ Iowr рд▓рд╛рдЗрди "1" рд▓рд╛рдЗрди рддрдХ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред INPORT рдХрдорд╛рдВрдб рдкрд░, рдкреНрд░реЛрд╕реЗрд╕рд░ Addr рд▓рд╛рдЗрди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ Dout рд▓рд╛рдЗрди рд╕реЗ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдмрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг:
рдкреНрд░рдХреНрд░рд┐рдпрд╛ ( clk )
рд╢реБрд░реВ рдХрд░рдирд╛
рдЕрдЧрд░ рдЙрда рд░рд╣рд╛ рд╣реИ рддреЛ ( clk ) рддрдм
- X (GOTOX) рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХрд░реНрд╕рд░ рд╕реЗрдЯ рдХрд░рдирд╛
рдЕрдЧрд░ conv_integer ( addr ) = 302 рдФрд░ iowr = ' 1 ' рддреЛ
рдЕрдЧрд░ conv_integer ( рдбреЗрдЯрд╛ ) > 79 рддреЛ
рдЧреЛрдЯреЛрдХреНрд╕ <= 0 ;
рдЕрдиреНрдпрдерд╛
рдЧреЛрдЯреЛрдХреНрд╕ <= conv_integer ( рдбреЗрдЯрд╛ ) ;
рдЕрдВрдд рдпрджрд┐ ;
рдЕрдВрдд рдпрджрд┐ ;
- Y (GOTOY) рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдХрд░реНрд╕рд░ рд╕реЗрдЯ рдХрд░рдирд╛
рдЕрдЧрд░ conv_integer ( addr ) = 303 рдФрд░ iowr = ' 1 ' рддрдм
рдЕрдЧрд░ conv_integer ( рдбреЗрдЯрд╛ ) > 24 рддрдм
рдЧреЛрдЯреА <= 0 ;
рдЕрдиреНрдпрдерд╛
рдЧреЛрдЯреА <= conv_integer ( рдбреЗрдЯрд╛ ) ;
рдЕрдВрдд рдпрджрд┐ ;
рдЕрдВрдд рдпрджрд┐ ;
рдЕрдВрдд рдпрджрд┐ ;
рдЕрдВрддрд┐рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ ;
рдЙрд╕реА рддрд░рд╣, рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрджреЗрд╢реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдореЙрдбреНрдпреВрд▓ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИред
рдореЙрдбреНрдпреВрд▓ рд▓рд┐рд╕реНрдЯрд┐рдВрдЧрдЪрд░рд┐рддреНрд░ рд╕реНрдореГрддрд┐ рдХреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПрдпреБрдкреАрдбреА:
рдореВрд▓ рдХрд╛рд░реНрдп300 - рд╕реНрдХреНрд░реАрди рдореЗрдореЛрд░реА рд╕реЗ рд▓рд┐рдЦрдирд╛ / рдкрдврд╝рдирд╛
301 - рд╕реНрдХреНрд░реАрди рдореЗрдореЛрд░реА рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрддрд╛
302 - рдЧрд╛рдбрд╝реА рдХрд╛ X рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╕реЗрдЯ рдХрд░реЗрдВ (GotoX)
303 - рдЧрд╛рдбрд╝реА рдХрд╛ рд╕рдордиреНрд╡рдп рд╕реЗрдЯ рдХрд░реЗрдВ (GotoY)
304 - рд╕реЗрдЯ рд╡рд░реНрдг рд░рдВрдЧ (рд╕реЗрдЯ рдХрд▓рд░)
305 - рдкреГрд╖реНрдарднреВрдорд┐ рд░рдВрдЧ рд╕реЗрдЯ рдХрд░реЗрдВ (SetBgColor)
306 - рдЪрд░рд┐рддреНрд░ рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рдХреИрд░рд┐рдЬ рдореВрд╡рдореЗрдВрдЯ (EMIT)
307 - рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдореЛрдб
1 - рд▓реЛрд╡реЗрд▓ рдореЛрдбред рдкреНрд░рддреНрдпрдХреНрд╖ рд╕реНрдореГрддрд┐ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП 300, 301 рдХрд╛рд░реНрдп рдЙрдкрд▓рдмреНрдз рд╣реИрдВ
0 - рд╕рд╛рдорд╛рдиреНрдп рдореЛрдбред рдлрдВрдХреНрд╢рди 306 рдХрд┐рд╕реА рд╡рд░реНрдг рдХреЛ рджрд┐рдП рдЧрдП рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд░реНрдг рд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ рдЧрд╛рдбрд╝реА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред
308 - рд╕реАрдЖрд░
309 - VGA_SetData (A ++)
рдХрд░реНрд╕рд░ рд╡рд┐рдХрд▓реНрдк310 - рдХрд░реНрд╕рд░ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░реЗрдВред
0 рдмрд┐рдЯ - рдХрд░реНрд╕рд░ рдореЗрдВ рдХрдо рдмрд╛рд░
1 рдмрд┐рдЯ - рдХрд╛рд▓рд╛ рд╡рд░реНрдЧ
2 рдмрд┐рдЯ - рдЭрд┐рд▓рдорд┐рд▓рд╛рд╣рдЯ
3 рдмрд┐рдЯ - рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдкрдЯреНрдЯреА
311 - рдХрд░реНрд╕рд░ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдмрд┐рдЯ рдирдВрдмрд░ 0 рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛
...
314 - рдХрд░реНрд╕рд░ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдмрд┐рдЯ рдирдВрдмрд░ 3 рд╕реЗрдЯ рдХрд░рдирд╛
320 - рдХрд░реНрд╕рд░ рдХрд╛ рд░рдВрдЧ рд╕реЗрдЯ рдХрд░рдирд╛
321 - рдХрд░реНрд╕рд░ рдХреЗ рдмреНрд▓рд┐рдВрдХрд┐рдВрдЧ рд╕рдордп рдХреА рд╕реНрдерд╛рдкрдирд╛
322 - рдЬрд▓рддреЗ рд╣реБрдП рдХрд░реНрд╕рд░ рдХрд╛ рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛
рдкреИрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ330 - рд░рдВрдЧ рдкреИрд▓реЗрдЯ рдХрд╛ рдкрддрд╛ рд╕реЗрдЯ рдХрд░рдирд╛
331 - рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдкрддреЗ рдкрд░ рд░рд┐рдХреЙрд░реНрдб рд░рдВрдЧ
рдкреНрд░рддреАрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ335 - рд╡рд░реНрдг рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрддрд╛ рд╕реЗрдЯ рдХрд░рдирд╛
337 - рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрддреЗ рдкрд░ рд░рд┐рдХреЙрд░реНрдб NewSymbol
340 - рдиреНрдпреВрд╕рдордмреЛрд▓ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рдиреНрдпреВ 32 рдмрд┐рдЯреНрд╕ рд╕реЗрдЯ рдХрд░рдирд╛ (рдиреНрдпреВрд╕рд┐рдВрдмреЛрд▓ (31: 0))
341 - рдиреНрдпреВрд╕рдордмреЛрд▓ рдХреЗ рдЕрдЧрд▓реЗ 32 рдмрд┐рдЯреНрд╕ рдХреА рд╕реНрдерд╛рдкрдирд╛ (63:32)
342 - рдиреНрдпреВрд╕рдордмреЛрд▓ (95:64)
343 - рдиреНрдпреВрд╕реНрдореЛрдмреЙрд▓ (127: 96)
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред