数电课程设计交通灯控制逻辑电路设计.docx
- 文档编号:4036901
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:19
- 大小:199.83KB
数电课程设计交通灯控制逻辑电路设计.docx
《数电课程设计交通灯控制逻辑电路设计.docx》由会员分享,可在线阅读,更多相关《数电课程设计交通灯控制逻辑电路设计.docx(19页珍藏版)》请在冰豆网上搜索。
数电课程设计交通灯控制逻辑电路设计
数电课程设计--交通灯控制逻辑电路设计
江苏科技大学电子信息学院
数字电子技术实验
课程设计报告
指导老师:
李绍鹏
学院:
电子信息学院
班级:
11403022
学生(学号):
孙磊(1140302219)
课题一数字电子钟
课题二交通灯控制逻辑电路设计
(注:
由于Quartusii9.0不支持中文输入,但支持中文复制,所以以下代码文字说明均为后期制作)
课题一数字电子钟
任务:
用文本法设计一个能显示时、分、秒的数字电子钟
要求:
1.设计由20mhz有源晶振电路产生标准信号的单元电路;
2.时为00~23六十进制计数器,分、秒为00~59六十进制计数器;
3.能够显示出时、分、秒;
4.具有清零,调节分钟的功能;
5.模拟钟摆功能;
6.具有整点报时功能,整点报时的同时声响电路发出叫声;
7.对时、分、秒单元电路进行仿真并记录。
本文利用VerilogHDL语言自顶向下的设计方法设计多功能数字钟,并通过仿真和下载,实现其基本功能。
1.顶层文件
moduletop(
CLK,SET,EN,RE,//CLK==20MHZSET调节分钟
LED_5,OUT,
QH1,QH0,QM1,QM0,QS1,QS0
);
inputCLK,SET,RE,EN;
outputOUT;//OUT报时
output[3:
0]QH1,QH0,QM1,QM0,QS1,QS0;
output[4:
0]LED_5;
wireclk1khz,clk250hz,clk1hz,m1,b2,b3,b4;
wire[5:
0]s1,m2,h3;
//---------------分频-----------------------------------------
Divu1(CLK,EN,RE,14'd6384,clk1khz);
Divu2(clk1khz,EN,RE,14'd16382,clk250hz);
Divu3(clk1khz,EN,RE,14'd15884,clk1hz);
//-----------------秒s1计数,产生分进位m1------------
counteru4(clk1hz,EN,RE,6'd59,m1,s1);
BCDturnu5(s1,QS1,QS0);
//-----------------分m2计数,产生时进位b3-----------
counteru6(b2,EN,RE,6'd59,b3,m2);
BCDturnu7(m2,QM1,QM0);
//-----------------时h3计数,产生进位b4--------------
counteru8(b3,EN,RE,6'd23,b4,h3);
BCDturnu9(h3,QH1,QH0);
//--------------------模拟钟摆-------------------------------
led_u10(CLK,LED_5);
//--------------------整点报时-------------------------------
baoshiu11(QM1,QM0,QS1,QS0,OUT);
//------------------b2调节分钟---------------------------------
assignb2=SET?
SET:
m1;
endmodule
2.分频模块
moduleDiv(CLK,EN,RE,d,Q);//给d赋初始值
inputCLK,EN,RE;
input[13:
0]d;
outputQ;
regFULL,Q;
reg[13:
0]c;
always@(posedgeCLK)
begin
if(RE)
begin
c<=d;
FULL<=0;
end
else
if(EN)
begin
if(c=={14{1'b1}})
begin
c<=d;
FULL<=1;
end
else
begin
c<=c+1;
FULL<=0;
end
end
end
always@(posedgeFULL)//得到占空比50%的分频信号
begin
Q<=~Q;
end
endmodule
3.计数模块
modulecounter(CLK,EN,RE,C,FULL,Q);//EN=1时进行计数,RE=1时清零
inputCLK,EN,RE;//C表示N进制,Q为计数结果
input[5:
0]C;
output[5:
0]Q;
outputFULL;
reg[5:
0]Q;
regFULL;
always@(posedgeCLK)
begin
if(RE)
begin
Q<=0;
FULL<=0;
end
else
if(EN)
begin
if(Q==C)
begin
Q<=0;
FULL<=1;
end
else
begin
Q<=Q+1;
FULL<=0;
end
end
end
endmodule
4.BCD译码模块
//由于计数使用的二进制,在输出时便需要进行译码,转换成大众所熟悉的十进制表示
moduleBCDturn(indec,qh,ql);
input[5:
0]indec;
output[3:
0]qh,ql;
reg[3:
0]qh,ql;
always@(indec)
begin
case(indec)
6'd0:
beginqh[3:
0]<='b0000;ql[3:
0]<='b0000;end
6'd1:
beginqh[3:
0]<='b0000;ql[3:
0]<='b0001;end
6'd2:
beginqh[3:
0]<='b0000;ql[3:
0]<='b0010;end
6'd3:
beginqh[3:
0]<='b0000;ql[3:
0]<='b0011;end
6'd4:
beginqh[3:
0]<='b0000;ql[3:
0]<='b0100;end
6'd5:
beginqh[3:
0]<='b0000;ql[3:
0]<='b0101;end
6'd6:
beginqh[3:
0]<='b0000;ql[3:
0]<='b0110;end
6'd7:
beginqh[3:
0]<='b0000;ql[3:
0]<='b0111;end
6'd8:
beginqh[3:
0]<='b0000;ql[3:
0]<='b1000;end
6'd9:
beginqh[3:
0]<='b0000;ql[3:
0]<='b1001;end
6'd10:
beginqh[3:
0]<='b0001;ql[3:
0]<='b0000;end
6'd11:
beginqh[3:
0]<='b0001;ql[3:
0]<='b0001;end
6'd12:
beginqh[3:
0]<='b0001;ql[3:
0]<='b0010;end
6'd13:
beginqh[3:
0]<='b0001;ql[3:
0]<='b0011;end
6'd14:
beginqh[3:
0]<='b0001;ql[3:
0]<='b0100;end
6'd15:
beginqh[3:
0]<='b0001;ql[3:
0]<='b0101;end
6'd16:
beginqh[3:
0]<='b0001;ql[3:
0]<='b0110;end
6'd17:
beginqh[3:
0]<='b0001;ql[3:
0]<='b0111;end
6'd18:
beginqh[3:
0]<='b0001;ql[3:
0]<='b1000;end
6'd19:
beginqh[3:
0]<='b0001;ql[3:
0]<='b1001;end
6'd20:
beginqh[3:
0]<='b0010;ql[3:
0]<='b0000;end
6'd21:
beginqh[3:
0]<='b0010;ql[3:
0]<='b0001;end
6'd22:
beginqh[3:
0]<='b0010;ql[3:
0]<='b0010;end
6'd23:
beginqh[3:
0]<='b0010;ql[3:
0]<='b0011;end
6'd24:
beginqh[3:
0]<='b0010;ql[3:
0]<='b0100;end
6'd25:
beginqh[3:
0]<='b0010;ql[3:
0]<='b0101;end
6'd26:
beginqh[3:
0]<='b0010;ql[3:
0]<='b0110;end
6'd27:
beginqh[3:
0]<='b0010;ql[3:
0]<='b0111;end
6'd28:
beginqh[3:
0]<='b0010;ql[3:
0]<='b1000;end
6'd29:
beginqh[3:
0]<='b0010;ql[3:
0]<='b1001;end
6'd30:
beginqh[3:
0]<='b0011;ql[3:
0]<='b0000;end
6'd31:
beginqh[3:
0]<='b0011;ql[3:
0]<='b0001;end
6'd32:
beginqh[3:
0]<='b0011;ql[3:
0]<='b0010;end
6'd33:
beginqh[3:
0]<='b0011;ql[3:
0]<='b0011;end
6'd34:
beginqh[3:
0]<='b0011;ql[3:
0]<='b0100;end
6'd35:
beginqh[3:
0]<='b0011;ql[3:
0]<='b0101;end
6'd36:
beginqh[3:
0]<='b0011;ql[3:
0]<='b0110;end
6'd37:
beginqh[3:
0]<='b0011;ql[3:
0]<='b0111;end
6'd38:
beginqh[3:
0]<='b0011;ql[3:
0]<='b1000;end
6'd39:
beginqh[3:
0]<='b0011;ql[3:
0]<='b1001;end
6'd40:
beginqh[3:
0]<='b0100;ql[3:
0]<='b0000;end
6'd41:
beginqh[3:
0]<='b0100;ql[3:
0]<='b0001;end
6'd42:
beginqh[3:
0]<='b0100;ql[3:
0]<='b0010;end
6'd43:
beginqh[3:
0]<='b0100;ql[3:
0]<='b0011;end
6'd44:
beginqh[3:
0]<='b0100;ql[3:
0]<='b0100;end
6'd45:
beginqh[3:
0]<='b0100;ql[3:
0]<='b0101;end
6'd46:
beginqh[3:
0]<='b0100;ql[3:
0]<='b0110;end
6'd47:
beginqh[3:
0]<='b0100;ql[3:
0]<='b0111;end
6'd48:
beginqh[3:
0]<='b0100;ql[3:
0]<='b1000;end
6'd49:
beginqh[3:
0]<='b0100;ql[3:
0]<='b1001;end
6'd50:
beginqh[3:
0]<='b0101;ql[3:
0]<='b0000;end
6'd51:
beginqh[3:
0]<='b0101;ql[3:
0]<='b0001;end
6'd52:
beginqh[3:
0]<='b0101;ql[3:
0]<='b0010;end
6'd53:
beginqh[3:
0]<='b0101;ql[3:
0]<='b0011;end
6'd54:
beginqh[3:
0]<='b0101;ql[3:
0]<='b0100;end
6'd55:
beginqh[3:
0]<='b0101;ql[3:
0]<='b0101;end
6'd56:
beginqh[3:
0]<='b0101;ql[3:
0]<='b0110;end
6'd57:
beginqh[3:
0]<='b0101;ql[3:
0]<='b0111;end
6'd58:
beginqh[3:
0]<='b0101;ql[3:
0]<='b1000;end
6'd59:
beginqh[3:
0]<='b0101;ql[3:
0]<='b1001;end
default:
beginqh[3:
0]<='bx;ql[3:
0]<='bx;end
endcase
end
Endmodule
5.模拟钟摆模块
//该模块对20mhz的clk进行的分频,所得到的8hz(clk_8hz)用作5个LED的时钟脉冲
moduleled_(clk,ledout);
inputclk;
output[4:
0]ledout;
reg[4:
0]ledout;
reg[12:
0]count0;
regclk_2khz,clk_8hz;
reg[6:
0]count4;
reg[2:
0]cnt1;
always@(posedgeclk)
begin
if(count0=='d5000)//5000
begin
clk_2khz<=~clk_2khz;
count0<=0;
end
else
begin
count0<=count0+1;
end
end
always@(posedgeclk_2khz)
begin
if(count4=='d125)//125
begin
clk_8hz<=~clk_8hz;
count4<=0;
end
else
begin
count4<=count4+1;
end
end
always@(posedgeclk_8hz)
begin
if(cnt1=='d7)
begin
cnt1<='d0;
end
else
begin
cnt1<=cnt1+1;
end
end
always@(cnt1)
begin
case(cnt1)
3'd0:
ledout[4:
0]<=5'b10000;
3'd1:
ledout[4:
0]<=5'b01000;
3'd2:
ledout[4:
0]<=5'b00100;
3'd3:
ledout[4:
0]<=5'b00010;
3'd4:
ledout[4:
0]<=5'b00001;
3'd5:
ledout[4:
0]<=5'b00010;
3'd6:
ledout[4:
0]<=5'b00100;
3'd7:
ledout[4:
0]<=5'b01000;
endcase
end
endmodule
6.整点报时模块
//该模块在49:
52,49:
54,49:
56,49:
58~00:
00这6个秒段产生高电平,用作报时
modulebaoshi(qmh,qml,qsh,qsl,OUT);
input[3:
0]qmh,qml,qsh,qsl;
outputOUT;
regOUT;
always@(qmhorqmlorqshorqsl)
begin
if(qmh==4'd5&&qml==4'd9&&qsh==4'd5&&qsl==4'd2)
OUT<=1;
elseif(qmh==4'd5&&qml==4'd9&&qsh==4'd5&&qsl==4'd4)
OUT<=1;
elseif(qmh==4'd5&&qml==4'd9&&qsh==4'd5&&qsl==4'd6)
OUT<=1;
elseif(qmh==4'd5&&qml==4'd9&&qsh==4'd5&&qsl==4'd8)
OUT<=1;
elseif(qmh==4'd5&&qml==4'd9&&qsh==4'd5&&qsl==4'd9)
OUT<=1;
elseif(qmh==4'd0&&qml==4'd0&&qsh==4'd0&&qsl==4'd0)
OUT<=1;
else
OUT<=0;
end
endmodule
逻辑功能仿真结果:
调节分钟:
模拟钟摆:
通过以上仿真,在实验板上进行测试,管脚锁定:
实验最终测试运行良好,并通过验收。
课题二交通灯控制逻辑电路设计
任务:
用CPLD设计路口交通灯控制器
要求:
1.满足如下时序要求:
南北方向红灯亮,东西方向绿灯亮;南北方向绿灯亮,东西方向红灯亮;
2.每一方向的红(绿)黄灯总共维持30秒;
3.十字路口要有时间显示,具体为:
当某一方向绿灯亮时,置显示器为30秒,然后以每秒减一计数方式工作,直至减到数为4秒时,红绿灯熄灭,黄灯开始间隙闪耀4秒,减到零时,红绿灯交换,一次工作循环结束,进入下一步另一方向的工作循环;
4.红绿黄灯均采用发光二极管;
5.设计由晶振电路产生1Hz标准秒信号的单元电路;
6.要求对整体电路进行仿真,观察并记录下仿真波形;
7.东西方向或南北方向的绿灯亮变为红灯亮,中间需插入黄灯闪耀4秒过渡,而从红灯亮变为绿灯亮,不需要黄灯过渡,直接由红灯变为绿灯。
文本文件:
moduletraffic(qh,ql,clk,clr,enmergy,ra,ya,ga,rb,yb,gb);
outputra,ya,ga,rb,yb,gb;//东西方向红(ra)黄(ya)绿(ga);南北方向红(rb)黄(yb)
output[3:
0]qh,ql;//绿(gb)
inputclk,clr,enmergy;//enmergy紧急信号,该信号有效时,所有交通灯皆显红灯
reg[1:
0]state,next_state;
parameterstate0=2'b00,state1=2'b01,state2=2'b10,state3=2'b11;
regclk_1khz,clk_1hz,clk_2hz;
reg[3:
0]qh,ql;
regr1,r2,g1,g2,y1,y2;
regra,ya,ga,rb,yb,gb;
reg[13:
0]count1;
reg[8:
0]count2,count3;
rega;
reg[4:
0]timer;
always@(posedgeclk)
begin
if(count1==14'd10000)//10000
begin
clk_1khz<=~clk_1khz;
count1<=0;
end
else
begin
count1<=count1+1;
end
end
always@(posedgeclk_1khz)
begin
if(count2==9'd500)//500
begin
clk_1hz<=~clk_1hz;
count2<=0;
end
else
begin
count2<=count2+1;
end
if(count3=='d250)//250
begin
clk_2hz<=~clk_2hz;
count3<=0;
end
else
begin
count3<=count3+1;
end
end
always@(posedgeclk_1hz)
begin
if(clr)
begin
r1<=0;y1<=0;g1<=0;
r2<=0;y2<=0;g2<=0;
end
else
begin
state=next_state;
case(state)
state0:
begin
if(!
enmergy)
begin
if(!
a)
begin
timer<=5'd30;
a<=1;
r1<=0;y1<=0;g1<=1;
r2<=1;y2<=0;g2<=0;
end
else
begin
if(timer==1)
begin
next_state<=state1;
a<=0;
timer<=0;
end
else
timer<=timer-1;
end
end
end
state1:
begin
if(!
enmergy)
begin
if(!
a)
begin
timer<=5'd4;
a<=1;
r1<=0;y1<=1;g1<=0;
r2<=1;y2<=0;g2<=0;
end
else
begin
if(timer==1)
begin
next_state<=state2;
a<=0;
timer<=0;
end
else
timer<=timer-1;
end
end
end
state2:
begin
if(!
enmergy)
begin
if(!
a)
begin
timer<=5'd25;
a<=1;
r1<=1;y1<=0;g1<=0;
r2<=0;y2<=0;g2<=1;
end
else
begin
if(t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 交通灯 控制 逻辑电路 设计