FPGA经验记录

FPGA经验记录

1,MAP时显示Not enough free sites available for the components of the following type(s).将ILA 内核中的16个接口删掉两个,再综合解决问题。

2,reg类型的数据当做wire用时容易导致布局布线报错,此时最好把reg变量放入一个模块中并定义一个output wire输出来。

3,OFDM的采样率等于信号带宽,等于N倍子载波间隔。

4,做功能仿真时cutcp模块设置成Search速度会加快,但会导致前三帧数据出错。

5,周师兄的链路下板子测试,发现频域数据没有发散的现象,恒模性比较好。

6, 在使用if和case语句时,每一种情况都应该给出所有变量的值,不能漏掉,否则会综合出额外的锁存器或很长的组合逻辑驱动使能信号ce。

A?。

7, DFT矩阵A与IDFT矩阵B的关系为B=1

N

8, 将数据写入Ram时,写使能端与输入数据同时到来,做FFT后,若要将数据写入Ram可以用FFT的dv信号来控制Ram的写地址,且可以用dv来作为写使能信号。

9,FPGA设计中的约束文件有3类:用户设计文件(.UCF文件)、网表约束文件(.NCF文件)以及物理约束文件(.PCF文件),可以完成时序约束、管脚约束以及区域约束。3类约束文件的关系为:用户在设计输入阶段编写UCF文件,然后UCF文件和设计综合后生成NCF 文件,最后再经过实现后生成PCF

文件。UCF文件中描述管脚分配的语法为:NET “端口名称” LOC = 引脚编号;

10,FPGA实现乘累加可以调用Multiply Accumulator,其中bypass端口接低电平即可以实现乘累加。

11,语法错误:unexpected token: '\243' 。可能是由中文字符()导致的,将其改为英文格式即可。

12,if语句()中的><等比较大小的符号,比较的是无符号数,直接调用加减的话是直接的二进制数进行简单的加减运算,对于复杂的情况一般调用加减内核。

13,减法器内核实现a-b的功能,对于bypass有效时直接把b端口赋值给输出结果。14,除法器内核中Remainder Type选择Fractional则表示余数除以除数对应的小数,选择remainder则表示余数(整数)。Algorithm Type若选择Radix2则延时不可控制,但可以达到输入输出吞吐量相等。若选择High Radix则延时可以控制,但此时输入输出的吞吐量可能不相等,为了达到相等所以才需要一个ND(new data)端口,其中ND端口可以考虑接一个和输入数据同频率的时钟CLK_data,输入时钟需要加大,并且等于CLK_data*latency。

15,两个符号间的第一行数据相差4377个周期

FPGA硬件实战设计经验

TR_Con_ZD板卡设计经验总结 针对TR板卡的PCB布线一根线未动想到的TR板卡bank分配方法介绍 与原来在华为工作的师兄(他做的TR板卡的PCB)聊了一下,他说TR板卡的FPGA线序一根都没改。Bank分配是我来做的,原则是方便PCB走线。分配时候是参考下面的资料来分配的。 TR板卡结构图 XC6VSX315T-FF1759的bank管脚分布图

的上方,因此将FPGA逆时针转90°,如下图所示,这样PCB布线就比较方便了。

分配bank的时候没有考虑Bank在FPGA内部的分布图,如下图所示:

想到的硬件设计流程的东西 师兄说:“动一根线的话,都需要FPGA程序重新跑一遍,这需要浪费很多时间。”FPGA 程序?TR板卡的程序还没有呢!的确值得思考了,到底这个设计应该是按照怎样的一个流程。 在华为,是按照这样的流程进行的。 1.硬件设计人员将IO需求,板卡供电等情况反馈给逻辑设计人员 2.逻辑人员对所需的FPGA资源做评估,最终确定FPGA型号(硬件设计人员也可以参与 一起选型) 3.逻辑设计人员对FPGA进行bank分配,需要以下资源: a)硬件设计人员提供硬件设计框图 b)最好对所用的IO先画一个自己根据原理图框图分配的bank的原理图草图,导入 PCB后进行一下预布局,这样信号流程就清晰了。 逻辑人员根据上述资源进行bank的分配,因为他们对FPGA内部的资源最清楚。逻辑人员要兼顾PCB布局布线的方便,有时候不可能照顾都到布局布线的方便。这时候,就需要在硬件设计人员和FPGA设计人员之间来回折腾,最终兼顾双方,得到一个bank 分配方案。 4.FPGA人员根据bank分配,写一个测试评估的程序,如果能够跑通,时序满足设计需求, 说明现在的bank分配可以使用,如果出现严重的时序错误,那么就需要考虑重新分配bank,通过不断地调整,最终确定板卡的bank分配。 5.根据最终的bank分配方案设计原理图。

一个硬件工程师高手的设计经验分享(上)

