交通灯EDA课程设计.docx

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

交通灯EDA课程设计.docx

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

交通灯EDA课程设计.docx

交通灯EDA课程设计

目录

第一章设计原理1

第二章设计流程2

第三章程序设计说明3

3.1程序设计流程图3

3.2分频模块3

3.3特殊功能及清零模块4

3.4交通灯运行模块4

3.5扫描显示模块6

第四章仿真及调试8

4.1调试步骤8

第五章总程序设计9

参考文献15

注释:

请用Quartus7.0仿真

摘 要:

VerilogHDL作为一种规范的硬件描述语言,被广泛应用于电路的设计中。

他的设计描述可被不同的工具所支持,可用不同器件来实现。

本设计选用了目前应用较为广泛的VerilogHDL硬件描述语言,实现对路口交通灯系统的控制器的硬件电路描述。

此程序通过下载到FPGA芯片后,可应用于实际的交通灯控制系统中。

关键字:

VerilogHDL交通灯FPGA芯片

第一章设计原理

Veriloghdl提供了简单实用的状态机语句,在设计时把它和实验箱结合起来控制扫描显示交通灯的运行情况。

其原理框图如图1:

图1

通过外部时钟控制整个交通灯的运行,先将外部时钟经过分频电路变为周期1HZ的时钟,以这个时钟来控制各个路口灯的亮灭及时间显示。

即和计数器结合起来,每一秒钟计数器计一次数并传送给扫描模块显示输出。

当计数器达到设定的最大值便清零,相应的灯的状态便改变,如此反复。

至于复位和特殊功能的实现皆是通过单独的时钟翻转来控制,本设计中采用置数的方法来实现。

当需要的时候直接将对应的时钟置为高电平即可,再置为低电平时从一开始的状态显示。

 

第二章设计流程

当控制开关打开后,主干路和支干路的灯暂时不显示,等待初始化信号。

待信号来临后,两路灯均开始显示。

其中,主干路红灯和支干路绿灯先亮,待主干路红灯显示35秒后,绿灯开始显示,20s后黄灯显示,黄灯显示5s后红灯再一次点亮,如此循环。

支干路绿灯亮了30s后黄灯点亮,5s后红灯点亮,红灯显示25s后绿灯再一次点亮,如此循环。

其流程图如下图2所示:

图2

 

第三章程序设计说明

3.1程序设计流程图

流程图如图3:

图3

3.2分频模块

通过提供一个60hz的外部时钟wclk,经过分频得到一个1hz的时钟clk。

其程序如下:

always@(posedgewclk)

begin

if(enn)

begin

clk=0;

end

elsebegin

if(dout==29)

begin

clk=~clk;

dout<=0;

end

elsedout<=dout+1;

end

end

通过计数器计数,当计数器从零计到29时clk翻转,即clk每0.5秒翻转一次,产生一个周期为1秒的时钟。

3.3特殊功能及清零模块

通过外部赋予高电平将交通灯清零或者实现特殊功能,其程序如下:

always@(posedgeclk)

begin

if(rest)

begin

statea<=a;

atra<=0;

JT1<=3'b000;

end

elseif(tclk)

begin

statea<=a;

JT1<=3'b001;

end

end

当清零信号rest来临时交通灯全部灭掉,当特殊功能信号为高电平时交通灯黄灯亮,其余全灭。

3.4交通灯运行模块

利用分频得到的1hz时钟clk来控制交通灯的运行,当复位和特殊功能信号均为低电平时,通过en给系统复初值,而后en变为低电平。

此时,当检测到clk上升时钟沿时,交通灯通过状态机的选择实现各个路口红、黄、绿灯的点亮以及计时。

always@(posedgeclk)

begin

if(rest)

begin

stateb<=d;

btra<=0;

JT2<=3'b000;

end

elseif(tclk)

begin

stateb<=d;

JT2<=3'b001;

end

elseif(en)

begin

btra<=8'b00101001;

stateb<=d;

end

elsecase(stateb)

d:

if(btra==0)

begin

btra<=8'b00000100;

stateb<=e;

JT2<=3'b010;

end

elsebegin

JT2<=3'b100;

if(btra[3:

0]==0)

begin

btra[3:

0]<=4'b1001;

btra[7:

4]<=btra[7:

4]-1;

end

elsebegin

btra[3:

0]<=btra[3:

0]-1;

end

end

