您的位置 首页 5G

十年FPGA开发经历工程师谈规划技巧

从大学时代第一次接触FPGA至今已有10多年的时间,至今记得当初第一次在EDA实验平台上完成数字秒表、抢答器、密码锁等实验时那个兴奋劲。当时由于没有接

从大学年代第一次触摸FPGA至今已有10多年的时刻,至今记住最初第一次在EDA试验平台上完结数字秒表、抢答器、密码锁等试验时那个振奋劲。其时由于没有触摸到HDL硬件描绘言语,规划都是在MAX+plus II原理图环境下用74系列逻辑器材树立起来的。后来读研究生,作业陆陆续续也用过Quartus II、FoundaTIon、ISE、Libero,并且学习了verilogHDL言语,学习的进程中也渐渐领会到verilog的妙用,本来一小段言语就能完结杂乱的原理图规划,并且言语的移植性可操作性比原理图规划强许多。

在学习一门技能之前咱们往往从它的编程言语下手,比如学习单片机时,咱们往往从汇编或许C言语入门。所以不少开端触摸FPGA的开发人员,往往是从VHDL或许Verilog开端下手学习的。但我个人认为,若能先结合《数字电路根底》体系学习各种74系列逻辑电路,深刻了解逻辑功用,关于学习HDL言语大有裨益,往往会起到事半功倍的效果。

FPGA规划

当然,任何编程言语的学习都不是一朝一夕的事,经历技巧的堆集都是在点滴中完结,FPGA规划也无破例。下面就以我的切身领会,谈谈FPGA规划的经历技巧。

咱们先谈一下FPGA底子常识:

1、硬件规划底子准则

FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器材的根底上进一步开展的产品。它是作为专用集成电路领域中的一种半定制电路而呈现的,既处理了定制电路的缺乏,又克服了原有可编程器材门电路数有限的缺陷。

(1)速度与面积平衡和交换准则:

一个规划假如时序余量较大,所能跑的频率远高于规划要求,能能够经过模块复用来削减整个规划消耗的芯片面积,这便是用速度优势换面积的节约;

反之,假如一个规划的时序要求很高,一般方法达不到规划频率,那么能够经过数据流串并转化,并行仿制多个操作模块,对整个规划选用“乒乓操作”和“串并转化”的思想进行处理,在芯片输出模块处再对数据进行“并串转化”。然后完结了用面积仿制交换速度的进步。

(2)硬件准则:了解HDL实质

(3)体系准则:全体把握

(4)同步规划准则:规划时序安稳的底子准则

2、Verilog作为一种HDL言语,对体系行为的建模方法是分层次的。比较重要的层次有体系级、算法级、寄存器传输级、逻辑级、门级、电路开关级。

3、实践作业中,除了描绘仿真测验鼓励时运用for循环句子外,很少在RTL级编码中运用for循环,这是由于for循环会被归纳器打开为一切变量状况的履行句子,每个变量独立占用寄存器资源,不能有用的复用硬件逻辑资源,构成巨大的糟蹋。一般常用case句子替代。

4、 if…else…和case在嵌套描绘时是有很大差异的,if…else…是有优先级的,一般来说,第一个if的优先级最高,最终一个else的优先级最低。而case句子是平行句子,它是没有优先级的,而树立优先级结构需求消耗许多的逻辑资源,所以能用case的当地就不要用if…else…句子。

弥补:1.也能够用if…; if…; if…;描绘不带优先级的“平行”句子。

5、FPGA一般触发器资源比较丰厚,而CPLD组合逻辑资源更丰厚。

6、FPGA和CPLD的组成:

FPGA底子有可编程I/O单元、底子可编程逻辑单元、嵌入式块RAM、丰厚的布线资源、底层嵌入功用单元和内嵌专用硬核等6部分组成。

CPLD的结构相比照较简略,首要由可编程I/O单元、底子逻辑单元、布线池和其他辅佐功用模块组成。

7、Block RAM:

3种块RAM结构,M512 RAM(512bit)、M4K RAM(4Kbit)、M-RAM(64Kbit)。