推荐到论坛 一:成本节约 现象一:这些拉高/拉低的电阻用多大的阻值关系不大,就选个整数5K 吧 点评:市场上不存在5K 的阻值,最接近的是 4.99K(精度1%),其次是5.1K(精度5%),其成本分别比精度为20%的4.7K 高4倍和2 倍。20%精度的电阻阻值只有1、1.5、2.2、3.3、4.7、6.8几个类别(含10的整数倍);类似地,20%精度的电容也只有以上几种值,如果选了其它的值就必须使用更高的精度,成本就翻了几倍,却不能带来任何好处。 现象二:面板上的指示灯选什么颜色呢?我觉得蓝色比较特别,就选它吧 点评:其它红绿黄橙等颜色的不管大小(5MM 以下)封装如何,都已成熟了几十年,价格一般都在5毛钱以下,而蓝色却是近三四年才发明的东西,技术成熟度和供货稳定度都较差,价格却要贵四五倍。目前蓝色指示灯只用在不能用其它颜色替代的场合,如显示视频信号等。 现象三:这点逻辑用74XX 的门电路搭也行,但太土,还是用CPLD吧,显得高档多了 点评:74XX的门电路只几毛钱,而CPLD至少也得几十块,(GAL/PAL虽然只几块钱,但公司不推荐使用)。成本提高了N 倍不说,还给生产、文档等工作增添数倍的工作。现象四:我们的系统要求这么高,包括MEM、CPU、FPGA等所有的芯片都要选最快的 点评:在一个高速系统中并不是每一部分都工作在高速状态,而器件速度每提高一个等级,价格差不多要翻倍,另外还给信号完整性问题带来极大的负面影响。 现象五:这板子的PCB 设计要求不高,就用细一点的线,自动布吧 点评:自动布线必然要占用更大的PCB 面积,同时产生比手动布线多好多倍的过孔,在批量很大的产品中,PCB 厂家降价所考虑的因素除了商务因素外,就是线宽和过孔数量,它们分别影响到PCB 的成品率和钻头的消耗数量,节约了供应商的成本,也就给降价找到了 理由。 现象六:程序只要稳定就可以了,代码长一点,效率低一点不是关键 点评:CPU 的速度和存储器的空间都是用钱买来的,如果写代码时多花几天时间提高一下程序效率,那么从降低CPU 主频和减少存储器容量所节约的成本绝对是划算的。CPLD/FPGA设计也类似。 二:低功耗设计 现象一:我们这系统是220V供电,就不用在乎功耗问题了 点评:低功耗设计并不仅仅是为了省电,更多的好处在于降低了电源模块及散热系统的成本、

FPGACPLD数字电路设计经验

FPGA/CPLD数字电路设计经验分享 摘要:在数字电路的设计中,时序设计是一个系统性能的主要标志,在高层次设计方法中,对时序控制的抽象度也相应提高,因此在设计中较难把握,但在理解RTL电路时序模型的基础上,采用合理的设计方法在设计复杂数字系统是行之有效的,通过许多设计实例证明采用这种方式可以使电路的后仿真通过率大大提高,并且系统的工作频率可以达到一个较高水平。 关键词:FPGA数字电路时序时延路径建立时间保持时间 1 数字电路设计中的几个基本概念: 1.1 建立时间和保持时间: 建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器;保持时间(hold time)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,数据同样不能被打入触发器。数据稳定传输必须满足建立和保持时间的要求,当然在一些情况下,建立时间和保持时间的值可以为零。PLD/FPGA开发软件可以自动计算两个相关输入的建立和保持时间 注:在考虑建立保持时间时,应该考虑时钟树向后偏斜的情况,在考虑建立时间时应该考虑时钟树向前偏斜的情况。在进行后仿真时,最大延迟用来检查建立时间,最小延时用来检查保持时间。 建立时间的约束和时钟周期有关,当系统在高频时钟下无法工作时,降低时钟频率就可以使系统完成工作。保持时间是一个和时钟周期无关的参数,如果设计不合理,使得布局布线工具无法布出高质量的时钟树,那么无论如何调整时钟频率也无法达到要求,只有对所设计系统作较大改动才有可能正常工作,导致设计效率大大降低。因此合理的设计系统的时序是提高设计质量的关键。在可编程器件中,时钟树的偏斜几乎可以不考虑,因此保持时间通常都是满足的。

一个合格的FPGA工程师需要掌握哪些知识

一个合格的FPGA工程师需要掌握哪些知识?这里根据自己的一些心得总结一下,其他朋友可以补充啊。 1.Verilog语言及其于硬件电路之间的关系。 2.器件结构(最好熟练掌握Spartan3,Vertix4系列的器件结构,及其资源于Verilog行为描述方法的关系。)。 3.开发工具(熟练掌握Synplify,Quartus,ISE,Modelsim)。 4.数字电路(组合电路,触发器,特别是D触发器构成分频器,奇数倍分频占空比为50%,时序电路,并且能用Verilog语言描叙。)。 5.熟悉FPGA设计流程(仿真,综合,布局布线,时序分析)。 6.熟练掌握资源估算(特别是slice,lut,ram等资源的估算)。 7.同步设计原理。 8.熟练掌握基本概念(如建立时间,保持时间,流量(即所做FPGA设计的波特率)计算,延迟时间计算(所做FPGA设计),竞争冒险,消除毛刺的方法等等)。 9.具备具体设计经验(对应届生而言如毕业设计)。 10.良好的设计思路(流水线设计即熟称打拍子,在速率资源功耗之间的折中考虑)。 一个合格的FPGA工程师至少在以下三个方面的一个非常熟悉: 1.嵌入式应用 2.DSP应用 3.高速收发器应用 将自己的走过的弯路和总结的经验与大家分享一下,希望对您有一点点

的参考价值。 首先从先从如何成为一个合格的设计者说起吧!初学者觉得一切都是挑战,一切都新鲜,不知从何处下手。我总结了学习EDA逻辑设计的4个步骤,请拍砖! 1。首先,应该好好学习一下FPGA/CPLD的设计设计流程。 不要简单的以为就是设计输入-》仿真-》综合-》实现那么一回事,要抠细,要学精,要多问每个步骤的注意事项,区分相关步骤的联系和区别。比如要搞清楚功能仿真、综合后仿真、Translate后仿真、Map 后的仿真、布局布线后仿真的作用都是什么,什么时候应该做,什么时候可以不做这些仿真!学习清楚了设计流程最大的好处就是有利于培养良好的EDA设计习惯,日后会受益非浅! 2。关于设计输入和Coding Style。 设计输入最好学习HDL语言,Verilog、VHDL都可以,可以把状态机输入和原理图输入作为补充内容,但不是重点。我在前面的帖子已经反复强调了Coding Style的重要性。因为它是逻辑设计人员的一个基本业务素质。而且Coding Style不是看几篇文章,学几条原则就能够成为高手的,他需要您在工作中不断的体会和积累,在学习的最初,有Coding Style的意识,设计者就会有意的积累,对日后发展很有好处。反之则后患无穷。 3。培养硬件的意识,培养系统的观念。 我也在交流和授课的时候很强调硬件意识,如果从形式上看,逻辑设计随着智能化和优化手段的不断发展最后会越来越灵活,越来越简单。比

