Se ha enviado a tu correo electrónico, por favor compruébalo.
------------------------------------------- ----- --------------------------------------------- -----
--Número de pregunta del experimento: ?lab5
--Nombre del proyecto: ?VGA experiment
--Nombre del archivo?: ?VGA_640480 .vhd
--Autor:?
--Número de clase.:?
--Fecha de creación:?
-- Chip de destino:?EP1C6Q240C8
--Modo de circuito: ?Modo 5
--Descripción de la demostración: ?El reloj de entrada es clock0, 50Mhz
--El la salida está conectada a VGA
--Reinicie después de encender
--El flanco ascendente de la señal de la tecla 1 cambia el color del carácter
--La El flanco ascendente de la señal de la tecla 2 cambia el carácter
--El interruptor de la tecla 3 controla el movimiento del carácter en la dirección y
--El interruptor de la tecla 4 controla el movimiento del carácter en la dirección x
--El interruptor de la tecla 5 controla el parpadeo de caracteres
--El interruptor de la tecla 6 controla el borde de los caracteres
--¿Tecla 8?reset
---- ------------------ -------------------------------- ------------------ ---------------------
biblioteca?ieee;
use?ieee.std_logic_1164.all;
use?ieee.std_logic_unsigned.all;
use?ieee.std_logic_arith.all;
entidad?vga640480?es puerto(
dirección? :?out?STD_LOGIC_VECTOR(11?DOWNTO?0);?--Dirección ROM de conexión
reset?:?in? STD_LOGIC;
q?:?in?STD_LOGIC;? --Devolución de datos ROM
clk:?buffer?std_logic;?--Reloj de 25 M después de la división de frecuencia
clk_0?:?in?STD_LOGIC;?--Entrada de reloj de 50M
r, g, b?:?out?STD_LOGIC;?--Señal de color
hs, vs?:?out?STD_LOGIC;?--Sincronización horizontal, señal de sincronización de campo
in_frame_switch:?in?STD_LOGIC;?--Agregar interruptor de borde
in_blink_switch:?in?STD_LOGIC ;?--Interruptor de parpadeo
in_enlarge_switch?:? in?STD_LOGIC;?--Interruptor de caracteres grandes
in_num_change:?in?STD_LOGIC;?--Cambiar el valor mostrado p>
in_color_change:?in?STD_LOGIC;?--Cambiar el color de visualización
in_v_x, in_v_y?:?in?STD_LOGIC;--Si el carácter de visualización se desplaza en la dirección x, y vga_syn?:?out?STD_LOGIC; vga_clk?:?out?STD_LOGIC?: ?out?STD_LOGIC );
end?vga640480;
arquitectura?comportamiento?de?vga640480?es señal?r1,g1,b1?:?std_logic;?signal?hs1,vs1?:?std_logic; señal?vector_x?:?std_logic_vector(9?downto?0);?-- ¿Señal de coordenadas X del punto de escaneo?vector_y?:?std_logic_vector(8?downto?0);?--Señal de coordenadas Y del punto de escaneo?target_x?:?std_logic_vector(9?downto?0);?--Señal de coordenadas X de la parte superior esquina izquierda del carácter ?target_y?:?std_logic_vector(8?downto?0);?--Coordenada Y de la esquina superior izquierda de la señal del carácter?blink?:?std_logic;?--Señal de control de parpadeo ¿Compartida?Variable? scancount, flickcount?:?integer;?- -Recuento de puntos de escaneo, recuento de números de escaneo ¿Compartido?Variable?color?:?std_logic_vector(2?downto?0);?--Color de visualización actual rgb ¿Compartido?Variable?num?:? std_logic_vector(1?downto?0); ?--Número mostrado actualmente
comenzar --------------------------- ------------- ---------------------------------- proceso(clk_0 )?--Dividir la señal de entrada de 50M por dos
begin
if(clk_0'event?and?clk_0='1')?clk?lt;=?not? ?clk;
finalizar si; finalizar?proceso -------------------------------- --------------- ----------------------- proceso(pulsar, restablecer) ?--El número de píxeles en el intervalo de línea (incluyendo el área en blanco) comienza
if?reset='0'?then vector_x?lt;=?(others=gt;'0');
elsif?clk'event?and?clk='1'? entonces si?vector_x=799?entonces
vector_x?lt;=?(others=gt;'0') ; else
vector_x?lt;=?vector_x?1; fin?si;
fin?si? ----------------------- --------------------------- --------------- proceso(clk, reset)?--campo Comienza el número de líneas de intervalo (incluida el área en blanco)
if?reset='0'? entonces vector_y?lt;=?(others=gt;'0');
elsif ?clk'event?and?clk='1'?entonces si?vector_x=799?entonces
si?vector_y=524?entonces vector_y?lt;=?(
otros=gt;'0');
else vector_y?lt;=?vector_y?1;
end?if; end?if;
¿finalizar?si; finalizar?proceso ------------------------------------------ --- ----------------------- proceso(clk, reset)?--Generación de señal de sincronización horizontal (ancho de sincronización 96, borde de ataque 16) comenzar
if?reset='0'?entonces hs1?lt;=?'1';
elsif?clk'event?and?clk='1 '?entonces si ?vector_xgt;=656?y?vector_xlt;752?entonces
hs1?lt;=?'0'; '; ¿finalizar si;
finalizar?si; finalizar?proceso ----------------------- ----- --------------------------------------------- -- proceso(clk, reset)?--generación de señal de sincronización de campo (ancho de sincronización 2, borde anterior 10) inicio
if?reset='0'?entonces vs1?lt;=?'1' ;
elsif?clk'event?y ?clk='1'?entonces si?vector_ygt;=490?y?vector_ylt;492?entonces
vs1?lt;=? '0'; else
vs1?lt ;=?'1'; fin?si;
fin?si?proceso --------- ----------------- --------------------------------- -------------- proceso(clk , reset)?--Comienza la salida de señal de sincronización horizontal
if?reset='0'?entonces hs?lt;=? '0';
elsif?clk'event? y?clk='1'?entonces hs?lt;=?hs1;
fin?if; ----------------- --------------------------------- ----------------- --- proceso(clk, reset)?--comienzo de salida de señal de sincronización de campo
if?reset='0'?entonces vs?lt;=?'0';
elsif?clk'event?and?clk='1'?entonces vs?lt;=?vs1;
end?if ; ¿finalizar? proceso; ---------- ----------------------------------- --------------- --------- proceso(clk, reset)?--Conteo de puntos de escaneo, conteo de escaneo de pantalla y control de parpadeo, comienza el control de posición de visualización de caracteres
si?reset='0' ?entonces
target_x?lt;=?
"0101000000";
target_y?lt;=?"011100000";
blink?lt;=?'0';
scancount?:=? 0;
blinkcount?:=?0;
elsif?clk'event?and?clk='1'?entonces
scancount?:=? scancount?1;
si?scancount?gt;=?525*800?entonces
blinkcount?:=?blinkcount?1;
si ?(blinkcount?=?20)?luego parpadear?lt;=?NO?blinkcount?:=?0;
end?if;
target_x?lt;= ?target_x? ?in_v_x;
target_y?lt;=?target_y? ?in_v_y;
si?target_xgt;=640-32?entonces? target_x?lt;=?"0000000000 ";
final?if;
si?target_ygt;=480-32?entonces? target_y?lt;=?"000000000";
final? if;
scancount?:=?0;
finalizar?if;
finalizar?if; finalizar?proceso -------- -------------------------------------------------- ------------- proceso(in_num_change,reset)?--Cambiar el número comenzar si?reset='0'?entonces
num?:=?"00" ? elsif?in_num_change'event?and?in_num_change='1'?entonces
num?:=?num? "01";
fin?if; ; ------------------------------------------------- - ---------------------? proceso(in_color_change,reset)?--Cambiar color comenzar si?reset='0'?entonces
color?:=?"001";?elsif?in_color_change'event?and?in_color_change='1'?luego
if?color="111"?luego
color ? :=?"001";
else
color?:=?color ?"001";
fin?if;
finalizar?si; finalizar?proceso --------------------------------------- - ------------? proceso(reset, clk, vector_x, vector_y)?--?Control de posicionamiento de coordenadas XY Variable?temp_x?:?std_logic_vector
(9?downto?0); Variable?temp_y?: ?std_logic_vector(8?downto?0); Variable?size?: ?integer if?reset='0'?then
r1 ?lt;=?'0'; g1?lt;=?'0'; b1?lt;=?'0';? elsif(clk'event?and?clk='1')entonces
if?in_enlarge_switch='0'?then?--Controlar la longitud del lado del carácter
tamaño?:=?32;
else
tamaño?: =?64;
end?if;
--borde de carácter
if?((vector_x?=?target_x?-?1?or?vector_x ?=?objetivo_x? ?tamaño? ?3)?y?vector_y?gt;=?objetivo_y?-?1?y?vector_y?lt;=?objetivo_y? ?((vector_y?=?objetivo_y?-?1?o?vector_y?=?objetivo_y? ?tamaño? ?3)?y?vector_x?gt;=?objetivo_x?-?1?y?vector_x?lt;=? target_x? (¿parpadear?o?NO?en_blink_switch)?Y?in_frame_switch?; b1?lt;=?color(0)?Y?(¿parpadear?o?NOT?en_blink_switch)?Y?in_frame_switch;
else r1 ?lt;=?'0'; g1?lt;=?'0'; b1?lt;=?'0';
end?if;
--Pantalla Carácter
if?vector_x?gt;=?target_x?and?vector_x?lt;?target_x? ?size?and?vector_y?gt;=?target_y?and?vector_y?lt;?target_y? ¿tamaño?entonces
temp_y?:=?vector_y-target_y;
temp_x?:=?vector_x-target_x;
if?in_enlarge_switch='0'? luego dirección?lt;=?num?amp;?temp_y(4?downto?0)?amp;?temp_x(4?downto?0);
otra dirección?lt;=?num?amp ;?temp_y(5?downto?1)?amp;?temp_x(5?downto?1);
end?if;
if?q?=?'0' ?entonces r1?lt;=?color(2)?y?(parpadeo?o?NO?in_blink_switch); g1?lt;=?color(1)?y?(bl)
tinta?o?NO?en_blink_switch); b1?lt;=?color(0)?y?(¿parpadeo?o?NOT?en_blink_switch);
else r1?lt;=?'0'; g1?lt;=?'0'; b1?lt;=?'0';?
end?if;
end?if; final?si;? proceso;? ----------------------------------------------- --- -------------------- --Salida de color r?lt;=?r1?and?hs1?and?vs1; ?lt;=?g1?y?hs1?y?vs1;
b?lt;=?b1?y?hs1?y?vs1;vga_blank?lt;=?hs1?y?vs1; vga_clk?lt;= ?clk; vga_syn?lt;=?'0';
comportamiento final;