当前位置:文档之家› 数字钟实习报告

数字钟实习报告

数字电路课程设计题目: 利用CPLD 设计可调时数字钟学 院 电子信息工程学院 专 业 自动化 学 号 姓 名教 师 刘鑫2014年 6 月9 日利用CPLD 设计可调时数字钟装 订 线摘要本数字钟采用动态显示数字的方法,输入512Hz的时钟信号,驱动显示位选信号产生,位选信号以85Hz从0到6不断地扫描数码管。

输入2Hz信号通过2分频变成秒信号,秒信号驱动时钟计数模块计数,完成时钟计数的功能,在位选信号扫描到相应的数码管时,计数器将计数的结果显示在数码管上,由于视觉残留的关系,人眼会感觉到数字一直在显示,从而实现计时功能。

在手动调节时钟时,有三个按键,一个实现清零,一个作为分调整按键,最后一个作为时调整按键。

调整时间键在对应时或者分数码管后通过按压按键产生脉冲使数码管实现加一的运算,从而改变时间,将1Hz闪烁的小数点接在秒信号上即可。

关键词:CPLD 计数器分频器三选择器七段译码器装订线目录一总体设计方案 .................................... ..11.1设计要求 ........... . (1)1.2设计原理 (1)1.2.1电源电路 (1)1.2.2振荡电路与分频电路 (1)1.2.3显示电路................... .. (2)1.2.4JTAG下载接口 (2)1.2.5CPLD电路原理图 (3)二各模块说明 (4)2.1设计思路及步骤 (4)2.2总体框图 (4)2.3各模块说明 ..................................... . (4)2.3.1 7段译码器 (4)2.3.2 消抖模块 (5)2.3.3与门模块 (5)2.3.4数据选择器模块 (6)2.3.5 D触发器模块 (6)2.3.6非门模块 (7)2.3.7或门模块 (7)2.3.8十进制计数模块 (7)2.3.9位选模块 (8)2.3.10秒计数模块 (8)2.3.11六进制模块 (10)2.3.12分计数模块 (11)2.3.13分频器模块 (12)2.3.14顶层总模块 (13)2.4数字钟电路总图 (12)三课程总结 (16)3.1遇到的问题及其解决办法 (16)3.2 收获与体会 (16)参考文献 (16)一总体设计方案1.1设计要求1、以数字形式显示时、分、秒的时间;2、要求手动校时、校分;3、时与分显示之间的小数点常亮;4、分与秒显示之间的小数点以1Hz频率闪烁;5、各单元模块设计即可采用原理图方式也可以用Verilog程序进行设计。

1.2设计原理1.2.1 电源电路如图1.1示为实验所需的电源电路。

图1-1 电源电路图1.2.2 振荡电路与分频电路晶体振荡器给数字钟提供一个频率稳定准确的32768Hz的方波信号,可保证数字钟的走时准确及稳定.分频电路采用T触发器对其分频,每经过一个T触发器对其二分频,所以各点的分频倍数分别为:QD: 24 QE: 25 QF: 26 QG: 27 QH: 28 QI: 292 QJ: 210 QL: 212 QM: 213 QN: 214;此处采用的是32768Hz的晶振,故分频之后QF:512Hz、QI:64Hz、QN:2Hz。

图1-2 振荡电路与分频电路图1.2.3 显示电路计数器实现了对时间的累计以8421BCD码形式输出,选用显示译码电路将计数器的输出数码转换为数码显示器件所需要的输出逻辑和一定的电流.图1-3 显示电路图数码管是共阴数码显示管,当其控制端为“0”时,数码显示管显示。

显示模块输入时钟频率为512Hz,显示刷新频率约为85Hz。

如图1.3示。

1.2.4 JTAG接口电路图1-4 JTAG接口电路图1.2.5 CPLD电路原理图此原理图1.4的MODE和ADD分别控制校正位和其校正位进行加一校正。

MODE共有七个状态分别对应六个数码管的校正和正常计数。

图1-5 CPLD电路图二各模块说明2.1设计思路及步骤1、按原理图和元件插件图完成电路的焊接;2、拟定数字钟的组成框图,划分模块;3、编写各模块程序;4、下载程序。

