需求说明:FPGA基本知识
内容 :第一部分 Distribute RAM和Block RAM
第二部分 logic cell、logic slice、CLB、Gate
来自 :时间的诗
FPGA内部的RAM分为两部分,一部分就是你的分布式的RAM,用于LUT,还有一种是块ram(BLOCK RAM)是一块用于存储数据的专用RAM,也就是你的系统设计中需要用到容量较大的数据储存区域(比如FIFO,SRAM等)。
FPGA实现逻辑功能就是通过LUT来的,LUT最重要的部分就是RAM,用来保存你的设计转换成的真值表。比如你有4个输入,那么这4个输入产生的组合逻辑结果最多也就是2的4次方16种结果,FPGA把这个16种结果分别对应4个输入地址,输入产生一个4位地址,就在RAM里面找到对应的结果,从而输出相应的结果。
用于LUT的RAM不是在一起的,而是分布式的。另外有一块大的RAM用于系统设计的。
这些ram里面的数据掉电后都会丢失,这也是FPGA和CPLD的区别,FPGA每次上电都要从外部的FLASH或者在线下载BIT流到 内部的RAM里面去。
1 逻辑单元(logic cell)
Spartan-6 FPGA logic cell ratings reflect the increased logic capacity offered by the new 6-input LUT architecture.
一个逻辑单元(logic cell) 包含了一个查找表,一个触发器和与附近单元的连接电路。查找表使用组合逻辑实现了一个6输入的逻辑表达式(与,或,与非,加等)。
2 逻辑片(logic slice)
Each slice contains four LUTs and eight flip-flops.
一个逻辑片(logic slice) 包含了6.4个逻辑单元。slice是由LUT,FF和MUX组成的。
一个可配置逻辑模块(configurable logic block CLB) 包含一个可配置开关矩阵,此矩阵有选型电路(多路复用器),触发器和4或6个输入组成。在Xilinx公司的FPGA器件中,CLB由多个(一般为4个或2个)相同的slice和附加逻辑构成。每个CLB模块不仅可以用于实现组合逻辑和时序逻辑,还可以配置为分布式RAM和分布式ROM
4 门(Gate)
Equivalent ASIC gate count is dependent of the function implemented. The assumption is 1 Logic Cell = ~15 ASIC Gates.
门(Gate) 的数量用来表示内存模块,逻辑单元,乘法器等资源的总数。需要注意的是,FPGA中的门数并不等同于ASIC中门数,例如,FPGA中的1 Logic Cell = ~15 ASIC Gates。
Each DSP48A1 slice contains an 18x18 multiplier, an adder, and an accumulator.
6 Clock Management Tiles (CMT)
Each CMT contains two DCMs and one PLL
一般在altera公司的产品上出现PLL的多,而xilinux公司的产品则更多的是DLL,开始本人也以为是两个公司的不同说法而已,后来在论坛上见到有人在问两者的不同,细看下,原来真是两个不一样的家伙。DLL是基于数字抽样方式,在输入时钟和反馈时钟之间插入延迟,使输入时钟和反馈时钟的上升沿一致来实现的。又称数字锁相环。
PLL使用了电压控制延迟,用VCO来实现和DLL中类试的延迟功能。又称模拟锁相环。功能上都可以实现倍频、分频、占空比调整,但是PLL调节范围更大,比如说:XILINX使用DLL,只能够2、4倍频;ALTERA的PLL可以实现的倍频范围就更大毕竟一个是模拟的、一个是数字的。两者之间的对比:对于PLL,用的晶振存在不稳定性,而且会累加相位错误,而DLL在这点上做的好一些,抗噪声的能力强些;但PLL在时钟的综合方面做得更好些。总的来说PLL的应用多,DLL则在jitter power precision等方面优于PLL。
目前大多数FPGA厂商都在FPGA内部集成了硬的DLL(Delay-Locked Loop)或者PLL(Phase-Locked Loop),用以完成时钟的高精度、低抖动的倍频、分频、占空比调整移相等。目前高端FPGA产品集成的DLL和PLL资源越来越丰富,功能越来越复杂,精度越来越高(一般在ps的数量级)。Xilinx芯片主要集成的是DLL,而Altera芯片集成的是PLL。Xilinx芯片DLL的模块名称为CLKDLL,在高端FPGA中,CLKDLL的增强型模块为DCM(Digital Clock Manager)。
Altera芯片的PLL模块也分为增强型PLL(Enhanced PLL)和高速(Fast PLL)等。这些时钟模块的生成和配置方法一般分为两种,一种是在HDL代码和原理图中直接实例化,另一种方法是在IP核生成器中配置相关参数,自动生成IP。Xilinx的IP核生成器叫Core Generator,另外在Xilinx ISE 5.x版本中通过Archetecture Wizard生成DCM模块。Altera的IP核生成器叫做MegaWizard。另外可以通过在综合、实现步骤的约束文件中编写约束属性完成时钟模块的约束。
现在XILINX更多是PLL+MMCM的架构。
Xilinx DCM PLL区别及PLL使用方法
来自:http://blog.chinaaet.com/crazybingo/p/35471
总结一下DCM与PLL的区别,仅以鄙人目前浅陋的见识:
(1) DCM只支持90、180、270相位,但PLL这方便更灵活宽泛
(2) DCM只支持2~16的小数分频,以及2倍频,但是PLL这方面更灵活宽泛
(3) DCM是用数字延时模块调理时钟,是纯数字的东西,用的灵活,占得面积小,噪声和jitter相对PLL大一些。
(4) PLL是模拟的,比DCM要浮躁,出来的钟也质量也高,但是比较复杂,占的面积也比DCM大
包括下面这些:
1、有的slice被用来布线,这样的slice的被占用了,但是LUT和MUX并没有被使用。
2、有的时候,你的HDL写法不好,会将本来一个LUT就能完成的设计变成两个LUT完成的,很容易出现一个Slice只用了其中的1个LUT,别的LUT没有使用。
解决的办法:
1、如1楼所说,尽量使用block ram而不用分布式ram。
2、让代码更加紧凑,编译器可以更好布线,这个需要经验。
3、添加更多的约束,有效利用每一个slice里的LUT和FF,减少一个slice只用了一个LUT或者一个FF的情况。