多功能数字钟设计实验报告-Xilinx-EDA-Basys2-华中科技大学-HUST文档格式.docx
- 文档编号:13081014
- 上传时间:2022-10-04
- 格式:DOCX
- 页数:14
- 大小:158.90KB
多功能数字钟设计实验报告-Xilinx-EDA-Basys2-华中科技大学-HUST文档格式.docx
《多功能数字钟设计实验报告-Xilinx-EDA-Basys2-华中科技大学-HUST文档格式.docx》由会员分享,可在线阅读,更多相关《多功能数字钟设计实验报告-Xilinx-EDA-Basys2-华中科技大学-HUST文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
(1分)
小时为12/24进制可切换(1分)
报正点数(几点钟LED闪烁几下)(1分)
三、实验条件
Xilinx工程环境,win7操作系统,BASYS2实验板。
四、实验设计
1.设计分析
数字钟大体上由2个60进制计数器,1个24进制计数器构成,中间有数据选择器进行连接。
为实现提高功能,还需12进制计数和整点判断模块。
下图为数字钟层次结构图。
2.实验原理
振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,再经分频器输出标准秒脉冲。
秒计数器计满60后向分计数器进位,分计数器满60后向小时计数器进位,小时计数器按24或12进制规律计数。
计数器的输送译码显示电路,即可显示出数码(即时间)。
计时出现误差时可以用校时电路进行校时和校分。
小时显示(12\24)切换电路、仿电台报时、定时闹钟为扩展电路,只有在计时主体电路正常运行的情况下才能进行功能扩展。
本实验采用VerilogHDL进行描述,然后用FPGA/CPLD实现,使用内部50MHz晶振作为时钟电路。
3.逻辑设计
实现上述功能的VerilogHDL程序如下。
实现基本功能的程序分为两层次四个模块,底层有3个模块构成,即6进制计数器模块,10进制计数器模块和24进制计数器模块,顶层有一个模块,他调用底层的3个模块完成数字中的计时功能。
moduletimeclock(Hour,Minute,Second,CP,nCR,EN,Adj_Min,Adj_Hour,number,Light,clk,temp,change,AMTM,dingdong);
output[7:
0]Hour,Minute,Second;
output[3:
0]Light,temp;
output[6:
0]number;
outputclk,AMTM,dingdong;
//clk为分频之后的时钟信号,频率为1Hz,AMTM为24进制转换12进制时表明上下午的变量,dingdong为整点报时时的闪烁信号。
inputCP;
//输入的时钟信号,需分频后才能正常使用。
inputnCR;
//清零
inputEN,change;
//EN为使能信号,change为12/24进制转换开关。
inputAdj_Min;
//校分控制
inputAdj_Hour;
//校时控制
wire[7:
regclk;
reg[29:
0]count,count1;
//分频需要的计数器
reg[1:
0]scan;
//扫描时需要的计数器
reg[3:
//4Bit变量Light代表四个数码管,temp表示数码管需要显示的数字
reg[6:
//number代表7个发光二极管
regclk1;
//为分频后的扫描频率
supply1Vdd;
wireMinL_EN,MinH_EN,Hour_EN;
//中间变量
//Hour,Minute,Secondcounter//
//60进制秒计数器
counter10U1(Second[3:
0],nCR,EN,clk);
//个位
counter6U2(Second[7:
4],nCR,(Second[3:
0]==4'
h9),clk);
//十位
//产生分钟计数器使能信号。
Adj_Min=1,校正分钟;
Adj_Min=0,分钟正常计时
assignMinL_EN=Adj_Min?
Vdd:
(Second==8'
h59);
assignMinH_EN=(Adj_Min&
&
(Minute[3:
h9))||((Minute[3:
h9)&
h59));
//60进制分钟计数器
counter10U3(Minute[3:
0],nCR,MinL_EN,clk);
counter6U4(Minute[7:
4],nCR,MinH_EN,clk);
//产生小时计数器使能信号。
Adj_Hour=1,校正小时;
Adj_Hour=0,小时正常计时
assignHour_EN=Adj_Hour?
((Minute==8'
h59)&
//24进制和12进制可切换的小时计数器
counter24U5(Hour[7:
4],Hour[3:
0],nCR,Hour_EN,clk,change,AMTM);
//整点报时模块
dingdongU6(clk,nCR,Minute[7:
4],Minute[3:
0],Hour[7:
0],dingdong);
//分频
always@(posedgeCP)
begin
if(~nCR)count<
=30'
d00;
elseif(count==30'
d25000000)begincount<
clk=~clk;
end
elsecount<
=count+1'
b1;
end //产生1Hz的频率
always@(posedgeCP)
if(~nCR)count1<
elseif(count1==30'
d100000)begincount1<
clk1=~clk1;
elsecount1<
=count1+1'
end //产生扫描用的频率
//扫描计数器
always@(posedgeclk1)
if(~nCR)scan<
=2'
b00;
elseif(scan==2'
b11)scan<
elsescan<
=scan+1'
end
//扫描
always@(scan[1:
0])
begin
case(scan[1:
0])
2'
b00:
Light<
=4'
b0111;
b01:
b1011;
b10:
b1101;
b11:
b1110;
endcase
end
//显示数字
always@(scan[1:
0])
begin
temp<
=Hour[7:
4];
=Hour[3:
0];
=Minute[7:
=Minute[3:
always@(temp)
begin
case(temp)
4'
d0:
number<
=7'
b0000001;
//0
d1:
b1001111;
//1
d2:
b0010010;
//2
d3:
b0000110;
//3
d4:
b1001100;
//4
d5:
b0100100;
//5
d6:
b0100000;
//6
d7:
b0001111;
//7
d8:
b0000000;
//8
d9:
b0000100;
//9
default:
endcase
end
endmodule
moduledingdong(clk,ncr,minuteh,minutel,hourh,hourl,dingdong);
inputncr;
inputclk;
input[3:
0]minuteh,minutel;
0]hourh,hourl;
outputregdingdong;
integeri=0;
regen;
always@(posedgeclkornegedgencr)
if(~ncr)
dingdong<
=0;
elseif((minuteh==4'
d5)&
(minutel==4'
d9))
i=0;
en<
=1;
elseif((i<
(hourh*20+hourl*2))&
(en))
=~dingdong;
i=i+1;
elseif(i==(hourh*20+hourl*2))
else
endmodule
modulecounter10(Q,nCR,EN,CP);
output[3:
0]Q;
inputEN;
always@(posedgeCPornegedgenCR)
begin
if(~nCR)Q<
b0000;
//nCR=0,计数器被异步清零
elseif(~EN)Q<
=Q;
//EN=0,暂停计数
elseif(Q==4'
b1001)Q<
elseQ<
=Q+1'
//计数器增加1
end
modulecounter6(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多功能 数字 设计 实验 报告 Xilinx EDA Basys2 华中科技大学 HUST
链接地址:https://www.bdocx.com/doc/13081014.html