转载--关于FPGA设计数字信号处理电路的心得
FPGA使用的越来越广泛,除了可用于设计控制电路以为,数字信号处理电路更是FPGA的强项和难点。个人可以说才刚刚入门FPGA设计,也做过一些数字信号处理方面的电路设计,记录下个人心得体会。
(一)善用MATLAB来为设计做充分的准备和验证。
在学习EDA课程的时候,我们往往都是按照要求,直接打开QuartusII,噼里啪啦开始疯狂敲代码,然后仿真——不对——再改再仿真——还不对——再改直到仿真结果正确为止。不错,这的确是人们先入为主的一种方法。但这只是我们学习HDL语言,学习使用开发工具时候比较直接的方法,也只是适用于那个自己什么都不懂的阶段。面对大工程,复杂的数字逻辑,精确的数字信号处理,这样的方法只会让你无从下手。
MATLAB对数字信号处理而言,可以说是万能的。它基本包含了所有我们想要实现的运算,也可以完全得帮我们仿真出我们想要实现的某种算法。所以,在实际工程实现的时候,我们都会先使用MATLAB来仿真实现我们的目标,比如上几篇文中提到的FIR滤波器。
首先,我们使用MATLAB自带的函数,得到我们的理想值;
再用我们将采用的算法在MATLAB进行算法级的仿真(所谓算法级仿真,即和我们硬件实现的方法一致,如,卷积运算不能采用conv函数,而需要一步一步的进行相乘累加相乘累加……);有的人说这样是多此一举的,我也可以直接就在QuartusII里写代码,跳过这一步。其实,这是急功近利的做法,恰恰这一步是很重要的。如果设计顺利,这一步看起来的确有些多余。可当我们发现,算法仿真结果与我们的理想值(我们用函数算出来的值)不一致的时候,或者在之后进行FPGA设计时序仿真出现问题的时候,它的优势就来了,MATLAB的算法级仿真,可以很快的帮你找到并解决这个问题。例如:我们设计FIR滤波器,最后时序仿真结果和我们的算法仿真不一致!怎么办?哪里的问题?是不是设计都错了?不一定,我们的算法级仿真给了我们所有的中间过程的正确结果,我们可以通过比对他们,来确定是哪个环节出了问题。
完成了MATLAB的算法级仿真,就可以开始我们的硬件代码设计了。这个时候我们会发现,不再是无从下手了,因为我们只需要按照算法级仿真代码,按照HDL语言的语法要去,再以相应数字电路的coding style编写就可以了。随后再进行仿真,对比着算法仿真的结果,进一步修正硬件代码,这个过程将十分的轻松。
(二)经常查看RTL图。
做设计,最忌讳“想当然”。当我们做过几个设计,自认为有点经验的时候,很容易会有“想当然”的心态。老是觉得,我这么写代码,那最后出来的RTL电路就一定是这个样子的……其实不然。我们知道,从代码变换到RTL电路这个过程,叫做综合,而每个型号的芯片,综合规则都是不一样的,而且有时候我们还需要设定相应的综合规则来实现我们想要的结果。本人亲身的一次经历,做一个简单的单口RAM,首先是使用IP核设计,于是思维定势的觉得,既然是IP核生成的,那肯定是同步RAM,无需再进行设定了。可直到最后输出时序总是不理想,才又让我怀疑起了这个RAM,果不其然,查看了RTL图才发现,它不是同步RAM……有了这次教训,深刻得认识到,只有看到(RTL图),才能相信那是真的。
(三)尽量只做简单设计。
很多复杂的逻辑,实现起来很多人都想一口气用一个逻辑块来实现。这样做是很危险的……大家有空可以看看那些大牛们写的代码,再复杂的逻辑,无非多加个状态机,都不会有太多太乱的代码。一个复杂的逻辑实现,应该把它尽可能得分成简单逻辑的组合,因为如果逻辑设计得越复杂,时钟也就不能跑得很高,这对其它部分的设计带来了瓶颈,是相当不利的。
(四)遵从FPGA厂家给出的coding style。
不管是Altera还是Xilinx都给出了各自的coding style。虽然大多数情况,我们不按照那样的方式来编写代码并不会照成逻辑性的错误,但是却给设计带来了安全隐患。这样的隐患如果一旦出错,便很难通过仿真等手段来发觉。
(五)不要以为每款FPGA都是一样的。
同样的设计,换做不同的FPGA平台,其结果是不一样的!如果要深入设计FPGA,那一定要仔细阅读一款FPGA的芯片手册。个人建议是先挑一款较为大众的芯片阅读它的手册,然后可以基本掌握FPGA的结构和它工作的原理等。等熟悉了以后,就算换了芯片或者平台,也可以很快找到新的芯片的独特之处了。
转载--关于FPGA设计数字信号处理电路的心得的更多相关文章
- FPGA与数字信号处理
过去十几年,通信与多媒体技术的快速发展极大地扩展了数字信号处理(DSP)的应用范围.眼下正在发生的是,以更高的速度和更低的成本实现越来越复杂的算法,这是针对高级信息服更高带宽以及增强的多媒体处理能力等 ...
- 数字逻辑实践4->面向硬件电路的设计思维--FPGA设计总述
本文是对实验课上讲解的"面向硬件电路的设计思维"的总结,结合数字逻辑课本,进行提炼和整理. 主要来源是课件与本人整理,部分参考了网络大佬的博客. 本文主要介绍不同于之前软件设计思维 ...
- FPGA设计思想与技巧(转载)
题记:这个笔记不是特权同学自己整理的,特权同学只是对这个笔记做了一下完善,也忘了是从那DOWNLOAD来的,首先对整理者表示感谢.这些知识点确实都很实用,这些设计思想或者也可以说是经验吧,是很值得每一 ...
- 【转载】如何在FPGA设计环境中添加加时序约束
转自:http://bbs.ednchina.com/BLOG_ARTICLE_198929.HTM 如何在FPGA设计环境中加时序约束 在给FPGA做逻辑综合和布局布线时,需要在工具中设定时序 ...
- 【转载】FPGA算法设计随笔
FPGA设计算法依次需要完成MATLAB浮点仿真 MATLAB定点仿真 verilogHDL定点运算以及数据对比的流程.其中浮点到定点的转换尤为重要,需要在数据表示范围和精度之间做出权衡.另外掌握定点 ...
- FPGA设计中的电源管理(转载)
过去,FPGA设计者主要关心时序和面积使用率问题.但随着FPGA不断取代ASSP和ASIC器件,设计者们现正期望能够开发低功耗设计,在设计流程早期就能对功耗进行正确估算,以及管理和对与FPGA相关的各 ...
- 《数字信号处理》课程实验2 – FIR数字滤波器设计
一.FIR数字滤波器设计原理 本实验采用窗函数法设计FIR数字低通滤波器.我们希望设计的滤波器系统函数如下: \(H_{d}\left( e^{jw} \right) = \left\{ \begi ...
- FPGA与数字图像处理技术
数字图像处理方法的重要性源于两个主要应用领域: 改善图像信息以便解释. 为存储.传输和表示而对图像数据进行处理,以便于机器自动理解. 图像处理(image processing): 用计算机对图像进行 ...
- FPGA设计经验谈 —— 10年FPGA开发经验的工程师肺腑之言
FPGA设计经验谈 —— 10年FPGA开发经验的工程师肺腑之言 2014年08月08日 14:08 看门狗 关键词: FPGA 作者:friends 从大学时代第一次接触FPGA至今已有10多 ...
随机推荐
- day26—JavaScript对CSS样式的获取和修改实践
转行学开发,代码100天——2018-04-11 通过JavaScript获取和修改HTML元素及CSS属性是其一个基本功能.对于CSS样式通常有行内样式,外部样式,内嵌样式之分. 如: 行内样式: ...
- [转]Jenkins HTML报告样式无法显示问题解决
原文地址: https://vwin.github.io/2018/10/11/Jenkins-HTML%E6%8A%A5%E5%91%8A%E6%A0%B7%E5%BC%8F%E6%97%A0%E6 ...
- Grafana+Prometheus系统监控之Redis
REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开源的使用ANSI C语言编写.遵守B ...
- 上海站赛后总结&反思
上海站赛后总结&反思 赛后反思一下,本应该做出3~4题的场,最后只出了2题. 先回顾一下比赛,比赛开始10分钟,队友dy就想出了B题是trie树的模板题,然后让mqy码,第一次交的时候有地方打 ...
- Google XSS game writeup
用过Chrome的应该知道它的XSS Auditor,它可是灭掉了不少XSS代码呢……Google对XSS是很有研究的,不然也不敢大张旗鼓的悬赏(7500刀哦亲),还开发了一个XSS小游戏 http: ...
- LinkedList -链表集合
package cn.learn.collection; import java.util.LinkedList; import java.util.Queue; /* java.util.xxx A ...
- break和continue能否跳出函数
int func() { printf("In func, before continue.\n"); // continue; break; printf("In fu ...
- JVM(18)之 Class文件
开发十年,就只剩下这套架构体系了! >>> 关于类加载机制的相关知识在前面的博文中暂时先讲那么多.中间留下了很多问题,从本篇博文开始,我们来一一解决. 从我们最陌生而又最熟 ...
- JS中 [] == ![]结果为true,而 {} == !{}却为false
为什么? 先转换再比较 (==) 仅比较而不转换 (===) ==转换规则? ==比较运算符会先转换操作数(强制转换),然后再进行比较 ①如果有一个操作数是布尔值,则在比较相等性之前 ...
- MySQL 授权用户 ; 存储过程的DEFINER; 命令分隔符DELIMITER
最近项目中遇到有人使用DEFINER这样的关键字,找了半天没有怎么理解这个意思.以为是限制谁使用这个存储过程,后来测试发现并不是这样. 搜索网上发现很多说法都不正确.看到一篇博客,做了如下介绍,才有所 ...