典型的FPGA设计开发流程

典型的FPGA 设计开发流程 (2011-10-02 16:08:17) 标签: 杂谈 分类: 专业总结 FPGA 的设计流程就是利用EDA 开发软件和编程工具对FPGA 芯片进行开发的过程。FPGA 的开发流程一般如图1所示,包括电路设计、设计输入、功能仿真、综合优化、综合后仿真、实现、布线后仿真、板级仿真以及芯片编程与调试等主要步骤。 图1 FPGA 开发的一般流程 1. 电路功能设计 在系统设计之前,首先要进行的是方案论证、系统设计和FPGA 芯片选择等准备工作。系统工程师根

据任务要求,如系统的指标和复杂度,对工作速度和芯片本身的各种资源、成本等方面进行权衡,选择合理的设计方案和合适的器件类型。一般都采用自顶向下的设计方法,把系统分成若干个基本单元,然后再把每个基本单元划分为下一层次的基本单元,一直这样做下去,直到可以直接使用EDA元件库为止。 2.设计输入 设计输入是将所设计的系统或电路以开发软件要求的某种形式表示出来,并输入给EDA工具的过程。常用的方法有硬件描述语言(HDL)和原理图输入方法等。原理图输入方式是一种最直接的描述方式,在可编程芯片发展的早期应用比较广泛,它将所需的器件从元件库中调出来,画出原理图。这种方法虽然直观并易于仿真,但效率很低,且不易维护,不利于模块构造和重用。更主要的缺点是可移植性差,当芯片升级后,所有的原理图都需要作一定的改动。目前,在实际开发中应用最广的就是HDL语言输入法,利用文本描述设计,可以分为普通HDL和行为HDL。普通HDL有ABEL、CUR 等,支持逻辑方程、真值表和状态机等表达方式,主要用于简单的小型设计。而在中大型工程中,主要使用行为HDL,其主流语言是Verilog HDL和VHDL。这两种语言都是美国电气与电子工程师协会(IEEE)的标准,其共同的突出特点有:语言与芯片工艺无关,利于自顶向下设计,便于模块的划分与移植,可移植性好,具有很强的逻辑描述和仿真功能,而且输入效率很高。 3.功能仿真 功能仿真,也称为前仿真,是在编译之前对用户所设计的电路进行逻辑功能验证,此时的仿真没有延迟信息,仅对初步的功能进行检测。仿真前,要先利用波形编辑器和HDL等建立波形文件和测试向量(即将所关心的输入信号组合成序列),仿真结果将会生成报告文件和输出信号波形,从中便可以观察各个节点信号的变化。如果发现错误,则返回设计修改逻辑设计。常用的工具有Model Tech公司的ModelSim、Sysnopsys公司的VCS和Cadence公司的NC-Verilog以及NC-VHDL等软件。虽然功能仿真不是FPGA开发过程中的必需步骤,但却是系统设计中最关键的一步。

(完整版)FPGA资深FAE的经验独白

骏龙科技Andrew —— FPGA资深FAE的经验独白 时间:2014-08-25 来源:elecfans 作者: 关键字:FPGA FAE骏龙科技 看似简单的几个问题,Andrew却回答的井井有条,小编已经没有办法有什么其他词语去形容了。本文Andrew不仅仅对FPGA入门学习流程做了详细的分享,更是对FPGA开发工作的要求分成大公司和小公司两个层面来分析。你能想象曾经从一个疏忽学业的人成为一名资深FAE的嘛? 1. 您认为想学FPGA的话,先学好什么才最重要? Andrew:我们玩FPGA的通常就是跟数字电路打交道,要想玩得转,必须先学习并掌握最最基础的数字电路和HDL硬件描述语言,当然这只是入门必备,实际上远远不够。个人拙见,要入行除了至少掌握一种FPGA的仿真及开发调试流程之外;起码还要了解一些模拟电路知识,掌握诸如电源纹波、时钟抖动、信号质量等经常需要测量的硬件参数的测试方法;起码还要掌握一种原理图和Layout设计软件,能够查看分析调试电路板上的电路模块,如电源、时钟、存储器、配置、I/O和高速收发器等模块;起码还要掌握一种单片机的开发流程,项目中难免有一些需要配置控制的需求,使用外置单片机或者内置ARM硬核或者其他软CPU来实现,简单又方便;由于本人水平有限,其他方面这里就不再赘述。 那么,针对FPGA入门学习的一般流程,简单总结一下,供朋友们参考,有经验的大牛可以绕道: 1.首先要有开发平台,把该准备的都准备好,磨刀不误砍柴工: 比如ALTERA的Quartus II软件、开发板和配置调试工具USB Blaster,以及仿真软件Modelsim SE。软件可以从网上下载,入门功能的许可的和谐方法一大堆;开发板和USB Blaster可以借,可以买,动手能力强的朋友,自己画一块也行。对于初学者,建议找一块有详细配套教程的开发板。 2. 对于新手来讲,按部就班地学习往往就是最快的学习方法: 照猫画虎尽管囫囵吞枣一知半解,但起码能把开发流程摸熟,能跑起来。刚拿到开发板,肯定是丈二和尚摸不着头脑。这个时候,建议先根据开发板的配套教程,把原理图上的各项模块功能厘清,把FPGA周围的电源、时钟、复位、配置、GPIO和连接器等的电路原理理一理分析分析。再按照配套教程中介绍的流程,把配套的测试工程跑通,在这个阶段,

FPGA学习心得

