资源描述:
《eda课程设计_数字钟》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、数字钟一、原理图:二、模块说明:该模块实现分频即将24M时钟源分频为1HZ信号。该分频器由D触发器和计数器构成,每个D触发器的输出信号频率为输入信号频率的一半从而实现分频,COUNTER为计数器,配合D触发器进行进一步分频最终达到合适的频率。对二分频器进行波形仿真为对COUNTER即87计数器仿真为即输入89个时钟脉冲后输出才为一。对COUNTER1即80计数器仿真为即输入80个时钟脉冲后输出为一。Second模块实现秒计数为六十进制计数模式,当计数达到59后如再来一个时钟脉冲则进位即分钟加一,秒位清零即为00。Minute模
2、块实现分计数也为六十进制计数模式,当计数达到59时再来一个脉冲则进位即时钟加一,分位清零即为00。Hour模块实现时计数为二十四进制计数模式,当计数达到23时再来一个脉冲则复位即为00。Link模块实现隔离即将分与秒,时与分隔开。分隔符表现形式为“-”,用了此模块后时钟显示更直观。Sel_clock模块实现扫描显示即每一瞬间输出的数据为秒的个位或十位,或者为分的个位或十位,或者时的个位或十位。因该试验增加了一些功能,所以该模块要做相应修改――增加为八位显示。此时连线时应注意各模块的个位十位接线和分隔符接线。Deled模块为字符
3、译码模块即将十六进制字符翻译为七段数码管相应段位亮灭从而实现字符译码。该模块也要作少许修改,如把h"f"=>1,0,0,0,1,1,1;改为了h"f"=>0,0,0,0,0,0,1;这样显示后就起到分隔的作用了。当然这也不是唯一的修改方法,关键是修改要和你的link模块相匹配。Alert为整点报时模块,呐叭发声为脉冲激发,不同频率的信号会得到不同音调的声音,如果不停的改变信号频率就会得到一串抑扬顿挫的声音。对second模块仿真为对minute模块进行仿真为:对hour模块进行仿真:对deled字符译码模块仿真该模块将字符转换
4、成数码管相应的段码以便数码管能显示为人们习惯的字符。三、管脚分配:四、AHDL源程序:1:counter,tdfSUBDESIGNcounter(CLK:INPUT;CLKOUT:OUTPUT;)VARIABLEcount1[3..0]:DFF;count2[3..0]:DFF;SS:DFF;BEGINcount1[].clk=clk;count2[].clk=clk;SS.CLK=CLK;SS=B"0";IFCOUNT1[]==B"0111"ANDCOUNT2[]==B"1000"thenSS=B"1";ENDIF;IFco
5、unt1[]==B"1001"THENcount1[]=B"0000";ELSEcount1[].d=count1[].q+1;ENDIF;IFcount1[]==B"1001"THENIFcount2[]==B"1000"THENcount2[]=B"0000";ELSEcount2[].d=count2[].q+1;ENDif;ELSEcount2[].d=count2[].q;ENDIF;clkout=ss;END;2:counter1.tdfSUBDESIGNcounter1(CLK:INPUT;CLKOUT:OUTP
6、UT;)VARIABLEcount1[3..0]:DFF;count2[3..0]:DFF;SS:DFF;BEGINcount1[].clk=clk;count2[].clk=clk;SS.CLK=CLK;SS=B"0";IFCOUNT1[]==B"1001"ANDCOUNT2[]==B"0111"thenSS=B"1";ENDIF;IFcount1[]==B"1001"THENcount1[]=B"0000";ELSEcount1[].d=count1[].q+1;ENDIF;IFcount1[]==B"1001"THENI
7、Fcount2[]==B"0111"THENcount2[]=B"0000";ELSEcount2[].d=count2[].q+1;ENDif;ELSEcount2[].d=count2[].q;ENDIF;clkout=ss;END;3:linkSUBDESIGNlink(--CLK,RESET:INPUT;G[3..0],H[3..0]:OUTPUT;)BEGING[3..0]=B"1111";H[3..0]=B"1111";END;4:Second.tdf%秒钟模块60进制%SUBDESIGNSecond(CLK,RE
8、SET:INPUT;A[3..0],B[3..0],CKMIN:OUTPUT;)VARIABLEcount1[3..0]:DFF;count2[3..0]:DFF;SS:DFF;BEGINcount1[].clk=clk;count1[].clrn=RESET;count2[