看了下置顶的章节,很多都是IP核的内容吧,比如复数乘法,DDS,cordic,ffft/ifft,fir。实际很多时间都是再如何调用IP核,而不是去重新写一个
IP核的复用,是站在别人的肩膀上,把有限的精力投入到产品的创新开发,以缩短上市时间吧!
作为一个FPGA工程师,不一定每一个IP都自己亲自设计,可以采用“拿来主义”,特别对一些通用的模块或单元;
但是工程师一定了解如何去写一个实用的IP。
各位说得都有道理,但本书不是告诉读者如何使用IP Core。如果想知道如何用IP Core,看Xilinx相应的User Guide就够了。Xilinx的User Guide写得很详细,是很好的资料,无需赘述了。 本书则是告诉读者如何利用基本的底层单元自己搭建设计,而其中的一些方法正是Xilinx IP Core的设计方法。 一个优秀的FPGA工程师不应只满足于会用IP Core!
各位说得都有道理,但本书不是告诉读者如何使用IP Core。如果想知道如何用IP Core,看Xilinx相应的User Guide就够了。Xilinx的User Guide写得很详细,是很好的资料,无需赘述了。本书则是告诉读者如何利用基本的底层单元自己搭建设计,而其中的一些方法正是Xilinx IP Core的设计方法。一个优秀的FPGA工程师不应只满足于会用IP Core!
有一个疑问,用基本单元完成设计和自己设计IP有什么不同?
采用IP Core的最大优势在于可以快速构建系统,毕竟IP Core是经过反复验证的成熟设计。与直接调用IP Core相比,手工搭建的方法具有很大的灵活性。比如,设计一个脉动结构的FIR滤波器。如果调用FIR Compiler IP Core,其中的乘法器可以用DSP48,也可用分布式资源。但如果手工搭建,乘法器也可用设计KCM的方法实现,这样就占用了BlockRAM或者LUT资源,更为灵活。此外,在DUC的设计中,如果是经过多级插值,除了最后一级滤波器外,其余滤波器可不必顺序输出,而是可以并行多通道处理,但这在调用IP Core时是不能这么做的。
为了进一步说明,举个简单的例子:乘法器,它的实现方法有
1.)采用嵌入的硬线乘加器(DSP48, DSP48E, DSP48E1)
2.)采用分布式资源实现
1.) 和2.)两种方法可以用VHDL或Verilog直接描述,外加综合属性设置:syn_dspstyle = "DSP48" or "logic" (Synplify Pro)
3.) 移位相加的方式
4.)ROM的方式
解释得很详细,谢谢!
我觉得手工写ip核可能有下面的问题:
1. 验证正确性,有些复杂的需要定制位宽每次都要改写和仿真验证,增加了开发时间
2. ip核跑的频率,手工搭的没有良好的代码风格,没后期调整,在资源占用大的设计里面跑时序是个问题,不知道书里推荐的方法是用语言写还是用原语搭,最终能跑到多少M,一般xilinx的核在资源比较满的情况下V5 200M没问题
3. 很多时间项目时间比较紧,ip核感觉够用了,没时间自己设计和验证,其实对DSP而言,资源的问题是算法层次的优化,算法改个结构可以节约很多的DSP48E和RAM
一些基本IP的写法在IP手册都说的挺详细的,我觉得还是看手册最重要!
先简单回答一下,如果我们只会用Xilinx的IP,IP对我们而言只是个黑盒子,那么那些除Xilinx之外的专门做各种IP的公司就没多大存在的价值了。而这些专门做IP的公司,其实就是自己写代码,写好之后再“包装”。再举个例子,FFT,如果对FFT处理器的运算速度有很高要求,那么恐怕Xilinx的IP Core也是满足不了的。因为Xilinx的IP Core只有基2是streaming I/O的,基4是Burst I/O,速度都不会很快。至于验证,并不难,而代码风格,自己手写,反倒更容易把握,只要谨记代码风格是跟底层硬件结构紧密相关的。比如,Virtex-4中复位方式和Virtex-5/6的就不同。