回想起自己学FPGA,已经有一段时间了,从开始的茫然,到后来的疯狂看书,设计开发板,调电路,练习各种FPGA实例,到最后能独立完成项目,一路走来,感受颇多,拿出来和大家分享,顺便介绍下自己的一点经验所得,希望对初学者有所帮助。 废话不说了,下面进入正题,学习FPGA我主要经历了这么几个阶段: ①、Verilog语言的学习,熟悉Verilog语言的各种语法。 ②、FPGA的学习,熟悉QuartusII软件的各种功能,各种逻辑算法设计,接口模块(RS232,LCD,VGA,SPI,I2c等)的设计,时序分析,硬件优化等,自己开始设计简单的FPGA 板子。 ③、NiosII的学习,熟悉NiosII的开发流程,熟悉开发软件(SOPC,NiosII IDE),了解NiosII 的基本结构,设计NiosII开发板,编写NiosII C语言程序,调试板子各模块功能。先来说说第一个阶段,现在主要的硬件描述语言有VHDL,Verilog两种,在本科时老师一般教VHDL,不过现在 Verilog用的人越来越多,其更容易上手(与C语言语法比较类似),也更灵活,现在的IC设计基本都用Verilog。像systemC,systemVerilog之类的应该还在萌芽阶段,以后可能会有较大发展。鉴于以上原因我选择了Verilog作为我学习的硬件描述语言。 其实有C语言的基础,学起Verilog的语言很简单,关键要有并行的概念,所有的module,assign,always都是并行的,这一点与软件语言有明显不同。这里推荐几本评价比较好的学习Verilog的书籍: ①、《verilog 数字系统设计教程》,这本书对于入门是一本很好的书,通俗易懂,让人很快上手,它里面的例子也不错。但本书对于资源优化方面的编程没有多少涉及到。 ②、《设计与验证Verilog HDL》,这本书虽然比较薄,但是相当精辟,讲解的也很深入,很多概念看了这本书有种豁然开朗的感觉,呵呵。 学习Verilog其实不用看很多书,基本的语法部分大家都一样,关键是要自己会灵活应用,多做练习。 Verilog语言学了一段时间,感觉自己可以编点东西,希望自己编的程序在板子上运行看看结果,下面就介绍我学习的第二个阶段。 刚开始我拿了实验室一块CPLD的开发板做练习,熟悉QuartusII的各种功能,比如IP的调用,各种约束设置,时序分析,Logiclock设计方法等,不过做到后面发现CPLD 的资源不太够(没有内嵌的RAM、不能用SignalTapII,LE太少等),而实验室没有FPGA开发板,所以就萌生了自己做FPGA开发板的意图,刚好Cadence我也学的差不多了,就花了几天时间主要研究了FPGA配置电路的设计,在板子上做了Jtag和AS下载口,在做了几个用户按键和LED,其他的口全部引出作为IO口,电路比较简单,板子焊好后一调就通了(心里那个爽啊...)。我选的FPGA是cycloneII系列的EP2C5,资源比以前的FPGA多了好几倍,还有PLL,内嵌的RAM,可以试试SignalTapII,用内嵌的逻辑分析仪测试引脚波形,对于FPGA的调试,逻辑分析仪是至关重要的。利用这块板子我完成了项目中的几个主要功能:RS232通信,指令译码,配置DDS,AD数据高速缓存,电子开关状态设置等,在实践中学习起来真的比平时快很多,用到什么学什么动力更大。这个时候我主要看的数据有这几本感觉比较好: ①、《Altera FPGA/CPLD 设计(基础篇)》:讲解一些基本的FPGA设计技术,以及QuartusII中各个工具的用法(IP,RTL,SignalProbe,SignalTapII,Timing Closure Floorplan,chip Editor等),对于入门非常好。 ②、《Altera FPGA/CPLD 设计(高级篇)》:讲解了一些高级工具的应用,LogicLock,时序约束很分析,设计优化,也讲述了一些硬件编程的思想,作为提高用。

从汇编、C语言到十年的FPGA开发设计,告诉你成长的经验

从汇编、C语言到十年的FPGA开发设计,告诉你成长的经验大学时代第一次接触FPGA至今已有10多年的时间,至今记得当初第一次在EDA实验平台上完成数字秒表、抢答器、密码锁等实验时那个兴奋劲。当时由于没有接触到HDL硬件描述语言,设计都是在MAX+plus II原理图环境下用74系列逻辑器件搭建起来的。 后来读研究生,工作陆陆续续也用过Quartus II、FoundaTIon、ISE、Libero,并且学习了verilogHDL语言,学习的过程中也慢慢体会到verilog的妙用,原来一小段语言就能完成复杂的原理图设计,而且语言的移植性可操作性比原理图设计强很多。 在学习一门技术之前我们往往从它的编程语言入手,比如学习单片机时,我们往往从汇编或者C语言入门。所以不少开始接触FPGA的开发人员,往往是从VHDL或者Verilog开始入手学习的。但我个人认为,若能先结合《数字电路基础》系统学习各种74系列逻辑电路,深刻理解逻辑功能,对于学习HDL语言大有裨益,往往会起到事半功倍的效果。当然,任何编程语言的学习都不是一朝一夕的事,经验技巧的积累都是在点滴中完成,FPGA设计也无例外。下面就以我的切身体会,谈谈FPGA设计的经验技巧。 我们先谈一下FPGA基本知识: 1.硬件设计基本原则 FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD 等可编程器件的基础上进一步发展的产物。它是作为专用集成电路领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。速度与面积平衡和互换原则: 一个设计如果时序余量较大,所能跑的频率远高于设计要求,能可以通过模块复用来减少整个设计消耗的芯片面积,这就是用速度优势换面积的节约; 反之,如果一个设计的时序要求很高,普通方法达不到设计频率,那么可以通过数据流串并转换,并行复制多个操作模块,对整个设计采用“乒乓操作”和“串并转换”的思想进

10年FPGA开发经验的工程师肺腑之言

