基于FPGA的数字钟课程设计_fpga数字钟课程设计

2020-02-28 其他范文 下载本文

基于FPGA的数字钟课程设计由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“fpga数字钟课程设计”。

计算机与信息工程系

《脉冲与数字电路》 课程设计报告

专业

通信工程

班级

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 数码管动态扫描模块; Decoder BCD译码模块;

Fdiv 模块:

功能:实现20MHZ的时钟信号分成10KHZ的信号和1HZ的信号;

输入:clk 为20MHZ的时钟信号; 输出:f10000HZ 为10KH的时钟信号;

F1HZ 为1HZ的时钟信号; Fdiv 模块代码:

module fdiv(clk,f10000Hz,f1Hz);output f10000Hz,f1Hz;input clk;reg f10000Hz,f1Hz;integer CNT1=0,CNT2=0;always@(posedge clk)

begin

if(CNT1

begin

CNT1=CNT1+1;

f10000Hz

end

else

begin

CNT1=0;

f10000Hz

end

end

always@(posedge f10000Hz)

begin

if(CNT2

begin

CNT2=CNT2+1;

f1Hz

end

else

begin

CNT2=0;

f1Hz

end

end endmodule fdiv 模块波形仿真:

由于实际的分频波形仿真中,由于要将20MHZ的分成1HZ的,需要将信号缩小20 000 000倍,因此,此处采用将20HZ的先分成10HZ,然后再将10HZ的分成1HZ的时钟信号;在仿真中这样整,在实际演示中再改下代码,实现真正的20MHZ到1HZ的分频;它们只是一个倍数关系而已;

Control 模块:

功能:实现电子表的正常显示及时间校正模式的转换;

输入:key 模式修改键,每来一个高电平,mode加一次。如果mode 的值为2,则mode被赋值为 1;

Reset 复位键,如果reset 为 1,则mode 被赋值为0; 输出:mode 用于输出到下一级模块,进行模式判断; Control 模块源代码:

module control(mode,key,reset);input key,reset;output[1:0] mode;reg[1:0] mode;always@(posedge key)begin

if(reset)

begin

mode

end

else

begin

mode

if(mode==2)

begin

mode

end

end end endmodule Control 模块波形仿真

Tune 模块

功能:实现秒分时的校正;

输入:Mode 为模式选择,mode为0时是正常显示时间模式;mode 为1时,是秒、分、时加一模式。Mode为2时,是时分秒减一模式;

Ht 为时调节输入;

mt 为分调节输入;

St 为秒调节输入;

输出:Aa 为秒的个位;

Ba 为秒的十位;

Da 为分钟的个位;

Ea 为分钟的十位;

Ga 为小时的个位;

Ha 为小时的十位; Tune 调时模块源代码:

module tune(mode,ht,mt,st,aa,ba,da,ea,ga,ha);input[1:0] mode;input ht;input mt;input st;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@(posedge st)begin

if(mode==1)

begin

aa

if(aa==9)

begin

ba

aa

end

if(ba==5&&aa==9)

ba

end

else if(mode==2)

begin

aa

if(aa==0)

begin

ba

aa

end

if(ba==0&&aa==0)

ba

end end always@(posedge mt)begin

if(mode==1)

begin

da

if(da==9)

begin

ea

da

end

if(ea==5&&da==9)

ea

end

else if(mode==2)

begin

da

if(da==0)

begin

ea

da

end

if(ea==0&&da==0)

ea

end end always@(posedge ht)begin

if(mode==1)

begin

ga

if(ga==9)

begin

ha

ga

end

if(ha==2&&ga==3)

begin

ha

ga

end

end

else if(mode==2)

begin

ga

if(ga==0)

begin

ha

ga

end

if(ga==0&&ha==0)

begin

ga

ha

end

end end

endmodule Tune

调时模块仿真波形:

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;

Zou shi模块:

功能:实现时间的正常显示及校正显示;

正常显示,当秒加到59时,1HZ的脉冲信号CLK1再来一个上升沿,秒变为0,同时分加一;

当正常显示时,复位端来一个上升沿的脉冲,显示变成输入端输入的数据;

Mode 变成模式1时,显示变成输入端输入的数据;

Mode 变成模式2时,显示变成输入端输入的数据;

Sao miao模块:

功能:实现数码管的动态扫描;

输入: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]八位数码管动态扫描输出; Sao miao 数码管扫描模块源代码:

module saomiao(a,b,c,d,e,f,g,h,f10000HZ,zx,zw);input f10000HZ;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@(posedge f10000HZ)begin

if(slip==100)

slip

else

slip

case(slip)

4'd0:begin zw=8'b11111110;zx=a;end

4'd1:begin zw=8'b11111101;zx=b;end

4'd2:begin zw=8'b11111011;zx=c;end

4'd3:begin zw=8'b11110111;zx=d;end

4'd4:begin zw=8'b11101111;zx=e;end

4'd5:begin zw=8'b11011111;zx=f;end

4'd6:begin zw=8'b10111111;zx=g;end

4'd7:begin zw=8'b01111111;zx=h;end

default:zw=8'bx;

endcase end endmodule Sao miao 数码管扫描模块仿真波形:

Zx显示的是上一级输出的4位BCD码,此处是以十进制的形式显示的;

Decoder 模块:

功能:将上一级输出的4为BCD码转换成数码管能正常显示的数据;

输入:zx[3..0]上一级输出的4位BCD码; 输出:seg[6..0]数码管能正常显示的数据;

Decoder 译码模块源代码: module decoder(zx,seg);input[3:0] zx;output[6:0] seg;reg[6:0] seg;always@(zx)begin case(zx)4'b0000: seg

default:seg

endcase end endmodule Decoder 译码模块仿真波形:

输入的4位BCD码从0~10,则数码管显示0~9和一横标志位;

5.系统调试与性能分析

在第一次做好之后,下载到开发板里面,出现了问题,不能下载成功;最初认为是下载器的驱动没有安装好,后来经过认真的分析是因为在选择芯片的时候,选错了芯片;在进行了芯片的正确选择,以及引脚的正确配置后,成功的加生成的.sof文件下载到了开发板中;

6.设计过程中遇到的问题及解决方法。

程序完全调时成功后,下载到开发板中,显示全部为0,可能是时钟分频的问题;解决方法是修改源代码,进行正确的时钟信号分频;

《基于FPGA的数字钟课程设计.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
基于FPGA的数字钟课程设计
点击下载文档
相关专题 fpga数字钟课程设计 课程设计 数字钟 FPGA fpga数字钟课程设计 课程设计 数字钟 FPGA
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文