欢迎来到天天文库
浏览记录
ID:36051881
大小:554.55 KB
页数:35页
时间:2019-05-01
《fpga设计原则以及代码规范》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、FPGA设计原则以及代码规范2009.4.22FPGA设计原则面积和速度的平衡与互换硬件原则系统原则同步设计原则“面积”指一个设计消耗FPGA的逻辑资源的数量,一般可以用所消耗的触发器(FF)和查找表(LUT)来衡量,更一般的衡量方式可以用设计所占用的等价逻辑门数。“速度”指设计在芯片上稳定运行,所能够达到的最高频率,这个频率由设计的时序状况决定,它和设计满足的时钟周期,PADtoPADTime,ClockSetupTime,ClockHoldTime,Clocktooutputdelay等众多时序特征
2、量密切相关。面积与速度进一步了解FPGA内部的“面积”资源!面积与速度的平衡与互换原则速度换面积:面积换速度:FPGA设计和软件设计存在本质区别,要做到对所需实现的硬件电路“心有成竹”,对该部分硬件的结构与连接十分清晰,然后再用适当的HDL语句表达出来。要明确FPGA的逻辑设计所采用的硬件描述语言(HDL)和软件语言(如C,C++等)的区别,HDL的本质作用在于描述硬件!它的最终实现结果是芯片内部的实际电路。硬件原则硬件原则的另外一个重要理解是“并行”和“串行”的概念。一般来说硬件系统比软件系统速度快,
3、实时性高,其中一个重要原因就是硬件系统中各个单元的运算是独立的,信号流是并行的。而C语言编译后,其机器指令在CPU的高速缓冲队列中基本是顺序执行的。硬件原则-并行处理系统原则一方面是一个硬件系统,例如一块板卡如何进行功能模块划分与任务分配,什么样的算法和功能适合放在传统FPGA里面实现,什么样的算法和功能适合放在DSP、CPU里面实现,或者在使用内嵌CPU和DSPBlock的FPGA中如何划分软硬件功能,以及FPGA的规模估算数据接口设计、开发成本的估算等。另一方面就是具体到FPGA内部设计要有一个宏观
4、上的合理安排,比如时钟域、模块复用、约束、面积、速度等问题。同步设计原则-同步与异步在设计电路时,可以有异步电路和同步电路两种实现方法。异步电路使用组合逻辑电路实现,没有统一的时钟信号,容易产生毛刺和竞争冒险。同步时序电路使用组合逻辑和触发器实现电路功能,主要信号和输出信号都由时钟驱动触发器产生,能够避免毛刺,信号稳定。同步设计时钟信号的质量和稳定性决定了同步时序电路的性能。FPGA的内部有专用的时钟资源,如全局时钟布线资源、专用的时钟管理模块DUL、PLL等。同步设计原则-时钟同步设计中,稳定可靠的数
5、据采样必须遵从以下两条基本原则:1、在有效时钟沿到达前,数据输入至少已经稳定了采样寄存器Setup时间之久。这条原则简称满足Setup时间原则。2、在有效时钟沿到达后,数据输入至少还将稳定保持采样寄存器Hold时间之久。这条原则简称满足Hold时间原则。同步设计原则-建立/保持时间FPGA设计代码规范Verilog代码编写风格的必要性结构层次化编码时钟和RESET信号设计指南可综合性编码Verilog代码编写风格的必要性Verilog代码编写规范,经常是一个不太受欢迎的话题,但却是非常有必要的。遵循代码
6、编写规范书写的代码,很容易阅读、理解、维护、修改、跟踪调试、整理文档。相反代码编写风格随意的代码,通常会很凌乱,会给开发者本人的调试、修改工作带来困难,也会给合作者带来很大麻烦。编写规范的宗旨缩小篇幅;提高整洁度;便于跟踪、分析、调试;增强可读性,帮助阅读者理解;便于整理文档;便于交流合作。结构层次化编码框架图1)结构的层次不宜太深,一般为3到5层即可;2)顶层模块最好仅仅包含对所有模块的调用,而不应该完成比较复杂的逻辑功能。比较为合理的顶层模块由输入输出管脚声明、模块的调用与实例化、全局时钟资源、全局
7、置位/复位、三态门控制等构成;3)所有的I/O信号,如输入、输出、双向信号等的描述在顶层模块完成;结构层次化编码注意事项4)一般来说,进入FPGA的信号必须先同步,以提高系统工作频率;5)所有模块的输出都要寄存器化,以提高工作频率,这对设计做到时序收敛也是极有好处的;6)将相关的组合逻辑放在同一模块;结构层次化编码注意事项7)所有未使用的模块输入必须加上确定的逻辑值,不允许输入信号出现悬空状态;8)尽量少用组合逻辑设计;9)多用case语句少用if-else语句,if-else的嵌套不能超过四级;10)
8、描述always块尽量简洁。结构层次化编码注意事项1)信号名一律小写,参数用大写。2)对于低电平有效的信号结尾要用_n标记,如rst_n。3)端口信号排列要统一,一个信号只占一行,最好按输入输出及从哪个模块来到哪个模块去的关系排列,这样在后期仿真验证找错时后方便很多。如:信号命名要规范化。modulea( clk, rst_n,
此文档下载收益归作者所有