点:
31号楼
312房;实验台号:
评
分:
12
实验日期与时间:预习检查纪录:
2017年12月08日
批改教师:
报告内容:
一、实验要求
1、开发板上三个led等分别代表公路上红黄绿三种颜色交通灯。
2、交通灯状态机初始状态为红灯,交通灯工作过程依次是红→绿→黄→红。3、为了方便观察,本次实验要求红灯的显示时间为9s,绿灯显示时间为6s,黄灯显示时间为3s,时间需要倒计时,在数码管上显示。编程之前要求同学们先画好ASM图。4、1Hz分频模块请采用第二次实验中的内容,7段码显示模块请参考书本相关内容。5、第三次实验课用到EP2C8Q208C8通过74HC595驱动数码管,有两种方法写该模块代码:方法1,用VHDL语言写,(自己写VHDL代码有加实验分)。方法2,可调用verilog数码管驱动模块,该模块在附件“seg.zip”中。和其它VHDL编写的模块可以混搭在一个电路图中使用。EP2C8Q208C8的SCTP,SHCP,SER_DATA数码管信号线通过两块74HC595集成块,再驱动数码管。
6、芯片型号:cyclone:EP2C8Q208C8,开发板所有资料都在“新板”附件中,其中管脚配置在实验要求中是不对的,以“新板”附件中为准。
二、实验内容
1设计要求
开发板上三个led等分别代表公路上红黄绿三种颜色交通灯。交通灯状态机初始状态为红灯,交通灯工作过程依次是红→绿→黄→红。本次实验要求红灯的显示时间为9s,绿灯显示时间为6s,黄灯显示时间为3s,时间需要倒计时,在数码管上显示。
1
2设计思路
(1)数码管驱动
第三次实验课用到EP2C8Q208C8通过74HC595驱动数码管,有两种方法写该模块代码:
方法1,用VHDL语言写,(自己写VHDL代码有加实验分)。
方法2,可调用verilog数码管驱动模块,该模块在附件“seg.zip”中。和其它VHDLEP2C8Q208C8的SCTP,SHCP,SER_DATA编写的模块可以混搭在一个电路图中使用。
数码管信号线通过两块74HC595集成块,再驱动数码管。
(2)交通灯流程设计
我根据实验要求,将实验设计分为6部分:分频器模块、复位部分、红灯部分、黄灯(红转黄时)部分、绿灯部分、扩位模块。其中复位部分包括1个状态:reset0,红灯部分包括9个状态:r1到r9,绿灯部分包括6个状态:r1到r6,黄灯部分包括3个状态:y1到y3。其中,对脉冲信号进行2的n次方分之一的分频,实现分频器分频。扩位模块采用补0操作实现将4位二进制数转为16位二进制数。
2
3ASM图
设计17个状态,包括1个复位状态,9个红灯状态,6个绿灯状态,交通灯控制的ASM图如图1所示。
reset0
r1r3
r5r7
红灯
r2r4
r9
r6
r8
g1
绿灯
g2
g3
g4
g5
g6
y3
y2
y1
红灯
图1交通灯控制的ASM图
4VHDL描述
(1)分频器描述
-----------------------------------------------------------VHDLexperience2--FENPINQI
--DIV50MHzinto1Hz
3
--QuartusIIversion:QuartusII9.0--ChenYirong--2017.11.24
-----------------------------------------------------------includelibraryLIBRARYIEEE;--includepackage
USEIEEE.std_logic_1164.ALL;USEIEEE.std_logic_unsigned.all;
-----------------------------------------------------------introduceentity
ENTITYclkdiv_15dianzhuo_12is--changentochangefrequence
GENERIC(n:integer:=50000000);--leishucanshuPORT(clk:INstd_logic;
Y:OUTstd_logic);
ENDENTITY;
-----------------------------------------------------------describearchitecture
ARCHITECTUREbehavOFclkdiv_15dianzhuo_12IS--structureSIGNALcount:integerRANGEn-1DOWNTO0:=n-1;--COUNTERBEGIN
PROCESS(clk)BEGIN
IF(rising_edge(clk))thencount<=count-1;--dijianif(count>=n/2)then
Y<='0';else
Y<='1';
4
--fenpin
--shiti--usepackage--IEEELibrary
endif;
if(count<=0)then
count<=n-1;endif;ENDIF;ENDPROCESS;ENDbehav;
---------------------------------------------------------(2)交通灯控制描述
-----------------------------------------------------------VHDLexperience3--traffic_light_machinestate--sanjinchengzhuangtaiji--QuartusIIversion:QuartusII9.0--ChenYirong--2017.12.08
-----------------------------------------------------------includelibraryLIBRARYIEEE;--includepackage
USEIEEE.std_logic_1164.ALL;USEIEEE.std_logic_unsigned.all;
-----------------------------------------------------------introduceentity
ENTITYtraffic_light_machinestateisPORT(clk:INstd_logic;--clock
rst_n:INstd_logic;--reset,lowlevelvalidred_light:OUTstd_logic;--lowlevelvalidgreen_light:OUTstd_logic;--lowlevelvalidyellow_light:OUTstd_logic;--lowlevelvalid
5
--shiti--usepackage--IEEELibrary
holdtime:OUTintegerrange0TO9);--showtime
ENDENTITY;
-----------------------------------------------------------describearchitecture
ARCHITECTUREBehavOFtraffic_light_machinestateIS--jiegouti--describeallstate
TYPEstate_typeIS(reset0,r1,r2,r3,r4,r5,r6,r7,r8,r9,g1,g2,g3,g4,g5,g6,y1,y2,y3);SIGNALpresent_state,next_state:state_type;--shuangjinchengzhuangtaijiBEGIN
-----------------------------------------------------------seqprocess:createstateseq:PROCESS(clk,rst_n)BEGIN
IF(rst_n='0')THEN--fuweishihongdengliangpresent_state<=reset0;ELSIF(rising_edge(clk))THENpresent_state<=next_state;ENDIF;ENDPROCESS;
-----------------------------------------------------------comprocess:createnextstateandoutputlogiccom:PROCESS(next_state)BEGIN
red_light<='0';green_light<='1';yellow_light<='1';holdtime<=0;CASEpresent_stateISWHENreset0=>
--fuweistate
6
red_light<='0';green_light<='1';yellow_light<='1';holdtime<=0;next_state<=r1;WHENr1=>--redlightresttime=9
red_light<='0';green_light<='1';yellow_light<='1';holdtime<=9;next_state<=r2;WHENr2=>--redlightresttime=8red_light<='0';green_light<='1';yellow_light<='1';holdtime<=8;next_state<=r3;WHENr3=>--redlightresttime=7red_light<='0';green_light<='1';yellow_light<='1';holdtime<=7;next_state<=r4;WHENr4=>--redlightresttime=6red_light<='0';green_light<='1';yellow_light<='1';holdtime<=6;next_state<=r5;WHENr5=>
--redlightresttime=5
7
red_light<='0';green_light<='1';yellow_light<='1';holdtime<=5;next_state<=r6;WHENr6=>red_light<='0';green_light<='1';yellow_light<='1';holdtime<=4;next_state<=r7;WHENr7=>red_light<='0';green_light<='1';yellow_light<='1';holdtime<=3;next_state<=r8;WHENr8=>red_light<='0';green_light<='1';yellow_light<='1';holdtime<=2;next_state<=r9;WHENr9=>red_light<='0';green_light<='1';yellow_light<='1';holdtime<=1;next_state<=g1;WHENg1=>
--greenlightresttime=6
8
--redlightresttime=1--redlightresttime=2--redlightresttime=3--redlightresttime=4
red_light<='1';green_light<='0';yellow_light<='1';holdtime<=6;next_state<=g2;WHENg2=>red_light<='1';green_light<='0';yellow_light<='1';holdtime<=5;next_state<=g3;WHENg3=>red_light<='1';green_light<='0';yellow_light<='1';holdtime<=4;next_state<=g4;WHENg4=>red_light<='1';green_light<='0';yellow_light<='1';holdtime<=3;next_state<=g5;WHENg5=>red_light<='1';green_light<='0';yellow_light<='1';holdtime<=2;next_state<=g6;WHENg6=>
--greenlightresttime=1
9
--greenlightresttime=2--greenlightresttime=3--greenlightresttime=4--greenlightresttime=5
red_light<='1';green_light<='0';yellow_light<='1';holdtime<=1;next_state<=y1;WHENy1=>red_light<='1';green_light<='1';yellow_light<='0';holdtime<=3;next_state<=y2;WHENy2=>red_light<='1';green_light<='1';yellow_light<='0';holdtime<=2;next_state<=y3;WHENy3=>red_light<='1';green_light<='1';yellow_light<='0';holdtime<=1;next_state<=r1;ENDCASE;ENDPROCESS;ENDBehav;
--------------------------------------------------------------(3)将四位二进制数转为16位二进制数描述-----------------------------------------------------------VHDLexperience3
10
--yellowlightresttime=1--yellowlightresttime=2--yellowlightresttime=3
--add_bit
--sanjinchengzhuangtaiji--QuartusIIversion:QuartusII9.0--ChenYirong--2017.12.08
-----------------------------------------------------------includelibraryLIBRARYIEEE;--includepackage
USEIEEE.std_logic_1164.ALL;USEIEEE.std_logic_unsigned.all;
-----------------------------------------------------------introduceentityENTITYadd_bitis
--shiti
--usepackage--IEEELibrary
PORT(clk:INstd_logic;
input4bit:INstd_logic_vector(3DOWNTO0);output16bit:OUTstd_logic_vector(15DOWNTO0));
ENDENTITY;
-----------------------------------------------------------describearchitecture
ARCHITECTUREbehavOFadd_bitISBEGIN
---------------------------------------------------------output16bit<=\"ZZZZZZZZZZZZZZZZ\";PROCESS(clk,input4bit)BEGIN
IF(rising_edge(clk))THEN
output16bit<=\"000000000000\"&input4bit;ENDIF;
11
ENDPROCESS;ENDbehav;
---------------------------------------------------------
三、实验过程记录(流程图或者实验逻辑思路过程)1仿真实验
整体电路图如图2所示。
图2交通灯控制整体电路图
编译后,可以查看交通灯控制的整体RTL图,见。
图3交通灯控制电路的整体RTL图
1秒计数器的RTL图如图4所示。
12
图41秒计数器的RTL图
交通灯状态机的RTL图如图5所示。
图5交通灯状态机的RTL图
4位转16位扩位模块的RTL图如图6所示。
13
图64位转16位扩位模块RTL图
14
交通灯控制的符号化状态机的状态转换图如图7所示。
图7符号化状态机的状态转换图
将1秒用两个时钟周期表示,进行时序波形仿真,仿真结果见图8。
图8时序仿真波形
由图8可以知道,所设计的电路实现了如下功能:
交通灯的工作过程依次是红→绿→黄→红。红灯的显示时间为9s,绿灯显示时间为6s,黄灯显示时间为3s。其中低电平代表某一灯处于亮的状态。
2下载验证
首先,对电路模块分配引脚,见图9所示。
图9交通灯控制电路引脚分配
然后将工程下载至开发板,可以观察到开发板上代表红、绿、黄的三个Led灯按着9s、6s、3s循环显示。显示时间倒计时在数码管上显示。其中LED0代表红灯、LED1代表绿灯,LED2代表黄灯。
15
(a)红灯9秒(d)红灯6秒(g)红灯3秒(j)绿灯6秒(m)绿灯3秒(p)黄灯3秒(b)红灯8秒(e)红灯5秒(h)红灯2秒(k)绿灯5秒(n)绿灯2秒(q)黄灯2秒
图10交通灯控制实验结果
16
(c)红灯7秒
(f)红灯4秒
(i)红灯1秒
(l)绿灯4秒
(o)绿灯1秒
(r)黄灯1秒
(实验报告作品相片粘贴页)
(工程软件比如电路图截图、仿真结果或者实验平台运行效果照片)
图11交通灯控制整体电路图
图12交通灯控制电路的整体RTL图
图131秒计数器的RTL图
17
图14交通灯状态机的RTL图
图15符号化状态机
图16时序仿真波形
18
图174位转16位扩位模块RTL图
19
(s)红灯9秒(v)红灯6秒(y)红灯3秒(ab)绿灯6秒(ae)绿灯3秒(ah)黄灯3秒(t)红灯8秒(w)红灯5秒(z)红灯2秒(ac)绿灯5秒(af)绿灯2秒(ai)黄灯2秒
图18交通灯控制实验结果
20
(u)红灯7秒
(x)红灯4秒
(aa)红灯1秒
(ad)绿灯4秒
(ag)绿灯1秒
(aj)黄灯1秒
因篇幅问题不能全部显示,请点此查看更多更全内容