e:

if(btra==0)

begin

btra<=8'b00100100;

stateb<=f;

JT2<=3'b001;

end

elsebegin

JT2<=3'b010;

if(btra[3:

0]==0)

begin

btra[3:

0]<=4'b1001;

btra[7:

4]<=btra[7:

4]-1;

end

elsebegin

btra[3:

0]<=btra[3:

0]-1;

end

end

f:

if(btra==0)

begin

btra<=8'b00101001;

stateb<=d;

JT2<=3'b100;

end

elsebegin

JT2<=3'b001;

if(btra[3:

0]==0)

begin

btra[3:

0]<=4'b1001;

btra[7:

4]<=btra[7:

4]-1;

end

elsebegin

btra[3:

0]<=btra[3:

0]-1;

end

end

endcase

end

3.5扫描显示模块

用实验箱实现数字的扫描输出显示,SEL0和SEL1为实验箱提供的数码管显示驱动,通过原理图法从外部引一个扫描时钟(本实验用15.6khz),与74161连接控制SEL0和SEL1的分频。

其中,SEL0为2分频而SEL1为4分频,从而在一个扫描周期内SEL0和SEL1的值从00变化到10,再从10变化到00,即数码管逐个循环往复显示输出。

always@(SEL0orSEL1)

begin

case({SEL0,SEL1})

2'b00:

beginA<=atra[3:

0];end

2'b01:

beginA<=atra[7:

4];end

2'b10:

beginA<=btra[3:

0];end

2'b11:

beginA<=btra[7:

4];end

endcase

case(A)

4'b0000:

LED7S<=7'b0111111;

4'b0001:

LED7S<=7'b0000110;

4'b0010:

LED7S<=7'b1011011;

4'b0011:

LED7S<=7'b1001111;

4'b0100:

LED7S<=7'b1100110;

4'b0101:

LED7S<=7'b1101101;

4'b0110:

LED7S<=7'b1111101;

4'b0111:

LED7S<=7'b0000111;

4'b1000:

LED7S<=7'b1111111;

4'b1001:

LED7S<=7'b1101111;

endcase

end

 

第四章仿真及调试

4.1调试步骤

1.建立工作库文件夹和编辑设计文件

菜单操作:

file—new,在new窗口中,DeviceDesignFiles—VerilogHDLFile产生.v文件。

在VerilogHDL文本编辑器中输入源程序。

文件存盘:

文件名应该与模块名一致。

2.创建工程

菜单操作:

file—newprojectwizard,根据实验箱提供的器件型号选择目标器件:

EPF10K10LC84-4,创建工程产生.gpf文件。

3.全程编译

菜单操作:

Processing—startcompilation或

4.画原理图

(1)用原理图新建顶层文件,并建立工程,file—new—BlockDiagram/SchematicFile。

(2)将jtd.vhd转换成元件符号(元件文件的后缀为.bsf)

(3).新建jtd.vhd文件

(4).File—Create/-Update—CreateSymbolFilesforCurrentFile,fx元件可以在高层次设计中调用

(5)在顶层原理图文件中调用jtd元件,并完成设计。

5.编译

6.时序仿真

7.引脚锁定

菜单操作:

Assignments—pins,并连接线。

8.保存并编译

9.配置文件下载

菜单操作:

Tools—Programmer或

弹出hardwaresetop窗口;按

弹出addhardware窗口,按

选择下载接口,按

,选中文件*.sof,并使

有效

,按

使文件*.sof下载到目标器件中。

第五章总程序设计

modulejtd(atra,JT1,btra,JT2,en,enn,A,LED7S,clk,wclk,dout,tclk,rest,SEL0,SEL1);

output[7:

0]atra,btra,dout;

outputclk;

output[2:

0]JT1,JT2;

output[6:

0]LED7S;

output[3:

0]A;

inputtclk,rest,wclk,en,enn;

inputSEL0,SEL1;

regclk;

reg[7:

0]atra,btra,dout;

reg[6:

0]LED7S;

reg[2:

0]JT1,JT2;

reg[3:

0]A;

reg[3:

0]statea,stateb;

parametera=4'b0001,b=4'b0010,c=4'b0100,d=4'b1001,e=4'b1010,f=4'b1100;

always@(posedgewclk)

begin

if(enn)

begin

clk=0;

end

elsebegin

if(dout==29)

begin

clk=~clk;