10年FPGA开发经验的工程师肺腑之言 从大学时代第一次接触FPGA至今已有10多年的时间。至今记得当初第一次在EDA实验平台上完成数字秒表,抢答器,密码锁等实验时,那个兴奋劲。当时由于没有接触到HDL硬件描述语言,设计都是在MAX+plus II原理图环境下用74系列逻辑器件搭建起来的。后来读研究生,工作陆陆续续也用过Quartus II,Foundation,ISE,Libero,并且学习了verilogHDL语言,学习的过程中也慢慢体会到verilog的妙用,原来一小段语言就能完成复杂的原理图设计,而且语言的移植性可操作性比原理图设计强很多。 在学习一门技术之前我们往往从它的编程语言入手,比如学习单片机时,我们往往从汇编或者C语言入门。所以不少开始接触FPGA的开发人员,往往是从VHDL或者Verilog开始入手学习的。但我个人认为,若能先结合《数字电路基础》系统学习各种74系列逻辑电路,深刻理解逻辑功能,对于学习HDL 语言大有裨益,往往会起到事半功倍的效果。 当然,任何编程语言的学习都不是一朝一夕的事,经验技巧的积累都是在点滴中完成,FPGA设计也无例外。下面就以我的切身体会,谈谈FPGA设计的经验技巧。 1)看代码,建模型 只有在脑海中建立了一个个逻辑模型,理解FPGA内部逻辑结构实现的基础,才能明白为什么写Verilog和写C整体思路是不一样的,才能理解顺序执行语言和并行执行语言的设计方法上的差异。在看到一段简单程序的时候应该想到是什么样的功能电路。 例如: 上面这段代码实现的功能就是一个带使能端的2选1数据选择器,如下图所示。

再例如: 上面这段always实现的是带同步清零端的串并转换移位寄存器,位宽为width,下图为8位电路模型 当你具备了一定的识代码能力之后,你会发现原来Verilog不是那么的枯燥,只不过是一个个电路模型的拼搭而已。 2)组合逻辑中的if...else...与case 对于多输入端的组合逻辑来说,如果不需要考虑优先级应该尽量采用case语句来描述,这样综合出来的电路并行度要大一些,如果采用if...else...结构,综合出来的电路都是串行的,增大了信号时延路径。降低寄存器间组合路径的延迟是提高系统工作频率的主要手段,因此在完成相同功能的前提下应该尽量使用并行结构逻辑。

个人总结FPGA设计中Verilog编程的27条经验

个人总结Verilog编程27条经验 1.强烈建议用同步设计; 2.在设计时总是记住时序问题; 3.在一个设计开始就要考虑到地电平或高电平复位、同步或异步复位、上升沿 或下降沿触发等问题,在所有模块中都要遵守它; 4.在不同的情况下用if和case,最好少用if的多层嵌套(1层或2层比较合 适,当在3层以上时,最好修改写法,因为这样不仅可以reduce area,而且可以获得好的timing); 5.在锁存一个信号或总线时要小心,对于整个design,尽量避免使用latch, 因为在DFT时很难test; 6.确信所有的信号被复位,在DFT时,所有的FlipFlop都是controllable; 7.永远不要再写入之前读取任何内部存储器(如SRAM); 8.从一个时钟到另一个不同的时钟传输数据时用数据缓冲,他工作像一个双时 钟FIFO(是异步的),可以用Async SRAM搭建Async FIFO; 9.在VHDL中二维数组可以使用,它是非常有用的。在VERILOG中他仅仅可以使 用在测试模块中,不能被综合; 10.遵守register-in register-out规则; 11.像synopsys的DC的综合工具是非常稳定的,任何bugs都不会从综合工具中 产生 12.确保FPGA版本与ASIC的版本尽可能的相似,特别是SRAM类型,若版本一致 是最理想的,但是在工作中FPGA版本一般用FPGA自带的SRAM,ASIC版本一般用厂商提供的SRAM; 13.在嵌入式存储器中使用BIST; 14.虚单元和一些修正电路是必需的; 15.一些简单的测试电路也是需要的,经常在一个芯片中有许多测试模块; 16.除非低功耗不要用门控时钟,强烈建议不要在design中使用gate clock; 17.不要依靠脚本来保证设计。但是在脚本中的一些好的约束能够起到更好的性 能(例如前向加法器); 18.如果时间充裕,通过时钟做一个多锁存器来取代用MUX; 19.不要用内部tri-state, ASIC需要总线保持器来处理内部tri-state,如IO cell; 20.在top level中作pad insertion; 21.选择pad时要小心(如上拉能力,施密特触发器,5伏耐压等),选择合适的 IO cell; 22.小心由时钟偏差引起的问题; 23.不要试着产生半周期信号; 24.如果有很多函数要修正,请一个一个地作,修正一个函数检查一个函数; 25.在一个计算等式中排列每个信号的位数是一个好习惯,即使综合工具能做; 26.不要使用HDL提供的除法器; 27.削减不必要的时钟。它会在设计和布局中引起很多麻烦,大多数FPGA有1- 4个专门的时钟通道;

FPGA学习步骤30页

FPGA学习步骤,我的体会 FPGA在目前应用领域非常,在目前的单板设计里面,几乎都可以看到它的身影。从简单的逻辑组合,到高端的图像、通信协议处理,从单片逻辑到复杂的ASIC原型验证,从小家电到航天器,都可以看到FPGA应用,它的优点在这里无庸赘述。从个人实用角度看,对于学生,掌握FPGA可以找到一份很好的工作,对于有经验的工作人员,使用fgpa可以让设计变得非常有灵活性。掌握了fpga的设计,单板硬件设计就非常容易(不是系统设计),特别是上大学时如同天书的逻辑时序图,看起来就非常亲切。但fpga的入门却有一定难度,因为它不像软件设计,只要有一台计算机,几乎就可以完成所有的设计。fpga的设计与硬件直接相关,需要实实在在的调试仪器,譬如示波器等。这些硬件设备一般比较昂贵,这就造成一定的入门门槛,新人在入门时遇到一点问题或者困难,由于没有调试设备,无法定位问题,最后可能就会放弃。其实这时如果有人稍微指点一下,这个门槛很 容易就过去。 我用FPGA做设计很多年了,远达不到精通的境界,只是熟悉使用,在这里把我对fpga的学习步骤理解写出来,仅是作为一个参考,不对的地方,欢迎大家讨 论和指正。 1、工欲善其事,必先利其器。

