基于FPGA设计——交通灯.doc

上传人:知****量 文档编号:91994032 上传时间:2023-05-29 格式:DOC 页数:23 大小:226KB
返回 下载 相关 举报
基于FPGA设计——交通灯.doc_第1页
第1页 / 共23页
基于FPGA设计——交通灯.doc_第2页
第2页 / 共23页
点击查看更多>>
资源描述

《基于FPGA设计——交通灯.doc》由会员分享,可在线阅读,更多相关《基于FPGA设计——交通灯.doc(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、FPGA课程设计 交通灯控制器通信工程学院电科0701班罗超(17)第一部分 技术规范 1、1功能描述:实现一个由一条主干道与一条支干道得汇合点形成得十字路口得交通灯控制器,具体功能:(1) 主、支干道各设有一个绿、黄、红指示灯,两个显示数码管。(2) 主干道处于长允许通行状态,而支干道有车来时才允许通行。当主干道允许通行亮绿灯时,支干道亮红灯。而支干道允许通行亮绿灯时,主干道亮红灯。(3) 当主干道、支干道均有车时,两者交替允许通行,主干道每次通行45 秒,支干道每次通行25 秒,在每次由绿灯向红灯转换得过程中,要亮5 秒得黄灯作为过渡,并进行减计时显示。每个周期结束时都要进行支干道就是否有

2、车得检测,若有车则进行下一个周期,若没有,则主干道亮绿灯,支干道亮红灯,直到检测到支干道有车。1、2系统总体框图:根据设计要求与系统所具有得功能,并参考相关得文献资料,经行方案设计,可以画出如下图所示得交通信号灯控制器得系统框图。时钟分频模块交通灯控制模块 扫描显示译码模块clkrstcarsignal计时模块数码管段码sel数码管位码segLED灯I/O管脚得描述名称方向电平位宽功能 clkInput3、3V1系统时钟信号(10KHZ)carsignal Input3、3V1检测支路就是否有车rst Input3、3V1复位信号led Output3、3V6LED灯sel Output3、3

3、V7数码管段码 seg Output3、3V4数码管位码 表一:系统总体I/O管脚得描述注:其中系统时钟得频率选为10KHZ,复位采取同步复位方式,且低有效。支干道检测到有车时, carsignal=1;否则,carsignal=0。方案核心:在交通灯控制器得设计中,交通灯控制及计时模块就是本设计得关键模块。第二部分总体设计方案交通灯2、1系统详细框图:在系统总体框图得基础上进一步详细设计,得到如下系统详细框图。rstLED灯carsignalclk显示控制单元定时模块显示单元交通灯控制模块时钟分频模块译码单元数码管显示 图三:系统详细框图注:系统总体I/O管脚描述请查瞧技术规范。2、2具体模

4、块设计1、时钟分频模块系统得动态扫描需要10KHZ得脉冲,而系统时钟计时模块需要1HZ得脉冲。分频模块主要为系统提供所需得时钟计时脉冲。该模块将10KHZ得脉冲信号进行分频,产生1S得方波(占空比为50%),作为系统时钟计时信号。clk时钟分频模块rstclk_out 图四:时钟分频模块框图I/O管脚描述如下:名称方向电平位宽功能clkinput3、3V1系统时钟(10KHZ)rstinput3、3V1复位信号clk_outoutput3、3V1分频后时钟信号(1HZ) 表二:时钟分频模块I/O端口描述注:系统时钟得频率为10KHZ,分频后得时钟信号为1HZ(占空比为50%)。复位信号为同步复

5、位,且低有效。2、交通灯控制及计时模块控制模块JTDKZH:根据主干道、支干道输入信号以及时钟信号CLK,发出主、支干道指示灯得控制信号,同时向各个定时单元、显示控制单元发出使能控制信号产生系统得状态机,控制其她部分协调工作。计时模块分别实现45s,25s,5s得定时,根据主、支干道输入信号与时钟信号以及交通灯控制器发出得使能信号按要求进行定时用来设定主干道与支干道计时器得初值,并为扫描显示译码模块提供倒计时时间。控制模块采用状态机进行设计,可以定义出5种状态,分别为S0:主干道绿灯,支干道红灯且没有车辆行驶;S1:主干道绿灯,支干道红灯且支干道有车辆驶入;S2:主干道黄灯,支干道红灯;S3:

6、主干道红灯,支干道绿灯;S4:主干道红灯,支干道黄灯。利用CASE语句定义状态得转换方式及时间得变换方式,达到主干道绿灯亮45秒,支干道绿灯亮25秒,黄灯亮5秒得设计要求。clk_outcarsignalrstled交通灯控制模块count_H_1count_L_1count_H_2count_H_2图五:交通灯控制及计数模块I/O管脚描述如下:名称方向电平位宽功能clk_outInput3、3V1分频后时钟信号(1HZ)rstInput3、3V1复位信号(同步复位)carsignalInput3、3V1检测信号(低有效)count_H_1Output3、3V4主干道时间高位译码count_L

7、_1Output3、3V4主干道时间低位译码count_H_2Output3、3V4支干道时间高位译码count_L_2Output3、3V4支干道时间低位译码ledOutput3、3V6LED灯 表三:交通灯控制模块I/O端口描述 系统得状态图如下所示carsignal =0 S0 S3carsignal =1 S1 S2S0:主干道绿灯,支干道红灯S1:主干道黄灯,支干道红灯S2:主干道红灯,支干道绿灯S3:主干道红灯,支干道黄灯3、扫描显示译码模块扫描显示译码模块可以根据控制信号,驱动交通信号灯以及倒计时数码管得显示,其中数码管得显示采用动态扫描显示。rstclksegsel扫描显示译码

8、模块count_H_1count_L_1count_H_2count_H_2图六:扫描显示译码模块框图该模块得I/O管脚描述如下:名称方向电平位宽功能clkInput3、3V1系统时钟信号(10KHZ)rstInput3、3V1复位信号(低有效)count_H_1Input3、3V4主干道时间高位译码count_L_1Input3、3V4主干道时间低位译码count_H_2Input3、3V4支干道时间高位译码count_L_2Input3、3V4支干道时间低位译码selOutput3、3V7数码管段码segOutput3、3V3数码管位码表四:扫描显示译码模块I/O端口描述第三部分仿真结果

9、Modelsim 前仿真 Quartus2后仿真第四部分 源代码分频模块:module fenpinqi(clk,rst,clk_odd);input clk,rst;output clk_odd;reg clk_odd;reg13:0 count;parameter N = 10;always (posedge clk)if(! rst)begin count = 1b0;clk_odd = 1b0;endelse if ( count N/21)begin count = count + 1b1; endelsebegin count = 1b0;clk_odd = clk_odd; en

10、dendmodule控制及计时模块:modulecontrol(led,car,rst,clk,count_H_1,count_L_1,count_H_2,count_L_2);output3:0count_H_1,count_L_1,count_H_2,count_L_2;output 5:0led;input clk,rst,car;reg 5:0 led;reg3:0count_H_1,count_L_1,count_H_2,count_L_2;reg 1:0state;parameter S0=2b00, S1=2b01, S2=2b10, S3=2b11; always(posedg

11、e clk or negedge rst)if(!rst)beginled=6b010100;state=S0;count_H_1=4b0000;count_L_1=4b0000; count_H_2=4b0000;count_L_2=4b0000; end else begincase(state)S0:beginBeginif(!car)begin led=6b010100; /count_H_1=4b0100;count_L_1=4b0101;/? count_H_1=4b0111;count_L_1=4b0111; end else begin if(count_H_1 = 4b011

12、1) begin count_H_1=4b0100;count_L_1=4b0101; count_H_2=4b0101;count_L_2=4b0000; end else if(count_L_1=0) if(count_H_1=0) begin led=6b001100; count_H_1=4b0000;count_L_1=4b0100; state=S1; if(count_L_2=0) begin count_H_2=count_H_21b1; count_L_2=4b1001; end elsebegin count_L_2=count_L_21b1;end end else b

13、egin count_H_1=count_H_11b1; count_L_1=4b1001; if(count_L_2=0) begin count_H_2=count_H_21b1; count_L_2=4b1001; end elsebegin count_L_2=count_L_21b1; end end elsebegin count_L_1=count_L_11b1; if(count_L_2=0) begin count_H_2=count_H_21b1; count_L_2=4b1001; end elsebegin count_L_2=count_L_21b1; end end

14、 end end /* begin if(!car) begin count_H_2=4b0101;count_L_2=4b0000; end elseif(count_L_2=0) begin count_H_2=count_H_21b1; count_L_2=4b1001;end elsebegin count_L_2=count_L_21b1; end end */end /* if(count_L_1=0) begin if(count_H_1=0) begin led=6b001100; count_H_1=4b0000;count_L_1=4b0100; state=S1; end

15、else begin count_H_1=count_H_11b1;count_L_1=4b1001; endend elsebegin count_L_1=count_L_11b1;end if(!car) begin count_H_2=4b0101;count_L_2=4b0000; end else if(count_L_2=0) begin count_H_2=count_H_21b1; count_L_2=4b1001; end else begin count_L_2=count_L_21b1; end S1: beginif(count_L_1=0)begin if(count

16、_H_1=0) begin led=6b100010; count_H_1=4b0010;count_L_1=4b1001; count_H_2=4b0010;count_L_2=4b0100; state=S2; endelsebegin count_H_1=count_H_11b1; count_H_2=count_H_21b1; endendelsebegin count_L_1=count_L_11b1; count_L_2=count_L_21b1; end end S2:begin if(count_L_2=0) begin if(count_H_2=0) begin led=6b

17、100001; count_H_2=4b0000;count_L_2=4b0100; state=S3; elsebegin count_H_2=count_H_21b1; count_L_2=4b1001; end end else begincount_L_2=count_L_21b1;end if(count_L_1=0) begin begin count_H_1=count_H_11b1; count_L_1=4b1001; end endelse begin count_L_1=count_L_11b1; end end S3:begin if(count_L_2=0) begin

18、 if(count_H_2=0) begin led=6b010100; count_H_1=4b0100;count_L_1=4b1001; count_H_2=4b0100;count_L_2=4b0100; state=S0; end elsebegin count_H_1=count_H_11b1; count_H_2=count_H_21b1; end end else begin count_L_1=count_L_11b1; count_L_2=count_L_21b1; end endcaseend endmodule扫描译码显示模块:modulesaomiao(rst,clk

19、,count_H_1,count_L_1,count_H_2,count_L_2,sel,seg);input rst,clk;input3:0count_H_1,count_L_1,count_H_2,count_L_2;output 6:0sel;output 3:0seg;reg 6:0sel;reg 3:0seg;reg 15:0 count;reg 1:0 cnt; reg 3:0 data; reg clk_odd;always(posedge clk or negedge rst) begin if(!rst)begincount=0; clk_odd=0;end else if

20、(count=16d2) begin clk_odd=clk_odd; count=0; end else count=count+1b1; end always (negedge rst or posedge clk_odd)/?1msif (!rst)begincnt=2b00;endelse cnt=cnt+1b1; always(negedge rst or posedge clk) if(!rst) begin/ sel = 7b0000000 ;seg = 4b1111 ;endelse begincase (cnt)2b00: beginseg =4b1110 ; data=co

21、unt_H_1;end 2b01: begiseg= 4b1101 ;/ ?data=count_L_1; end 2b10:begin / ? seg= 4b1011 ; data=count_H_2; end 2b11: begin/ ? seg= 4b0111 ; data=count_L_2;end default : begin / sel = 8b0000000 ;seg = 4b0000 ;endendcaseendalways (data or seg)begincase(data)4b0000:sel=7b1111110;4b0001:sel=7b0110000;4b0010

22、:sel=7b1101101;4b0011:sel=7b1111001;4b0100:sel=7b0110011;4b0101:sel=7b1011011;4b0110:sel=7b1011111;4b0111:sel=7b1110000;4b1000:sel=7b1111111;4b1001:sel=7b1111011;default:sel=7b1111110; endcaseend endmodule顶层模块: module jiaotongdeng(clk,rst,car,led,sel,seg,count_H_1,count_L_1,count_H_2,count_L_2,clk_o

23、dd);input clk,rst,car;output 3:0 seg;output 6:0 sel;output 5:0 led;output 3:0count_H_1,count_L_1,count_H_2,count_L_2;output clk_odd;wire 3:0count_H_1,count_L_1,count_H_2,count_L_2;wire clk_odd;saomiao ee(rst,clk_odd,count_H_1,count_L_1,count_H_2,count_L_2,sel,seg);control rr(led,car,rst,clk_odd,coun

24、t_H_1,count_L_1,count_H_2,count_L_2);fenpinqi tt(clk,rst,clk_odd);endmodule激励模块:define TRUE 1b1define FALSE 1b0module stimulus;wire 3:0 SEG;wire 6:0 SEL;wire 5:0 LED;wire3:0count_H_1,count_L_1,count_H_2,count_L_2;wire clk_odd;reg CAR_ON_CNTRY_RD;reg CLOCK,RST;jiaotongdeng jiaotongdeng1(CLOCK, RST, C

25、AR_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 begin CLOCK = FALSE; forever #5 CLOCK = CLOCK; end initial begin RST = FALSE; repeat (2) (negedge CLOCK); RST = TRUE; end initial begin CAR_ON_CNTRY_RD = 1b0; repeat(20)(negedge CLOCK);CAR_ON_CNTRY_RD = 1b1; repeat(500)(negedge CLOCK);CAR_ON_CNTRY_RD = 1b0; repeat(500)(negedge CLOCK);CAR_ON_CNTRY_RD = 1b1; repeat(2400)(negedge CLOCK);$stop; end endmodule

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