大学年代第一次触摸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等可编程器材的根底上进一步开展的产品。它是作为专用集成电路领域中的一种半定制电路而呈现的,既处理了定制电路的缺乏,又克服了原有可编程器材门电路数有限的缺陷。
速度与面积平衡和交换准则:
一个规划假如时序余量较大,所能跑的频率远高于规划要求,能能够经过模块复用来削减整个规划消耗的芯片面积,这便是用速度优势换面积的节省;
反之,假如一个规划的时序要求很高,一般办法达不到规划频率,那么能够经过数据流串并转化,并行仿制多个操作模块,对整个规划选用“乒乓操作”和“串并转化”的思维进行处理,在芯片输出模块处再对数据进行“并串转化”。然后完结了用面积仿制交换速度的进步。
硬件准则:了解HDL实质。
体系准则:全体掌握。
同步规划准则:规划时序安稳的底子准则。
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)顶层模块最好不进行逻辑规划。