Vhdl 신호등 디자인
1. 신호등의 밝은 소멸 법칙을 이해하다.
2. 신호등 컨트롤러의 작동 방식을 이해합니다.
3. VHDL 언어 프로그래밍에 익숙하고 실제 설계의 최적화 시나리오를 이해합니다.
2 하드웨어 요구 사항
1. EDA/SOPC 실험 상자 1 대. < P > 3 실험 원리 < P > 신호등은 사거리, T 자형 등 여러 가지 방법으로 표시되며, 같은 길목에는 여러 가지 다른 표시 요구 사항이 있습니다 < P > 이 실험을 완료하려면 먼저 교통가로등의 밝은 소멸 법칙을 이해해야 한다. 본 실험은 실험상자의 신호등 모듈에 있는 발광 다이오드, 즉 빨강, 노랑, 녹색을 각각 세 개씩 사용해야 한다. 사람들의 교통 관례에 따르면, "빨간불 정지, 청신호 행, 노란등 알림" 입니다. 그 신호등의 환멸법칙은 초태가 두 길목의 빨간불이 모두 켜지고, 그 후 동서길목의 청등이 켜지고, 남북길목의 빨간불이 켜지고, 동서방향이 개통되고, 일정 기간 지연되면 동서길목의 청등이 꺼지고, 황등이 깜박이기 시작한다는 것이다. 몇 번 깜박인 후 동서길목에서 빨간불이 켜지고, 동시에 남북길목의 청신호가 켜지고, 남북방향이 개통되기 시작하며, 일정 기간 연기한 후 남북길목의 청등이 꺼지고, 황등이 깜박이기 시작했다. 여러 번 깜박인 후 동서 교차로 방향으로 전환하여 이 과정을 반복합니다. < P > 실험에서 8 개의 7 세그먼트 코드 튜브 중 2 개의 디지털 파이프를 사용하여 시간을 표시합니다. 동서로와 남북로의 개통 시간은 모두 2s 로 설정되어 있다. 디지털 튜브의 시간은 항상 19, 18, 17 ... 2, 1, , 19, 18 ... 표시 시간이 3 초 미만일 때, 개통 방향의 노란등이 깜박거린다. < P > 4 가지 실험 내용 < P > 이 실험은 실험상자의 신호등 모듈과 7 단 코드관 중 2 개로 표시되는 간단한 신호등 컨트롤러를 설계하는 것입니다. 시스템 클럭클럭 모듈의 1KHz 클럭을 선택합니다. 황등 깜박임 클럭 요구 사항은 2Hz 이고, 7 단 코드관의 시간은 1Hz 펄스로 표시됩니다. 즉, 1s 당 한 번씩 감소하며, 표시 시간이 3 초 미만일 때, 개통 방향의 노란등이 2Hz 주파수로 깜박입니다. 시스템에서 S1 키를 사용하여 리셋합니다.
5 실험 단계
신호등 컨트롤러 완료 실험 단계는 다음과 같습니다.
1. 먼저 Quartus II 소프트웨어를 열고 새 프로젝트를 만든 다음 새 VHDL 파일을 만듭니다.
2. 자신의 생각대로 VHDL 프로그램을 작성합니다.
3. 자신이 작성한 VHDL 프로그램을 컴파일하고 시뮬레이션합니다. < P > 4. 시뮬레이션이 정확하면 부록 1 의 핀 도표에 따라 실험에서 시계, 7 단 코드 표시 및 신호등 모듈을 사용하는 LED 에 해당하는 FPGA 핀을 핀 바인딩한 다음 다시 컴파일합니다.
5. 다운로드 케이블을 사용하여 JTAG 인터페이스를 통해 해당 sof 파일을 FPGA 로 다운로드합니다.
6. 신호등 컨트롤러의 작업이 실험 요구 사항을 충족하는지 확인합니다.
참고: 이 실험에는 핀 재사용
-------------------------------------------------
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std _ logic _ unsigned.all;
----------------- -시계 입력
Rst: in std_logic; -입력 재설정
R1,R2: out std_logic; -빨간불 출력
Y1,Y2: out std_logic; -노란등 출력
G1,G2: out std_logic; -청신호 출력
디스플레이: out STD _ logic _ vector (7 down to ); -7 세그먼트 코드 튜브 디스플레이 출력
seg _ sel: buffer STD _ logic _ vector (2 down to )--7 세그먼트 코드 튜브 스캔 드라이브
;
end exp18;
-----------------
signal disp _ decode: STD _ logic _ vector (7 down to );
signal se C1, sec 1: integer range to 9;
signal direction: integer range to 15;
signalclk _ count1: STD _ logic _ vector (9 down to ); --.5Hz 시계를 생성하는 주파수 분할 카운터
signal Clk1Hz: std_logic;
signal Dir_Flag: std_logic; -방향 플래그
begin
process (clk)
begin
if (clk' event and clk =' 1') thees 1) then
Clk_Count1< =Clk_Count1+1;
else
Clk_Count1< ="1 ";
end if;
end if;
end process;
Clk1Hz< =Clk_Count1(9);
프로세스 (clk1hz, rst)
begin
if (rst =' ') then
sec1 < =;
SEC1< =2;
Dir_Flag< ='';
elsif (clk 1hz' event and clk 1hz =' 1') then
if (se C1 = ) then
se C1< =9;
if(SEC1=) then
SEC1< =1;
else
SEC1< =SEC1-1;
end if;
else
SEC1< =SEC1-1;
end if;
if (sec1 = 및 sec1 = ) then
dir _ flag < =not Dir_Flag;
end if;
end if;
end process;
프로세스 (clk1hz, rst)
begin
if (rst =' ') then
R1 < ='1';
G1< ='';
R2< ='1';
G2< ='';
else-정상 작동
if(SEC1> 또는 sec1 > 3) then
if (dir _ flag =' ') then-횡단 통과
R1< ='';
G1< ='1';
R2< ='1';
G2< ='';
else
R1< ='1';
G1< ='';
R2< ='';
G2< ='1';
end if;
else
if (dir _ flag =' ') then-횡단 통과
R1< ='';
G1< ='';
R2< ='1';
G2< ='';
else
R1< ='1';
G1< ='';
R2< ='';
G2< ='';
end if;
end if;
end if;
end process;
프로세스 (clk 1hz)
begin
if (sec 1 > 또는 sec1 > 3) then
Y1< ='';
Y2< ='';
elsif (dir _ flag =' ') then
y1 < =Clk1Hz;
Y2< ='';
else
Y1< ='';
Y2< =Clk1Hz;
end if;
end process;
프로세스 (dir _ flag)
begin
if (dir _ flag =' ') then-가로
d =1;
else-세로
Direction< =11;
end if;
end process;
프로세스 (seg _ sel)
begin
case (seg _ sel+1) is
when "" = Disp_Temp< =Direction;
when "1"=> Disp_Temp< =Direction;
when "1"=> Disp_Te