交通灯控制实验.docx
- 文档编号:23802058
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:10
- 大小:93.73KB
交通灯控制实验.docx
《交通灯控制实验.docx》由会员分享,可在线阅读,更多相关《交通灯控制实验.docx(10页珍藏版)》请在冰豆网上搜索。
交通灯控制实验
交通灯控制实验
一、主体功能:
用VerilogHDL设计一个交通灯,包含以下主要功能:
(1)红、黄、绿灯依次按不同的时间间隔显示;
(2)时间以倒数计时方式显示;
(3)可按管制方式设为常红和常绿。
二、输入和输出可用资源:
(1)输入:
5个按键KEY0,KEY1,KEY2,KEY3,RESET;
(2)输出:
8位数码管,4个LED,一个蜂鸣器;
(3)用不同的发光LED代表红、黄、绿信号灯。
三、设计提示:
(1)参考马路上交通灯的工作方式;
(2)了解需要哪些参考时钟源,由50Mhz通过内部分频得到。
四、实验的主要代码及原理图:
(1)分频器代码如下:
moduleint_div(clk,div_out);
inputclk;
outputregdiv_out;
reg[31:
0]clk_div;
parameterCLK_FREQ='D50_000_000;
parameterDCLK_FREQ='D10;
always@(posedgeclk)
begin
if(clk_div<(CLK_FREQ/DCLK_FREQ))
clk_div<=clk_div+1;
else
begin
clk_div<=0;
div_out<=~div_out;
end
end
endmodule
(2)倒计时代码:
modulesegmain(clk,reset_n,datain,seg_data,seg_com);
inputclk;
inputreset_n;
input[7:
0]datain;
output[7:
0]seg_data;
output[1:
0]seg_com;
reg[1:
0]seg_com;
reg[7:
0]seg_data;
reg[3:
0]bcd_led;
reg[36:
0]count;
integerdatain1;
always@(posedgeclk)
begin
if(!
reset_n)count<=0;
else
begin
count<=count+1;
end
end
always@(count[12:
11]ordatain)
begin
case(count[12:
11])
2'b00:
begin
datain1=datain%10;
bcd_led=datain1[3:
0];
seg_com=4'b1110;
end
2'b01:
begin
datain1=datain/10;
bcd_led=datain1[3:
0];
seg_com=4'b1101;
end
2'b10:
begin
datain1=datain%10;
bcd_led=datain1[3:
0];
seg_com=4'b1011;
end
2'b11:
begin
datain1=datain/10;
bcd_led=datain1[3:
0];
seg_com=4'b0111;
end
endcase
end
always@(seg_comorbcd_led)
begin
case(bcd_led)
4'h0:
seg_data=8'hc0;
4'h1:
seg_data=8'hf9;
4'h2:
seg_data=8'ha4;
4'h3:
seg_data=8'hb0;
4'h4:
seg_data=8'h99;
4'h5:
seg_data=8'h92;
4'h6:
seg_data=8'h82;
4'h7:
seg_data=8'hf8;
4'h8:
seg_data=8'h80;
4'h9:
seg_data=8'h90;
4'ha:
seg_data=8'h88;
4'hb:
seg_data=8'h83;
4'hc:
seg_data=8'hc6;
4'hd:
seg_data=8'ha1;
4'he:
seg_data=8'h86;
4'hf:
seg_data=8'h8e;
default:
seg_data=8'hc0;
endcase
end
endmodule
(3)红绿灯显示的主要控制代码:
moduletraficlight(ch,rst,clk,green,yellow,red,red1,green1,seg);
inputch;
inputrst;
inputclk;
outputgreen;
outputyellow;
outputred;
outputred1;
outputgreen1;
output[7:
0]seg;
reggreen,yellow,red,red1,green1;
reg[1:
0]c;
reg[7:
0]seg;
reg[7:
0]count;
reg[7:
0]temp;
always@(posedgeclk)
begin
if(!
rst)
begin
green=0;
yellow=0;
red=0;
red1=0;
green1=0;
c<=0;
seg=0;
count=0;
end
if(!
ch)
begin
if(c<2'b11)c<=c+1'b1;
elsec<=0;
end
case(c)
2'b00:
begin
count=count+'D1;
if(count>'D80)
count=0;
temp='D80-count;
if(temp>='D35)
begin
green=1'b0;
red1=1'b0;
yellow=1'b1;
red=1'b1;
seg=temp-'D35;
end
elseif(temp>='D30&&temp<'D35)
begin
green=1'b1;
yellow=1'b0;
red=1'b1;
seg=temp-'D30;
end
else
begin
green=1'b1;
yellow=1'b1;
red=1'b0;
green1=1'b0;
seg=temp;
end
end
2'b01:
begin
green=1'b1;
yellow=1'b1;
red=1'b0;
seg=0;
end
2'b10:
begin
green=1'b0;
yellow=1'b1;
red=1'b1;
seg=0;
end
default:
begin
green=1'b0;
yellow=1'b0;
red=1'b0;
seg=0;
end
endcase
end
endmodule
(4)TCL脚本代码:
#Setup.tcl
set_global_assignment-nameRESERVE_ALL_UNUSED_PINS"ASINPUTTRI-STATED"
set_global_assignment-nameENABLE_INIT_DONE_OUTPUTOFF
set_location_assignmentPIN_149-toclk
set_location_assignmentPIN_90-toreset
#led
set_location_assignmentPIN_9-toled0
set_location_assignmentPIN_13-toled1
set_location_assignmentPIN_18-toled2
set_location_assignmentPIN_18-toled3
#78led
set_location_assignmentPIN_148-to78ledcom[0]
set_location_assignmentPIN_147-to78ledcom[1]
set_location_assignmentPIN_148-to78ledcom[2]
set_location_assignmentPIN_147-to78ledcom[3]
set_location_assignmentPIN_145-to78leddata[0]
set_location_assignmentPIN_143-to78leddata[1]
set_location_assignmentPIN_137-to78leddata[2]
set_location_assignmentPIN_139-to78leddata[3]
set_location_assignmentPIN_144-to78leddata[4]
set_location_assignmentPIN_146-to78leddata[5]
set_location_assignmentPIN_135-to78leddata[6]
set_location_assignmentPIN_142-to78leddata[7]
#key
set_location_assignmentPIN_113-tokey0
(5)实验原理图:
五、实验小结:
(1)这次的有关于交通灯控制的实验,刚开始觉得有点无从下手,毕竟这次的实验书上没有详细的代码以及实验电路图,对于我们这种对近代电子实验掌握并不熟练和精通的学生来说,无疑是个大难题。
(2)实验中用到的分频器部分是很简单的,毕竟前几次试实验一直有在用,分频的输出频率主要用来控制倒计时计数器的数字变化的快慢。
倒计时计数器本质上用的是十进制计数器的原理,只是在这个基础上通过一定的控制语句做一个模为80的递减计数器。
(3)我觉得最困难的部分要数交通灯使用LED灯来表示的部分,参考马路交通灯的工作方式,红绿灯是按不同的时间间隔显示的,因此需要将计数器的80s分配给不同颜色的灯,通过简单的if条件语句就可以实现这个功能。
(4)交通灯控制相当于是在前几次的基础上进行实验的,没有代码和实验电路图,这就要求我们对前几次的实验要灵活的掌握,查缺补漏,及时的复习和回顾已经做过的实验。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 交通灯 控制 实验