计算机必不可少。目前FPGA应用较多的是Altera 和xilinx这两个公司,可以选择安装quartusII或者ISE 软件。这是必备的软件环境。 硬件环境还需要下载器、目标板。虽然有人说没有下载器和目标板也可学习fpga,但那总是纸上谈兵。这就像谈女朋友,总是嘴上说说,通个电话,连个手都没牵,能说人家是你朋友?虽说搭建硬件环境需要花费,但想想,硬件环境至多几百元钱,你要真的掌握FPGA的设计,起薪比别人都不止高出这么多。这点花费算什么? 2、熟悉verilog语言或者vhdl语言,熟练使用 quartusII或者ISE软件。 VHDL和verilog各有优点,选择一个,建议选择verilog。熟练使用设计软件,知道怎样编译、仿真、下载 等过程。 起步阶段不希望报一些培训班,除非你有钱,或者运气好,碰到一个水平高、又想把自己的经验和别人共享的培训老师,不然的话,培训完后总会感觉自己是一个冤大头。入门阶段可以在利用网络资源完成。 3、设计一个小代码,下载到目标板看看结果 此时可以设计一个最简答的程序,譬如点灯。如

基于verilog的FPGA编程经验总结

基于verilog的FPGA编程经验总结 用了半个多月的ISE,几乎全是自学起来的,碰到了很多很多让人DT好久的小问题,百度也百不到,后来还是都解决了,为了尽量方便以后的刚学ISE的童鞋不再因为一些小问题而纠结,把这几天的经验总结了一下。好了,废话不多说,上料! 1.用ISE仿真的时候.所用变量一定要初始化. ISE默认初始量为”XXXXX”, 而Quarters是默认为”00000”的, 其实实际上, 下到FPGA里后也是默认为0的,只是可以说ISE严谨得令人DT吧. 比如说用一个累加器, result = A+B+result ,必须保证在某一刻A, B, result都为定值时, 之后的数据才不会一直为”XXXXX”; 2.所有的中间线(就是module间用来传递参数的信号)都要用wire定义一下. 这个ise一般会提醒的; 3.任何一个warning都是有用的; 4.debug时要多把中间变量设成输出,然后查看仿真波形; 5.其实,新版本还是比较好用的.虽然取消了test bench wave 功能. 但是最好学会编测试文件,后期比test bench wave好用, 而且貌似一旦测试信号太多,test bench wave就不

显示某些输出了; 6. warning: Nod is unconnected. 表明所在的模块没用被执行,一般是参数没进来, 或者进来的参数不对(“XXXX”之类)的原因引起的. 7.建立rom时候,Error: sinrom can’t be resolved. 因为在把程序挪地方的时候,sinrom.ngc文件没有一同拷过来. 8.把”XXXXX”信号处理掉的一个方法可以是: 从信号中随意选出一位if (data[0] == 0) ....; else if (data[0] == 1).... else data = 0; 就可以把”XXXX”信号给清成”0000”了. 可以很好的解决1中仿真的问题. 9.如果某一个不是时钟的信号被当作周期信号来用的话,就会出现WARNING:Route:455 - CLK Net:trn_clk_OBUF may have excessive skew. because 0 CLK pins and 1 NON_CLK pins failed to route using a CLK template 不管也行. 10. 一开始用FPGA时不要害怕,用ucf文件配好引脚,直接LOAD,先不用管什么区域约束,以后进阶了再学. . 11.暂时就记得这些,以后再补充吧.

FPGA研发牛人心得总结

FPGA研发之道 FPGA是个什么玩意? FPGA是个什么玩意? 首先来说: FPGA是一种器件。其英文名feild programable gate arry 。很长,但不通俗。通俗来说,是一种功能强大似乎无所不能的器件。通常用于通信、网络、图像处理、工业控制等不同领域的器件。就像ARM、DSP等嵌入式器件一样,成为无数码农码工们情感倾泻而出的代码真正获得生命的地方。只不过,一样的编程,却是不一样的思想。嵌入式软件人员看到的是C。而FPGA工程师看到是硬件描述语言,verilog或VHDL。软件看到是函数、对象、重构。FPGA工程师则是模块、流水、复用。从现象上看,都是代码到下载程序再到硬件上运行。不能只看现象而忽略本质。FPGA 开发本质上是设计一颗IC,“**的身子,丫鬟的命”不是所有verilog/VHDL代码,都能获得青睐去流片成为真正的芯片,而更多的则成为运行在FPGA器件上,成为完成相同功能的替代品。其实现的功能却一点也不逊色于百万身价流片的近亲。从而成为独树一帜的行业。 FPGA开发的流程,是通过verilog/VHDL等硬件描述语言通过EDA工具编译、综合、布局布线成为下载文件,最终加载到FPGA器件中去,完成所实现的功能。那硬件描述语言描述的是什么?这里描述的就是组合逻辑电路和时序逻辑电路。组合逻辑电路就是大家所熟知的与门、或门、非门。时序逻辑电路则是触发器。数字芯片上绝大部分逻辑都是这两种逻辑实现的。也就是基本上每个电子行业的人所学过的数字电路。顺便说一下,感谢香农大师,在其硕士毕业论文<继电器与开关电路的符号分析>就奠定了数字电路的的根基。只

FPGA学习心得体会

