《数字系统课程设计》 专业综合设计报告
姓 名: 学 号:
专 业: 自动化 实 验 室: 电工电子四楼 组 别: 无 同组人员: 无 设计时间: 2012年 8 月 8日 —— 2010 年 9 月 15 日 评定成绩: 审阅教师:
目 录
一.课程设计的目的与要求(含设计指标)……………………………………………3页码 二.原理设计(或基本原理)……………………………………………………………3页码 三. 架构设计(架构设计)………………………………………………………………4页码 四。 方案实现与测试(或调试)…………………………………………………………5页码 五.分析与总结……………………………………………………………………………15页码
一。 课程设计的目的与要求(含设计指标)
主干道与乡村公路十字交叉路口在现代化的农村星罗棋布,为确保车辆安全、迅速地通过,在交叉路口的每个入口处设置了红、绿、黄三色信号灯。红灯禁止通行;绿灯允许通行;黄灯亮则给行驶中的车辆有时间行驶到禁行线之外。主干道和乡村公路都安装了传感器,检测车辆通行情况,用于主干道的优先权控制。
具体要求如下:
(1)当乡村公路无车时,始终保持乡村公路红灯亮,主干道绿灯亮。
(2)当乡村公路有车时,而主干道通车时间已经超过它的最短通车时间时,禁止主干道通行,让乡村公路通
行。主干道最短通车时间为25s 。
(3) 当乡村公路和主干道都有车时,按主干道通车25s,乡村公路通车16s交替进行. (4) 不论主干道情况如何,乡村公路通车最长时间为16s。
(5) 在每次由绿灯亮变成红灯亮的转换过程中间,要亮5s时间的黄灯作为过渡。
(6)用开关代替传感器作为检测车辆是否到来的信号.用红、绿、黄三种颜色的发光二极管作交通灯。 要求显示时间,倒计时
- 1 -
二. 原理设计(或基本原理)
本设计用了Verilog HDL语言, TOP—DOWN设计,设计方法从系统设计入手,在顶层进行功能方框图的划分和结构设计。
具体过程如下:
该系统中输入变量有:set(使能开关),c(乡村道路开关), clk(系统时钟),该控制系统打开后共有两种状态: 一种是只有主干道交通灯亮,这种情况比较简单,此时主干道绿灯一直亮着。第二种是乡村道路开关打开,此时是主干道和乡村道路红灯和绿灯交替亮。
三.方案论证(架构设计)
交通灯控制器框图: 流程图如下:
四. 方案实现与测试(或调试)
1)顶层模块
外界输入:
两个开关:一个时能使能控制开关,一个乡村道路开关。使 能开关打开交通灯开始工作,乡村道路打开表 示乡村公路上有车。 输出:
四个数码管,两个显示主干道交通灯时间,两个显示乡村道路时间;六个led灯,两红两黄两绿分别表示主
干道和乡村公路的红黄绿灯。 运行过程:
1、开始时将时能开关打开表示交通灯开始工作。此时由于乡村道路开关是关着的,所以主干道保持绿灯亮。 2、然后将乡村公路开关打开,表示乡村公路上有车。此时主干道红灯立刻亮,5秒之后主干道黄灯变为红灯,乡村公路变为绿灯。经过15秒之后,乡村公路等变为黄灯,再过五秒变为红灯,此时主干道变为绿灯.25秒之后主干道等变为黄灯,再经过五秒变为红灯,此时乡村公路变为绿灯,如此循环
3、若乡村道路灯开关突然关闭,主干道交通灯理科变为绿灯,数码管倒记到0,并保持这种状态不变
顶层的block图
仿真结果:
2)设计中所有模块组成:
分频器:降低频率信号,用于获得适合的时钟信号. 主模块:控制各个状态的转换,算法的主要实现部分。
数码管显示模块:显示各种颜色的主干道和乡村道路灯的显示时间
具体实现过程如下:
1. 分频器 1)模块如下所示:
输入端为clk_in,clk_in为原频率的脉冲输入,clk_out得到想要的频率
2)源程序:
module fre(clk_in,clk_out);
- 2 -
input clk_in; output clk_out; reg clk_out; reg [24:0]cnter; always @(posedge clk_in) begin
if (cnter〈1000000) cnter=cnter+1; else cnter=0;
if(cnter==1000000) clk_out=’b1; else clk_out=’b0; end 2. 主程序模块 1)模块如下所示:
输入端为clk、c、set,其中当c为乡村道路开关,打开表示乡村道路有车,set表示使能控制开关,set打开交通灯开始工作。
输出端为mr、mg、my、cr、cg、cy表示主干道和乡村公路的红黄绿灯,与LED灯相连.另外mh、ml、ch、cl、与四个数码管相连,用来显示各种颜色的灯亮时间. 2)调试中出现的问题
在绿灯变为黄灯时,数码管理应显示五秒钟的时间,不过数码管并没有倒数五个数,而是五秒之后直接从5变为0,待解决 3)源程序:
module traffic(clk,c,set,mr,mg,my,cr,cg,cy,mh,ml,ch,cl); input clk,c,set;
output[3:0]mh,ml,ch,cl; output mr,mg,my,cr,cg,cy; reg mr,mg,my,cr,cg,cy; reg[3:0]mh,ml,ch,cl; reg state;
always@(posedge clk) begin if(set)
- 3 -
begin
if(state==0) //³õʼ»¯
begin state=1;
case({mr,mg,my,cr,cg,cy}) 6'b010100: if(c)
begin{mr,mg,my,cr,cg,cy}=6’b001100;ml=5;mh=0;cl=5;ch=0; end
else state=0; 6'b001100:
begin end
{mr,mg,my,cr,cg,cy}=6’b100010;ml=1;mh=2;cl=6;ch=1;
6’b100010:
begin{mr,mg,my,cr,cg,cy}=6'b100001;ml=5;mh=0;cl=5;ch=0; end
6’b100001:
begin{mr,mg,my,cr,cg,cy}=6'b010100;ml=5;mh=2;cl=0;ch=3; end
default:
begin{mr,mg,my,cr,cg,cy}=6'b010100;ml=5;mh=2;cl=0;ch=3; end
endcase
end else
if({mr,mg,my,cr,cg,cy}==6'b100010&&c==0) begin {mr,mg,my,cr,cg,cy}=6’b100001; end
- 4 -
ml=5;mh=0;cl=5;ch=0;
else
begin if({mh,ml}>=1)
begin if(ml==0) begin mh=mh-1;
ml=4’b1001;
end
else ml=ml—1; end
if({ch,cl}〉=1) begin
if(cl==0) begin ch=ch—1;
cl=4’b1001;
end
else cl=cl—1; end
if({mh,ml}==6&&{ch,cl}==1) begin
state=0; end
if({mh,ml}==1&&{ch,cl}==1) begin
state=0;
end
- 5 -
if({mh,ml}==1&&{ch,cl}==6) begin
mh=0;ml=0;ch=0;cl=0; state=0; end
end else begin
end
{mh,ml}=8’b00100101; {ch,cl}=8’b00110000;
{mr,mg,my,cr,cg,cy}=6'b010100; end end endmodule 3。数码管模块 1)模块如下所示:
数码管模块用来显示灯亮时间
2)调试中出现的问题及解决措施
一开始一个脉冲为10m,经过计算的大概40m要增加一毛,但是如此之后,当增加到2.4时,才行走了960m,
对顾客不公平,后来改用将其量程扩大的办法,然后通过分的进位获得角的增加,能够精确的定位价格。 3)源程序: 1、
module disp(clk,count,led); input clk;
input [3:0]count; output [7:0]led; reg [7:0]led;
always@(posedge clk) begin
case(count)
4'd0:led=8'b00000011; 4'd1:led=8’b10011111; 4’d2:led=8’b00100101;
- 6 -
4'd3:led=8'b00001101; 4'd4:led=8'b10011001; 4’d5:led=8’b01001001; 4’d6:led=8’b01000001; 4’d7:led=8’b00011111; 4’d8:led=8'b00000001; 4’d9:led=8'b00001001; default:led=8'bx; endcase end 2、
module disp(clk,count,led); input clk;
input [3:0]count; output [7:0]led; reg [7:0]led;
always@(posedge clk) begin
case(count)
4’d0:led=8’b00000011; 4'd1:led=8'b10011111; 4’d2:led=8'b00100101; 4'd3:led=8'b00001101; 4’d4:led=8’b10011001; 4’d5:led=8'b01001001; 4'd6:led=8'b01000001; 4’d7:led=8’b00011111; 4'd8:led=8’b00000001; 4’d9:led=8'b00001001; default:led=8’bx; endcase end
endmodule 3、
module disp(clk,count,led); input clk;
input [3:0]count; output [7:0]led; reg [7:0]led;
always@(posedge clk) begin
case(count)
4’d0:led=8'b00000011; 4'd1:led=8’b10011111;
- 7 -
4'd2:led=8'b00100101; 4’d3:led=8’b00001101; 4'd4:led=8'b10011001; 4’d5:led=8'b01001001; 4'd6:led=8’b01000001; 4’d7:led=8'b00011111; 4’d8:led=8’b00000001; 4'd9:led=8’b00001001; default:led=8'bx; endcase end
endmodule 4、
module disp(clk,count,led); input clk;
input [3:0]count; output [7:0]led; reg [7:0]led;
always@(posedge clk) begin
case(count)
4’d0:led=8’b00000011; 4'd1:led=8’b10011111; 4'd2:led=8'b00100101; 4'd3:led=8’b00001101; 4’d4:led=8'b10011001; 4'd5:led=8’b01001001; 4’d6:led=8'b01000001; 4'd7:led=8'b00011111; 4’d8:led=8'b00000001; 4’d9:led=8'b00001001; default:led=8'bx; endcase end
endmodule
五.分析与总结 1、方案的特点
该方案能够基本实现交通灯要求的所有功能,并且各个模块较为简洁,通过一个的主要模块的控制,使各个状态的转换清晰明了。
2、方案问题及有待改进的措施
方案存在着一些缺陷,在变为黄灯时数码管并没有倒数五个数,而是经历五秒之后直接从5变为0,这方面的设计有问题,有待改进
- 8 -
3、心得体会
经过此次的设计的过程让我比较深刻地了解到了Verilog HDL语言设计数字系统的过程。掌握了用状态计设计数字系统的方法,我的心得如下:
1、 在设计过程中我了解到设计最重要的是先把总体结构设计好,再逐步细化到小模块. 2、 对于每一个模块重点是要搞清楚其输入输出,以及要实现的功能。 3、 开始编程时,要特别注意一些小细节的地方,在编程过程中逐步改进. 参考书目:
[1] 夏宇闻,《Verilog 数字系统设计教程》,北京,北京航空航天大学出版社,2003年 [2] 黄正瑾. 在系统编程技术及其应用。东南大学出版社,1997
- 9 -
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- haog.cn 版权所有 赣ICP备2024042798号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务