打印

超级好帖,步步详解!基于赛灵思FPGA的秒表设计

[复制链接]
3328|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Massif123|  楼主 | 2011-11-5 14:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
“创新网赛灵思中文社区89美元LX9开发板试用活动征文”
拿到板子的时候,还在忙其他比赛,所以没怎么动过。最近交了作品,终于有时间了。下面我准备用LX9开发板来设计一个秒表,详述利用LX9开发板设计一个实用电路的流程。
硬件规划:
先说下秒表的硬件组成,秒表有两个按键,一个用于启动计时和暂停计时,另一个用于清零;秒表的显示用到数码管,两位显示秒,还有两位显示毫秒;最后,就是LX9开发板了,硬件组成框图如下:


首先,根据需要准备好设计所用到的硬件。由于LX9开发板上没有显示器件,而且其按键仅有两个,除了一个用作复位外,实际留给用户的只有一个按键了,所以要对LX9开发板进行扩展。利用开发板上预留的两个PMOD口,我们可以方便的对系统进行扩展。设计需要一个四位七段共阳数码管和两个按键,刚好把我以前做的按键检测和数码管显示模块用上了,如下图,


数码管有七个段选、一个小数点和四个位选,一共需要占用FPGA的12个引脚;按键用到两个,因此占用FPGA的2个引脚;整个模块总共需要14个引脚。LX9上的两个PMOD口一共有16个引脚,完全满足扩展要求。
根据LX9开发板原理图(关于LX9开发板的各种资料可到安富利官方网站: www.em.avnet.com/s6microboard 上下载)可知,两个PMOD与LX9引脚之间的连接关系如下图:
LX9开发板原理图
根据模块引脚之间的关联性进行引脚的分配:数码管七个段选和一个小数点占用PMOD1的8个引脚,按照PMOD1的P1脚对应数码管a段,P2脚对应数码管b段的顺序连接好所有引脚;数码管四个位选和两个按键占用PMOSD2的6个引脚,按照PMOD2的P1脚对应数码管位选1,P2脚对应数码管位选2的顺序连接好引脚,两个按键连接到P7和P8。最后硬件连线如下图:
硬件连线
到此,硬件准备工作完成。
软件设计:
在本设计中,FPGA要实现的功能模块如下:


  • 时钟产生:通过对LX9开发板提供的基本时钟脉冲进行计数,得出为秒表所需的计时脉冲和数码管动态扫描脉冲,分别为5ms和10ms。
  • 数据处理:计时数据处理对来自时钟产生模块的10ms进行计数,得出秒表的毫秒与秒的数据,并送到时间显示模块;按键数据处理不停地对两个按键进行扫描,当检测到有效键值时,就根据键值进行相应的处理。
  • 时间显示:对计时数据处理送来的二进制数据进行处理,使其能在数码管上显示。
下面,开始用ISE 13.2进行设计。
打开ISE,点击File->New Project,新建一个StopWatch的工程文件,如下图


点Next,出现一个新的对话框中,在Family一行选择Spartan6,Device一行选择XC6SLX9,Package一行选择CSG324,由于设计采用Verilog HDL进行开发,故Preferred Language一行选择Verilog,其他可保持默认或者根据需要选择。


  点Next,出现如下对话框,确认没有问题后,点Finish。






至此,一个新的空工程文件已经生成。如下:


接着,添加文件到工程中。在Hierarchy区域中,单击右键,选择New Source,如下图



出现如下对话框,选择Verilog Module。根据前面所述顺序,首先设计时钟产生模块,在File Name填上clock,点Next。



出现端口设置对话框,本模块中需要一个时钟输入和两个时钟输出,设置如下:



点Next,出现以下对话框,确认无误后点Finish。




按照上述流程,再添加两个名为stopwatch和sen_seg的文件,添加完成如下:



程序按照上面所述思路进行设计,由于程序不是很复杂,所以不进行仿真。完成后,直接进行顶层模块的设计。
在顶层模块中,用实例语句将上面3个模块连接起来,如下:


最后添加用户约束文件。该文件可以自己编写,或者用PlanAhead,或者直接从安富利网站上下载Avt_S6LX9_MicroBoard_UCF_110804.ucf这个文件,LX9开发板上所用到的引脚都在里面了。下面直接添加该文件到工程中,并根据需要进行相应的修改,并注释或者删除没有用到的引脚定义。
设计中要用到的引脚如下:




为了方便对整组的引脚进行操作,所以将单一的引脚换成数组的形式表示,如上图红圈中所示;为了确保按键在没有按下的时候检测到高电平,所以将两个按键检测的引脚默认设置为上拉状态,即输入为高电平,如上图黑圈所示。
完成上面步骤后,即可进行综合、实现和生成编程文件了。综合(Synthesize)是指将HDL、原理图等设计输入翻译成与门、或门、非门等基本逻辑单元的逻辑连接(网表),并根据目标和要求(约束条件)优化所生成的逻辑连接;实现(Implementation)是指将综合输出的逻辑网表翻译成所选器件的底层模块和硬件原语,将设计映射到器件结构上,进行布局布线,达到在选定器件上实现设计的目的。
为了在LX9开发板上运行所设计的电路,需要生成后缀名为“.bit”的编程文件。选择Hierarchy区域中的顶层文件,则在Hierarchy区域下面的进程区域中
会出现如下信息:

双击Generate Programming File,则ISE会自动进行综合、实现和生成编程文件的操作。以上过程没有问题的话,在Console会出现如下提示:Process "Generate Programming File" completed successfully,说明已经生成编程文件。
最后将生成的文件下载到LX9开发板中,具体操作参考安富利的技术文档:U75_Avnet_Spartan-6_LX9_MicroBoard_Configuration_Guide_v13_2_1.pdf,里面已经详细介绍了三种下载方法。
下载完成后,启动秒表,效果如下:
设计电路图
经测试,该秒表可以实现前面所述功能。到此,电路设计完成。
附件是设计工程文件和所需文档
附件大小可以到http://xilinx.eetrend.com/blog/2184 下载工程文档
评分
参与人数 2威望 +2 收起 理由
jakfens + 1
墨攻1991 + 1 不错

相关帖子

沙发
AutoESL| | 2011-11-5 17:21 | 只看该作者
详细,顶起来

使用特权

评论回复
板凳
GoldSunMonkey| | 2011-11-5 19:31 | 只看该作者
不错。。。
不过LX9太多的功能了

使用特权

评论回复
地板
daisyly| | 2011-11-6 14:52 | 只看该作者
怎么一个好字了得,顶起来。

使用特权

评论回复
5
coco11| | 2011-11-6 17:12 | 只看该作者
借过借过。顶起来。

使用特权

评论回复
6
jakfens| | 2011-11-7 08:22 | 只看该作者
:lol

使用特权

评论回复
7
ertu| | 2011-11-14 07:13 | 只看该作者
路过瞧瞧

使用特权

评论回复
8
ertu| | 2011-11-14 07:13 | 只看该作者
感觉还不错滴

使用特权

评论回复
9
SuperX-man| | 2011-11-14 11:35 | 只看该作者
看到楼主的洞洞板很有亲切感,经典的入门实例!但是要做个完美的秒表还是有些难度的,按键的扫描方式、功能的设置是很有讲究的!

使用特权

评论回复
10
Backkom80| | 2011-11-14 12:34 | 只看该作者
路过!

使用特权

评论回复
11
GoldSunMonkey| | 2011-11-14 13:06 | 只看该作者
看到楼主的洞洞板很有亲切感,经典的入门实例!但是要做个完美的秒表还是有些难度的,按键的扫描方式、功能的设置是很有讲究的!
SuperX-man 发表于 2011-11-14 11:35

嗯,是呀:)如果很精细,时钟要求也很高的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

177

主题

276

帖子

1

粉丝