篇一:fpga学习心得大报告 《fpga技术基础》学习报告 --课程内容学习心得 姓名: 学号:年级专业: 指导教师: 瞿麟 201010401128 自动化101薛小军摘要从开始学fpga到现在粗略算来的话,已经有3个多月了,就目前而言,我并不确定自己算不算高手们所说的入门了,fpga学习总结。但是不管现在的水平如何,现在就总结一下自己学习它的感受或一些认识吧。 关键词 fpga de2板 quartusii软件 verilog语言 引言 fpga是什么?fpga现状?怎样学习fpga? fpga是现场可编程门阵列的简称,fpga的应用领域最初为通信领域,但目前,随着信息产业和微电子技术的发展,可编程逻辑嵌入式系统设计技术已经成为信息产业最热门的技术之一,应用范围遍及航空航天、医疗、通讯、网络通讯、安防、广播、汽车电子、工业、消费类市场、测量测试等多个热门领域。并随着工艺的进步和技术的发展,向更多、更广泛的应用领域扩展。越来越多的设计也开始以asic转向fpga, fpga正以各种电子产品的形式进入了我们日常生活的各个角落。 正文 (1)掌握fpga的编程语言 在学习一门技术之前我们往往从它的编程语言开始,如同学习单片机一样,我们从c语言开始入门,当掌握了c语言之后,开发单片机应用程序也就不是什么难事了。学习fpga也是如此,fpga的编程语言有两种:vhdl和verilog,这两种语言都适合用于fpga的编程。 (2)fpga实验尤为重要 除了学习编程语言以外,更重要的是实践,将自己设计的程序能够在真正的fpga里运行起来,这时我们需要选一块板子进行实验,我们选择使用de2板才进行试验。 初识de2开发板 de2的资源de2的资源非常丰富,包括 1. 核心的fpga芯片-cyclone ii 2c35 f672c6,从名称可以看出,它包含有35千个le,在altera的芯片系列中,不算最多,但也绝对够用。altera下载控制芯片- epcs16以及usb-blaste对jtag的支持。 2.存储用的芯片有: 512-kb sram,8-mbyte sdram,4-mbyte flash memory 3. 经典io配置:拥有4个按钮,18个拨动开关,18个红色发光二极管,9个绿色发光二极管,8个七段数码管,16*2字符液晶显示屏, 4. 超强多媒体:24位cd音质音频芯片wm8731(mic输入+linein+ 标准音频输出),视频解码芯片(支持ntsc/pal制式),带有高速dac视屏输出vga模块。 5.更多标准接口:通用串行总线usb控制模块以及a、b型接口,sd card接口,irda红外模块, 10/100m自适应以太网络适配器,rs-232标准串口, ps/2键盘接口 6.其他:50m,27m晶振各一个,支持外部时钟, 80针带保护电路的外接io 7.此外还有:配套的光盘资料,qutuarsii软件,niosii 6.0ide,例程与说明文档。 关于管脚分配 当我们创建一个fpga用户系统的时候,到最后要做的工作就是下载,在下载之前必须根据芯片的型号分配管脚,这样才能将程序中特定功能的管脚与实际中的fpga片外硬件电路一一对

第8章FPGA设计技巧与设计经验介绍

第1节基本设计技巧 乒乓操作 1 操作过程 2 从外部看,数据流没有停顿的进出 3 用低速模块处理高速数据流 4 实际上,用两个缓冲模块实现了串并转换,两个预处理模块并行,面积换速度;串并转换 串并转换 1 FPGA设计的一个重要技巧 2 数据流处理的常用手段 3 面积与速度互换思想的直接体现 串并转换的实现方法多种多样,根据数据的排序和数量的要求,可以选用: 1 寄存器:小设计 2 RAM:数据量比较大的情况 3 状态机:复杂的串并转换 流水线操作 1 流水线处理是高速设计中的一个常用设计手段 2 如果某个设计的处理流程分为若干步骤,而且整个数据处理是“单流向”的,即没有反馈或

者迭代运算,前一个步骤的输出是下一个步骤的输入,则可以考虑采用流水线设计方法提高系统的工作频率。 3 将适当划分的n个操作步骤单向串连起来 4 数据流在流水线各个部分的处理,从时间上看是连续的 5 数据流依次流经n个模块,完成每个步骤的操作 6 流水线设计时,时序要进行合理安排,每个操作步骤的划分要合理,仔细考虑各个步骤间的数据流量 7 如果前级操作时间恰好等于后级的操作时间,设计最为简单,前级直接输出到后级的输入即可 8 如果前级操作时间大于后级的操作时间,则后级会经常空闲。可以对前级的输出数据适当缓存,再输出到后级的输入端如果前级操作时间小于后级的操作时间,则必须通过复制逻辑,将数据流分流和并行预处理,或者在前级对数据采用存储、后处理方式,否则会造成后级数据溢出 数据接口的同步 1 两种易出问题的设计习惯 --手工加入非门调整数据延迟,从而保证本级时钟对上级数据的建立、保持时间的要求 --为了有稳定的采样,时而用正沿打一下数据,时而用负沿打一下数据,以调整数据的采样位置 2 问题 --一旦芯片更新换代,或者移植到其它器件系列的芯片上,采样实现必须重新设计 --这两种做法造成电路实现的时序余量不够,一旦外界条件变换(比如温度升高),采样时序就有可能紊乱,造成电路不能完成预定的功能 3 如果输入数据的节拍和本系统处理时钟同频,可以直接用本系统的主时钟对输入数据寄存器采样,完成输入数据的同步化如果输入数据的节拍和本系统处理时钟同频,可以直接用本系统的主时钟对输入数据寄存器采样,完成输入数据的同步化 4 为了避免异步时钟域产生错误的采样数据,一般使用RAM、FIFO缓存的方法完成异步时钟域的数据转换。在输入端口使用上级时钟写数据,在输出端口使用本级时钟读数据,就非 第2节FPGA设计思考 硬件描述语言的层次含义

SignalTap_ELA的FPGA在线调试技术

