数电课程设计交通灯控制逻辑电路设计.docx

上传人:b****3 文档编号:4036901 上传时间:2022-11-27 格式:DOCX 页数:19 大小:199.83KB
下载 相关 举报
数电课程设计交通灯控制逻辑电路设计.docx_第1页
第1页 / 共19页
数电课程设计交通灯控制逻辑电路设计.docx_第2页
第2页 / 共19页
数电课程设计交通灯控制逻辑电路设计.docx_第3页
第3页 / 共19页
数电课程设计交通灯控制逻辑电路设计.docx_第4页
第4页 / 共19页
数电课程设计交通灯控制逻辑电路设计.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

数电课程设计交通灯控制逻辑电路设计.docx

《数电课程设计交通灯控制逻辑电路设计.docx》由会员分享,可在线阅读,更多相关《数电课程设计交通灯控制逻辑电路设计.docx(19页珍藏版)》请在冰豆网上搜索。

数电课程设计交通灯控制逻辑电路设计.docx

数电课程设计交通灯控制逻辑电路设计

数电课程设计--交通灯控制逻辑电路设计

江苏科技大学电子信息学院

数字电子技术实验

课程设计报告

 

指导老师:

李绍鹏

学院:

电子信息学院

班级:

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1