ISE实现多功能数字钟设计Word文档下载推荐.docx
- 文档编号:21294414
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:19
- 大小:186.16KB
ISE实现多功能数字钟设计Word文档下载推荐.docx
《ISE实现多功能数字钟设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《ISE实现多功能数字钟设计Word文档下载推荐.docx(19页珍藏版)》请在冰豆网上搜索。
0]sum,counter;
supply1Vdd;
wireCP_1Hz;
//===========分频=============
Divider50MHzU0(.CLK_50M(CLK_50),
.nCLR(nCR),
.CLK_1HzOut(CP_1Hz));
//用以时钟计数的CP
defparamU0.N=25,
U0.CLK_Freq=50000000,
U0.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:
h9))||(TMinute[3:
h9)&
//24小时制
counter24H0(Hour_24[7:
4],Hour_24[3:
0],nCR,ENH,EN,CP_1Hz);
assignENH=Adj_Hour?
((TMinute==8'
h59)&
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:
//--产生分使能信号--
assignCMin_EN=(!
EN&
Adj_Clock&
Adj_Min);
//----------时钟时---------
Counter24CCCH(nCR,CP_1Hz,CHour_EN,CHour[7:
4],CHour[3:
//--产生时使能信号--
assignCHour_EN=(!
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;
=TMinute;
end
always@(posedgeCP_200Hz)
begin
if(Change==1)//数码管进行时分显示
begin
case(HEX)
4'
b1110:
beginHEX<
=4'
b0111;
bcd<
=Display_Hour[7:
4];
end//第一根数码管显示小时十位
b0111:
b1011;
=Display_Hour[3:
0];
end//第二根显示小时个位
b1011:
b1101;
=Minute[7:
end//第三根显示分钟十位
b1101:
b1110;
=Minute[3:
end//第四根显示分钟个位
default:
=0111;
=Display_Hour[7:
endcase
end
else//数码管进行秒显示,change为低电平时显示秒
=TSecond[7:
end//第三根显示秒十位
=TSecond[3:
end//第四根显示秒个位
=1101;
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
always@(posedgeCP_1Hz)
if(Minute[7:
0]==8'
h00)
counter[7:
0]<
=counter[7:
0]+1'
b1;
else
=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<
Count_DIV<
elsebegin
if(Count_DIV<
(CLK_Freq/(2*OUT_Freq)-1))//计数器模
Count_DIV<
=Count_DIV+1'
//分频器计数加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<
elseQ<
=Q+1'
3、秒模6计数器
moduleScounter6(Q,nCR,EN,CP);
b0101)Q<
4、分模10计数器
moduleMcounter10(Q,nCR,EN1,EN2,CP);
inputCP,nCR,EN1,EN2;
elseif(~EN1||!
EN2)Q<
5、分模6计数器
moduleMcounter6(Q,nCR,EN1,EN2,CP);
elseif(~EN1||~EN2)Q<
6、模24计数器
modulecounter24(CntH,CntL,nCR,EN1,EN2,CP);
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}<
//对小时计数器出错时的处理
elseif((CntH)==2&
(CntL)<
3)//进行20~23计数
beginCntH<
=CntH;
CntL<
=CntL+1'
elseif(CntL==9)//小时十位的计数
=CntH+1'
else
=CntH;
7、模60计数器
modulecounter60(nCLR,Clk,EN,CntH,CntL);
inputnCLR,Clk,EN;
always@(posedgeClkornegedgenCLR)
if(~nCLR)
{CntH,CntL}<
//异步清零
elseif(~EN)
//暂停信号
elseif(((CntH>
5)||(CntL>
9))||((CntH==5)&
(CntL==9)))
//异常处理
elseif(CntL==9)
=CntH+1'
CntL<
end//十位计数
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;
h2:
b001_0010;
h3:
b000_0110;
h4:
b100_1100;
h5:
b010_0100;
h6:
b010_0000;
h7:
b000_1111;
h8:
b000_0000;
h9:
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'
#(PERIOD/2);
initialbegin
//InitializeInputs
nCR=0;
EN=1;
CP=1;
//Wait100nsforglobalresettofinish
#100;
nCR=1;
//Addstimulushere
2、模6计数器
//Inputs
counter6uut(
.CP(CP)
nCR=1;
3、模24计数器
0]CntH;
0]CntL;
counter24uut(
.CntH(CntH),
.CntL(CntL),
4、模60计数器
regnCLR;
regClk;
counter60uut(
.nCLR(nCLR),
.Clk(Clk),
.CntL(CntL)
Clk=1'
#(PERIOD/2)Clk=1'
nCLR=0;
Clk=1;
nCLR=1;
//Addstimul
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ISE 实现 多功能 数字 设计