基于FPGA设计交通灯Word文件下载.docx
- 文档编号:16163221
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:22
- 大小:208.95KB
基于FPGA设计交通灯Word文件下载.docx
《基于FPGA设计交通灯Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于FPGA设计交通灯Word文件下载.docx(22页珍藏版)》请在冰豆网上搜索。
7
数码管段码
seg
4
数码管位码
表一:
系统总体I/O管脚的描述
注:
其中系统时钟的频率选为10KHZ,复位采取同步复位方式,且低有效。
支干道检测到有车时,carsignal=1;
否则,carsignal=0。
方案核心:
在交通灯控制器的设计中,交通灯控制及计时模块是本设计的关键模块。
第二部分总体设计方案
交通灯
2.1系统详细框图:
在系统总体框图的基础上进一步详细设计,得到如下系统详细框图。
clk
显示控制单元
定时
模块
显示单元
交通灯控制模块
时钟分频模块
图三:
系统详细框图
系统总体I/O管脚描述请查看技术规范。
2.2具体模块设计
1.时钟分频模块
系统的动态扫描需要10KHZ的脉冲,而系统时钟计时模块需要1HZ的脉冲。
分频模块主要为系统提供所需的时钟计时脉冲。
该模块将10KHZ的脉冲信号进行分频,产生1S的方波(占空比为50%),作为系统时钟计时信号。
图四:
时钟分频模块框图
I/O管脚描述如下:
input
系统时钟(10KHZ)
clk_out
output
分频后时钟信号(1HZ)
表二:
时钟分频模块I/O端口描述
系统时钟的频率为10KHZ,分频后的时钟信号为1HZ(占空比为50%)。
复位信号为同步复位,且低有效。
2.交通灯控制及计时模块
控制模块JTDKZH:
根据主干道、支干道输入信号以及时钟信号CLK,发出主、支干道指示灯的控制信号,同时向各个定时单元、显示控制单元发出使能控制信号产生系统的状态机,控制其他部分协调工作。
计时模块分别实现45s,25s,5s的定时,根据主、支干道输入信号和时钟信号以及交通灯控制器发出的使能信号按要求进行定时用来设定主干道和支干道计时器的初值,并为扫描显示译码模块提供倒计时时间。
控制模块采用状态机进行设计,可以定义出5种状态,分别为S0:
主干道绿灯,支干道红灯且没有车辆行驶;
S1:
主干道绿灯,支干道红灯且支干道有车辆驶入;
S2:
主干道黄灯,支干道红灯;
S3:
主干道红灯,支干道绿灯;
S4:
主干道红灯,支干道黄灯。
利用CASE语句定义状态的转换方式及时间的变换方式,达到主干道绿灯亮45秒,支干道绿灯亮25秒,黄灯亮5秒的设计要求。
图五:
交通灯控制及计数模块
复位信号(同步复位)
检测信号(低有效)
count_H_1
Output
主干道时间高位译码
count_L_1
主干道时间低位译码
count_H_2
支干道时间高位译码
count_L_2
支干道时间低位译码
表三:
交通灯控制模块I/O端口描述
系统的状态图如下所示
carsignal=0
carsignal=1
S0:
主干道绿灯,支干道红灯
主干道黄灯,支干道红灯
主干道红灯,支干道绿灯
主干道红灯,支干道黄灯
3.扫描显示译码模块
扫描显示译码模块可以根据控制信号,驱动交通信号灯以及倒计时数码管的显示,其中数码管的显示采用动态扫描显示。
图六:
扫描显示译码模块框图
该模块的I/O管脚描述如下:
复位信号(低有效)
seg
3
表四:
扫描显示译码模块I/O端口描述
第三部分仿真结果
Modelsim前仿真
Quartus2后仿真
第四部分源代码
分频模块:
modulefenpinqi(clk,rst,clk_odd);
inputclk,rst;
outputclk_odd;
regclk_odd;
reg[13:
0]count;
parameterN=10;
always@(posedgeclk)
if(!
rst)
begin
count<
=1'
b0;
clk_odd<
end
else
if(count<
N/2-1)
begin
count<
=count+1'
b1;
else
=~clk_odd;
endmodule
控制及计时模块:
module
control(led,car,rst,clk,count_H_1,count_L_1,count_H_2,count_L_2);
output[3:
0]count_H_1,count_L_1,count_H_2,count_L_2;
output[5:
0]led;
inputclk,rst,car;
reg[5:
0]led;
reg[3:
reg[1:
0]state;
parameterS0=2'
b00,
S1=2'
b01,
S2=2'
b10,
S3=2'
b11;
always@(posedgeclkornegedgerst)
rst)
led=6'
b010100;
state=S0;
count_H_1=4'
b0000;
count_L_1=4'
count_H_2=4'
count_L_2=4'
end
case(state)
Begin
car)
//count_H_1=4'
b0100;
b0101;
//?
?
count_H_1=4'
b0111;
if(count_H_1==4'
b0111)
begin
count_H_2=4'
if(count_L_1=0)
if(count_H_1==0)
b001100;
state<
=S1;
if(count_L_2==0)
count_H_2<
=count_H_2-1'
count_L_2<
=4'
b1001;
elsebegincount_L_2<
=count_L_2-1'
endelse
count_H_1<
=count_H_1-1'
count_L_1<
elsebegin
count_L_2<
count_L_1<
=count_L_1-1'
/*begin
car)
begin
end
elsebegin
end*/
/*if(count_L_1==0)
car)
begincount_H_2=4'
end
elseif(count_L_2==0)
begin
else
S1:
begin
if(count_L_1==0)
b100010;
b0010;
state<
=S2;
S2:
if(count_L_2==0)
if(count_H_2==0)
b100001;
=S3;
else
count_L_2=4'
elsebegin
end
begin
S3:
=S0;
endcase
扫描译码显示模块:
saomiao(rst,clk,count_H_1,count_L_1,count_H_2,count_L_2,sel,seg);
inputrst,clk;
input[3:
output[6:
0]sel;
output[3:
0]seg;
reg[6:
reg[3:
reg[15:
0]cnt;
0]data;
regclk_odd;
always@(posedgeclkornegedgerst)
count<
=0;
clk_odd<
elseif(count==16'
d2)
=~clk_odd;
count<
=count+1'
always@(negedgerstorposedgeclk_odd)//?
1ms
if(!
rst)begin
cnt<
=2'
b00;
elsecnt<
=cnt+1'
always@(negedgerstorposedgeclk)
rst)begin
//sel=7'
b0000000;
seg=4'
b1111;
elsebegin
case(cnt)
2'
b00:
seg=4'
b1110;
data=count_H_1;
2'
b01:
begi
b1101;
//?
data=count_L_1;
b10:
begin//?
seg=4'
b1011;
data=count_H_2;
b11:
begin//?
b0111;
data=count_L_2;
default:
//sel=8'
b0000;
always@(dataorseg)begin
case(data)
4'
b0000:
sel=7'
b1111110;
b0001:
b0110000;
b0010:
b1101101;
b0011:
b1111001;
b0100:
b0110011;
b0101:
b1011011;
b0110:
b1011111;
b0111:
b1110000;
b1000:
b1111111;
b1001:
b1111011;
default:
endcase
顶层模块:
modulejiaotongdeng(clk,rst,car,led,sel,seg,count_H_1,count_L_1,count_H_2,count_L_2,clk_odd);
0]seg;
0]sel;
wire[3:
wireclk_odd;
saomiaoee(rst,clk_odd,count_H_1,count_L_1,count_H_2,count_L_2,sel,seg);
controlrr(led,car,rst,clk_odd,count_H_1,count_L_1,count_H_2,count_L_2);
fenpinqitt(clk,rst,clk_odd);
激励模块:
`defineTRUE1'
b1
`defineFALSE1'
b0
modulestimulus;
0]SEG;
wire[6:
0]SEL;
wire[5:
0]LED;
wire[3:
regCAR_ON_CNTRY_RD;
regCLOCK,RST;
jiaotongdengjiaotongdeng1(CLOCK,RST,CAR_ON_CNTRY_RD,LED,SEL,SEG,count_H_1,count_L_1,count_H_2,count_L_2,clk_odd);
initial
$monitor($time,"
led=%b,sel=%b,seg=%b"
LED,SEL,SEG);
initial
CLOCK=`FALSE;
forever#5CLOCK=~CLOCK;
RST=`FALSE;
repeat
(2)@(negedgeCLOCK);
RST=`TRUE;
CAR_ON_CNTRY_RD=1'
repeat(20)@(negedgeCLOCK);
CAR_ON_CNTRY_RD=1'
repeat(500)@(negedgeCLOCK);
repeat(2400)@(negedgeCLOCK);
$stop;
endmodule
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 设计 交通灯
![提示](https://static.bdocx.com/images/bang_tan.gif)