1、 EDA 课程设计报告 题 目 基于 CPLD 的 Verilog 秒表设计 姓 名 学 号 指导教师 二一 一 年 月 日 2 一一设计任务设计任务 设计一个秒表,要求精度达到 0.1 秒。有一个开始计时、 一个停止计时、一个复位按键。晶振为 12MHz 有源晶振,采用 CPLD器件为 ALTERA的 EPM7064AELC44-10N,采用四位数码管 显示。 设计功能: 1、 四位数码管显示 999.9 秒。 全部采用十进制, 满十进一。 2、精度为 0.1 秒。 3、开始按键和停止按键在一起,按一次开始再按停止。 4、复位按键进行清零。 二二设计方案设计方案 秒表设计主要分为两部分:程序
2、部分和硬件部分。 在 硬 件 方 面 主 要 用 到JTAG接 口 、 数 码 管 、 EPM7064AELC44-10N 芯片、电阻、按键、三极管、电源、有源晶振、 44 口的芯片插槽等部分组成! 具体电路图及显示效果图片见下页。 电路板的具体管脚连接关系如下: seg0 seg1 seg2 seg3 seg4 seg5 seg6 (小数点 seg7 没有用 到) 24 25 26 27 28 29 31 时钟 GCLK1 43 3 dig0 dig1 dig2 dig3 34 36 37 39 key0 key1 key2 14 16 17 三设计程序三设计程序 自顶而下,一体化程序设计。
3、秒表程序主要分为四部分:0.1秒 信号产生部分,按键消抖处理部分,数码管动态扫描显示部分,计时 处理部分。其中 0.1 秒信号产生部分将 12MHz 的有源时钟信号分频 成为 10Hz 的 0.1 秒计时信号;按键消抖处理部分将将琴键开关转换 为乒乓开关, 使开关按下去以后就可以松手, 不用长时间的按住不放; 数码管动态扫描显示部分, 通过计算二进制数和在实验箱上实验大概 在 1211 位二进制时动态扫描为 1ms 左右,使数码管显示明显完整 清新,不会出现闪烁现象;计时处理部分,开始加入清零功能,是不 论开始暂停都可以被清零功能清楚,秒计数部分采用满十进一的形 式,即总计 999.9 秒。
4、module miaobiao(clk,key,dig,seg); /模块名 miaobiao input clk; /输入时钟 input1:0 key; /输入按键 output3:0 dig; /数码管选择输出引脚 4 output7:0 seg; /数码管段输出引脚 reg7:0 seg_r; /定义数码管输出寄存器 reg3:0 dig_r; /定义数码管选择输出寄存器 reg3:0 disp_dat; /定义显示数据寄存器 reg24:0count; /定义计数寄存器 reg23:0hour; /定义现在时刻寄存器 reg sec,keyen; /定义标志位 reg1:0dout1
5、,dout2,dout3; /寄存器 wire1:0key_done; /按键消抖输出 assign dig = dig_r; /输出数码管选择 assign seg = seg_r; /输出数码管译码结果 /秒信号产生部分 always (posedge clk) /定义 clk 上升沿 触发 begin count = count + 1b1; if(count = 25d2400000) /0.05S 到了吗? begin count = 25d0; /计数器清零 sec = sec; /置位秒标志 end end 5 /按键消抖处理部分 assign key_done = (dout1 | dout2 | dout3); /按键消抖输出 always (posedge count17) begin dout1 = key; dout2 = dout1; dout3 = dout2; end always (negedge key_done0) begin keyen = keyen; /将琴键开关转换为乒乓开 关 end /数码管动态扫描显示部分 always (posedge clk) /count12:11大约 1ms 改变一次 begin case(count12:11) /选择扫描显示数据