EDA课程设计之交通灯设计报告.docx

上传人:b****5 文档编号:4042813 上传时间:2022-11-27 格式:DOCX 页数:26 大小:716.68KB
下载 相关 举报
EDA课程设计之交通灯设计报告.docx_第1页
第1页 / 共26页
EDA课程设计之交通灯设计报告.docx_第2页
第2页 / 共26页
EDA课程设计之交通灯设计报告.docx_第3页
第3页 / 共26页
EDA课程设计之交通灯设计报告.docx_第4页
第4页 / 共26页
EDA课程设计之交通灯设计报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

EDA课程设计之交通灯设计报告.docx

《EDA课程设计之交通灯设计报告.docx》由会员分享,可在线阅读,更多相关《EDA课程设计之交通灯设计报告.docx(26页珍藏版)》请在冰豆网上搜索。

EDA课程设计之交通灯设计报告.docx

EDA课程设计之交通灯设计报告

EDA综合设计与实践

一、设计目的和要求

1.熟练掌握QuartusII软件的使用方法和系统总体设计。

2.学会设计较复杂的数字系统,用VerilogHDL描述语言编写设计代码,并综合仿真验证设计,用FPGA试验箱验证设计。

3.学习FPGA试验箱的使用,各种电路图的引脚接法及其功能。

4.本实验要求学生以FPGA器件为目标器件,设计典型的数字系统。

本设计选题为交通灯控制系统设计。

二、设计方案:

方案一:

(1)明确系统的功能

图1-1所示为位于主干道和支干道的十字路口交通灯系统,支干道两边是安装传感器S,要求优先保证主干道的畅通。

平时处于主干道绿灯、支干道红灯的状态。

当支干道有车时,传感器发出信号S=1,主干道绿灯先转换成黄灯再转换成红灯,支干道由红灯转换为绿灯,支干道绿灯亮不超过30s,主干道每次通行不少于60s(在此期间,不管S是否有信号,都不改状态)。

(2)画状态转换图

说明:

1)Tl:

主干道绿灯亮的最短时间间隔,不少于60s;

2)Ts:

支干道绿灯亮的最长时间间隔不多于30s。

3)Ty:

主干道或支干道黄灯亮的时间间隔为5s

4)HR、HY、HG分别表示主干道红黄绿灯;

5)FR、FY、FG分别表示支干道红黄绿灯。

注:

H表示Header,F表示Follower,R表示Red,Y表示Yellow,G表示Green

交通灯控制单元控制过程分四个阶段:

分别用S0,S1,S2,S3表示:

S0:

主干道绿灯亮,支干道红灯亮,此时若支干道有车等待,且主干道已亮足时间Tl,则控制器发出状态转换信号,输出从S0转换到S1。

S1:

主干道黄灯亮,支干道红灯亮,进入此状态,黄灯亮足规定时间间隔Ty时,控制器发出状态转换信号St,输出从此状态S1到S2。

S2:

支干道绿灯亮,主干道红灯亮,若此时支干道继续有车,则继续保持此状态,但支干道绿灯亮时间不超过Ts时间间隔,否则控制单元发出状态转换信号St,使输出转换到S3状态。

S3:

支干道黄灯亮,主干道红灯亮,此时状态与S1状态持续时间间隔相同,均为Ty,时间到时,控制器发出St信号,输出从状态S3回到S0状态。

对四种状态用格雷码编码分别为00,01,11,10。

由此得图1-2交通灯控制单元状态图。

方案二:

本方案相对上一个方案加入了人工监督,且采用模块化设计。

(1)明确系统的功能,进行逻辑抽象

如图2-1本方案可实现在确定时刻,倒计数数字显示能够及时变化,红黄绿灯能准确变化,考虑到实际应用,加入人工监督功能,当固定开关SW=0时,实现交警人为控制交通秩序,当SW=1时,为自动控制模式,默认为SW=1。

本设计采用模块化设计,图2-2为本设计十字路口交通等系统的层次结构框图。

(2)模块功能说明