M512 RAM:适合做一些小的Buffer、FIFO、DPRAM、SPRAM、ROM等;

M4K RAM: 适用于一般的需求

M-RAM: 适合做大块数据的缓冲区。

Xlinx 和 LatTIce FPGA的LUT能够灵敏装备成小的RAM、ROM、FIFO等存储结构,这种技能被称为分布式RAM。

弥补:可是在一般的规划中,不发起用FPGA/CPLD的片内资源装备成许多的存储器,这是处于本钱的考虑。所以尽量选用外接存储器。

8、善用芯片内部的PLL或DLL资源完结时钟的分频、倍频率、移持平操作,不只简化了规划,并且能有用地进步体系的精度和作业安稳性。

9、异步电路和同步时序电路的差异

异步电路:

电路中心逻辑有用组合电路完结;

异步时序电路的最大缺陷是简略发生毛刺;

不利于器材移植;

不利于静态时序剖析(STA)、验证规划时序功用。

同步时序电路:

电路中心逻辑是用各种触发器完结;

电路首要信号、输出信号等都是在某个时钟沿驱动触发器发生的;

同步时序电路能够很好的防止毛刺;

利于器材移植;

利于静态时序剖析(STA)、验证规划时序功用。

10、同步规划中,安稳牢靠的数据采样有必要遵照以下两个底子准则:

(1)在有用时钟沿抵达前,数据输入至少现已安稳了采样寄存器的Setup时刻之久,这条准则简称满意Setup时刻准则;

(2)在有用时钟沿抵达后,数据输入至少还将安稳坚持采样寄存器的Hold时钟之久,这条准则简称满意Hold时刻准则。

11、同步时序规划注意事项:

异步时钟域的数据转化。

组合逻辑电路的规划方法。

同步时序电路的时钟规划。

同步时序电路的推迟。同步时序电路的推迟最常用的规划方法是用分频或许倍频的时钟或许同步计数器完结所需的推迟,比照较大的和特别守时要求的延时,一般用高速时钟发生一个计数器,依据计数发生推迟;关于比较小的推迟,能够用D触发器打一下,这样不只能够使信号延时了一个时钟周期,并且完结了信号与时钟的初度同步。在输入信号采样和添加时序束缚余量中运用。别的,还有用行为级方法描绘推迟,如“#5 a《=4’0101;”这种常用于仿真测验鼓励,可是在电路归纳时会被疏忽,并不能起到推迟效果。

Verilog 界说的reg型,不一定归纳成寄存器。在Verilog代码中最常用的两种数据类型是wire和reg型,一般来说,wire型指定的数据和网线经过组合逻辑完结,而reg型指定的数据不一定便是用寄存器完结。

12、常用规划思想与技巧

(1)乒乓操作;

(2)串并转化;

(3)流水线操作;

(4)异步时钟域数据同步。是指如安在两个时钟不同步的数据域之间牢靠地进行数据交换的问题。数据时钟域不同步首要有两种状况:

两个域的时钟频率相同,可是相差不固定,或许相差固定可是不可测,简称为同频异相问题。

两个时钟频率底子不同,简称异频问题。

两种不引荐的异步时钟域操作方法:一种是经过添加Buffer或许其他门延时来调整采样;另一种是盲目运用时钟正负沿调整数据采样。

13、模块区分底子准则:

(1)对每个同步时序规划的子模块的输出运用寄存器(用寄存器切割同步时序模块准则)。

(2)将相关逻辑和能够复用的逻辑区分在同一模块内(照应体系准则)。

(3)将不同优化方针的逻辑分隔。

(4)将送束缚的逻辑归到同一模块。

(5)将存储逻辑独立区分红模块。

(6)适宜的模块规划。

(7)顶层模块最好不进行逻辑规划。

14、组合逻辑的注意事项

(1)防止组合逻辑反应环路(简略毛刺、振动、时序违规等)。

处理:A、紧记任何反应回路有必要包括寄存器;B、查看归纳、完结陈述的warning信息,发现反应回路(combinaTIonal loops)后进行相应修正。

