交通灯设计报告.docx
- 文档编号:25050907
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:22
- 大小:135.53KB
交通灯设计报告.docx
《交通灯设计报告.docx》由会员分享,可在线阅读,更多相关《交通灯设计报告.docx(22页珍藏版)》请在冰豆网上搜索。
交通灯设计报告
设计报告
交通灯设计
虫虫特工队
作者王玉川黄红娟柳沐璇王雁
完成时间2011-7-7
版本号
目录
设计报告1
目录2
图目录3
设计目标4
设计平台4
设计框架5
设计模块描述6
设计实施6
经验教训7
未来工作7
参考文献8
附录(程序语言)8
图目录
图表1正常情况下交通灯状态示意图4
图表2结构图5
图表3总的模块图6
图表4RTL连线图6
图表5Technology连线图6
图表6整个设计的FPGA逻辑资源占用表7
图表7UCF分配表7
设计目标
本次实验是通过编写VerilogHDL语言实现交通灯的功能,然后下载到NEXYS2板上显示出来。
通过本次设计实验对ISE10.1软件的使用有了进一步的掌握,对VerilogHDL语言的编写规则基本能够熟练应用。
掌握了NEXYS2板上的滑动开关的UCF约束、I/O口分配和I/O口标准,LED灯和数码管点亮的条件,时钟信号的提供方法。
最后实现了基本交通灯的功能。
十字路口的红、绿、黄三色交通灯是为了保证车辆、行人通行安全。
设计并实现十字路口的红、绿、黄三色交通灯控制与显示电路,即每个路口设置一组红、黄、绿交通灯,按图1所示情况变化。
图表1正常情况下交通灯状态示意图
设计平台
设计的主要软硬件开发环境:
WindowsXPXilinxISE10.1.03i
软件开发用到了哪些工具,版本:
Xilinx–ISE10.1,DigilentAdept;
硬件开发用到了计算机设备,设备配置,开发板卡:
NEXYS2Digilent开发板卡。
设计框架
图表2结构图
moduletraffic(en,clk,light,wm,dm);
inputen,clk;//时钟信号与使能端
output[7:
0]light;//八个LED灯
output[3:
0]wm;//位码扫描
output[7:
0]dm;//段码扫描显示
设计模块描述
总的模块:
图表3总的模块图
clk时钟信号,用于分频;en使能;dm[7:
0]八位段码;light[7:
0]八位LED灯;wm[3:
0]四位位码。
这是总的共用模块,数据方向是从左往右。
设计实施
图表4RTL连线图
图表5Technology连线图
图表6整个设计的FPGA逻辑资源占用表
图表7UCF分配表
经验教训
1.编程时要认真细心,不能缺少一个词,例如上升沿触发clk:
忘记写上升沿触发,难以发现错误却导致整个程序的问题。
2.在位码扫描时用case语句时不能进行综合,改成if语句程序就能成功综合,具体原因不明,求解。
3.计数时一定要用二进制形式表示,否则不显示。
4.设计程序时要从大局出发然后逐步细化,否则对于较大的工程容易混乱。
未来工作
虽然能实现了自己设计的功能,但在程序编写方面还是很不够精简,代码有些繁琐,需是程序更加精炼,语言方面的知识需要进一步学习。
参考文献
无
附录(程序语言)
moduletraffic(en,clk,light,wm,dm);
inputen,clk;
output[7:
0]light;
output[3:
0]wm;
output[7:
0]dm;
reg[7:
0]light;
reg[3:
0]wm;
reg[7:
0]dm;
reg[24:
0]count;
reg[1:
0]state;
reg[7:
0]red_l,green_l,yellow_l,red_r,green_r,yellow_r;
reg[3:
0]dm_la,dm_lb,dm_ra,dm_rb;
reg[7:
0]da,db,dc,dd;
parameterA=2'b00,B=2'b01,C=2'b10,D=2'b11;
always@(posedgeclk)
begin
count<=count+1;
end
always@(posedgecount[24])
begin
if(!
en)
begin
red_l<=8'b0011_0101;
green_l<=8'b0011_0000;
yellow_l<=8'b0000_0101;
red_r<=8'b0011_0101;
green_r<=8'b0011_0000;
yellow_r<=8'b0000_0101;
state<=A;
end
else
begin
case(state)
A:
begin
if(red_l>0&&green_r>0)
begin
if(red_l[3:
0]==0)
begin
red_l[3:
0]<=4'b1001;red_l[7:
4]<=red_l[7:
4]-1;
end
elsered_l[3:
0]<=red_l[3:
0]-1;
if(green_r[3:
0]==0)
begin
green_r[3:
0]<=4'b1001;green_r[7:
4]<=green_r[7:
4]-1;
end
else
green_r[3:
0]<=green_r[3:
0]-1;
end
if(red_l>0&&green_r==0)
begin
state<=B;
end
dm_lb<=red_l[3:
0];
dm_la<=red_l[7:
4];
dm_rb<=green_r[3:
0];
dm_ra<=green_r[7:
4];
light<=8'b1000_0100;
end
B:
begin
if(red_l>0&&yellow_r>0)
begin
if(red_l[3:
0]==0)
begin
red_l[3:
0]<=4'b1001;
red_l[7:
4]<=red_l[7:
4]-1;
end
elsered_l[3:
0]<=red_l[3:
0]-1;
if(yellow_r[3:
0]==0)
begin
yellow_r[3:
0]<=4'b1001;
yellow_r[7:
4]<=yellow_r[7:
4]-1;
end
elseyellow_r[3:
0]<=yellow_r[3:
0]-1;
end
if(red_l==0&&yellow_r==0)
begin
state<=C;
end
dm_lb<=red_l[3:
0];
dm_la<=red_l[7:
4];
dm_rb<=yellow_r[3:
0];
dm_ra<=yellow_r[7:
4];
light<=8'b1000_0010;
end
C:
begin
if(red_r>0&&green_l>0)
begin
if(red_r[3:
0]==0)
begin
red_r[3:
0]<=4'b1001;red_r[7:
4]<=red_r[7:
4]-1;
end
elsered_r[3:
0]<=red_r[3:
0]-1;
if(green_l[3:
0]==0)
begin
green_l[3:
0]<=4'b1001;green_l[7:
4]<=green_l[7:
4]-1;
end
elsegreen_l[3:
0]<=green_l[3:
0]-1;
end
if(red_r>0&&green_l==0)
begin
state<=D;
end
dm_lb<=green_l[3:
0];
dm_la<=green_l[7:
4];
dm_rb<=red_r[3:
0];
dm_ra<=red_r[7:
4];
light<=8'b0010_0001;
end
D:
begin
if(red_r>0&&yellow_l>0)
begin
if(red_r[3:
0]==0)
begin
red_r[3:
0]<=4'b1001;red_r[7:
4]<=red_r[7:
4]-1;
end
elsered_r[3:
0]<=red_r[3:
0]-1;
if(yellow_l[3:
0]==0)
begin
yellow_l[3:
0]<=4'b1001;yellow_l[7:
4]<=yellow_l[7:
4]-1;
end
elseyellow_l[3:
0]<=yellow_l[3:
0]-1;
end
if(red_r==0&&yellow_l==0)
begin
state<=A;
red_l<=8'b0011_0101;
green_l<=8'b0011_0000;
yellow_l<=8'b0000_0101;
red_r<=8'b0011_0101;
green_r<=8'b0011_0000;
yellow_r<=8'b0000_0101;
end
dm_lb<=yellow_l[3:
0];
dm_la<=yellow_l[7:
4];
dm_rb<=red_r[3:
0];
dm_ra<=red_r[7:
4];
light<=0100_0001;
end
endcase
end
end
always@(count[9])
begin
case(count[9:
8])
2'b00:
wm<=4'b1110;
2'b01:
wm<=4'b1101;
2'b10:
wm<=4'b1011;
2'b11:
wm<=4'b0111;
endcase
end
always@(wm)
begin
if(wm=='b1110)
dm<=da;
elseif(wm=='b1101)
dm<=db;
elseif(wm=='b1011)
dm<=dc;
elseif(wm=='b0111)
dm<=dd;
//case(wm)
//1110:
dm<=da;
//1101:
dm<=db;
//1011:
dm<=dc;
//0111:
dm<=dd;
//endcase
end
always@(dm_rb)
begin
case(dm_rb)
0:
da<=8'b1100_0000;
1:
da<=8'b1111_1001;
2:
da<=8'b1010_0100;
3:
da<=8'b1011_0000;
4:
da<=8'b1001_1001;
5:
da<=8'b1001_0010;
6:
da<=8'b1000_0010;
7:
da<=8'b1111_1000;
8:
da<=8'b1000_0000;
9:
da<=8'b1001_0000;
endcase
end
always@(dm_ra)
begin
case(dm_ra)
0:
db<=8'b1100_0000;
1:
db<=8'b1111_1001;
2:
db<=8'b1010_0100;
3:
db<=8'b1011_0000;
4:
db<=8'b1001_1001;
5:
db<=8'b1001_0010;
6:
db<=8'b1000_0010;
7:
db<=8'b1111_1000;
8:
db<=8'b1000_0000;
9:
db<=8'b1001_0000;
endcase
end
always@(dm_lb)
begin
case(dm_lb)
0:
dc<=8'b1100_0000;
1:
dc<=8'b1111_1001;
2:
dc<=8'b1010_0100;
3:
dc<=8'b1011_0000;
4:
dc<=8'b1001_1001;
5:
dc<=8'b1001_0010;
6:
dc<=8'b1000_0010;
7:
dc<=8'b1111_1000;
8:
dc<=8'b1000_0000;
9:
dc<=8'b1001_0000;
endcase
end
always@(dm_la)
begin
case(dm_la)
0:
dd<=8'b1100_0000;
1:
dd<=8'b1111_1001;
2:
dd<=8'b1010_0100;
3:
dd<=8'b1011_0000;
4:
dd<=8'b1001_1001;
5:
dd<=8'b1001_0010;
6:
dd<=8'b1000_0010;
7:
dd<=8'b1111_1000;
8:
dd<=8'b1000_0000;
9:
dd<=8'b1001_0000;
endcase
end
endmodule
精简后程序:
modulelight(
inputclk,
inputreset,
outputreg[3:
0]weima,
outputreg[2:
0]weroad,//weroad[2:
0]分别为红灯、绿灯、黄灯
outputreg[2:
0]snroad,//snroad[2:
0]分别为红灯、绿灯、黄灯
outputreg[7:
0]out);
regtempa=1,tempb=1;
reg[7:
0]wcount;
reg[7:
0]ecount;
reg[7:
0]scount;
reg[7:
0]ncount;
reg[1:
0]state=0;
reg[7:
0]numa,numb;
reg[7:
0]we[2:
0],sn[2:
0];//用于显示数据值
reg[15:
0]clk_system;
reg[24:
0]clk_count;
//设计各种灯的计数预置数
always@(reset)
if(!
reset)
begin
we[2]=8'b0010_0101;
we[1]=8'b0010_0000;
we[0]=8'b0000_0101;
sn[2]=8'b0000_0101;
sn[1]=8'b0010_0000;
sn[0]=8'b0010_0101;
end
//计数分频
always@(posedgeclk)
begin
if(!
reset)
clk_system<=0;
else
clk_system<=clk_system+1;
end
always@(posedgeclk)
begin
if(!
reset)
clk_count<=0;
else
clk_count<=clk_count+1;
end
//扫描位码
always@(clk_system[15:
14])
begin
case(clk_system[15:
14])
0:
weima<=4'b1110;
1:
weima<=4'b1101;
2:
weima<=4'b1011;
3:
weima<=4'b0111;
default:
weima<=4'b1111;
endcase
end
always@(weima)
begin
case(weima)
4'b1110:
out<=scount;
4'b1101:
out<=ncount;
4'b1011:
out<=wcount;
4'b0111:
out<=ecount;
default:
out<=8'b0000_0000;
endcase
end
always@(numb[3:
0])
begin
case(numb[3:
0])
0:
scount<=8'b11000000;
1:
scount<=8'b11111001;
2:
scount<=8'b10100100;
3:
scount<=8'b10110000;
4:
scount<=8'b10011001;
5:
scount<=8'b10010010;
6:
scount<=8'b10000010;
7:
scount<=8'b11111000;
8:
scount<=8'b10000000;
9:
scount<=8'b10010000;
endcase
end
always@(numb[7:
4])
begin
case(numb[7:
4])
0:
ncount<=8'b11000000;
1:
ncount<=8'b11111001;
2:
ncount<=8'b10100100;
3:
ncount<=8'b10110000;
4:
ncount<=8'b10011001;
5:
ncount<=8'b10010010;
6:
ncount<=8'b10000010;
7:
ncount<=8'b11111000;
8:
ncount<=8'b10000000;
9:
ncount<=8'b10010000;
endcase
end
always@(numa[3:
0])
begin
case(numa[3:
0])
0:
wcount<=8'b11000000;
1:
wcount<=8'b11111001;
2:
wcount<=8'b10100100;
3:
wcount<=8'b10110000;
4:
wcount<=8'b10011001;
5:
wcount<=8'b10010010;
6:
wcount<=8'b10000010;
7:
wcount<=8'b11111000;
8:
wcount<=8'b10000000;
9:
wcount<=8'b10010000;
endcase
end
always@(numa[7:
4])
begin
case(numa[7:
4])
0:
ecount<=8'b11000000;
1:
ecount<=8'b11111001;
2:
ecount<=8'b10100100;
3:
ecount<=8'b10110000;
4:
ecount<=8'b10011001;
5:
ecount<=8'b10010010;
6:
ecount<=8'b10000010;
7:
ecount<=8'b11111000;
8:
ecount<=8'b10000000;
9:
ecount<=8'b10010000;
endcase
end
always@(posedgeclk_count[24])
begin
if(tempa||tempb)
begin
tempa<=0;
tempb<=0;
case(state)
0:
begin
weroad<=3'b010;
snroad<=3'b001;
numa<=we[1];
numb<=sn[0];
state<=1;
end
1:
begin
weroad<=3'b001;
snroad<=3'b001;
numa<=we[0];
state<=2;
end
2:
begin
weroad<=3'b100;
snroad<=3'b010;
numa<=we[2];
numb<=sn[1];
state<=3;
end
3:
begin
weroad<=3'b100;
snroad<=3'b100;
numb<=sn[2];
state<=0;
end
endcase
endelse
begin
if(numb>0)
if(numb[3:
0]==0)
beginnumb[3:
0]<=4'b1001;
numb[7:
4]<=numb[7:
4]-1;
end
elsenumb[3:
0]<=numb[3:
0]-1;
if(numb==1)tempb<=1;
if(numa>0)
if(numa[3:
0]==0)
beginnuma[3:
0]<=4'b1001;
numa[7:
4]<=numa[7:
4]-1;
end
elsenuma[3:
0]<=numa[3:
0]-1;
if(numa==1)tempa<=1;
end
end
endmodule
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯 设计 报告