1.主控制模块control:

控制系统输入输出之间联系。

2.倒计时模块时间选择模块couterselect:

选择不同的倒计时时间。

3.倒计时时间驱动模块scan:

驱动倒计时时间长短选择模块电路。

4.数码管分时显示模块datamux,倒计时间分时送入用于显示。

5.倒计55s模块counter55,55s为绿灯点亮时间。

6.倒计5s模块counter5,5s为黄灯点亮时间。

7.顶层模块trafficlight,连接各模块设计,使之成为一个有机体。

前6个模块分别进行仿真测试,成功后把所有.v文件包含在工程trafficlight,实现模块化设计。

三、特殊要求(需要实验室提供的仪器设备、元器件和材料)

PC机,windows系统,QuartusII4.0软件,基于Cyclone型EP16Q240C8的实验箱。

四、设计及仿真

综合两个方案考虑,方案二比较实用,但因为方案一容易实现,所以一开始做了方案一的设计,后来有时间,又完成了方案二。

具体如下设计。

方案一:

(1)代码

见附录1。

(2)仿真结果及数据处理:

分析说明:

全局复位R=1无效,进入系统工作,先是主干道绿灯亮足60个时钟周期,因S=1,支干道有车等待,转入主干道黄灯亮5个时钟周期,然后进入支干道绿灯亮,30个时钟周期内支干道没车等待,所以S=0时转入主干道绿灯亮状态。

通过仿真,可以看出本设计的逻辑上时序上是正确的。

图1-3方案一设计Functional仿真

图1-3方案一设计Timing仿真

图1-3方案一设计RTL

(3)下载测试

编程下载和硬件测试的步骤如下:

1、打开下载窗口。

选择菜单“Tool“项的”programmer“,便可打开下载窗口。

2、设置下载电缆。

将ByteBlaster电缆的一端与微机的并行口相连,另一端10针插头与装有目标器件的PCB板上的插座相连。

并在”HardwareSetup”中设置下载电缆。

3、设置JTAG链。

Altera器件基本都支持JTAG在系统编程方式,这种方式简单易行,不需要专门的编程器。

4、选用模式NO.6(见附录3)如图1-4分配引脚,并编译后,把生成*.sof文件下载到基于Cyclone型EP16Q240C8的FPGA实验箱开发板上,成功查看结果,CLK时钟频率用1Hz,可通过实验箱上“键3”控制Reset全局复位,用“键5”可模拟传感器S的输入。

图1-4配置引脚

方案二

(1)代码

见附录2。

(2)各模块RTL电路及功能仿真、时序仿真

各模块分别建立工程文件,并进行功能仿真、时序仿真,前六个模块成功编译,得到正确仿真结果后,建立顶层模块。

1)模块一:

控制模块(control.v)

图2-3控制模块control.v的RTL

图2-4控制模块control的Functional仿真

图2-5控制模块control的Timing仿真

2)模块二:

5s倒计时模块(counter5.v)

图2-65s倒计时模块counter5.v的RTL

图2-75s倒计时模块counter5.v的Functional仿真

图2-85s倒计时模块counter5.v的Timing仿真

分析说明:

通过功能仿真,可以看出5s倒计时模块不存在逻辑上错误,可以通过;通过时序仿真,可以看到结果存在毛刺,但是结合实际应用,可以接受,所以通过这一模块的设计。

3)模块三:

55s倒计时模块(counter55.v)

图2-955s倒计时模块counter55.v的RTL

图2-1055s倒计时模块counter55.v的Functional仿真

图2-1155s倒计时模块counter55.v的Timing仿真

分析说明:

通过功能仿真和时序仿真,可以看出55s倒计时模块不存在逻辑、时序上错误,所以通过这一模块的设计。

4)模块四:

倒计时选择(couterselect.v)

图2-12倒计时选择模块couterselect.v的RTL

图2-13倒计时选择模块couterselect.v的Functional仿真

图2-14倒计时选择模块couterselect.v的Timing仿真

分析说明:

D_OUT1选择高位输出,用于选择驱动55秒倒计时计时器,分别在状态输入为“00”“10”这两种状态,即对应的绿灯时间,输出高电平,实现55秒倒计时计数器

D_OUT0:

时间低位输出,用于选择驱动5秒倒计时计时器,分别在输入为“01”“11”时,即对应黄灯点亮时间,输出高电平,实现5秒倒计时。

通过功能仿真和时序仿真,可以看出倒计时选择模块不存在逻辑、时序上错误(虽然时序仿真有毛刺显现,但是结合实际应用,可以接受),所以通过这一模块的设计。

5)模块五:

数据选择显示(datamux.v)

图2-15数据选择显示datamux.v的RTL

图2-16数据选择显示datamux.v的Functional仿真

图2-17数据选择显示datamux.v的Timing仿真

分析说明:

倒计时模块主要完成的工作是:

倒计时长短时间选择的功能,输入信号来自两个倒计时模块counter55和counter5,当倒计数完成时产生一个脉冲用于驱动此模块产生00,01,10,11序列来驱动倒计时时间模块选择。

D_in1:

高位驱动信号,来源于55秒计时到信号,当计数器计时完成后,产生这个信号驱动状态变化。

D_in0:

低位驱动信号,来源于5秒计时到信号,当计数器计时完成后,产生这个脉冲来驱动状态的变化。

通过功能仿真和时序仿真,可以看出数据选择显示模块不存在逻辑、时序上错误(虽然时序仿真有毛刺显现,但是结合实际应用,可以接受),所以通过这一模块的设计。

6)模块六:

时间选择驱动(scan.v)

图2-18时间选择驱动scan.v的RTL

图2-19时间选择驱动scan.v的Functional仿真

图2-20时间选择驱动scan.v的Timing仿真

分析说明:

此模块用于驱动倒计时时间长短选择。

模块七:

顶层模块(trafficlight.v)

图2-21方案二设计RTL

图2-22方案二设计的Functional仿真(SW=1,自动控制模式)

图2-23方案二设计的Functional仿真(SW=0,人工监督模式)

图2-24方案二设计的Timing仿真(SW=1,自动控制模式)

图2-25方案二设计的Timing仿真(SW=0,人工控制模式)

分析说明:

建立trafficlight项目,并设计顶层模块trafficlight.v,成功编译。

通过功能仿真和时序仿真,可以看出本设计已经成功完成。

达到目标:

实现在确定时刻,倒计数数字显示能够及时变化,红黄绿灯能准确变化,当固定开关SW=0时,实现交警人为控制交通秩序,当SW=1时,为自动控制模式,默认为SW=1。

(3)下载测试

编程下载和硬件测试的步骤如下:

1、打开下载窗口。

选择菜单“Tool“项的”programmer“,便可打开下载窗口。

2、设置下载电缆。

将ByteBlaster电缆的一端与微机的并行口相连,另一端10针插头与装有目标器件的PCB板上的插座相连。

并在”HardwareSetup”中设置下载电缆。

3、设置JTAG链。

Altera器件基本都支持JTAG在系统编程方式,这种方式简单易行,不需要专门的编程器。

4、选用模式NO.1(见附录3),如图2-26分配引脚,并编译后,把生成*.sof文件下载到基于Cyclone型EP16Q240C8的FPGA实验箱开发板上,成功查看结果,CLK时钟频率用1Hz,可通过实验箱上“键7”控制Reset全局复位,用“键8”可控制SW选择自动模式或人工监督模式。

图2-26

五、设计总结

经过此次课程设计,可以说收获良多,现总结为以下几点:

1、熟悉掌握了Quartus这个软件。

虽然上课时候已经看老师展示过这个软件的用法,但是没有亲力亲为始终对这个软件的掌握是很不够的。

此次通过设计以上两个方案,我对QuartusII这个软件已经掌握的比较好了。

2、通过以上两个方案的设计,我对正规的设计流程已经有了深刻的体会,相信以后遇到这种设计可以自如地应对了。

