交通灯.docx
- 文档编号:6232893
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:10
- 大小:309.69KB
交通灯.docx
《交通灯.docx》由会员分享,可在线阅读,更多相关《交通灯.docx(10页珍藏版)》请在冰豆网上搜索。
交通灯
2、设计一个交通灯控制器。
(a)简要说明。
在十字路口,每条道路各有一组红、黄、绿灯和倒计时显示器,用以指挥车辆和行人有序地通行。
其中,红灯(R)亮,表示该条道路禁止通行;黄灯(Y)亮,表示停车;绿灯(G)亮,表示可以通行。
倒计时显示器是用来显示允许通行和禁止通行地时间。
交通灯控制器就是用来自动控制十字路口的交通灯和计时器,指挥各种车辆和行人安全通行。
十字路口交通灯负责控制各走向红绿灯的状态及转换,并且各状态之间有一定的时间过渡。
同时,东西南北每条干道上都为人行横道设置了红绿灯,提醒过路行人在安全时刻穿越道路,以保证行人的安全。
(b)具体功能如下:
①在十字路口的两个方向上各设一组红、绿、黄灯,显示顺序为其中一方向(东西方向)是绿灯、黄灯、红灯;另一方向(南北方向)是红灯、绿灯、黄灯。
②设置一组数码管,以倒计时的方式显示允许通行或禁止通行的时间,其中
绿灯、黄灯、红灯的持续时间分别是10s、3s和10s。
③当各条路上任意一条上出现特殊情况时,如当消防车、救护车或其他需要
优先放行的车辆通过时,各方向上均是红灯亮,倒计时停止,且显示数字在闪烁。
当特殊运行状态结束后,控制器恢复原来状态,继续正常运行。
一、设计目的
1、学习面向可编程器件的FPGA的简单数字系统的设计流程;
2、掌握EDA软件QuartusII的原理图输入方式,以及硬件描述语言描述方式;
3、熟悉EDA编辑软件。
二.系统分析
1、显示模块由两部分组成,一是由七段数码管组成的倒计时显示器,每个方向两个七段数码管;二是由发光二极管代替的交通灯,每个方向3个发光二极管。
2、每个方向有一组2位倒计时器模块,用以显示该方向交通灯剩余的点亮时间。
3、控制模块是交通灯的核心,主要控制交通灯按工作顺序自动变换,同时控制倒计时模块工作,每当倒计时回零时,控制模块接收到一个计时信号,从而控制交通灯进入下一个工作状态。
由于交通灯需要使用2位7段LED数码管指示通行剩余时间,故采用LED动态扫描方式显示当前时间。
频率设定CLK1k对应的频率为1024hz。
列出交通灯控制的状态转换表如下:
由于交通灯需要使用2位7段LED数码管指示通行剩余时间,故采用LED动态扫描方式显示当前时间。
频率设定CLK1k对应的频率为1024hz。
列出交通灯控制的状态转换表如下:
工作状态
持续时间
东西方向
南北方向
S0
10s
绿
红
S1
3s
黄
红
S2
10s
红
绿
S3
3s
红
黄
三﹑硬件电路设计
1、分频器
分频器实现的是将高频时钟信号转换成底频的时钟信号,用于触发控制器、计数器和扫描显示电路。
该分频器实现的是一千分频,将一千赫兹的时钟信号分频成一赫兹的时钟信号。
图3.1分频器
2、控制器设计
控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段数码管的分位译码电路。
此外,当检测到特殊情况(HOLD=‘1’)发生时,无条件点亮红灯的二极管。
本控制器可以有两种设计方法,一种是利用时钟沿的下降沿读取前级计数器的计数值,然后作出反应;另一种则是将本模块设计成纯组合逻辑电路,不需要时钟驱动。
这两种方法各有所长,必须根据所用器件的特性进行选择:
比如有些FPGA有丰富的寄存器资源,而且可用与组合逻辑的资源则相对较少,那么使用第一种方法会比较节省资源;而有些CPLD的组合逻辑资源则比较多,用第二种方法可能更好。
图3.2控制器
3、计数器设计
这里需要的计数器的计数范围为0-90。
计到90后,下一个时钟沿回复到0,开始下一轮计数。
此外,当检测到特殊情况(HOLD=‘1’)发生是,计数器暂停计数,而系统复位信号RESET则使计数器异步清零。
图3.3计数器
图3.4分位译码电路
4.码管驱动设计
串行连接,即每个数码管对应的引脚都接在一起(如每个数码管的a引脚都接到一起,然后再接到CPLD/FPGA上的一个引脚上),通过控制公共端为高电平控制相应数码管的亮、灭(共阴极数码管的公共端为高电平时,LED不亮;共阳极的公共端为低电平时,LED不亮)。
串行法的优点在于消耗的系统资源少,占用的I/O口少,N个数码管只需要(7+N)个引脚(如果需要小数点,则是(8+N)个引脚)。
其缺点是控制起来不如并行法容易。
图3.5数码驱动模块
5.为交通灯控制器的顶层文件连接图
图3.6交通灯控制器顶层文件连接图
7、下图为仿真波形图
图3.7仿真图
四、程序设计
1、分频器的设计
LIBRARYIEEE;
USEIEEE.Std_Logic_1164.ALL;
ENTITYFreDeviderIS
PORT
(Clkin:
INStd_Logic;
Clkout:
OUTStd_Logic);
END;
ARCHITECTUREDeviderOFFreDeviderIS
CONSTANTN:
Integer:
=499;
signalcounter:
Integerrange0toN;
signalClk:
Std_Logic;
BEGIN
PROCESS(Clkin)
begin
IFrising_edge(Clkin)THEN
IFCounter=Nthen
counter<=0;
Clk<=notclk;
else
counter<=counter+1;
endif;
endif;
endprocess;
clkout<=clk;
end;
2、控制设计
控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出倒计时数值给七段译管的分译码电路。
此外,当检测到特殊情况(Hold=‘1’)发生时,无条件点亮红色的发光二极管。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYcountrollerIS
PORT(Clock:
INSTD_LOGIC;
Hold:
instd_logic;
CountNum:
inINTEGERRANGE0TO22;
NumA,NumB:
outINTEGERRANGE0TO10;
RedA,GreenA,YellowA:
outstd_logic;
RedB,GreenB,YellowB:
outstd_logic);
END;
ARCHITECTUREbehaviorOFCountrollerIS
BEGIN
process(Clock)
BEGIN
IFfalling_edge(Clock)THEN
IFHold='1'THEN
RedA<='1';
RedB<='1';
GreenA<='0';
GreenA<='0';
YellowA<='0';
YellowB<='0';
ELSIFCountNum<=9THEN
NumA<=10-CountNum;
RedA<='0';
GreenA<='1';
YellowA<='0';
ELSIFCountNum<=12THEN
NumA<=13-CountNum;
RedA<='0';
GreenA<='0';
YellowA<='1';
ELSE
NumA<=23-CountNum;
RedA<='1';
GreenA<='0';
YellowA<='0';
ENDIF;
IFCountNum<=12THEN
NumB<=13-CountNum;
RedB<='1';
GreenB<='0';
YellowB<='0';
ELSIFCountNum<=12THEN
NumB<22-CountNum;
RedB<='0';
GreenB<='1';
YellowB<='0';
ELSE
NumB<=23-CountNum;
RedB<='0';
GreenB<='0';
YellowB<='1';
ENDIF;
ENDIF;
ENDPROCESS;
END;
3、计数器的设计
这里计数器的计数范围为0—23S。
计到45后,下一个时钟沿回复到0,开始下一轮计数.此外,当检测到特殊情况(Hold=‘1‘)发生时,计数器暂停计数,而系统复位号Reset则使计数器异步清0。
程序如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYcounterIS
PORT(clock:
INSTD_LOGIC;
reset:
instd_logic;
Hold:
instd_logic;
countNum:
BuFFeRINTEGERRANGE0TO23);
END;
ARCHITECTUREbehaviorOFcounterIS
BEGIN
process(reset,Clock)
BEGIN
IFReset='1'THEN
countNum<=0;
ELSIFrising_edge(Clock)THEN
IFHold='1'then
countNum<=countNum;
ELSIFcountNum=23THEN
countNum<=0;
ELSE
countNum<=countNum+1;
ENDIF;
ENDIF;
ENDPROCESS;
END;
4、分位译码电路设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYFenweiIS
PORT
(Numin:
INintegerRANGE0TO13;
NumA,NumB:
OUTIntegerRANGE0to9);
END;
ARCHITECTUREbehaviorOFFenweiIS
BEGIN
process(Numin)
BEGIN
IFNumin>=10THEN
NumA<=2;
NumB<=Numin-10;
ELSIFNumin>=10THEN
NumA<=1;
NumB<=Numin-10;
ELSENumA<=0;
NumB<=Numin;
ENDIF;
ENDPROCESS;
END;
6、数码管驱动设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYliangxieliangIS
PORT(A:
INSTD_LOGIC_VECTOR(3DOWNTO0);
LED7S:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
END;
ARCHITECTUREoneOFliangxieliangIS
BEGIN
PROCESS(A)
BEGIN
CASEA(3DOWNTO0)IS
WHEN"0000"=>LED7S<="1000000";
WHEN"0001"=>LED7S<="1111001";
WHEN"0010"=>LED7S<="0100100";
WHEN"0011"=>LED7S<="0110000";
WHEN"0100"=>LED7S<="0011001";
WHEN"0101"=>LED7S<="0010010";
WHEN"0110"=>LED7S<="0000010";
WHEN"0111"=>LED7S<="1111000";
WHEN"1000"=>LED7S<="0000000";
WHEN"1001"=>LED7S<="0010000";
WHEN"1010"=>LED7S<="0001000";
WHEN"1011"=>LED7S<="0000011";
WHEN"1100"=>LED7S<="1000110";
WHEN"1101"=>LED7S<="0100001";
WHEN"1110"=>LED7S<="0000110";
WHEN"1111"=>LED7S<="0001110";
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
END;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯
![提示](https://static.bdocx.com/images/bang_tan.gif)