原创 FPGA研发之道(4)灵活性的陷阱

2014-7-13 15:07 5048 10 15 分类: FPGA/CPLD 文集: FPGA研发之道

        如果说用一个词来描述FPGA的特性,灵活性肯定名列前茅。

        FPGA的灵活性在于:

         (一)I/O的灵活性,其可以通过其I/O组成各种接口与各种器件连接,并且支持不同的电气特性。

         (二)内部存储器灵活性,可以通过IP生成工具生成各种深度和宽度的RAM或者FIFO等。

         (三)逻辑的灵活性,内部逻辑通可生成的各种类型IP。  

         对于I/O接口来说,FPGA的I/O可以支持不同类型的电平和驱动能力,各I/O未定义之前其地位平等,例如一个数据信号可将其约束在任意引脚,只要其电平符合连接的规范。因此硬件工程师基于这种认识,在PCB布线时,基于布线需要,便调整其布线的顺序,例如互换两个信号的位置。通常情况上,这种调整是没有任何问题的。但是随着FPGA的接口IP核硬核化的趋势,逐渐由很多的接口IP不能支持这种调整。例如对于较早的SDRAM或者DDRSDRAM来说,在xilinx和ALTERA的FPGA上,其数据、地址信号等都是可调的。但是随着DDR2,DDR3接口的出现,其IP接口,只能支持在某个BANK并且例化结束后直接生成相应的约束文件,而这些的改动将会导致布局布线的错误。另一些例子则是一些高速SERDES的组合。例如对于XAUI接口来说,其硬核IP(ALTERA)上就不支持4组SERDES的顺序互换,这将会影响其硬核FCS的编码。如果板级连接上与PHY的顺序与FPGA例化IP的约束不一致,则其硬核PCS就不能布局布线通过(软核FCS可以支持调整)。这种灵活性认识导致硬件板级互联的问题可谓屡见不鲜,特别是系统复杂度的上升,板级连线的增加,将会导致设计人员疏忽从而掉入“灵活性的陷阱”。解决此类问题的方法。包括(1)预评估,在设计之前就在FPGA上评估所需的接口的逻辑占用、约束位置、时钟需求等等,预先评估给系统设计提供相应的数据支撑和设计参考。(2)沟通,对于设计的变更,要进行有效沟通,不能使铁路警察,各管一段。(3)设计评审,虽然老套,但每个环节上的评审能有效减少掉入类似陷阱的几率。

        对于内部存储资源,大多数FPGA工程师就是拿来就用的状态。而缺少整体内部memory规划,一般来说,对于单端口、双端口、假双端口,各型芯片手册中都有明确的定义,例如xilinx的SPATAN3系列中最小RAM单元为18K。一个RAM例化最小单位就是18K。而新的器件中最小单位一般为9K。也就是说虽然工程师例化的较小的RAM,例如256*16.只有4K,但是其也占用一个最小单元,根据器件的不同而不同。而乱用双端口导致RAM资源的过分占用则是更常见的设计问题。FPGA内部对于单个RAM能够支持的真双端口是有限制的。举例说明,对于ALTERA的9K的存储单元一般支持512*18的双端口RAM。但如果是一个256*32的双端口则需要占用2个9K的存储RAM。也就是说,RAM器件的能力是有限的,这取决于RAM的外部互联线是有限的,以刚才说的256*32的双端口RAM来说,其需要数据线就是64根(双端口),对于单个RAM的连线资源来说,这是FPGA内部逻辑资源难以承受的。所以根据器件特定,合理规划内部memory资源,才能在最大限度的达到高效的利用。

       FPGA内部可以例化各型IP,基于IP的复用的可以大大增加研发的进度。但是各种IP的互联之间则需对IP的特性了解清楚,明确IP是否为业务所需的IP。有的IP和工程所需可能只是名称一致,但其功能却不是你想要的。例如网口IP在MII连接方式下,是用于FPGA连接PHY的操作。如果FPGA与CPU通过MII连接,现有的IP则难以满足需求。这是因为MII连接PHY其所有的时钟都是PHY提供的。CPU的设计也是与PHY连接,其时钟也有PHY提供。而如果二者连接,就变成都等着对方提供时钟,则就变成没有时钟。这种调试问题相对来说容易解决,不过在系统规划是,就需要对整个IP是否能够满足系统的设计要求,有着明确的判断。

      灵活性是FPGA最大的特性,在设计中避开那些灵活性的陷阱,才能从FPGA整体上提升设计能力,而不是做只会写Verilog的码农。毕竟FPGA设计不是软件设计,其最终要成为变成硬件承载的,每一行语句都要考虑其综合后的电路,才能真正领会FPGA设计的精髓。

PARTNER CONTENT

文章评论5条评论)

登录后参与讨论

用户3672353 2016-4-18 22:34

fpga里提到的IP是究竟是什么呀

用户1833390 2015-10-18 20:18

初学者不是很懂,但留着珍藏,以后肯定能用着

用户1404783 2014-10-3 23:13

学习了

用户377235 2014-7-12 19:19

恩,讲的很对,理论结合实际,实际又紧扣理论

用户1652771 2014-7-8 07:05

感谢楼主分享!顶
相关推荐阅读
阿昏豆 2015-11-21 23:25
把大象关冰箱的步骤 --- NAND FLASH控制器磨损管理算法芯片化硬实现
把大象关冰箱的步骤 --- NAND FLASH控制器磨损管理算法芯片化硬实现   目前,存储领域包括eMMC,SATA SSD ,PCIe SSD等控制器是一个非常热门的领域。通常,由于...
阿昏豆 2015-11-09 22:25
平行宇宙的追逐--异步FIFO控制器的设计
  平行宇宙的追逐--异步FIFO控制器的设计。    在逻辑设计中,通常会用到异步FIFO,异步FIFO控制器是经典的异步信号传输的范例,通过FIFO控制器与异步双端口RAM的组合实现数据的...
阿昏豆 2014-08-23 23:36
FPGA研发之道(25)-管脚
     管脚是FPGA重要的资源之一,FPGA的管脚分别包括,电源管脚,普通I/O,配置管脚,时钟专用输入管脚GCLK等。 (1)电源管脚:    通常来说: FPGA内部的电压包括...
阿昏豆 2014-08-10 22:22
FPGA研发之道(24)-控制(下)
   首先依次回答上篇提出的几个问题:       第一个问题:如何避免状态机产生lacth 示例如下,通过在always(*)语句块中,添加默认赋值,ns_state = cs_state; alw...
阿昏豆 2014-08-07 21:53
FPGA研发之道(23)-控制(上)
本质上说,FPGA的模块设计就是将输入转化成想要得到的输出结果。而除了某些简单模块,即在当拍内完成,即将输入进行逻辑操作后,再输出。(如简单加法器等)。其余大部分的设计需要通过时序逻辑和组合逻辑混合实...
阿昏豆 2014-08-06 23:12
FPGA研发之道(23)-控制(上)
本质上说,FPGA的模块设计就是将输入转化成想要得到的输出结果。而除了某些简单模块,即在当拍内完成,即将输入进行逻辑操作后,再输出。(如简单加法器等)。其余大部分的设计需要通过时序逻辑和组合逻辑混合实...
EE直播间
更多
我要评论
5
10
关闭 站长推荐上一条 /3 下一条