(2)替换推迟链。

处理:用倍频、分频或许同步计数器完结。

(3)替换异步脉冲发生单元(毛刺生成器)。

处理:用同步时序规划脉冲电路。

(4)慎用锁存器。

处理:A、运用齐备的if…else句子;B、查看规划中是否含有组合逻辑反应环路;C、对每个输入条件,规划输出操作,对case句子设置default 操作。特别是在状况机规划中,最好有一个default的状况搬运,并且每个状况最好也有一个default的操作。D、假如运用case句子时,特别是在规划状况机时,尽量附加归纳束缚特点,归纳为彻底条件case句子。

小技巧:仔细查看归纳器的归纳陈述,现在大多数的归纳器对所归纳出的latch都会报“warning”,经过归纳陈述能够较为方便地找出无意中生成的latch。

15、时钟规划的注意事项

1)同步时序电路引荐的时钟规划方法:

时钟经大局时钟输入引脚输入,经过FPGA内部专用的PLL或DLL进行分频/倍频、移持平调整与运算,然后经FPGA内部大局时钟布线资源驱动抵达芯片内一切寄存器和其他模块的时钟输入端。

FPGA规划者的5项底子功:仿真、归纳、时序剖析、调试、验证。

关于FPGA规划者来说,练好这5项底子功,与用好相应的EDA东西是同一进程,对应联系如下:

1. 仿真:Modelsim, Quartus II(Simulator Tool)

2. 归纳:Quartus II (Compiler Tool, RTL Viewer, Technology Map Viewer, Chip Planner)

3. 时序:Quartus II (TImeQuest Timing Analyzer, Technology Map Viewer, Chip Planner)

4. 调试:Quartus II (SignalTap II Logic Analyzer, Virtual JTAG, Assignment Editor)

5. 验证:Modelsim, Quartus II(Test Bench Template Writer)

把握HDL言语尽管不是FPGA规划的悉数,可是HDL言语对FPGA规划的影响贯穿于整个FPGA规划流程中,与FPGA规划的5项底子功是相得益彰的。

关于FPGA规划者来说,用好“HDL言语的可归纳子集”能够完结FPGA规划50%的作业——规划编码。

练好仿真、归纳、时序剖析这3项底子功,关于学习“HDL言语的可归纳子集”有如下协助:

1. 经过仿真,能够调查HDL言语在FPGA中的逻辑行为。

2. 经过归纳,能够调查HDL言语在FPGA中的物理完结方法。

3. 经过时序剖析,能够剖析HDL言语在FPGA中的物理完结特性。

关于FPGA规划者来说,用好“HDL言语的验证子集”,能够完结FPGA规划别的50%的作业——调试验证。

1. 树立验证环境,经过仿真的手法能够查验FPGA规划的正确性。

2. 全面的仿真验证能够削减FPGA硬件调试的作业量。

3. 把硬件调试与仿真验证方法结合起来,用调试处理仿真未验证的问题,用仿真确保现已处理的问题不在调试中再现,能够树立一个回归验证流程,有助于FPGA规划项意图保护。

FPGA 规划者的这5项底子功不是孤立的,有必要结合运用,才干完结一个完好的FPGA规划流程。反过来说,经过完结一个完好的规划流程,才干最有用地操练这5项底子功。对这5项底子功有了开始知道,就能够逐一深化学习一些,然后把学到的常识再次用于完好的规划流程。如此重复,就能够逐渐进步规划水平。选用这样的按部就班、螺旋式上升的方法,只需经过培训入了门,就能够自学自练,自我进步。

市面上出售的有关FPGA规划的书本为了确保结构的完好性,对 FPGA规划的每一个方面分隔介绍,每一方面尽管深化,可是由于短少其他相关方面的支撑,读者很难付诸实践,只要通读彻底书才干对FPGA规划取得一个全体的知道。这样的书本,作为工程培训指导书不可,能够作为某一个方面进阶的参考书。

