数字钟实验报告文档格式.docx

上传人:b****6 文档编号:17775098 上传时间:2022-12-09 格式:DOCX 页数:16 大小:438.95KB
下载 相关 举报
数字钟实验报告文档格式.docx_第1页
第1页 / 共16页
数字钟实验报告文档格式.docx_第2页
第2页 / 共16页
数字钟实验报告文档格式.docx_第3页
第3页 / 共16页
数字钟实验报告文档格式.docx_第4页
第4页 / 共16页
数字钟实验报告文档格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数字钟实验报告文档格式.docx

《数字钟实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《数字钟实验报告文档格式.docx(16页珍藏版)》请在冰豆网上搜索。

数字钟实验报告文档格式.docx

output[3:

0]Q;

reg[3:

always@(posedgeCPornegedgenCR)

begin

if(~nCR)Q<

=4'

b0000;

elseif(~EN)Q<

=Q;

elseif(Q==4'

b0101)Q<

elseQ<

=Q+1'

b1;

end

endmodule

(2)仿真波形:

说明:

Q在每个CP上升沿变化;

在0到5之间循环,周期为6。

2.十进制计数器:

modulecounter10(Q,nCR,EN,CP);

inputCP,nCR,EN;

output[3:

b1001)Q<

在0到9之间循环,周期为10。

3.二十四进制计数器:

modulecounter24(CntH,CntL,nCR,EN,CP);

inputCP,nCR,EN;

output[3:

0]CntH,CntL;

reg[3:

regCO;

always@(posedgeCPornegedgenCR)

if(~nCR){CntH,CntL}<

=8'

h00;

elseif(~EN){CntH,CntL}<

={CntH,CntL};

elseif((CntH>

2)||(CntL>

9)||((CntH==2)&

&

(CntL>

=3)))

{CntH,CntL}<

elseif((CntH==2)&

(CntL<

3))

beginCntH<

=CntH;

CntL<

=CntL+1'

elseif(CntL==9)

beginCntH=CntH+1'

else

低位在每个CP上升沿变化在0到9之间循环,高位在低位为9后进位,在0到2之间循环,整个周期为24。

4.十二进制计数器

modulecounter12(CntH,CntL,nCR,EN,CP,M);

//M表示上午0下午1

output[3:

outputM;

regM;

always@(posedgeCPornegedgenCR)

begin

if(~nCR)begin{CntH,CntL}<

h01;

M=1'

b0;

end

1)||(CntL>

9)||((CntH==1)&

=2)))

begin{CntH,CntL}<

elseif((CntH==1)&

2))

beginCntH<

CntL<

elseif(CntL==9)

=CntH+1'

else

if({CntH,CntL}==8'

b00010001)M<

=~M;

(2)仿真波形

低位在每个CP上升沿变化在0到9之间循环,高位在低位为9后进位,在0到1之间循环,整个周期为12;

在11向12变化时,M在0、1间变化。

5.分频

modulefenpin(CPH,CPL);

//实现CPL是CPH频率的一半

inputCPH;

outputCPL;

regCPL;

always@(posedgeCPH)

CPL<

=(~CPL);

CPH每来一个周期,CPL翻转一次,结果其周期为CPH的两倍,实现分频效果。

6.任意时刻触摸报时:

moduleanytime(Out,K,CP,hour,CPH);

inputCP,CPH,K;

outputOut;

input[7:

0]hour;

reg[7:

0]count;

wireOut;

assignOut=(count<

=hour)&

CP&

CPH&

K;

always@(posedgeCPornegedgeK)

if(~K)count<

elseif(count<

=hour)

begin

if(count==8'

h09)count<

h10;

elsecount<

=count+1'

(2)仿真波形见整机仿真波形。

7.整机:

moduletop_clock(M,Hour,Minute,Second,BS,CP,CPH,nCR,EN,Adj_Min,Adj_Hour,Alarm_Min,Alarm_Hour,K);

//多功能数字钟,CPH为1024HZ,CP为1HZ

inputCP,CPH,nCR,EN,Adj_Min,Adj_Hour,Alarm_Min,Alarm_Hour,K;

output[7:

0]Hour,Minute,Second;

outputM,BS;

//M=0表示上午,M=1表示下午;

BS为扬声器

wire[7:

0]Hour,Hour1,Hour2,Minute,Minute1,Minute2,Second;

wireBS,out1,out2,out3,out4,out5,M,M1,M2;

supply1Vdd;

wireMin1L_EN,Min1H_EN,Hour1_EN,Min2L_EN,Min2H_EN,Hour2_EN;

counter10U1(Second[3:

0],nCR,EN,CP);

//秒的个位

counter6U2(Second[7:

4],nCR,(Second[3:

0]==4'

h9),CP);

//秒的十位

assignMin1L_EN=Adj_Min?

Vdd:

(Second==8'

h59);

//校分的低位

