FPGA 기반 그래픽 컨트롤러 졸업 프로젝트 설계
귀하의 이메일로 발송되었으니 확인 부탁드립니다.
------------------------------- -- ------------------------------------------------ --
--실험 질문 번호:?lab5
--프로젝트 이름:?VGA 실험
--파일 이름?:?VGA_640480.vhd< /p >
--저자:?
--클래스 번호.:?
--만든 날짜:?
--대상 칩: ?EP1C6Q240C8
--회로 모드: 모드 5
--데모 설명: 입력 클록은 clock0, 50Mhz입니다.
--출력은 VGA에 연결됩니다.
--전원을 켠 후 재설정하십시오.
--키 1 신호의 상승 에지가 문자 색상을 변경합니다.
--키의 상승 에지 2개의 신호는 문자를 변경합니다.
--키 3 스위치는 y 방향의 문자 이동을 제어합니다.
--키 4 스위치는 x 방향의 문자 이동을 제어합니다.
-- 키 5 스위치는 문자 깜박임을 제어합니다.
--키 6 스위치는 문자 테두리를 제어합니다.
--키 8? 재설정
--------- ------------- ----------- ------------- --------
도서관?ieee;
use?ieee.std_logic_1164.all;
use?ieee.std_logic_unsigned.all;
use?ieee.std_logic_arith.all;
entity?vga640480 ?is 포트(
주소? :?out?STD_LOGIC_VECTOR(11?DOWNTO?0);?--연결 ROM 주소
reset?:?in?STD_LOGIC;
q?:?in?STD_LOGIC;? --ROM 데이터 반환
clk:?buffer?std_logic;?--주파수 분할 후 25M 클럭
clk_0? :?in?STD_LOGIC;?--50M 클록 입력
r,g,b?:?out?STD_LOGIC;?--색상 신호
hs,vs?:?out ?STD_LOGIC;?--수평 동기, 필드 동기 신호
in_frame_switch:?in?STD_LOGIC;?--경계 스위치 추가
in_blink_switch:?in?STD_LOGIC;?--Blink 스위치
in_enlarge_switch?:? in?STD_LOGIC;?--대문자 스위치
in_num_change:?in?STD_LOGIC;?--표시된 값 변경
in_color_change:?in?STD_LOGIC;?--표시 색상 변경
in_v_x,in_v_y?:?in?STD_LOGIC;--표시 문자가 x, y 방향으로 변위되는지 여부 vga_syn?:?out ?STD_LOGIC?:?out?STD_LOGIC; vga_blank?: ?out?STD_LOGIC );
end?vga640480;
아키텍처?행동?vga640480?신호입니까?r1 ,g1,b1?:?std_logic;?signal?hs1, vs1?:?std_logic s;
signal?Vector_x?:?std_logic_Vector(9?downto?0);?--스캐닝 포인트 신호의 X 좌표?벡터_y?:?std_logic_Vector(8?downto?0);?--스캐닝 포인트 신호의 Y 좌표?target_x? :? std_logic_Vector(9?downto?0);?--문자 신호의 왼쪽 상단 모서리의 X 좌표?target_y?:?std_logic_Vector(8?downto?0);?--문자 신호의 왼쪽 상단 모서리의 Y 좌표 문자 신호?blink?:?std_logic;?- -점멸 제어 신호 공유?변수?scancount,blinkcount?:?정수;?--스캔 포인트 개수, 스캔 번호 개수 공유?변수?color?:?std_logic_Vector(2? downto?0);?--현재 표시 색상 rgb Shared?Variable?num?:?std_logic_Vector(1?downto?0);?--현재 표시되는 숫자
시작 ------- ----------- -------------------------- ----------- --- process(clk_0)?--50M 입력 신호를 2로 나눕니다.
시작
if(clk_0'event?and ?clk_0='1')?그럼 clk ?<=?not?clk;
end?end?process; ----------- -------------------------- -------- process(clk,reset) ?--라인 간격(블랭킹 영역 포함)의 픽셀 수 시작
if?reset='0'?then vector_x?< =?(others=>'0');
elsif?clk'event?and?clk='1'?then if?Vector_x=799?then
Vector_x?< =?(others=>'0'); else
벡터_x?<=?벡터_x?+?1; end?if;
end?end?process; ----------------- --------------------------------- ---- --- process(clk,reset)?--필드 간격(블랭킹 영역 포함)의 라인 수가 시작됩니다.
if?reset='0'?then vector_y?<=?(others=>'0 ');
elsif?clk'event?and?clk='1'?then if?Vector_x=799 ?then
if?Vector_y=524?then vector_y?<= ?(others=>'0');
else vector_y?<=?Vector_y?+?1;
end?if; end?if;
end?end?process; -------- ---------------- -- 프로세스
s(clk,reset)?--수평 동기화 신호 생성(동기화 폭 96, 선행 가장자리 16) 시작
if?reset='0'?then hs1?<=?'1';
p >
elsif?clk'event?and?clk='1'?then if?Vector_x>=656?and?Vector_x<752?then
hs1?<=?'0'; else
hs1?<=?'1'; end?if;
end?if; end?process; - ------------------------------------------------- - ------ process(clk,reset)?--필드 동기 신호 생성(동기 폭 2, 선행 가장자리 10) 시작
if?reset='0'?then vs1?<= ?' 1';
elsif?clk'event?and?clk='1'?then if?Vector_y>=490?and?Vector_y<492?then
vs1? <= ?'0'; else
vs1?<=?'1'; end?if;
end?end?process; -- ------------------------------------------------ -- ------------ process(clk,reset)?--라인 동기화 신호 출력 시작
if?reset='0'?then hs?<=?' 0' ;
elsif?clk'event?and?clk='1'?then hs?<=?hs1;
end?if; -- ------------------------------------------------ -- ---------------- process(clk,reset)?--필드 동기화 신호 출력 시작
if?reset='0'?then vs? <= ?'0';
elsif?clk'event?and?clk='1'?then vs?<=?vs1;
end?ifend?process ; - ------------------------------------------------ -- ------- process(clk,reset)?--스캔 포인트 카운트, 화면 스캐닝 카운트, 깜박임 제어, 문자 표시 위치 제어 시작 p >
if?reset='0'?then
target_x?<=?"0101000000";
target_y?<=?"011100000";
blink?<=?'0';
scancount?:=?0;
blinkcount?:=?0;
elsif?clk ' event?and?clk='1'?then
scancount?:=?scancount?+?1;
if?scancount?>=?525*800?then< / p>
blinkcount?:=?blinkcount?+?1;
if?(b
linkcount?=?20)?그런 다음 깜박이나요?<=?NOT?blink; 깜박임 카운트?:=?0;
end?if;
target_x?<=?target_x?+ ?in_v_x;
target_y?<=?target_y?+?in_v_y;
if?target_x>=640-32?then?target_x?<=?"0000000000";
p> p>end?if;
if?target_y>=480-32?then? target_y?<=?"000000000";
end?if;< /p >
scancount?:=?0;
end?if;
end?if end?process; -- ------------------------------------------------ -- -------- process(in_num_change,reset)?--번호 변경 시작 if?reset='0'?then
num?:=?"00";? in_num_change' event?and?in_num_change='1'?then
num?:=?num?+?"01";
end?if end?process; -- ------------------------------------------------ -- ------------------? process(in_color_change,reset)?--색상 변경 시작 if?reset='0'?then
color ?:= ?"001";? elsif?in_color_change'event?and?in_color_change='1'?then
if?color="111"?then
color?: =?" 001";
else
color?:=?color?+?"001";
end?if;
end ?if; end?프로세스 --------------------------- ------- ---------? process(reset,clk,벡터_x,벡터_y)?--?XY 좌표 위치 제어 변수?temp_x?:?std_logic_Vector(9?downto?0); Variable?temp_y?:?std_logic_Vector (8?downto?0); 변수?size?:?integer; if?reset='0'?then
r1?<=?'0'; g1?<=?'0 '; b1?<=?'0';? elsif(clk'event?and?clk='1')then
if?in_enlarge_switch='0'?then ?--제어 문자 측면 길이
size?:=?32;
else
size?:=?64;
end?if;
--문자 테두리
if?((벡터_x?=?target_x?-?1?1?벡터
_x?=?target_x?+?size?+?3)?and?벡터_y?>=?target_y?-?1?1?벡터_y?<=?target_y?+?size?+?3)
또는?((벡터_y?=?target_y?-?1?또는?벡터_y?=?target_y?+?size?+?3)?및?벡터_x?>=?target_x?-?1?및?벡터_x? <=?target_x?+?size?+?3)?다음 r1?<=?color(2)?AND?(blink?or?NOT?in_blink_switch)?AND?in_frame_switch?<=?color(1) ?AND?(blink?or?NOT?in_blink_switch)?AND?in_frame_switch; b1?<=?color(0)?AND?(blink?or?NOT?in_blink_switch)?AND?in_frame_switch;
else r1?<=?'0'; g1?<=?'0'; b1?<=?'0';
end?if;
--문자 표시
if?벡터_x?>=?target_x?and?벡터_x?=?target_y?and?벡터_y?
temp_y?:=?벡터_y-target_y;
temp_x?:=?벡터_x-target_x;
if?in_enlarge_switch='0'?그럼 주소는? <=?num?&?temp_y(4?downto?0)?&?temp_x(4?downto?0);
다른 주소는?<=?num?&?temp_y(5?downto? 1)?&?temp_x(5?downto?1);
end?if;
if?q?=?'0'?then r1?<=?color( 2)?and?(blink?or?NOT?in_blink_switch); g1?<=?color(1)?(blink?or?NOT?in_blink_switch)?b1?<=?color(0)?( 깜박임?또는?NOT?in_blink_switch);
그렇지 않으면 r1?<=?'0'; g1?<=?'0'; b1?<=?'0';?
end?if;
end?if; end?if;?end?프로세스;? --------------------------- -- 컬러 출력 r?<=?r1 ?and?hs1?and?vs1;g?<=?g1?and?hs1?and?vs1;
b?<=?b1?and?hs1?vga_blank?<= ?hs1?vs1?<=?clk?<=?'0';
/p>
끝?행동;