“安富利杯”赛灵思FPGA设计技巧与应用创新博文大赛

“安富利杯”赛灵思FPGA设计技巧与应用创新博文大赛最终大奖揭晓!

各位朋友:
根据我们“安富利杯”赛灵思FPGA设计技巧与应用创新博文大赛的规则,我们对三个月来的所有参赛作品进行了评选,根据发文的数量和质量,评出最后大奖!分别是:

昱泉获得安富利公司赞助的Spartan-6开发板一套,型号为SP601
paradoxfx 获得安富利公司赞助的Spartan-6开发板一套,型号为SP601
William获得电子创新网提供的320G移动硬盘一个
xuliang获得依元素科技(E-elements)赞助的价值800元的Xilinx USB下载电缆一条

让我们祝贺获奖朋友,欢迎大家继续发文,并参加我们目前进行的“连载--我与FPGA活动”!
也希望两位获得开发板的同学将开发板的使用心得分享到网上来!

赛灵思中文社区编辑部

附:

S6开发板实物
S6开发板实物<br />
S6开发板实物

“安富利杯”赛灵思FPGA设计技巧与应用创新博文大赛---基于FPGA的电机故障在线诊断方法

本文应用改进的滑动傅立叶变换(sliding DFT,sDFT)方法作为电机故障在线诊断的频谱分析方法,它能够做到在每个采样点都进行频谱分析。与传统的FFT相比,滑动DFT方法的计算量更小,而且能够选择特定频段进行频谱分析,具有广阔的应用前景。但是因为此算法比较新颖,还没有形成现正的IP核供调用,所以需要自己编写程序进行实现。本文基于System Generator环境实现了该算法,其中ISE版本为12.1,Modelsim为6.5d,Synplify Pro为9.6.2,硬件平台基于自制的Spartan3 XC3S400开发板。
1 滑动DFT的基本原理
设长度为N的有限长序列x(n),其离散傅里叶变换为
式1
将式(1)展开得
式2
x(n)的图形表示如图1所示,其中,x0表示第一组数据,x1表示新的采样点的数据,两组数据相对应的傅里叶变换分别为X0(k)和X1(k)。

“安富利杯”赛灵思FPGA设计技巧与应用创新博文大赛------基于FPGA的Sigma-Delta数据采集系统

前面的博文中已经提到了基于Sigma-Delta ADC采样的数据采集系统,并详细说了Sinc3抽样滤波器的设计方法,在http://xilinx.eetrend.com/blog/695有详细介绍。后来将前面的ADC也做了PCB板,这样就构成了一个完整的基于FPGA的Sigma-Delta数据采集系统。
从调制器编码理论的角度看,多数传统的模数转换器均属于线性脉冲编码调制(LPCM,Linear Pulse Code Modulation)类型,如并行比较型、逐次逼近型等。这类模数转换器根据信号的幅值大小进行量化编码,一个分辨率为n的ADC可以将其量程范围分为2的n次方个不同的量化等级,而实现2的n次方个不同的量化等级需要相当复杂的电阻(或电容)网络和高精度的模拟电子器件。随着位数n升高时,比较网络的实现会变得越来越困难,因此限制了模数转换器分辨率的提高。同时,集成度、温度变化等因素对高精度的模拟电子器件会产生影响,进一步限制了转换器分辨率的提高。

“安富利杯”赛灵思FPGA设计技巧与应用创新博文大赛------Spartan3硬件乘法器使用详解(5)

前面已经介绍了Spartan3系列FPGA中硬件乘法器的用途、调用方法、结构特、使用一个专用硬件乘法器同时处理两个乘法的方法、使用Xilinx CORE Generator来生成带控制端的IP核00等等。接下来对它的一些具体使用方法做更深入的介绍。

1. 乘法器子模块
Spartan3系列FPGA中专用硬件乘法器是18*18位的,因为块RAM的宽度是18位的,二者匹配可以提高运算的性能。不过我们的程序中,并不总是这么巧需要18*18位的;以两个数相乘相乘为例,假如是有符号的整数9乘以有符号的整数9,那只是一个5*5的乘法,还剩余了很多的计算能力。为此,可以把一个大的18*18位的专用硬件乘法器划分为多个子模块。图1给出了这样的一个示例。

图1 乘法器自模块的划分方法
图2、图3分别给出了4*4有符号和无符号的乘法器子模块。

“安富利杯”赛灵思FPGA设计技巧与应用创新博文大赛------Spartan3硬件乘法器使用详解(4)

h 前面已经介绍了Spartan3系列FPGA中硬件乘法器的用途、调用方法、结构特定等等,还介绍了使用一个专用硬件乘法器同时处理两个乘法的方法。接下来对它的一些具体使用方法做更深入的介绍。

1. 使用Xilinx CORE Generator来调用乘法器
前面给了一些硬件乘法器的Verilog HDL代码,不过一般都是直接使用“*”这个符号来调用MULT18*18模块,不能对它进行控制、使能等操作,在需要扩展使用的时候不够方便。
用过Xilinx CORE Generator系统的朋友都知道,Xilinx CORE Generator可以调用现有的IP核,并直接进行例化就可以调用,非常方便,省去了撰写大量代码的时间,而且其效率一般比我们自己写的还要高(毕竟是专门的研发人员做出来的)。所以在这里我们使用Xilinx CORE Generator来调用Xilinx FPGA的专用硬件乘法器。

“安富利杯”赛灵思FPGA设计技巧与应用创新博文大赛------Spartan3硬件乘法器使用详解(3)