assignMin1H_EN=(Adj_Min&

(Minute1[3:

h9))||((Minute1[3:

h9)&

h59));

//校分的高位

counter10U3(Minute1[3:

0],nCR,Min1L_EN,CP);

//分的个位

counter6U4(Minute1[7:

4],nCR,Min1H_EN,CP);

//分的十位

assignHour1_EN=Adj_Hour?

((Minute1==8'

h59)&

//校时

counter12U5(Hour1[7:

4],Hour1[3:

0],nCR,Hour1_EN,CP,M1);

//小时

assignMin2L_EN=Alarm_Min?

(~Vdd);

//调闹铃分

assignMin2H_EN=Alarm_Min&

(Minute2[3:

h9);

//调闹铃分的个位

counter10U7(Minute2[3:

0],nCR,Min2L_EN,CP);

//调闹铃分的十位

counter6U8(Minute2[7:

4],nCR,Min2H_EN,CP);

assignHour2_EN=Alarm_Hour?

//调闹铃小时

counter12U9(Hour2[7:

4],Hour2[3:

0],nCR,Hour2_EN,CP,M2);

fenpinU11(CPH,CPL);

//由1024HZ的CPH得到512HZ的CPL

assignout1=CPH&

(Hour1==Hour2)&

(Minute1==Minute2)&

(M1=M2);

//闹铃

assignout2=CPL&

((Second==8'

h51)||(Second==8'

h53)||(Second==8'

h55)||(Second==8'

h57)));

//四声仿广播低音

assignout3=CPH&

//仿广播高音

assignout4=(Minute==8'

h00)&

(Second<

Hour)&

CPL;

//整点报时,几点响几下

anytimeU12(out5,K,CP,Hour,CPH);

//任意时刻触摸报整点时刻,几点响几下

assignBS=out1||out2||out3||out4||out5;

assignMinute=Alarm_Min?

Minute2:

Minute1;

//按下Alarm_Min数码管显示闹铃分否则显示时间分

assignHour=Alarm_Hour?

Hour2:

Hour1;

//按下Alarm_Hour数码管显示闹铃时否则显示时间时

assignM=Alarm_Hour?

M1:

M2;

//按下Alarm_Hour数码管显示闹铃上下午否则显示时间的上下午

开始时闹铃默认为01:

00,闹铃时间为一分钟。

Adj_Min=1时,Minute不断变化,当恰变为01:

00时,闹铃响。

Adj_Hour=1时,Hour不断变化。

K=1时,报当前整点时刻,图中12点响了12下。

在59分51、53、55、57秒有四声低音,59秒时又一声高音,为仿广播报时;

当整时,每秒有一声低音,几点响几下,为整点报时。

图中有一段Adj_Hour、Adj_Min为1,由上图知,闹铃定在了上午04:

08,

则04:

08时有一分钟闹铃。

五、实验总结:

通过本次实验,掌握了VerilogHDL程序的基本结构,学会了用EDA技术和可编程逻辑器件实现数字系统,包括设计输入、编译、仿真和器件编程;

熟悉了MAX+PLUSII软件的使用,掌握了可编程逻辑器件的开发过程,以及系统编程技术;

掌握了分层次分模块的设计方法;

对数字电路有了更进一步的认识。

附加课题:

汽车尾灯控制电路设计

1.源代码

moduleqicheweideng(CP,Stop,Back,Left,Right,L,F);

//Stop代表刹车1,Back代表倒车6,Right代表右转弯2,Left代表左转弯3,Back+Left代表左转弯刹车4,Back+Rightt代表右转弯刹车5,正常行驶0,数字由数码管F显示

inputCP,Stop,Back,Left,Right;

output[5:

0]L;

0]F;

0]F,S1,S2,S3;

reg[5:

0]L,LED1,LED2,LED3;

driveU1(CP,Stop,Back,LED1,S1);

//实现正常行驶、倒车和刹车功能

LRU2(CP,Left,Right,LED2,S2);

//实现左右转弯

LRSU3(CP,Left,Right,LED3,S3);

//实现左右转弯刹车

always@

(1)

if((Right||Left)&

~Stop)beginL<

=LED2;

F<

=S2;

elseif((Right||Left)&

Stop)beginL<

=LED3;

=S3;

elsebeginL<

=LED1;

=S1;

moduledrive(CP,STOP,BACK,LED,S);

inputCP,STOP,BACK;

0]LED;

0]S;

always@(CP)

if(STOP)beginLED<

=6'

b111111;

S<

h1;

elseif(BACK)begin

LED[0]<

=CP;

LED[1]<

LED[2]<

LED[3]<

LED[4]<

LED[5]<

S<

h6;

elsebeginLED<

d0;

h0;

moduleLR(CP,Left,Right,LED,S);

inputCP,Right,Left;

reg[1:

wire[5:

assignLED[0]=Left&

~count[0]&

count[1]&

CP;

assignLED[1]=Left&

count[0]&

~count[1]&

assignLED[2]=Left&

assignLED[3]=Right&

assignLED[4]=Right&

assignLED[5]=Right&

always@(posedgeCP)

if(count==2'

b10)count<

=2'

b00;

=count+2'

b01;

if(Right)S=4'

h2;

elseif(Left)S=4'

h3;

moduleLRS(CP,Left,Right,LED,S);

if(Left)

beginS<

h5;

=~count[0]&

=count[0]&

=1'

elseif(Right)

h4;

由波形知该程序实现了所有要求的功能。

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

当前位置:首页 > 高中教育 > 高考

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

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