可以设计遇到中案的设计够____________________________________________________________________________________________________________________

3、通过设计代码过程中遇到编译错误的问题,经过一次次的排错,我对VerilogHDL描述语言的掌握得到一定的锻炼。

4、设计工程中,让我感慨最多的是功能仿真和时序仿真,通过看仿真图,理解系统运行,优化系统,这是一个艰巨的任务,也是一个最有意义的任务。

因为这一步的工作,我们不仅要把原理理解透彻,而且要联系FPGA试验箱开发板,所以对开发板的各种工作模式也要理解。

5、由于试验箱有限,所以我是提前一天在实验室试验过程序的了。

很多同学在答辩当天才下载程序试验,结果很多完成不了。

下载到板上,也出现了一些问题,如引脚接错,选用模式不对,还有就是实验箱坏了。

通过认真的思考,最终完成测试。

附录1

/*********************************************************************************************

本系统采用用硬件描述语言VerilogHDL描述。

分为四部分,第一部分定义系统输入输出及所用寄存器。

第二部分,控制单元状态转换的描述。

第三部分,定时器工作的描述。

第四部分,输出译码电路的描述。

**********************************************************************************************/

moduleTraffic(CLK,S,RESET,HG,HY,HR,FG,FY,FR);

//第一部分,定义输入输出端口,以及系统内部信号变量及其类型

inputCLK,S,RESET;

outputHG,HY,HR,FG,FY,FR;

regHG,HY,HR,FG,FY,FR;

reg[3:

0]TimerH,TimerL;

wireT1,Ts,Ty;

regSt;

reg[1:

0]CurrentState,NextState;

//对状态进行编码

parameterS0=2'b00,S1=2'b01,S2=2'b11,S3=2'b10;

//第二部分,控制单元状态转换的描述

always@(posedgeCLKornegedgeRESET)

begin

if(~RESET)

CurrentState<=S0;

else

CurrentState<=NextState;

end

always@(SorCurrentStateorT1orTsorTy)

begin

case(CurrentState)

S0:

begin

NextState=(T1&&S)?

S1:

S0;

St=(T1&&S)?

1:

0;

end

S1:

begin

NextState=(Ty)?

S2:

S1;

St=(Ty)?

1:

0;

end

S2:

begin

NextState=(Ts||~S)?

S3:

S2;

St=(Ts||~S)?

1:

0;

end

S3:

begin

NextState=(Ty)?

S0:

S3;

St=(Ty)?

1:

0;

end

//

endcase

end

//第三部分,定时器工作的描述

always@(posedgeCLKornegedgeRESET)

begin

if(~RESET)

{TimerH,TimerL}<=8'b0;

elseif(St)

{TimerH,TimerL}<=8'b0;

elseif((TimerH==5)&(TimerL==9))

begin

{TimerH,TimerL}<={TimerH,TimerL};

end

elseif(TimerL==9)

begin

TimerH<=TimerH+1;

TimerL<=8'b0;

end

else

begin

TimerH<=TimerH;

TimerL<=TimerL+1;

end

end

assignTy=(TimerH==0)&(TimerL==4);

assignTs=(TimerH==2)&(TimerL==9);

assignT1=(TimerH==5)&(TimerL==9);

//第四部分,输出译码电路的描述

always@(CurrentState)

begin

case(CurrentState)

S0:

begin

{HG,HY,HR}<=3'b100;//主干道绿灯亮

{FG,FY,FR}<=3'b001;//支干道红灯亮

end

S1:

begin

{HG,HY,HR}<=3'b010;//主干道黄灯亮

{FG,FY,FR}<=3'b001;//支干道绿灯亮

end

S2:

begin

{HG,HY,HR}<=3'b001;//主干道红灯亮

{FG,FY,FR}<=3'b100;//支干道绿灯亮

end

S3:

begin

{HG,HY,HR}<=3'b001;//主干道红灯亮

{FG,FY,FR}<=3'b010;//支干道黄灯亮

end

endcase

end

endmodule

/**************************************程序结束***********************************************/

