ISE实现多功能数字钟设计Word文档下载推荐.docx

上传人:b****6 文档编号:19078142 上传时间:2023-01-03 格式:DOCX 页数:19 大小:187.07KB
下载 相关 举报
ISE实现多功能数字钟设计Word文档下载推荐.docx_第1页
第1页 / 共19页
ISE实现多功能数字钟设计Word文档下载推荐.docx_第2页
第2页 / 共19页
ISE实现多功能数字钟设计Word文档下载推荐.docx_第3页
第3页 / 共19页
ISE实现多功能数字钟设计Word文档下载推荐.docx_第4页
第4页 / 共19页
ISE实现多功能数字钟设计Word文档下载推荐.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

ISE实现多功能数字钟设计Word文档下载推荐.docx

《ISE实现多功能数字钟设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《ISE实现多功能数字钟设计Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。

ISE实现多功能数字钟设计Word文档下载推荐.docx

nCLR(nCR),

CLK_1HzOut(CP_1Hz));

//用以时钟计数的CP

defparamU0.N=25,

U0.CLK_Freq=50000000,

U0.OUT_Freq=1;

Divider50MHzU1(.CLK_50M(CLK_50),

nCLR(nCR),

CLK_1HzOut(CP_200Hz));

//用以动态扫描的CP,供给数码管

defparamU1.N=18,

U1.CLK_Freq=50000000,

U1。

OUT_Freq=200;

//===========60进制秒计数器=========

Scounter10S0(TSecond[3:

0],nCR,EN,CP_1Hz);

//秒:

个位

Scounter6S1(TSecond[7:

4],nCR,(TSecond[3:

0]==4'

h9),CP_1Hz);

十位

//===========60进制分计数器=========

Mcounter10M0(TMinute[3:

0],nCR,ENM_L,EN,CP_1Hz);

//分:

Mcounter6M1(TMinute[7:

4],nCR,ENM_H,EN,CP_1Hz);

//分:

assignENM_L=Adj_Min?

Vdd:

(TSecond==8’h59);

//分钟按书上CP调时

assignENM_H=(Adj_Min&&(TMinute[3:

0]==4’h9))||(TMinute[3:

h9)&

&

(TSecond==8'

h59);

//24小时制

counter24H0(Hour_24[7:

4],Hour_24[3:

0],nCR,ENH,EN,CP_1Hz);

assignENH=Adj_Hour?

((TMinute==8'

h59)&&(TSecond==8’h59));

//===========12小时与24小时进制切换控制==========

assignDisplay_HourAdjust=((Hour_24==8'

h20)||(Hour_24==8'

h21))?

(Hour_24—24):

(Hour_24—18);

assignHour_12=(Hour_24〈8'

h13)?

Hour_24:

Display_HourAdjust;

assignDisplay_HourT=Hchange?

Hour_12:

Hour_24;

//===========闹钟============

//——-—-—-—-—时钟秒--——---—-

//counter60CCS(nCR,CP_1Hz,EN,CSecond[7:

4],CSecond[3:

0]);

//——--——--——时钟分—--—-—-——

counter60CCM(nCR,CP_1Hz,CMin_EN,CMinute[7:

4],CMinute[3:

0]);

//--产生分使能信号—-

assignCMin_EN=(!

EN&

Adj_Clock&&

Adj_Min);

//-—-—-——--—时钟时—-—-—-———