dout<=0;

end

elsedout<=dout+1;

end

end

always@(posedgeclk)

begin

if(rest)

begin

statea<=a;

atra<=0;

JT1<=3'b000;

end

elseif(tclk)

begin

statea<=a;

JT1<=3'b001;

end

elseif(en)

begin

atra<=8'b00110100;

statea<=a;

end

else

case(statea)

a:

if(atra==0)

begin

atra<=8'b00011001;

statea<=b;

JT1<=3'b100;

end

elsebegin

JT1<=3'b001;

if(atra[3:

0]==0)

begin

atra[3:

0]<=4'b1001;

atra[7:

4]<=atra[7:

4]-1;

end

else

begin

atra[3:

0]<=atra[3:

0]-1;

end

end

b:

if(atra==0)

begin

atra<=8'b00000100;

statea<=c;

JT1<=3'b010;

end

elsebegin

JT1<=3'b100;

if(atra[3:

0]==0)

begin

atra[3:

0]<=4'b1001;

atra[7:

4]<=atra[7:

4]-1;

end

else

begin

atra[3:

0]<=atra[3:

0]-1;

end

end

c:

if(atra==0)

begin

atra<=8'b00110100;

statea<=a;

JT1<=3'b001;

end

elsebegin

JT1<=3'b010;

if(atra[3:

0]==0)

begin

atra[3:

0]<=4'b1001;

atra[7:

4]<=atra[7:

4]-1;

end

else

begin

atra[3:

0]<=atra[3:

0]-1;

end

end

endcase

end

always@(posedgeclk)

begin

if(rest)

begin

stateb<=d;

btra<=0;

JT2<=3'b000;

end

elseif(tclk)

begin

stateb<=d;

JT2<=3'b001;

end

elseif(en)

begin

btra<=8'b00101001;

stateb<=d;

end

elsecase(stateb)

d:

if(btra==0)

begin

btra<=8'b00000100;

stateb<=e;

JT2<=3'b010;

end

elsebegin

JT2<=3'b100;

if(btra[3:

0]==0)

begin

btra[3:

0]<=4'b1001;

btra[7:

4]<=btra[7:

4]-1;

end

elsebegin

btra[3:

0]<=btra[3:

0]-1;

end

end

e:

if(btra==0)

begin

btra<=8'b00100100;

stateb<=f;

JT2<=3'b001;

end

elsebegin

JT2<=3'b010;

if(btra[3:

0]==0)

begin

btra[3:

0]<=4'b1001;

btra[7:

4]<=btra[7:

4]-1;

end

elsebegin

btra[3:

0]<=btra[3:

0]-1;

end

end

f:

if(btra==0)

begin

btra<=8'b00101001;

stateb<=d;

JT2<=3'b100;

end

elsebegin

JT2<=3'b001;

if(btra[3:

0]==0)

begin

btra[3:

0]<=4'b1001;

btra[7:

4]<=btra[7:

4]-1;

end

elsebegin

btra[3:

0]<=btra[3:

0]-1;

end

end

endcase

end

always@(SEL0orSEL1)

begin

case({SEL0,SEL1})

2'b00:

beginA<=atra[3:

0];end

2'b01:

beginA<=atra[7:

4];end

2'b10:

beginA<=btra[3:

0];end

2'b11:

beginA<=btra[7:

4];end

endcase

case(A)

4'b0000:

LED7S<=7'b0111111;

4'b0001:

LED7S<=7'b0000110;

4'b0010:

LED7S<=7'b1011011;

4'b0011:

LED7S<=7'b1001111;

4'b0100:

LED7S<=7'b1100110;

4'b0101:

LED7S<=7'b1101101;

4'b0110:

LED7S<=7'b1111101;

4'b0111:

LED7S<=7'b0000111;

4'b1000:

LED7S<=7'b1111111;

4'b1001:

LED7S<=7'b1101111;

endcase

end

endmodule

 

参考文献

[1]Verilog数字系统设计教程北京航空航天大学出版社夏宇同编著

[2]大规模可编程逻辑器件及其应用成都电子科技大学出版社徐志军编著

[3]可编程逻辑器件原理、开发与应用西安电子科技大学出版社赵曙光编著

[4]基于EDA技术的数字频率计芯片化的实现电子科技大学出版社武卫华、陈德宏编著

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

当前位置:首页 > PPT模板 > 中国风

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

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