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

上传人:b****1 文档编号:5046406 上传时间:2023-05-04 格式:DOCX 页数:22 大小:187.01KB
下载 相关 举报
ISE实现多功能数字钟设计Word格式文档下载.docx_第1页
第1页 / 共22页
ISE实现多功能数字钟设计Word格式文档下载.docx_第2页
第2页 / 共22页
ISE实现多功能数字钟设计Word格式文档下载.docx_第3页
第3页 / 共22页
ISE实现多功能数字钟设计Word格式文档下载.docx_第4页
第4页 / 共22页
ISE实现多功能数字钟设计Word格式文档下载.docx_第5页
第5页 / 共22页
ISE实现多功能数字钟设计Word格式文档下载.docx_第6页
第6页 / 共22页
ISE实现多功能数字钟设计Word格式文档下载.docx_第7页
第7页 / 共22页
ISE实现多功能数字钟设计Word格式文档下载.docx_第8页
第8页 / 共22页
ISE实现多功能数字钟设计Word格式文档下载.docx_第9页
第9页 / 共22页
ISE实现多功能数字钟设计Word格式文档下载.docx_第10页
第10页 / 共22页
ISE实现多功能数字钟设计Word格式文档下载.docx_第11页
第11页 / 共22页
ISE实现多功能数字钟设计Word格式文档下载.docx_第12页
第12页 / 共22页
ISE实现多功能数字钟设计Word格式文档下载.docx_第13页
第13页 / 共22页
ISE实现多功能数字钟设计Word格式文档下载.docx_第14页
第14页 / 共22页
ISE实现多功能数字钟设计Word格式文档下载.docx_第15页
第15页 / 共22页
ISE实现多功能数字钟设计Word格式文档下载.docx_第16页
第16页 / 共22页
ISE实现多功能数字钟设计Word格式文档下载.docx_第17页
第17页 / 共22页
ISE实现多功能数字钟设计Word格式文档下载.docx_第18页
第18页 / 共22页
ISE实现多功能数字钟设计Word格式文档下载.docx_第19页
第19页 / 共22页
ISE实现多功能数字钟设计Word格式文档下载.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

nCLR(nCR),

.CLK_1HzOut(CP_1Hz));

//用以时钟计数的CP

defparamU0。

N=25,

U0。

CLK_Freq=50000000,

OUT_Freq=1;

Divider50MHzU1(。

CLK_50M(CLK_50),

.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:

0]==4'

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:

0]);

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

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〈=0;

else

begin

if(~Alarm)Led_Alarm<

=0;

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;

=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:

b1011;

bcd〈=Display_Hour[3:

0];

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

b1011:

beginHEX<

=4'

b1101;

bcd〈=Minute[7:

4];

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

b1101:

b1110;

=Minute[3:

0];

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

default:

=0111;

bcd〈=Display_Hour[7:

4];

endcase

end

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

b1110:

b1101;

=TSecond[7:

end//第三根显示秒十位

beginHEX〈=4’b1110;

=TSecond[3:

end//第四根显示秒个位

default:

beginHEX〈=1101;

bcd〈=TSecond[7:

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

=0;

always@(posedgeCP_1Hz)

if(Minute[7:

0]==8’h00)

counter[7:

0]〈=counter[7:

0]+1’b1;

else

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’b1;

//分频器计数加1

elsebegin

//分频器输出清零

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'

//异步清零

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;

reg[3:

0]Q;

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

elseif(~EN)Q<

elseif(Q==4'

b0101)Q<

=4’b0000;

elseQ〈=Q+1'

b1;

4、分模10计数器

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

inputCP,nCR,EN1,EN2;

outputQ;

reg[3:

0]Q;

always@(posedgeCPornegedgenCR)

if(~nCR)Q<

elseif(~EN1||!

EN2)Q<

b1001)Q〈=4’b0000;

elseQ〈=Q+1’b1;

5、分模6计数器

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

inputCP,nCR,EN1,EN2;

reg[3:

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

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

elseif(Q==4’b0101)Q〈=4’b0000;

=Q+1’b1;

6、模24计数器

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

inputCP,nCR,EN1,EN2;

outputreg[3:

0]CntH,CntL;

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

always@(posedgeCPornegedgenCR)

if(~nCR){CntH,CntL}〈=8'

//异步清零

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

//暂停计数

elseif((CntH)〉2||(CntL〉9)||(CntH)==2&

(CntL)〉=3)

{CntH,CntL}〈=8'

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

elseif((CntH)==2&

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

beginCntH<

=CntH;

CntL〈=CntL+1’b1;

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

=CntH+1'

CntL〈=4’b0000;

else

beginCntH〈=CntH;

7、模60计数器

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

inputnCLR,Clk,EN;

outputreg[3:

0]CntH,CntL;

always@(posedgeClkornegedgenCLR)

if(~nCLR)

{CntH,CntL}〈=0;

//异步清零

elseif(~EN)

{CntH,CntL}<

={CntH,CntL};

//暂停信号

elseif(((CntH>

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

&(CntL==9)))

{CntH,CntL}〈=8'

//异常处理

elseif(CntL==9)

=CntH+1'

CntL〈=0;

end//十位计数

beginCntH〈=CntH;

CntL<

=CntL+1’b1;

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;

4’h1:

oSEG=7’b100_1111;

4’h2:

b001_0010;

4’h3:

b000_0110;

h4:

b100_1100;

h5:

oSEG=7’b010_0100;

h6:

b010_0000;

h7:

oSEG=7’b000_1111;

h8:

oSEG=7’b000_0000;

h9:

b000_0100;

default:

oSEG=7'

b1111111;

endcase

七、各模块仿真

1、模10计数器

测试代码:

//Inputs

regnCR;

regEN;

regCP;

//Outputs

wire[3:

0]Q;

//InstantiatetheUnitUnderTest(UUT)

counter10uut(

.Q(Q),

nCR(nCR),

.EN(EN),

.CP(CP)

);

parameterPERIOD=40;

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

alwaysbegin

CP=1’b0;

#(PERIOD/2)CP=1'

#(PERIOD/2);

initialbegin

//InitializeInputs

nCR=0;

EN=1;

CP=1;

//Wait100nsforglobalresettofinish

#100;

nCR=1;

//Addstimulushere

2、模6计数器

测试代码:

//Inputs

regnCR;

regEN;

regCP;

counter6uut(

Q(Q),

.nCR(nCR),

EN(EN),

CP(CP)

);

parameterPERIOD=40;

CP=1'

b0;

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

nCR=0;

#100;

nCR=1;

3、模24计数器

wire[3:

0]CntH;

0]CntL;

counter24uut(

CntH(CntH),

.CntL(CntL),

EN(EN),

#(PERIOD/2)CP=1'

#(PERIOD/2);

EN=1;

4、模60计数器

regnCLR;

regClk;

0]CntH;

0]CntL;

counter60uut(

.nCLR(nCLR),

Clk(Clk),

.EN(EN),

CntH(CntH),

.CntL(CntL)

Clk=1'

b0;

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

#(PERIOD/2);

nCLR=0;

Clk=1;

nCLR=1;

//Addstimulush

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

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2