《数字电路课程设计实习报告.doc》由会员分享,可在线阅读,更多相关《数字电路课程设计实习报告.doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、装订线 数字电路课程设计 题目: 利用CPLD设计可调时数字钟 学 院 专 业 学 号 姓 名 教 师201利用CPLD设计可调时数字钟摘 要装订线本数字钟采用动态显示数字的方法,输入512Hz的时钟信号,驱动显示位选信号产生,位选信号以85Hz从0到6不断地扫描数码管。输入2Hz信号通过2分频变成秒信号,秒信号驱动时钟计数模块计数,完成时钟计数的功能,在位选信号扫描到相应的数码管时,计数器将计数的结果显示在数码管上,由于视觉残留的关系,人眼会感觉到数字一直在显示,从而实现计时功能。在手动调节时钟时,有三个按键,一个实现清零,一个作为分调整按键,最后一个作为时调整按键。调整时间键在对应时或者分
2、数码管后通过按压按键产生脉冲使数码管实现加一的运算,从而改变时间,将1Hz闪烁的小数点接在秒信号上即可。关键词:CPLD 计数器 分频器 三选择器 七段译码器目 录 一、总体设计方案 .11.1设计要求 .11.2设计原理 .1 1.2.1电源电路 .11.2.2振荡电路与分频电路 .11.2.3显示电路 .21.2.4JTAG下载接口 .21.2.5CPLD电路原理图 .3 二、各模块说明 .42.1设计思路及步骤 .42.2总体框图 .42.3各模块说明 .42.3.1 7段译码器 .42.3.2 消抖模块 .52.3.3与门模块 .52.3.4数据选择器模块.62.3.5 D触发器模块.
3、62.3.6非门模块.72.3.7或门模块.72.3.8十进制计数模块.72.3.9位选模块.82.3.10秒计数模块.82.3.11六进制模块.102.3.12分计数模块.112.3.13分频器模块.122.3.14顶层总模块.132.4数字钟电路总图 .12 三、课程总结 .163.1遇到的问题及其解决办法 .163.2收获与体会 .16参考文献 .16一 总体设计方案1.1设计要求1、以数字形式显示时、分、秒的时间;2、要求手动校时、校分;3、时与分显示之间的小数点常亮;4、分与秒显示之间的小数点以1Hz频率闪烁;5、各单元模块设计即可采用原理图方式也可以用Verilog程序进行设计。
4、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 显示电路计数器实
5、现了对时间的累计以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、拟
6、定数字钟的组成框图,划分模块;3、编写各模块程序;4、下载程序。2.2总体框图图2-1 总体程序框图2.3各模块说明2.3.1 7段译码器模块module yima(datain,dataout);input3:0datain;output6:0dataout;reg6:0dataout;always(datain)begincasex(datain)4b0000:dataout=7b0111111;4b0001:dataout=7b0000110;4b0010:dataout=7b1011011;4b0011:dataout=7b1001111;4b0100:dataout=7b110011
7、0;4b0101:dataout=7b1101101;4b0110:dataout=7b1111101;4b0111:dataout=7b0000111;4b1000:dataout=7b1111111;4b1001:dataout=7b1101111;default:dataout=7bx;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 u
8、4(.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;elsedatao
9、ut=0;endendmodule2.3.4数据选择器模块module sel61(datain1,datain2,datain3,datain4,datain5,datain6,sel,dataout);input3:0 datain1,datain3,datain5;input2:0 datain2,datain4,sel;input1:0 datain6;output3:0 dataout;reg3:0 dataout;always(datain1,datain2,datain3,datain4,datain5,datain6,sel)begincase(sel)3b000:dataou
10、t=datain1;3b001:dataout=datain2;3b010:dataout=datain3;3b011:dataout=datain4;3b100:dataout=datain5;3b101: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;endendmod
11、ule2.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
12、clk,res;output 1:0 HD;output 3:0 LD;reg1:0 HD;reg3:0 LD;always (posedge clk or posedge res)beginif (res)begin LD=4b0 ;HD=2b0 ;end else if(LD=4b1001)&(HD=2b0)beginLD=4b0 ;HD=2b1 ;endelse if(LD=4b1001)&(HD=2b01)beginLD=4b0;HD=2b10;endelse if(LD=4b0011)&(HD=2b10)beginLD=4b0;HD=2b0;endelse LD=LD + 1;end
13、endmodule2.3.9位选模块module wela(datain,dataout);input2:0datain;output5:0dataout;reg5:0dataout;always(datain)begincase(datain)3b000:dataout=6b111110;3b001:dataout=6b111101;3b010:dataout=6b111011;3b011:dataout=6b110111;3b100:dataout=6b101111;3b101:dataout=6b011111;default:dataout=dataout;endcaseendendmo
14、dule2.3.10秒计数模块module seccount(clk,res,cout,g,s);input clk,res;output3:0 g;output 2:0 s;output cout;reg3:0g;reg2:0s;reg cout;always(posedge clk or posedge res)beginif (res)begin g=4b0 ;s=2b0 ;cout=0;end else if(g=4b1001)&(s=3d5)beging=4b0 ;s=3b0 ;cout=1;endelse if(g=4b1001)&(s=3b0) beging=4b0 ;s=3b1
15、 ;cout=0;endelse if(g=4b1001)&(s=3b1) beging=4b0 ;s=3d2 ;cout=0;endelse if(g=4b1001)&(s=3d2) beging=4b0 ;s=3d3 ;cout=0;endelse if(g=4b1001)&(s=3d3) beging=4b0 ;s=3d4 ;cout=0;endelse if(g=4b1001)&(s=3d4) beging=4b0 ;s=3d5 ;cout=0;endelse if(g=4b0)&(s=3d0)begincout=0;g=g+1;endelseg=g+1;endendmodule2.3
16、.11六进制模块module liujinzhi(clk,dataout);input clk;output2:0dataout;reg2:0dataout;always(posedge clk)beginif(dataout=5)dataout=0;elsedataout=dataout+1;endendmodule2.3.13分计数模块module mincount(clk,res,cout,g,s);input clk,res;output3:0 g;output 2:0 s;output cout;reg3:0g;reg2:0s;reg cout;always(posedge clk
17、or posedge res)beginif (res)begin g=4b0 ;s=2b0 ;cout=0;end else if(g=4b1001)&(s=3d5)beging=4b0 ;s=3b0 ;cout=1;endelse if(g=4b1001)&(s=3b0) beging=4b0 ;s=3b1 ;cout=0;endelse if(g=4b1001)&(s=3b1) beging=4b0 ;s=3d2 ;cout=0;endelse if(g=4b1001)&(s=3d2) beging=4b0 ;s=3d3 ;cout=0;endelse if(g=4b1001)&(s=3
18、d3) beging=4b0 ;s=3d4 ;cout=0;endelse if(g=4b1001)&(s=3d4) beging=4b0 ;s=3d5 ;cout=0;endelse if(g=4b0)&(s=3d0)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,
19、key2,key3,clk1,clk2,clk3,dataout1,dataout2,dataout3);input key1,key2,key3,clk1,clk2,clk3;output6:0dataout1;output5:0dataout2;output dataout3;wire c0,c1,c3,c5,c6,c7,c8;wire 1:0 c14;wire 2:0c12,c4,c10;wire 3:0c11,c15,c9,c13;xiaodou u1(.clk(clk1),.key_in(key2),.key_out(c0);xiaodou u2(.clk(clk1),.key_in
20、(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);shij
21、inzhi u9(.clk(c6),.res(key1),.HD(c14),.LD(c13);sel61 u10(.datain1(c9),.datain2(c10),.datain3(c11),.datain4(c12),.datain5(c13),.datain6(c14),.sel(c4),.dataout(c15);wela u11(.datain(c4),.dataout(dataout2);yima u12(.datain(c15),.dataout(dataout1);huo5 u13(.datain1(c4),.datain2(c3),.dataout(dataout3);en
22、dmodule2.4数字钟电路总图数码管显示控制电路工作原理:以512Hz的频率作为输入端时钟脉冲,用六进制计数器为三八译码器提供六个不同状态,分别控制六个数码管的状态,每个数码管的显示频率约为85Hz,可以充分的利用人眼的视觉残留现象实现数字的常显,观测到的结果为:数码管常亮。此电路中小数点的显示是用一个或门,通过1Hz频率来控制第三个数码管的小数点显示,再通过一个与非门来控制第五个数码管的小数点显示。第五个数码管的小数点在整个脉冲阶段显示,而第三个数码管的小数点只有在低电平时显示,故观察到结果是第五个数码管常亮,而第三个数码管的小数点以1Hz的频率闪烁。在手动调节时钟时,有三个按键,一个实
23、现复位清零,一个作为调整时的按键,最后一个作为调整分的按键。三 课程总结3.1遇到的问题及其解决办法1.焊接之前,要认真阅读数字钟的相关资料,了解各个元器件的属性和掌握焊接板子的一些基本操作,便于操作时得心应手,也要仔细核对元器件是否正确,要保证使用正确的元件,以防焊接错误再去改到;2.焊接的时候要注意元器件的引脚分配和属性值,另外,还有注意不要虚焊,如果不清楚是否虚焊了,需要用万用表进行测试;3.程序方面,由于EPM3 064 ALC44 -10芯片只有64个宏单元,编写程序时有可能导致所需的宏单元数超过提供的数量,经过分析在处理小数点的时候,直接把其作为与其它段显示一起定义成八位变量,这样
24、就会增加芯片内存消耗,但实际要求中只用到两个小数点,所以把这个小数点单独进行操作处理,大大减少了宏单元的利用,这样才能编译成功。3.2收获与体会通过这次做数字钟,首先,就是加深了对Verilog语言的模块化编程的认识,其次,是对编程中元件例化的方法的应用,各个程序相互独立的实现有了更深的了解,最后,通过顶层模块将所有子模块调用进来,这样使整个工程十分清晰,并且容易进行测试修改;另一方面,在编程的过程中会出现很多问题,通过上网搜索、和同学一起探讨,发现问题并解决问题,我觉得这个过程才能学到很多超出知识本身的东西,对知识的学习和掌握需要理论与实践相结合,应该是学习致用的一个过程。最重要的是要静下心来有耐心和恒心才可以把事做成,这是至关重要的。参考文献1数字电路综合实习讲稿河北大学电子信息工程学院编IBSN 978-7-8114-309-3 夏宇闻Verilog 数字系统设计教程(第2版)北京航空航天大学出版社 2008.