《现代数字系统设计》课程论文Word文档格式.docx
《《现代数字系统设计》课程论文Word文档格式.docx》由会员分享,可在线阅读,更多相关《《现代数字系统设计》课程论文Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
如果每个方向的灯是独立变化的,那么交通灯就没有了意义。
2.2主控模块
2.2.1FPGA芯片
FPGA采用了LCA这样一个概念,内部包括可配置逻辑模块CLB、输入输出模块IOB和内部连线三个部分。
本设计采用Altera公司ACEX1KEP1K10TC100-3芯片,具有低内核电压、低功耗的特点。
芯片内门电路高达一万门,内部使用RAM作电路结构,速度高达几百MHZ,其输出可用管脚已全部开放,位于芯片的四周,用户可以根据自己的要求和芯片本身的功能自己任意定义管脚。
同时为了体现实验箱的可扩展性,在芯片的两边各有一个34脚的IDE插口,可以通过数据排线与其它应用模块相连接。
2.2.2.控制类模块
交通灯:
由12个红黄绿灯按交通灯方式排列的交通灯模块,可做交通灯或舞台灯光实验。
其工作原理与LED灯相似。
2.2.3.显示类模块
8位7段数码管:
采用2个进口共阴的7段数码管组成,其连接管脚位选信号在数码管的左边由连接孔SEL0、SEL1、SEL2与其它模块连接。
数码管采用动态扫描显示,位选信号SEL0、SEL1、SEL2经3-8译码后选择一位数码管,段选信号为A、B、C、D、E、F、G、DP。
其输入由位于其下方的8位连接孔与其它模块连接,可以模拟二进制数据输出。
2.2.4.输入类模块
在这个模块中采用的是两个时钟源,一个是24M的高频时钟;
一个是32768HZ能完成二次分频的时钟。
时钟输出通过其上方的四组跳线改变其频率的输出,每一组频率相对独立。
其频率值在电路板上均已标明。
用户也可以通过软件的方式来实现分频。
每一组的频率输出端位于其上方对应的CLK1、CLK2、CLK3、CLK4连接孔。
3.系统软件设计
3.1软件整体设计
3.1.1交通灯控制系统原理图
3.1.2交通灯控制系统框图
3.2控制模块
3.2.1状态机与倒计时
状态机
用两个进程分别控制两个方向的灯,引入有限状态机控制交通灯的状态转化,即由绿灯到黄灯然后到左拐灯再回到黄灯最后到红灯。
复位时红灯全亮。
交通灯状态图如下:
在正常情况下的一个完整周期内,交通灯控制器系统一共有四种状态,分
别为S0、S1、S2、S3。
其运行方式从S0——S1——S2——S3——S4,S结束后回到S0状态。
各个状态具体的运行方式如下:
S0:
自南向北方向绿灯亮,自东向西方向红灯亮。
此时允许自南向北方向车辆通行,禁止自东向西方向车辆通行。
S1:
自南向北方向黄灯亮,自东向西方向红灯亮。
此时提醒自南向北方向车辆准备停车,禁止自东向西方向车辆通行。
S2:
自南向北方向左拐灯亮,自东向西方向红灯亮。
此时自南向北方向车辆允许左拐,禁止自东向西方向车辆通行。
S3:
自南向北方向黄灯亮,自东向西方向红灯亮。
S4:
自南向北方向红灯亮,自东向西方向绿灯亮。
此时禁止自南向北方向车辆通行,此时允许自东向西方向车辆通行。
倒计时
用两个减法计数器实现倒计时,当某个状态的剩余时间减到零时则切换状态。
3.2.2控制模块RTL图与流程图
控制模块RTL图
CLK连接1Hz时钟,EN接高电平时使能,系统正常工作,接低电平时系统不能正常工作,红灯全为亮。
LAMPA0、LAMPA1、LAMPA2、LAMPA3分别控制自南向北方向的左拐、绿、黄和红灯,LAMPB0、LAMPB1、LAMPB2、LAMPB3分别控制自东向西方向的左拐、绿、黄和红灯。
ACOUNT用于自南向北方向的时间显示,驱动两个数码管。
BCOUNT用于自东向西方向的时间显示,驱动两个数码管。
控制模块流程图:
3.3显示模块
3.3.1位选扫描模块
数码管扫描时钟接clk为1KHz。
输出out与数码管的位选信号SEL0、SEL1相连,接至FPGA芯片。
每来一个时钟脉冲,做一次相应输出,频率为1KHz达到动态扫描。
位选扫描模块流程图:
3.3.2段选扫描模块
数码管的位选信号SEL0、SEL1分别连接FPGA芯片。
十六位数据经数据总线输入到段选扫描模块,十六位数据分为四段,通过sel选择相应段来输出。
段选扫描模块流程图如下:
3.3.3显示译码模块
输出为数码管的段选信号,其段选信号A、B、C、D、E、F、G、DP分别连接FPGA芯片。
根据相应的输入,输出相应的信号。
例如:
假设输入为1001,则相应输出所对应的段选信号为11110110。
需要注明的是,这里采用的是共阴极数码管。
显示译码模块流程图
3.4顶层文件设计
交通灯控制系统的顶层文件是一个原理图文件,首先用Verilog语言编写好所需的四个模块后,编译正确后保存,生成相应的可视化元件后,然后新建一个原理图文件,插入所生成的可视化元件它包含有四个元件,其实每个元件均由一个模块生成。
四个元件分别为:
位选扫描模块、段选扫描模块、显示译码模块、控制模块。
然后将各元件用具有电气性质的导线连接好,保存编译。
4.系统测试与总结
4.1系统测试
建立一个vwf波形文件,将所需管脚加到波形文件中,设置相应的输值,保存并仿真,观察输出数据。
实验证明仿真结果正确。
也因此证明设置的该系统能按预期的设计进行工作,达到预期结果。
仿真波形图:
4.2设计体会
通过这次课程论文设计,我进一步加深了对EDA(电子设计自动化)的了解。
并进一步熟练了对QuartusII软件的操作。
在做本次设计论文的过程中,遇到了很多问题,使我发现自己学习上存在的不足。
并加深了对交通灯原理和设计思路的了解。
同时也掌握了做课程论文的一般流程,为以后的设计积累了一定的经验。
做课程设计时,先查阅相关知识,把原理吃透,确定一个大的设计方向,在按照这个方向分模块的把要实现的功能用流程图的形式展示。
最后参照每个模块把输入和输出引脚设定,运用我们所学的VHDL语言进行编程。
本设计采用VHDL硬件描述语言文本输入方式和顶层文件设计两种方式,在确立总体预期实现功能的前提下,分层次进行描述,其中所用到的数据均可依现场情况而设置,修改方便灵活。
两种方式各有侧重,一种直观,一种则需要我们对语言有一定了解。
二者的结合体现了基于FPGA技术和VHDL语言进行数字系统设计的优越性和广阔前景。
城市交通情况较为复杂,所以在设计十字路口交通灯时考虑了左拐弯的功能。
并设计实现了此功能。
数字化时代的到来给人们的生活带来了极大的改变,有理由相信随着数字化的深入,交通灯控制器的功能将日趋完善。
而且,VHDL语言对EDA产生的影响也是深远的,它缩短了电子产品的设计周期,为设计者提供了方便。
总之,通过这次的设计,我进一步了解了EDA技术,收获很大,对软件编程、排错调试等方面得到了提高。
另外,我也意识到,不管做什么事,我们都需要耐心、踏实、勤奋、严谨的处事态度。
更重要的是,学习上,我们必须从理论应用到实践,再从实践中验证理论,只有这样我们才能真正学会、学透并应用我们所学的知识,真正做到理论与实践相结合。
附录
控制模块源程序代码:
/*信号定义
CLK同步时钟
EN使能信号
LAMPA0~3分别控制A方向的左拐、绿、黄和红灯
LAMPB0~3分别控制B方向的左拐、绿、黄和红灯
ACOUNT用于A方向的时间显示,驱动两个数码管
BCOUNT用于B方向的时间显示*/
moduletraffic(CLK,EN,LAMPA,LAMPB,ACOUNT,BCOUNT);
output[7:
0]ACOUNT,BCOUNT;
output[3:
0]LAMPA,LAMPB;
inputCLK,EN;
reg[3:
reg[7:
0]numa,numb;
//剩余时间
regtempa,tempb;
//切换状态
reg[2:
0]counta,countb;
//状态量
0]ared,ayellow,agreen,aleft,//保持时间
bred,byellow,bgreen,bleft;
assignACOUNT=numa;
assignBCOUNT=numb;
/****************设置灯的计数初值****************/
always@(EN)
begin
if(!
EN)
begin
ared<
=8'
h55;
ayellow<
h5;
agreen<
h40;
aleft<
h15;
bred<
h65;
byellow<
bgreen<
h30;
bleft<
end
end
/*控制A方向的灯*/
always@(posedgeCLK)
if(EN)//正常情况
tempa)//切换状态
tempa<
=1;
case(counta)//控制亮灯的顺序
0:
beginnuma<
=agreen;
LAMPA<
=2;
counta<
=1;
1:
=ayellow;
=4;
2:
=aleft;
=3;
3:
4:
=ared;
=8;
=0;
default:
LAMPA<
=8;
//红灯亮
endcase
else//倒计时
if(numa>
1)
if(numa[3:
0]==0)
numa[3:
0]<
=4'
b1001;
numa[7:
4]<
=numa[7:
4]-1;
end
elsenuma[3:
=numa[3:
0]-1;
if(numa==2)tempa<
=0;
else//返回初态
b1000;
counta<
tempa<
/***************************控制B方向************************/
if(EN)
tempb)
tempb<
case(countb)//控制亮灯的顺序
beginnumb<
=bred;
LAMPB<
countb<
=bgreen;
=byellow;
=bleft;
LAMPB<
else
begin//倒计时
if(numb>
if(numb[3:
numb[3:
numb[7:
=numb[7:
elsenumb[3:
=numb[3:
if(numb==2)tempb<
else
countb<
tempb<
endmodule
位选模块源程序代码:
moduleweixuan(out,clk);
output[1:
0]out;
inputclk;
reg[1:
always@(posedgeclk)
if(out==3)
out<
=out+1;
译码显示模块源程序代码:
moduleyima(dout,num);
input[0:
3]dout;
output[0:
7]num;
reg[0:
7]num;
always@(*)
case(dout)
4'
b0000:
num=8'
b11111100;
b0001:
b01100000;
b0010:
b11011010;
b0011:
b11110010;
b0100:
b01100110;
b0101:
b10110110;
b0110:
b10111110;
b0111:
b11100000;
b1000:
b11111110;
b1001:
b11110110;
default:
b11111111;
endmodule
段选模块源程序代码:
moduleselect1_4(dout,din,sel);
0]dout;
input[15:
0]din;
input[1:
0]sel;
always@(*)
case(sel)
2'
b11:
dout<
=din[3:
0];
b10:
=din[7:
4];
b01:
=din[11:
8];
b00:
=din[15:
12];
参考文献
[1]康华光.电子技术基础一一数字部份[M].北京:
高等教育出版社,2006.
[2]王金明.数字系统设计与VerilogHDL(第四版).北京:
电子工业出版社,2010
[3]湖南理工学院.专业实验辅导资料.2010
[4]包明.EDA技术与数字系统设计[M].北航出版社2002
[5]田瑞利.陈海滨.基于VHDL有限状态机的交通灯信号控制系统设计[J].广州航海高等专科院校学报.2008
[6]徐春娇.基于VHDL状态机设计的智能交通控制灯.2007
[7]陈金玉.吴振铨.广东工业大学第五届电子设计竞赛.
[8]万军华.现代数字系统设计课件.2010