经验交流 EXPERIENCE EXC HAN GE Signal T apII ELA 的FPGA 在线调试技术 刘政,蒋志勇 (桂林航天工业高等专科学校电子工程系,桂林541004) 在设计基于FPGA 的电子系统时,一般需要用示波器、逻辑分析仪等外部测试设备进行输入输出信号的测试,借助测试探头把信号送到测试设备上进行观察分析。当然,前提是需要保留足够多的引脚,以便能选择信号来驱动I/O 进行测试。但是外部的测试设备在测试FPGA 系统时,常会遇到这样的情况:FPGA 的I/O 引脚数量不够丰富,PCB 布线和封装工艺复杂导致I/O 引脚引出困难,外部测试探头有影响FPGA 信号时序和完整性的可能 [1-2] 。 如果能在FP GA 内部嵌入具有外部测试设备功能的逻辑测试模块,那么以上问题就可以一一解决。Signal 2 Tap II 就是这样一种嵌入式逻辑分析器(embedded logic analyzer ),简称为Signal Tap II ELA 。它是Quart usII 软件 中集成的内部逻辑分析软件,使用它可以实时观察内部信号波形,方便用户查找设计的缺陷。 1SignalTapII E LA 的原理 S ignal T apII ELA 是Quartus 软件中第二代系统级调试 工具。将Signal T apII ELA 代码和系统逻辑代码组合交由 QuartusII 编译、综合、布局布线,生成sof 文件中内含Sign 2al T apII ELA ,把sof 文件配置到FPG A 内。FPGA 运行时, 一旦满足待测信号的触发条件,Signal T apII ELA 就立即启动,按照采样时钟的频率捕获待测信号数据并暂存于FP 2 G A 片内的RAM 中,采样数据不断刷新片内存储器,最后 通过J T A G 口将捕获的信号从片内RAM 传至Quartus II 实时显示。Signal T apII ELA 的原理流程如图1 所示。 图1 SignalT apII E LA 原理流程 实际工程中,加入Signal Tap II ELA 不会影响系统原有的逻辑功能。 2SignalTapII E LA 的配置 Signal Tap II ELA 基本配置过程[3] 如下: ①添加采样时钟。Signal Tap II ELA 在时钟的上升沿进行采样,可以使用设计系统中的任何信号作为采样时钟,根据Altera 公司的建议最好使用同步系统全局时钟作为采样时钟。但是在实际应用中,多数使用独立的采样时钟,这样能采样到被测系统中的慢速信号,或与工作时钟相关的信号。当然采样时钟的频率要大于被测信号的最高频率,否则被测信号波形会有较大误差。 ②定义采样深度。采样深度决定了待测信号采样存储的大小,而可以采样的深度是根据设计中剩余的RAM 块容量和待测信号的个数决定的。若待测信号较多,则在同样I/O Bank 个数情况下采样深度较浅。待测信号个数的增减和采样深度的深浅会直接改变RAM 块的占用情况,采样深度的范围为0~128K B 。 ③定义RAM 类型。设置占用片内何种RAM 块资源,随着采样深度的改变,RAM 块的数据线和地址线宽度可以分割成多种组合。例如:采样深度是1K B ,RAM 数据线、地址线可以分割成2×512或4×256等多种组合。依此类推。 ④定义触发位置。Pre trigger position 表示采样到的数据12%为触发前,88%为触发后;Center trigger position 表示采样的数据处于触发前后各一半;Post trigger posi 2 tion 表示采样到的数据88%为触发前,12%为触发后。 ⑤触发条件级数设置。Signal Tap II ELA 支持多触发级的触发方式,最多可支持10级触发,帮助滤除不相干的数据,更快地找到需要的数据。若有多级触发条件,首先分析第一级触发条件。若第一级为TRU E ,则转到分析第二级是否满足,直到分析完所有触发条件均为TRU E 才最终触发时钟采样数据。 ⑥触发条件。设定约束性的触发条件。可以允许单个信号的独立触发条件Basic ,直接采用单个外部或设计模块内部的信号;也可以允许多个节点信号的组合触发条 件Advanced ,构成触发函数的触发条件方程。例如:使能

9年FPGA工作经验总结

9年FPGA工作经验总结 三年的,用altera的c3和c4 做led控制卡。2年的用lattice的MACHXO-XO2和ECP2做了视频和网络光端机,3年的XILINX的SPARTAN 6 做了视频ISP处理,现在一年的xilinx的ZYNQ做机器视觉。 第一个,9年的fpga,说起来,给我感觉fpga写代码牛逼的人,都是写着看不懂的代码。基本上的代码都是小逻辑做的。大逻辑做的都是沙雕。 第二个,知道各类高速接口,做fpga只会玩玩串口,I2C,SPI还有DVI,这种低能儿工资也就是低于几千块钱。高速总线,列入DDR3控制,双边沿,SERDRES,这个是必须知道怎么用,怎么调试。好多沙雕就知道下载代码,有问题也不知道从哪里入手。 第三个,知道时序约束,fpga很傻的元件,你经常发现,他自己不知道哪个是时钟,要求跑多少。还有各类并行总线,要求相位抖动控制多少。还有不同时钟不要去约束。特别是用低端器件,用上了60%资源的人,经常无缘无故的bug的,低于五位数的工资基本不知道啥原因的。 第四个,也就是我一直遗憾的东西,行业的算法和需求了。有些沙雕一辈子就是打工的命。一年除去房租和吃饭,回去大农村还被邻居鄙视大学生读书无用。所以有些时候,要学会沉淀。也许我当年在led行业待了9年,我估计现在已经接无数的兼职和订单,少数一年买个宝马x1没有问题。哪像现在,自己出来真怕死。 就说这些。我转行了。一把眼泪。有人问我,是不是工资太少了。拿着别人要饭的钱,都是吊丝。想想你农村的父母和还有孩子吧。好好想点更快的路子。做硬件工程师,是做产品的第一步。因为你要面对很多销售沙雕,他们很有钱,但是天花乱坠的需求,这个时候,你只有学会硬件才能制造硬件方案。然后找软件工程师一起协作做项目。我以前的兼职项目就死在这里了。(小编注:其实楼主的工资不算低) 而且FPGA工程师,也必须熟悉硬件。连原理图都看不懂,你还做啥这么没前途的东西。 还有一个ZYNQ平台,fpga 工程师要学会arm的裸跑系统。因为我被傻x害惨了。

相关文档
最新文档