2.2总体框图图2-1 总体程序框图2.3各模块说明2.3.1 7段译码器模块module yima(datain,dataout);input[3:0]datain;output[6:0]dataout;reg[6:0]dataout;always@(datain)begincasex(datain)4'b0000:dataout<=7'b0111111;4'b0001:dataout<=7'b0000110;4'b0010:dataout<=7'b1011011;4'b0011:dataout<=7'b1001111;4'b0100:dataout<=7'b1100110;4'b0101:dataout<=7'b1101101;4'b0110:dataout<=7'b1111101;4'b0111:dataout<=7'b0000111;4'b1000:dataout<=7'b1111111;4'b1001:dataout<=7'b1101111;default:dataout<=7'bx;endcaseendendmodule2.3.2消抖模块module xiaodou (clk,key_in,key_out);input clk,key_in;output key_out;Dchufa u1(.datain(key_in),.clk(clk),.dataout(c0)); Dchufa u4(.datain(c2),.clk(clk),.dataout(key_out)); yumen u3(.datain1(c1),.datain2(key_in),.dataout(c2)); feimen u2(.datain(c0),.dataout(c1));endmodule2.3.3与门模块module yumen(datain1,datain2,dataout);input datain1,datain2;output dataout;reg dataout;always@(datain1,datain2)beginif(datain1&&datain2)dataout=1;elsedataout=0;endendmodule2.3.4数据选择器模块module sel61(datain1,datain2,datain3,datain4,datain5,datain6,sel,dataout); input[3:0] datain1,datain3,datain5;input[2:0] datain2,datain4,sel;input[1:0] datain6;output[3:0] dataout;reg[3:0] dataout;always@(datain1,datain2,datain3,datain4,datain5,datain6,sel)begincase(sel)3'b000:dataout=datain1;3'b001:dataout=datain2;3'b010:dataout=datain3;3'b011:dataout=datain4;3'b100:dataout=datain5;3'b101:dataout=datain6;default:dataout=dataout;endcaseendendmodule2.3.5D触发器模块module Dchufa(datain,clk,dataout);input datain,clk;output dataout;reg dataout;always@(posedge clk)begindataout<=datain;endendmodule2.3.6非门模块module feimen(datain,dataout);input datain;output dataout;reg dataout;always@(datain)begindataout=~datain;endendmodule2.3.7或门模块module huo(datain1,datain2,dataout); input datain1,datain2;output dataout;assign dataout=datain1||datain2; endmodule2.3.8十进制计数模块module shijinzhi(clk,res,HD,LD); input clk,res;output [1:0] HD;output [3:0] LD;reg[1:0] HD;reg[3:0] LD;always @(posedge clk or posedge res) beginif (res)beginLD<=4'b0 ;HD<=2'b0 ;endelse if((LD==4'b1001)&&(HD==2'b0)) beginLD<=4'b0 ;HD<=2'b1 ;endelse if((LD==4'b1001)&&(HD==2'b01)) beginLD<=4'b0;HD<=2'b10;endelse if((LD==4'b0011)&&(HD==2'b10)) beginLD<=4'b0;HD<=2'b0;endelseLD<=LD + 1;endendmodule2.3.9位选模块module wela(datain,dataout);input[2:0]datain;output[5:0]dataout;reg[5:0]dataout;always@(datain)begincase(datain)3'b000:dataout=6'b111110;3'b001:dataout=6'b111101;3'b010:dataout=6'b111011;3'b011:dataout=6'b110111;3'b100:dataout=6'b101111;3'b101:dataout=6'b011111;default:dataout=dataout;endcaseendendmodule2.3.10秒计数模块module seccount(clk,res,cout,g,s); input clk,res;output[3:0] g;output [2:0] s;output cout;reg[3:0]g;reg[2:0]s;reg cout;always@(posedge clk or posedge res) beginif (res)beging<=4'b0 ;s<=2'b0 ;cout<=0;endelse if((g==4'b1001)&&(s==3'd5)) beging<=4'b0 ;s<=3'b0 ;cout<=1;endelse if((g==4'b1001)&&(s==3'b0)) beging<=4'b0 ;s<=3'b1 ;cout<=0;endelse if((g==4'b1001)&&(s==3'b1)) beging<=4'b0 ;s<=3'd2 ;cout<=0;endelse if((g==4'b1001)&&(s==3'd2)) beging<=4'b0 ;s<=3'd3 ;cout<=0;endelse if((g==4'b1001)&&(s==3'd3)) beging<=4'b0 ;s<=3'd4 ;cout<=0;endelse if((g==4'b1001)&&(s==3'd4)) beging<=4'b0 ;s<=3'd5 ;cout<=0;endelse if((g==4'b0)&&(s==3'd0)) begincout<=0;g=g+1;endelseg=g+1;endendmodule2.3.11六进制模块module liujinzhi(clk,dataout); input clk;output[2:0]dataout;reg[2:0]dataout;always@(posedge clk)beginif(dataout==5)dataout<=0;elsedataout<=dataout+1;endendmodule2.3.13分计数模块module mincount(clk,res,cout,g,s); input clk,res;output[3:0] g;output [2:0] s;output cout;reg[3:0]g;reg[2:0]s;reg cout;always@(posedge clk or posedge res) beginif (res)beging<=4'b0 ;s<=2'b0 ;cout<=0;endelse if((g==4'b1001)&&(s==3'd5)) beging<=4'b0 ;s<=3'b0 ;cout<=1;endelse if((g==4'b1001)&&(s==3'b0)) beging<=4'b0 ;s<=3'b1 ;cout<=0;endelse if((g==4'b1001)&&(s==3'b1)) beging<=4'b0 ;s<=3'd2 ;cout<=0;endelse if((g==4'b1001)&&(s==3'd2)) beging<=4'b0 ;s<=3'd3 ;cout<=0;endelse if((g==4'b1001)&&(s==3'd3)) beging<=4'b0 ;s<=3'd4 ;cout<=0;endelse if((g==4'b1001)&&(s==3'd4)) beging<=4'b0 ;s<=3'd5 ;cout<=0;endelse if((g==4'b0)&&(s==3'd0)) begincout<=0;g=g+1;endelseg=g+1;endendmodule2.3.14分频器模块module fenpin(clk1,clk2);input clk1;output clk2;reg clk2;always@(posedge clk1)beginclk2=~clk2;endendmodule2.3.15顶层总模块module shizhong(key1,key2,key3,clk1,clk2,clk3,dataout1,dataout2,dataout3);input key1,key2,key3,clk1,clk2,clk3;output[6:0]dataout1;output[5:0]dataout2;output dataout3;wire c0,c1,c3,c5,c6,c7,c8;wire [1:0] c14;wire [2:0]c12,c4,c10;wire [3:0]c11,c15,c9,c13;xiaodou u1(.clk(clk1),.key_in(key2),.key_out(c0));xiaodou u2(.clk(clk1),.key_in(key3),.key_out(c1));fenpin u3(.clk1(clk2),.clk2(c3));liujinzhi u4(.clk(clk3),.dataout(c4));huo u5(.datain1(c0),.datain2(c5),.dataout(c6));huo u6(.datain1(c1),.datain2(c7),.dataout(c8));seccount u7(.clk(c3),.res(key1),.cout(c7),.g(c9),.s(c10));mincount u8(.clk(c8),.res(key1),.cout(c5),.g(c11),.s(c12));shijinzhi u9(.clk(c6),.res(key1),.HD(c14),.LD(c13));sel61u10(.datain1(c9),.datain2(c10),.datain3(c11),.datain4(c12),.datain5(c13),.datain6(c14),.sel(c4),.d ataout(c15));wela u11(.datain(c4),.dataout(dataout2));yima u12(.datain(c15),.dataout(dataout1));huo5 u13(.datain1(c4),.datain2(c3),.dataout(dataout3));endmodule2.4数字钟电路总图数码管显示控制电路工作原理:以512Hz的频率作为输入端时钟脉冲,用六进制计数器为三八译码器提供六个不同状态,分别控制六个数码管的状态,每个数码管的显示频率约为85Hz,可以充分的利用人眼的视觉残留现象实现数字的常显,观测到的结果为:数码管常亮。

相关主题