计算机与信息工程系《脉冲与数字电路》课程设计报告专业通信工程班级B090507学号B09050722姓名张亚威报告完成日期2011/06/24指导教师秦玉洁评语:成绩:批阅教师签名:批阅时间:1.任务和设计要求设计具有时、分、秒计数显示,以24小时循环计时的时钟电路,带有清零和校准功能;2.设计原理采用硬件描述语言Verilog进行编程,实现20MHZ晶振到1HZ的分频;采用verilog语言实现数字表功能实现的各个模块;通过各个模块的代码生成相应的模块原理图;再将各个模块生成的原理图进行叠加组成一个数字表系统;3.系统设计设计的数字表有6个输入,16个输出;6个输入中,有一个是时钟信号,开发板上的28号引脚输入的50MHZ的时钟信号;一个清零端,当数字表正常显示时,按下清零端可以实现数字钟整体电路图:4.各个模块设计基于EP1C6Q240C8的数字钟设计,有6个模块组成:Fdiv分频模块Control模式选择模块Tune校正模块Zoushi时间正常运行模块Saomiao数码管动态扫描模块;DecoderBCD译码模块;Fdiv模块:功能:实现20MHZ的时钟信号分成10KHZ的信号和1HZ的信号;输入:clk为20MHZ的时钟信号;输出:f10000HZ为10KH的时钟信号;F1HZ为1HZ的时钟信号;Fdiv模块代码:modulefdiv(clk,f10000Hz,f1Hz);outputf10000Hz,f1Hz;inputclk;regf10000Hz,f1Hz;integerCNT1=0,CNT2=0;always@(posedgeclk)beginif(CNT11999)beginCNT1=CNT1+1;f10000Hz=1'b0;endelsebeginCNT1=0;f10000Hz=1'b1;endendalways@(posedgef10000Hz)beginif(CNT29999)beginCNT2=CNT2+1;f1Hz=1'b0;endelsebeginCNT2=0;f1Hz=1'b1;endendendmodulefdiv模块波形仿真:由于实际的分频波形仿真中,由于要将20MHZ的分成1HZ的,需要将信号缩小20000000倍,因此,此处采用将20HZ的先分成10HZ,然后再将10HZ的分成1HZ的时钟信号;在仿真中这样整,在实际演示中再改下代码,实现真正的20MHZ到1HZ的分频;它们只是一个倍数关系而已;Control模块:功能:实现电子表的正常显示及时间校正模式的转换;输入:key模式修改键,每来一个高电平,mode加一次。如果mode的值为2,则mode被赋值为1;Reset复位键,如果reset为1,则mode被赋值为0;输出:mode用于输出到下一级模块,进行模式判断;Control模块源代码:modulecontrol(mode,key,reset);inputkey,reset;output[1:0]mode;reg[1:0]mode;always@(posedgekey)beginif(reset)beginmode=2'b00;endelsebeginmode=mode+2'b01;if(mode==2)beginmode=2'b00;endendendendmoduleControl模块波形仿真Tune模块功能:实现秒分时的校正;输入:Mode为模式选择,mode为0时是正常显示时间模式;mode为1时,是秒、分、时加一模式。Mode为2时,是时分秒减一模式;Ht为时调节输入;mt为分调节输入;St为秒调节输入;输出:Aa为秒的个位;Ba为秒的十位;Da为分钟的个位;Ea为分钟的十位;Ga为小时的个位;Ha为小时的十位;Tune调时模块源代码:moduletune(mode,ht,mt,st,aa,ba,da,ea,ga,ha);input[1:0]mode;inputht;inputmt;inputst;output[3:0]aa;output[2:0]ba;output[3:0]da;output[2:0]ea;output[3:0]ga;output[1:0]ha;reg[3:0]aa,da,ga;reg[2:0]ba,ea;reg[1:0]ha;always@(posedgest)beginif(mode==1)beginaa=aa+1;if(aa==9)beginba=ba+1;aa=0;endif(ba==5&&aa==9)ba=0;endelseif(mode==2)beginaa=aa-1;if(aa==0)beginba=ba-1;aa=9;endif(ba==0&&aa==0)ba=5;endendalways@(posedgemt)beginif(mode==1)beginda=da+1;if(da==9)beginea=ea+1;da=0;endif(ea==5&&da==9)ea=0;endelseif(mode==2)beginda=da-1;if(da==0)beginea=ea-1;da=9;endif(ea==0&&da==0)ea=5;endendalways@(posedgeht)beginif(mode==1)beginga=ga+1;if(ga==9)beginha=ha+1;ga=0;endif(ha==2&&ga==3)beginha=0;ga=0;endendelseif(mode==2)beginga=ga-1;if(ga==0)beginha=ha-1;ga=9;endif(ga==0&&ha==0)beginga=3;ha=2;endendendendmoduleTune调时模块仿真波形:Mode为0时,ht,mt,st均不起作用;Mode为1时,小时加到23,ht再来一个上升沿,小时变为0;Mode为1时,秒、分加到59,st、mt再来一个上升沿,秒、分变成0;Mode为2时,小时减到0,ht再来一个上升沿,小时变为23;Mode为2时,秒、分减到0,st、mt再来一个上升沿,秒、分变成59;Zoushi模块:功能:实现时间的正常显示及校正显示;正常显示,当秒加到59时,1HZ的脉冲信号CLK1再来一个上升沿,秒变为0,同时分加一;当正常显示时,复位端来一个上升沿的脉冲,显示变成输入端输入的数据;Mode变成模式1时,显示变成输入端输入的数据;Mode变成模式2时,显示变成输入端输入的数据;Saomiao模块:功能:实现数码管的动态扫描;输入:clk10K输入10KHZ的时钟信号作为数码管的动态扫描时钟信号;a[3..0]上一级输出的秒的个位;b[2..0]上一级输出的秒的十位;c[3..0]上一级输出的分秒之间的标志位;d[3..0]上一级输出的分的个位;e[2..0]上一级输出的分的十位;f[2..0]上一级输出的秒的时分之间的标志位;g[3..0]上一级输出的时的个位;h[2..0]上一级输出的时的个位;输出:zx[3..0]数码管将要显示的4位BCD码;Zw[7..0]八位数码管动态扫描输出;Saomiao数码管扫描模块源代码:modulesaomiao(a,b,c,d,e,f,g,h,f10000HZ,zx,zw);inputf10000HZ;input[3:0]a,d,g,c,f;input[2:0]b,e;input[1:0]h;output[3:0]zx;output[7:0]zw;reg[3:0]zx;reg[7:0]zw;reg[2:0]slip;always@(posedgef10000HZ)beginif(slip==100)slip=4'b000;elseslip=slip+1'b1;endalways@(slip)begincase(slip)4'd0:beginzw=8'b11111110;zx=a;end4'd1:beginzw=8'b11111101;zx=b;end4'd2:beginzw=8'b11111011;zx=c;end4'd3:beginzw=8'b11110111;zx=d;end4'd4:beginzw=8'b11101111;zx=e;end4'd5:beginzw=8'b11011111;zx=f;end4'd6:beginzw=8'b10111111;zx=g;end4'd7:beginzw=8'b01111111;zx=h;enddefault:zw=8'bx;endcaseendendmoduleSaomiao数码管扫描模块仿真波形:Zx显示的是上一级输出的4位BCD码,此处是以十进制的形式显示的;Decoder模块:功能:将上一级输出的4为BCD码转换成数码管能正常显示的数据;输入:zx[3..0]上一级输出的4位BCD码;输出:seg[6..0]数码管能正常显示的数据;Decoder译码模块源代码:moduledecoder(zx,seg);input[3:0]zx;output[6:0]seg;reg[6:0]seg;always@(zx)begincase(zx)4'b0000:seg=7'b0111111;4'b0001:seg=7'b0000110;4'b0010:seg=7'b1011011;4'b0011:seg=7'b1001111;4'b0100:seg=7'b1100110;4'b0101:seg=7'b1101101;4'b0110:seg=7'b1111101;4'b0111:seg=7'b0000111;4'b1000:seg=7'b1111111;4'b1001:seg=7'b1101111;4'b1010:seg=7'b1000000;default:seg=7'bx;endcaseendendmoduleDecoder译码模块仿真波形:输入的4位BCD码从0~10,则数码管显示0~9和一横标志位;5.系统调试与性能分析在第一次做好之后,下载到开发板里面,出现了问题,不能下载成功;最初认为是下载器的驱动没有安装好,后来经过认真的分析是因为在选择芯片的时候,选错了芯片;在进行了芯片的正确选择,以及引脚的正确配置后,成功的加生成的.sof文件下载到了开发板中;6.设计过程中遇到的问题及解决方法。程序完全调时成功后,下载到开发板中,显示全部为0,可能是时钟分频的问题;解决方法是修改源代码,进行正确的时钟信号分频;