文档介绍:6
FPG破计流程指南
\z、.刖百
本部门所承担的FPGA设计任务主要是两方面的作用:系统
的原型实现和ASIC的原型验证。编写本流程的目的是:
在于规范整个设计流程,实现开发的合理性、一致性、高
效性识符
标识符采用传统C语言的命名方法,即在单词之间以
«二分开,如:max_delay、data_size等等。
采用有意义的、能反映对象特征、作用和性质的单词
命名标识符,以增强程序的可读性。
为避免标识符过于冗长,对较长单词的应当采用适当
的缩写形式,如用‘buff'代替'buffer','ena'代
替‘enable',‘addr'代替'addresS等。
参数化设计
为了源代码的可读性和可移植性起见,不要在程序中直接写
特定数值,尽可能采用'de万ne语句或paramater语句定义常数或
参数。
空行和空格
适当地在代码的不同部分中插入空行,避免因程序拥
挤不利阅读。
在表达式中插入空格,避免代码拥挤,包括:
赋值符号两边要有空格;
双目运算符两边要有空格;
单目运算符和操作数之间可没有空格,
示例如下:
a<=b;
c<=a+b;
if(a==b)then...
a<=~a&c;
对齐和缩进
不要使用连续的空格来进行语句的对齐。
采用制表符Tab对语句对齐和缩进,Tab键采用4个
字符宽度,可在编辑器中设置。
各种嵌套语句尤其是if...else语句,必须严格的逐层缩
进对齐。
注释
必须加入详细、清晰的注释行以增强代码的可读性和可移植
性,注释内容占代码篇幅不应少于30%。
参考C语言的资料
要形成良好的编程风格,有许多细节需要注意,可以参考资
料[4],虽然它是针对C语言的讨论,但由于VerilogHDL和C
语言的形式非常近似,所以里面提到的很多原则都是可以借鉴
的。
为提高设计效率和适应协同设计的方式,可采用可视化的设
计方法,MentorGrahpics的Renoir软件提供了非常好的设计模式。
可综合设计
用HDL实现电路,设计人员对可综合风格的RTL描述的掌握不仅会影响到仿真和综合的一致性,也是逻辑综合后电路可靠性和质量好坏最主要的因素,对此应当予以充分的重视。
学****可综合的HDL请参考[5][6][7]。
学****设计的模块划分请参考[8]。
设计目录
采用合理、条理清晰的设计目录结构有助于提高设计的效率、
(1)
,, src syn
的 m odesim。(综合)
sim par src syn
(仿真) (布局布线)(源代码) (综合)
sim
(仿真)
可维护性。建议采用类似下面的目录结构:
par
(布局布线)
测试程序(testbench)
测试程序对于设计功能和时序的验证有着举足轻重的影响,测试激励的完备性和真实性是关键所在,有以下原则须遵循:
测试激励输入和响应输出采集的时序应当兼顾功能仿
真(无延时)和时序仿真(有延时)的情况。
对于周期较多的测试,为提高效率,尽可能采用程序
语句来判断响应与标准结果是否一致,给出成功或出错
标志,而不是通过观察波形来判断。
采用基于文件的测试是很好的办法,即由matlab或spw
等系统工具产生测试数据,测试程序将其读入产生激
励,再把响应结果写入到文件,再交给上述工具进行处
理或分析。
仿真器支持几乎所有的VerilogHDL语法,而不仅仅是
常用的RTL的描述,应当利用这一点使测试程序尽可
能简洁、清楚,篇幅长的要尽量采用task来描述。
使用预编译库
在进行功能仿真和后仿真时都需要某些模块的行为仿真模型
和门级仿真模型,(LPM模块
行为仿真模型)和apex20ke_atoms.(v20KE系列门级仿真模型),
为避免在不同的设计目录中多次编译这些模型,应当采用一次编
译,多次使用的方法。具体做法如下(以20KE门级库为例):
1:在某个工作目录下新建一库名apex20ke,将
。
2:在图形界面中的LoadDesign对话框中装入仿真设计时,在Verilog标签下指定预编译库的完整路径。(见下图)
逻辑综合
目前可用的FPGA综合工具有MentorGraphics的
LeonardoSpectrum,Synplicity的Synplify和Synopsys的FPGA
CompilerII/FPGAExpress,LeonardoSpectrum由于性能和速度最
好,成为我们首选的综合器,FP