FPGA—基于HDL的十进制计数器设计

  • 格式:doc
  • 大小:465.50 KB
  • 文档页数:11

下载文档原格式

  / 11
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于HDL 的十进制计数器设计

一、 实验目的

1、掌握基于语言的ISE 设计全流程;

2、熟悉、应用VerilogHDL 描述数字电路;

3、掌握基于Verilog 的组合和时序逻辑电路的设计方法。

4、掌握chipscope 片内逻辑分析仪的使用与调试方法。

5、设计具有异步复位、同步使能的十进制计数器,其计数结果可以通过七段数码管、发光二极管等进行显示。

二、 实验原理

1、十进制计数器的设计即是设置一变量,当计数脉冲上升沿到来时,先判断是否为9,若是则置零,否则就进行加一操作。将变量再进行一个译码操作输出到数码管显示即可。

图1 实验原理图

2、数码管分为7 段和8 段,七段数码管由 7段二极管组成。8段数码管比起7段数码管多了一个显示小数点的LED 。

数码管按发光二极管单元衔接方式分为共阳极数码管和共阴极数码管。本实验使用共阳数码管。它是指将一切发光二极管的阳极接到一同构成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM 接到电源VCC 上,当某一字段发光二极管的阴极为低电平相应字段就点亮。当某一字段的阴极为高电平相应字段就不亮。共阳端可以作为位选端,实现动态扫描。动态扫描即是利用了人眼睛的视觉暂留现象,以合适的频率显示每一位数码管,便会产生所有数码

使能控制

异步清零

十进制计数器

七段数

码管显示译

时钟端

FPG

管是一起点亮的错觉,数码管原理图如图:

图2 共阳数码管示意图

3、数码管显示数字与对应的输入数据的关系如表所示:

0 8'hc0

1 8'hf9

2 8'ha4

3 8'hb0

4 8'h99

5 8'h92

6 8'h82

7 8'hf8

8 8'h80

9 8'h90

表1 数码管显示表

4、本次设计一共有11个端口:

输入信号:

clk -------待计数的时钟。

clr ---------异步清零信号,当clr=1,输出复位为0,当clr=0,正常计数。

ena---------使能控制信号,当ena=1,电路正常累加计数,否则电路不工作。

输出信号:

q[6:0]---------驱动数码管,显示计数值的个位。

cout -----------1bit数据,显示计数值向十位的进位图。

三、实验步骤

1、整个系统主要设计的模块是:十进制计数模块和数码管驱动模块,由于实验板的按键为实现硬件防抖,则需要将按键输入的时钟clk,先通过消抖模块消抖后,再输出至后续使用。

图3 系统结构图

2、分别进行各个模块的设计并进行仿真测试。

1)十进制计数器模块设计

输入:CLK -------待计数的时钟。CLR ---------异步清零信号,当CLR =1,输出复位为0,当CLR =0,正常计数。ENA---------使能控制信号,当ENA=1,电路正常累加计数,否则电路不工作。

输出:SUM[3:0]---------- 计数值的个位,即在CLK上升沿检测到SUM=9时,SUM将被置0,开始新一轮的计数。COUT ------------计数值的十位进位,即只有在时钟CLK上升沿检测到SUM=9时,COUT将被置1,其余情况下COUT=0。

2)数码管显示驱动模块

输入:sum[3:0] -------待显示的数值。

输出:out[6:0] ----------驱动数码管的七位数值(注意下表中out的对应位3)消抖模块

(1)按键抖动的产生原因:

通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。

图4 按键抖动波形图

(2)本次实验提供的消抖模块简介

图5 消抖模块框图

(3)电平检查模块:检测输入的按键是否被按下或者释放,并分别将H2L_Sig,L2H_Sig拉高,并随后拉低,给出按键的操作信息。

(4)延时模块:对输入的信号变化进行计时并观察信号的变换情况,对输出端口进行恰当地赋值。

注:实验资料中将给出消抖模块设计源代码。对模块的具体设计细节不需理解,消抖模块不要求仿真。

3、根据板子锁定引脚,并生成下载文件。

数码管驱动的七位信号可输出到电路板上相关引脚。为简化设计,可将消抖模块的复位信号、使能信号与cnt10模块共用。根据下载板资料,完成引脚锁定,生成相关的用户约束文件(ucf)。

注意:由于clk没锁在ISE默认的时钟输入引脚上,需要添加代码:

“CLOCK_DEDICATED_ROUTE = FALSE;”

锁引脚代码:

NET "CLK" LOC = P57| CLK_DEDICATED_ROUTE = FALSE ;

NET "CLK_50" LOC = P80;

NET "COUT" LOC = P23;

NET "ENA" LOC = P32;

NET "CLR" LOC = P26;

NET "DATA_OUT[6]" LOC = P102;

NET "DATA_OUT[5]" LOC = P99;

NET "DATA_OUT[4]" LOC = P107;

NET "DATA_OUT[3]" LOC = P109;

NET "DATA_OUT[2]" LOC = P112;

NET "DATA_OUT[1]" LOC = P100;

NET "DATA_OUT[0]" LOC = P106;

4、Chipscope在线调试

(1)Chipscope调试开始,新建.cdc文件。

在HDL工程中添加chipscope file,选择ChipScope Definition and Connection File,file name 取名seg。

(2)Chipscope-配置 .cdc文件

在原有的HDL工程下出现新建seg.cdc文件,可以在chipscope植入 ILA 和ICON IP核,双击seg.cdc文件,进入配置界面。

(3)Chipscope-设置触发端口、类型等。

进入配置界面,每个触发端口ILA核可支持多路比特数据,最多可有16个端口,触发匹配类型共有6种。这里配置根据需要调试的数据个数、类型决定。

(4)Chipscope-设置采样深度

设置采样深度,即为一次采样数据所显示的深度、个数。深度范围512-16384,采样深度越深,耗费资源越多。然后点击Net Connections标签,设置设置触发时钟与触发信号界面。

(5)Chipscope-设置采样信号

选择Modify Connections 选项,进入采样时钟和触发信号设置,采样时钟用于捕捉触发信号

(6)Chipscope-设置采样时钟

设置触发时钟,一般选择系统频率最高的主时钟。注:Net selections中每个channel必须有添加有信号,否则综合要报错。

(7)Chipscope-设置触发数据

同样设置触发信号,将TPO与TP1端口中的每个channel都添加,此处TP0监测clk、clr、ena、cout。TP1监测的数码管七段信号q[7:0]、以及COM。

(8)Chipscope-JTAG扫描

设置好以后保存退出,综合与实现,双击图中Analyze Design Using Chipscope。进入chipscope软件,单击按钮开始JTAG扫描,查找FPGA器件。