컴퓨터 지식 네트워크 - 컴퓨터 설치 - FPGA 기반 그래픽 컨트롤러 졸업 프로젝트 설계

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)?--스캔 포인트 카운트, 화면 스캐닝 카운트, 깜박임 제어, 문자 표시 위치 제어 시작

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>

끝?행동;

上篇: 배꽃의 영어 학명은 무엇인가요? 下篇: 다음주 일요일에 백만해바라기밭 방문에 대한 조언을 부탁드립니다.
관련 내용