前面已经介绍了Spartan3系列FPGA中硬件乘法器的用途、调用方法、结构特定等等,对Xilinx FPGA中基本的硬核乘法器有了初步的认识。接下来对它的一些具体使用方法做更深入的介绍。
1. 扩展乘法器
FPGA可以对每一位进行操作,这极大地方便了对乘法器的扩展。虽然一个基本的硬件乘法器只有18*18位,但是我们可以通过把一个较多位数的乘法操作分解为较小一级层次的乘法。一个以二进制数代表的位数较长的输入可以在它的任何一个数据位进行截断,并分别送入不同的两个硬件乘法器;其结果是相同的,只需要在运算时考虑MSB和它的符号就可以了。
图1给出了一个22*16位乘法器的实现原理框图。22位的输入A被分解为18位的有符号数和4位的无符号数(从LSB)开始计算,则两个独立的乘法操作也需要同时进行。一个乘法的结果是20位的有符号乘法,它由16位的输入B和分解出的A的4位无符号数相乘得到。另一个乘法的结果是34位的有符号乘法,它由16位的输入B和分解出的A的18位有符号数相乘得到。加法操作存储了两个乘法的累积和(注意到:第一个乘法操作的最小几位被加法器旁路了),并得到了最终的38位乘法结果。加法器自身只需要34位就够了,即需要占用17个slice。

“安富利杯”赛灵思FPGA设计技巧与应用创新博文大赛------Spartan3硬件乘法器使用详解(2)

前几天一直在忙,这几天终于有点时间可以写点东西了。上次简要提了一下对Spartan3中硬件乘法器的认识。虽然介绍Xilinx器件与开发应用的书籍、资料非常多,但是仔细查了一下,并没有专门介绍其硬件乘法器的,所以个人认为总结一下介绍给大家还是很有必要的。
虽然最新的7系列FPGA已经面世了,不过Spartan系列因为其高性价比、广泛使用的人群、大量已有的程序、资料,在一定的时间段内还是有其存在的价值的(估计Altera的CycloneIII不停产,Xilinx的Spartan3就不会停产把:))。我觉得把它搞清楚了,以后过渡到高端器件,对整个开发的流程、器件的来龙去脉还是比较容易的。好了接下来继续上文的讨论。
1.硬件乘法器调用的设置

“安富利杯”赛灵思FPGA设计技巧与应用创新博文大赛------Spartan3硬件乘法器使用详解(1)

前几天一直在忙,也没有来得及上来看看。博客大赛真是越来越热闹了,咱也来添砖加瓦让它越来越红火。这次的博文对Spartan3/3E里面的硬件乘法器进行研究。
自从开始学FPGA起,关于硬件乘法器与软件乘法器的概念就一直有点困惑。明明FPGA已经自带了18*18位的硬件乘法器(大概总结了一下,Spartan6系列的硬件乘法器数量如图1所示,Spartan3的如图2所示),好多书籍却要花费较多经历来讲如何用HDL语言来实现乘法;这是一个非常复杂的过程,感觉会让初学者不知所措(感觉使用Core Generator来产生乘法器要比用HDL语言要容易一些)。在硬件乘法器足够使用的情况下,为什么不直接使用硬件乘法器,来简化设计、提高性能呢?仔细阅读了Xilinx关于硬件乘法器的资料,没想到它的用法、用途还是这么丰富。于是在此和大家分享一下心得。

图1 Spartan6系列的硬件乘法器

基于Virtex5的婴幼儿智能监护助理---“安富利杯”赛灵思FPGA设计技巧与应用创新博文

当今社会,多媒体的广泛应用和信息时代的到来使得人们的日常生活方式发生了天翻地覆的变化,他们越来越需要改善自己的生活质量,随着生活节奏的快捷化以及便携式消费电子产品的日益普及,人们家庭消费电子终端产品提出了越来越高的要求,现代人们在日常生活和休闲娱乐中追求的一个明显的趋势是新型人机交互方式如动作识别、语音识别等技术。但同时,由于其技术复杂度高、环境影响因素多而且大、数据处理量大、成本高,研发速度和研发水平等受到严重的制约。
目前,在PC机上,语音识别技术已经获得了一定的进步,在关键词的识别已经很不错了,我们可以在很多多媒体产品、人机交互产品中找到其踪影,下面我主要是想来跟大家分享一下实现在SOPC的基础上构建一个智能的识别系统。我就实际问题来引入我们的探讨。下面我想实现一个帮助家庭实现婴幼儿智能监护功能的系统,我想,这是有一定实现意义的,可能这也只是我的陋见,希望大家多多指导。

“安富利杯”赛灵思FPGA设计技巧与应用创新博文大赛---浅谈高速FPGA设计的一些要点

大家在做FPGA设计时,首先肯定追求功能是否满足要求,等Behavior Simulation通过后,就开始布局布线的考虑,如果时序方面达不到设计指标要求,就要对设计做调整修改,有时这种调整修改比较容易做到,但很多时候,并不是那么简单,有时侯甚至要重新确定设计方案。如果设计者一开始就能对那些有可能关系到时序的因素做考虑,那么就减少了后期的烦恼。关于高速FPGA的设计,牵涉到很深的知识,需要设计师具备深厚扎实的理论知识(算法)与长期的实践经验的积累,同时我觉得也是FPGA相对于DSP最有魅力的地方——细节的地方你必须也要注意到,否则你仍然完成不了。
后面我会把自己知道的一点东西与大家分享,由于自己能力有限,希望能起到抛砖引玉的作用。
我们考虑的高速设计主要有三个方面:
(1)模块每单位时间处理的数据量;
(2)系统关键路径的延时,有建立时间、组合逻辑延时、布线延时等组成;
(3)输出数据相比数据输入的延时。
下面分别介绍可能采用的策略:
关于提高系统每单位时间处理的数据量(吞吐量),需要提到流水线(pipeline)的概念。假设输入的数据X(1bit)需要经过三个运算模块A,B,C,才能输出如下图所示: