|
FPGA的设计流程一般分为这样的几个过程,设计输入,约束,综合,仿真,实现,加载配置与调试。
核心设计流程如下:
一、RTL代码编写(一般为HDL语言的输入)
二、编写Testbench和仿真:(这部分的作用是验证设计的电路是否正确,功能是否符合设计要求,也叫功能仿真或者前仿真,这时的仿真对象是RTL代码,不包含逻辑和布线的延迟信息,纯粹的逻辑功能的验证)提供一个仿真的验证激励就是要用HDL语言编写TEstbench。Testbench编写要使用行为级语言。
三、综合及时序分析
综合是把HDL描述转化为使用基本门电路以及厂家库提供的基本单元进行描述的网表的过程。综合时要注意一些约束,最重要的约束是管脚约束,目的是使输入输出信息号与PCB板走线引脚对应一致。有时还需要附加时序约束。综合输出的是esif或者是edn格式的网表。
四、实现:
把综合输出的网表适配到FPGA上的过程叫实现。实现过程包括翻译,映射,布线三个步骤。之后可能进行后仿真步骤,一般可以省略。
五、加载配置与调试:上一步生成的配置文件通过集成开发环境就可以配置到FPGA上了。
学习心得:
之前看学testbench的时候,看了特权同学的视频,觉得给了我一些启发,然后果断去图书馆借了《深入浅出玩转FPGA》,一口气读了6个笔记,感觉收获颇丰啊:
关于代码的优化,不同的语法写出来的同一功能的硬件实现是不一样的,这取决于,综合的软件的不同,但是随着软件版本的升级,其识别这样功能的能力是越来越强,使其趋近于相同,比如if else 语句和case语句实现相同功能的时候,if语句趋向于优先级的结构,而case语句是趋向于并行结构,在今后的代码编写中也要注意不同语法结构生成的RTL视图的差异,以及Technology Map Viewer。
还有一个之前理解错误的地方,4比如:reg LED_OUT ;是定义了一个这样的一个寄存器是寄存器的名字,而其他的变量可以理解为不同的信号线上的名字,之前的理解有混淆。
更深一步理解了FPGA内部是怎么一回事了,假如要用到一个四输入的与门,其内部就会分配一个4输入LUT,而当有5输入时,就会分配两个LUT 了,因为每一个都是四输入的。这样在分配的时候注意这一点可以优化资源,但是鱼和熊掌不能兼得。
在编写注释的时候,要让其明白这一句话在整个系统代码中是什么作用,而不是这句语法本身的作用,因为看代码的一般语法还是理解的,需要获取的信息是这样的语法在整个系统中实现了什么样的功能。
关于复位,有同步复位和异步复位。同步复位会多产生一个门,原因是异步复位用到了寄存器上存在的复位端,而同步没有。
至芯科技@支哥@微信号:zhi2793725733;
博客地址:http://blog.sina.com.cn/u/5764299898
|
|