关于新入职的职工来说,他们往往对FPGA的全体规划流程有了开始知道,5项底子功的某几个方面或许很厚实。可是由于某个或某几个方面才干的短缺,约束了他们单独完结整个规划流程的才干。入职培训的意图便是协助他们把握全体规划流程,培育自我获取信息的才干,经过几个规划流程来回的练习,构成自我促进、自我开展的良性循环。在这一进程中,跟着对作业触及的常识的广度和深度的知道逐渐明晰,新职工的自信心也会逐渐增强,对个人的开展方向也会逐渐清晰,才干积极主动地参加到工程项目中来。

最终总结几点:

1)看代码,建模型

只要在脑海中树立了一个个逻辑模型,了解FPGA内部逻辑结构完结的根底,才干了解为什么写Verilog和写C全体思路是不一样的,才干了解次序履行言语和并行履行言语的规划方法上的差异。在看到一段简略程序的时分应该想到是什么样的功用电路。

2)用数学思想来简化规划逻辑

学习FPGA不只逻辑思想很重要,好的数学思想也能让你的规划化繁为简,所以啊,那些看见高数就头疼的童鞋需求注重一下这门课哦。举个简略的比如,比如有两个32bit的数据X[31:0]与Y[31:0]相乘。当然,不管Altera仍是Xilinx都有现成的乘法器IP核能够调用,这也是最简略的方法,可是两个32bit的乘法器将消耗许多的资源。那么有没有节约资源,又不太杂乱的方法来完结呢?咱们能够稍做修正:

将X[31:0]拆成两部分X1[15:0]和X2[15:0],令X1[15:0]=X[31:16],X2[15:0]=X[15:0],则X1左移16位后与X2相加能够得到X;相同将Y[31:0]拆成两部分Y1[15:0]和Y2[15:0],令 Y1[15:0]=Y[31:16],Y2[15:0]=Y[15:0],则Y1左移16位后与Y2相加能够得到Y;则X与Y的相乘能够转化为X1和X2 别离与Y1和Y2相乘,这样一个32bit*32bit的乘法运算转化成了四个16bit*16bit的乘法运算和三个32bit的加法运算。转化后的占用资源将会削减许多,有爱好的童鞋,无妨归纳一下看看,看看两者差多少。

3)时钟与触发器的联系

“时钟是时序电路的操控者” 这句话太经典了,能够说是FPGA规划的圣言。FPGA的规划首要是以时序电路为主,由于组合逻辑电路再怎样杂乱也变不出太多把戏,了解起来也不没太多困难。可是时序电路就不同了,它的一切动作都是在时钟一拍一拍的节奏下改变触发,能够说时钟便是整个电路的操控者,操控欠好,电路功用就会紊乱。

打个比如,时钟就相当于人体的心脏,它每一次的跳动便是触发一个 CLK,向身体的各个器官供血,维持着机体的正常运作,每一个器官体统正常作业少不了组织细胞的构成,那么触发器就能够比作底子单元组织细胞。时序逻辑电路的时钟是操控时序逻辑电路状况转化的“发动机”,没有它时序逻辑电路就不能正常作业,由于时序逻辑电路首要是使用触发器存储电路的状况,而触发器状况改换需求时钟的上升或下降沿!由此可见时钟在时序电路中的中心效果!

最终简略说一下领会吧,归结起来就多实践、多考虑、多问。实践出真知,看 100遍他人的计划不如自己去实践一下。实践的动力一方面来自爱好,一方面来自压力,我个人觉得后者更重要。有需求会简略构成压力,也便是说最好能在实践的项目开发中训练,而不是为了学习而学习。在实践的进程中要多考虑,多想想问题呈现的原因,问题处理后要多问几个为什么,这也是经历堆集的进程,假如有写项目日志的习气更好,把问题及原因、处理的方法都写进去。最终还要多问,遇到问题思索后还得不到处理就要问了,究竟个人的力气是有限的,问同学搭档、问搜索引擎、问网友都能够,一篇文章、朋友们的指点都或许协助自己快速处理问题。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/5g/146277.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部