您的当前位置:首页正文

华南理工大学数字系统设计实验3报告

2023-03-07 来源:客趣旅游网
实验三基于状态机的交通灯控制地

点:

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秒

因篇幅问题不能全部显示,请点此查看更多更全内容