附录2

模块一:

/********************************主控制模块control.v******************************************/

modulecontrol(EN_in,RST,SW1,Red1,Red2,Yellow1,Yellow2,Green1,Green2);

//定义输入输出口

outputRed1;

outputRed2;

outputYellow1;

outputYellow2;

outputGreen1;

outputGreen2;

input[1:

0]EN_in;

inputSW1;

inputRST;

//定义数据类型

regRed1,Red2,Yellow1,Yellow2,Green1,Green2,D_out;

always@(EN_in,RST,SW1)//always语句实现交通灯的总体工作控制

begin//系统复位

if(SW1==0||RST==0)

{Red1,Red2,Yellow1,Yellow2,Green1,Green2}=6'b0;

else//系统自动运行

begin

case(EN_in)

2'b00:

{Red1,Red2,Yellow1,Yellow2,Green1,Green2}<=6'b010010;//方向1绿灯亮,方向2红灯亮

2'b01:

{Red1,Red2,Yellow1,Yellow2,Green1,Green2}<=6'b011000;//方向1黄灯亮,方向2红灯亮

2'b10:

{Red1,Red2,Yellow1,Yellow2,Green1,Green2}<=6'b100001;//方向1红灯亮,方向2绿灯亮

2'b11:

{Red1,Red2,Yellow1,Yellow2,Green1,Green2}<=6'b100100;//方向1红灯亮,方向2黄灯亮

default:

{Red1,Red2,Yellow1,Yellow2,Green1,Green2}<=6'b0;//方向1方向2等全灭

endcase

end

end

endmodule

/***********************************主控制模块control.v***************************************/

模块二:

/*********************************5秒的倒计时模块counter5.v***********************************/

modulecounter05(C_CLK,RST,C_EN,D_OUT1,D_OUT0,C_OUT);

//输出输入的定义

outputC_OUT;

output[3:

0]D_OUT1,D_OUT0;

inputC_CLK;

inputRST;

inputC_EN;

//数据类型定义

reg[3:

0]D_OUT1,D_OUT0;

regC_OUT;

reg[3:

0]CData1,CData0;

reg[7:

0]DATA;

always@(posedgeC_CLK)//always语句块实现5秒自动循环倒计数,用加计数器

begin//系统复位或者未工作

if(RST==0||C_EN==0)

begin

C_OUT<=1'b0;

CData1<=4'b0000;

CData0<=4'b0000;

end

else

begin

if(CData0!

=4'b0101)

begin

CData0<=CData0+4'b0001;

C_OUT<=1'b0;

end

else//防止生成锁相环

begin

CData1<=4'b0000;

CData0<=4'b0000;

C_OUT<=1'b1;

end

end

end

always//加计数器的计数值到倒计时的数值转换

begin

DATA<=8'b00000101-((CData1<<4)+CData0);

D_OUT1<=4'b0000;

if((DATA&4'b1111)>4'b0101)

D_OUT0<=DATA&4'b1111-4'b1011;

else

D_OUT0<=DATA&4'b1111;

end

endmodule

/*********************************5秒的倒计时模块counter5.v***********************************/

模块三:

/********************************55秒的倒计时模块counter55.v**********************************/

modulecounter55(C_CLK,RST,C_EN,D_OUT1,D_OUT0,C_OUT);

//输出输入的定义

outputC_OUT;

output[3:

0]D_OUT1,D_OUT0;

inputC_CLK,RST,C_EN;

//数据类型定义

reg[3:

0]D_OUT1,D_OUT0;

regC_OUT;

reg[3:

0]CData1,CData0;

reg[7:

0]DATA;

always@(posedgeC_CLK)//always语句块实现55秒自动循环倒计数,用加计数器

begin

//系统复位或者未工作

if(RST==0||C_EN==0)

begin

C_OUT<=1'b0;

CData1<=4'b0000;

CData0<=4'b0000;

end

//加计数器

else

begin

if(CData0==4'b0101&&CData1==4'b0101)

begin

CData1<=4'b0000;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1