Counter24CCCH(nCR,CP_1Hz,CHour_EN,CHour[7:

4],CHour[3:

//——产生时使能信号——

assignCHour_EN=(!

EN&&

Adj_Clock&

Adj_Hour);

//-—闹钟响-—

always@(ENorClock_EN)//闹钟开关

begin

if(EN&

&Clock_EN&

(CHour==Display_HourT)&

&(CMinute==TMinute))Alarm<

=1;

elseAlarm<

=0;

end

always@(posedgeCLK_50ornegedgeENornegedgeAlarm)//表示闹钟的LED

if(~EN)Led_Alarm<

else

begin

if(~Alarm)Led_Alarm<

elseLed_Alarm<

=~Led_Alarm;

end

//alarm_clockAL0(Hour24,Minute,CP_1Hz,Set_Alarm,Close_clock,nCR,KeySet_Hour_ev,KeySet_Minute_ev,LD_7,Alarm_Hour,Alarm_Minute);

//===========数码显示=========

always@(Adj_Clock)//确定数码管显示闹钟还是正常时钟

if(Adj_Clock)beginDisplay_Hour〈=CHour;

Minute〈=CMinute;

end

elsebeginDisplay_Hour<

=Display_HourT;

Minute〈=TMinute;

end

always@(posedgeCP_200Hz)

begin

if(Change==1)//数码管进行时分显示

begin

case(HEX)

4’b1110:

beginHEX〈=4’b0111;

bcd〈=Display_Hour[7:

4];

end//第一根数码管显示小时十位

4’b0111:

beginHEX〈=4’b1011;

bcd〈=Display_Hour[3:

0];

end//第二根显示小时个位

4’b1011:

beginHEX<

=4’b1101;

bcd<

=Minute[7:

end//第三根显示分钟十位

4'

b1101:

beginHEX〈=4'

b1110;

bcd〈=Minute[3:

0];

end//第四根显示分钟个位

default:

=0111;

=Display_Hour[7:

endcase

end

else//数码管进行秒显示,change为低电平时显示秒

b1110:

beginHEX〈=4’b1101;

bcd〈=TSecond[7:

end//第三根显示秒十位

4’b1101:

=4’b1110;

bcd〈=TSecond[3:

0];

end//第四根显示秒个位

default:

=1101;

bcd〈=TSecond[7:

4];

end

SEG7_LUTL0(HEX0,bcd);

//调用数码管子函数

//======整点报时==========

assignLD_6=LD_6_RADIO;

always@(CP_1Hz)

if((Minute[7:

0]==8’h00)&

&(counter[7:

0]〈(Hour_24[7:

4]*10+Hour_24[3:

0])))

LD_6_RADIO〈=CP_1Hz;

else

LD_6_RADIO<

=0;

always@(posedgeCP_1Hz)

if(Minute[7:

0]==8'

h00)

counter[7:

0]<

=counter[7:

0]+1'

b1;

else

counter[7:

0]〈=8’h00;

end

endmodule

五、顶层模块设计图

六、子模块设计

1、50MHz分频器

moduleDivider50MHz(CLK_50M,nCLR,CLK_1HzOut);

parameterN=25;

//位宽

parameterCLK_Freq=50000000;

//50MHz时钟输入

parameterOUT_Freq=1;

//1Hz时钟输出

inputnCLR,CLK_50M;

//输入端口说明

outputregCLK_1HzOut;

//输出端口说明

reg[N-1:

0]Count_DIV;

//内部节点,存放计数器的输出值

always@(posedgeCLK_50MornegedgenCLR)

if(!

nCLR)beginCLK_1HzOut〈=0;

Count_DIV<

elsebegin

if(Count_DIV<

(CLK_Freq/(2*OUT_Freq)—1))//计数器模

Count_DIV〈=Count_DIV+1'

//分频器计数加1

elsebegin

Count_DIV<

//分频器输出清零

CLK_1HzOut〈=~CLK_1HzOut;

//输出信号取反

2、秒模10计数器

moduleScounter10(Q,nCR,EN,CP);

inputCP,nCR,EN;

outputQ;

reg[3:

0]Q;

always@(posedgeCPornegedgenCR)

begin

if(~nCR)Q〈=4’b0000;

//异步清零

elseif(~EN)Q〈=Q;

//暂停计数

elseif(Q==4’b1001)Q<

=4'

b0000;

elseQ〈=Q+1’b1;

3、秒模6计数器

moduleScounter6(Q,nCR,EN,CP);

inputCP,nCR,EN;

outputQ;

reg[3:

0]Q;

always@(posedgeCPornegedgenCR)

elseif(~EN)Q<

=Q;

elseif(Q==4'

b0101)Q<

b0000;

elseQ〈=Q+1'

b1;

4、分模10计数器

moduleMcounter10(Q,nCR,EN1,EN2,CP);

inputCP,nCR,EN1,EN2;

reg[3:

if(~nCR)Q〈=4’b0000;

elseif(~EN1||!

EN2)Q<

=Q;

b1001)Q〈=4'

5、分模6计数器

moduleMcounter6(Q,nCR,EN1,EN2,CP);

inputCP,nCR,EN1,EN2;

if(~nCR)Q〈=4'

elseif(~EN1||~EN2)Q〈=Q;

b0101)Q〈=4'

elseQ<

=Q+1’b1;

6、模24计数器

modulecounter24(CntH,CntL,nCR,EN1,EN2,CP);

outputreg[3:

0]CntH,CntL;

//小时的十位和个位输出

always@(posedgeCPornegedgenCR)

if(~nCR){CntH,CntL}<

=8'

h00;

//异步清零

elseif(~EN1||~EN2){CntH,CntL}〈={CntH,CntL};

//暂停计数

elseif((CntH)>

2||(CntL>

9)||(CntH)==2&

&(CntL)〉=3)

{CntH,CntL}<

=8’h00;

//对小时计数器出错时的处理

elseif((CntH)==2&&

(CntL)〈3)//进行20~23计数

beginCntH〈=CntH;

CntL〈=CntL+1’b1;

elseif(CntL==9)//小时十位的计数

beginCntH<

=CntH+1’b1;

CntL<

=4’b0000;

else

beginCntH〈=CntH;

=CntL+1'

7、模60计数器

modulecounter60(nCLR,Clk,EN,CntH,CntL);

inputnCLR,Clk,EN;

0]CntH,CntL;

always@(posedgeClkornegedgenCLR)

if(~nCLR)

{CntH,CntL}<

//异步清零

elseif(~EN)

{CntH,CntL}<

={CntH,CntL};

//暂停信号

elseif(((CntH>

5)||(CntL>

9))||((CntH==5)&&

(CntL==9)))

{CntH,CntL}〈=8’h00;

//异常处理

elseif(CntL==9)

beginCntH〈=CntH+1'

CntL〈=0;

end//十位计数

=CntH;

CntL〈=CntL+1'

end//个位计数

8、数码管显示

moduleSEG7_LUT(oSEG,iDIG);

input[3:

0]iDIG;

//二进制输入

outputreg[6:

0]oSEG;

//7段码输出

always@(iDIG)

case(iDIG)

4'

h0:

oSEG=7'

b000_0001;

h1:

b100_1111;

4’h2:

oSEG=7’b001_0010;

4’h3:

oSEG=7’b000_0110;

4’h4:

b100_1100;

h5:

b010_0100;

h6:

b010_0000;

h7:

b000_1111;

h8:

oSEG=7’b000_0000;

h9:

oSEG=7’b000_0100;

default:

oSEG=7'

b1111111;

endcase

七、各模块仿真

1、模10计数器

测试代码:

//Inputs

regnCR;

regEN;

regCP;

//Outputs

wire[3:

//InstantiatetheUnitUnderTest(UUT)

counter10uut(

Q(Q),

nCR(nCR),

EN(EN),

CP(CP)

);

parameterPERIOD=40;

//时钟信号周期设置为40ns

alwaysbegin

CP=1'

b0;

#(PERIOD/2)CP=1’b1;

#(PERIOD/2);

initialbegin

//InitializeInputs

nCR=0;

EN=1;

CP=1;

//Wait100nsforglobalresettofinish

#100;

nCR=1;

//Addstimulushere

2、模6计数器

//Inputs

regEN;

wire[3:

counter6uut(

.Q(Q),

.nCR(nCR),

EN(EN),

.CP(CP)

);

CP=1’b0;

#(PERIOD/2)CP=1'

nCR=0;

EN=1;

nCR=1;

3、模24计数器

regnCR;

wire[3:

0]CntH;

0]CntL;

counter24uut(

CntH(CntH),

CntL(CntL),

.EN(EN),

parameterPERIOD=40;

b0;

#(PERIOD/2)CP=1’b1;

CP=1;

#100;

4、模60计数器

regnCLR;

regClk;

0]CntL;

counter60uut(

nCLR(nCLR),

Clk(Clk),

CntL(CntL)

Clk=1'

#(PERIOD/2)Clk=1'

#(PERIOD/2);

nCLR=0;

Clk=1;

#100;

nCLR=1;

//Addstimulush

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

当前位置:首页 > 考试认证 > 司法考试

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

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