写这个系列的文章同时,可以让自己加深对设计各方面的理解。如果发现有不清楚的地方,我会查阅相关的文档,理解后,再写一些专门的文章。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
一.设计入口
Quartus II支持原理图和HDL语言的输入。原理图更适合简单的设计,HDL语言适合复杂的设计。但要注意,如果想使用第三方的综合工具,就必须用HDL语言。
对于HDL语言,最好遵循一定的代码风格。在Quartus II的手册上,可以找到专门讲解这方面的章节。(我对这方面也不熟悉,将会好好看看)。Quartus II软件的文本编辑器,可以插入很多语言相关的模板,这个功能不错。不过还是习惯用UltraEdit写代码。
对于一些FPGA内部的资源模块,通常既可以直接调用Quartus II的ip核,也可以用HDL语言来描述,比如RAM资源。
选择综合工具:Altera支持很多第三方的综合工具,个人比较喜欢用SynplifyPro。这些工具生成.edf或者.vqm文件,然后QuartusII再进行布局布线。怎么在Quartus II中调用这些工具,最好的方法就是去看Quartus II Handbook,里面讲得非常清楚。如果你看得懂英文,Handbook写的东西是最适合你的。
SOPC生成:Altera的SOPC功能很强大。
IP:Altera和第三方合作伙伴提供了很多的IP,可以让设计变得更快捷。特别是Altera提供的,可以直接试用。
宏功能(Megafunction):ALtera封装了很多资源和模块,用Megafunction的形式给用户调用,只用设置一些参数,就可以正常使用这些模块了。
二.设计建议
Quartus II手册有专门的章节讲设计方面的一些建议。
同步设计:setup和hold time的充分保证,能减少毛刺等的干扰。使用Cyclone III I/O的输入寄存器(注意,不是普通的LE),这样芯片的输入信号能更好的滤除毛刺。需要设置”Fast Input Rgedister”,来使用该寄存器。
应该通过良好的同步设计,而不是使用LCELL这样的单元来控制特定路径的延迟。因为FPGA内部路径的延迟是不确定的,会在设计中因为每次布局布线不同而改变,会在使用中因为温度,电压等因素改变,还会因为工艺的差异而改变。为了增加设计的稳定性,尽量提高时序分析时路径的余量。虽然时序分析已经是按芯片在最差状况下的时序特性来分析,但多留一点余量还是有好处,在设计允许的情况下。
时钟:时钟在同步设计中是非常重要的。
A. 时钟当然得用专用时钟引脚输入,用普通I/O会导致更严重的时钟偏移。高时钟偏移会导致hold time违规。时钟在芯片内部会使用全局时钟网络,全局异步复位信号也可以使用全局时钟网络。全局时钟网络能保证信号1点到多点的相同延迟。也就是说,某个信号,从输入引脚,通过全局时钟网络,到内部的各个寄存器,虽然走的是不同路径,但这些路径的延迟是一样的。
B. 内部生成的时钟。组合逻辑不能处理毛刺,对组合逻辑的输入信号,用高频时钟过滤毛刺,对组合逻辑的输出信号,也可以用高频时钟过滤毛刺。
C. 时钟分频。使用PLL,可以对时钟分频。PLL还可以精确控制输出时钟的相位。
D. 时钟翻转。使用PLL对时钟相位改变,比使用非门效果更好。
E. 多时钟输入。对于一个PLL,可以设置一个主时钟和一个备用时钟。
F. 门控时钟。建议使用Altera提供的专门模块altclkcrtl来实现门控时钟。如果只是想控制输出的稳态,可以对输入加上ena信号,这样还是保持了同步设计。门控时钟和非门控时钟之间是非同步的。门控时钟的控制信号,必须滤除毛刺,否则会影响输出的时钟。对时钟进行门控的位置尽量靠近时钟源,可以减少时钟延迟。
三.芯片级的复位
Cyclone III芯片,支持芯片级的复位,包括清除M9K中的内容。需要开启DEV_CLRn引脚功能。该引脚默认为普通I/O。
四.寄存器上电电平
可以设置寄存器上电时是高电平还是低电平。当然默认是低电平。通过设置Power-Up Level参数实现。
五.设计约束
Quartus II提供了设计约束检查功能,通过该检查,能提高设计的可靠性。检查包括时钟,复位,异步设计等。该项功能默认没有开启。
六.分层和基于团队的设计
增量编译,可以减少设计迭代需要的时间,减少时序收敛需要的时间。
对设计分区(分割),是增量编译的基础。如果用第三方的综合工具,需要生成若干独立的.vqm或者.edf文件。顶层的各个模块之间,最好只有互连线,而没有任何逻辑,逻辑都应包含在各个模块内部。
时序预算和资源分配:模块内部的时序路径可以单独优化好。但如果是跨分区的时序路径,只能在集成后优化。这些时序路径可以通过加上约束来达到要求。资源的分配也要提前计算好,以免集成后出现冲突。除了常见的资源,注意全局时钟资源也是有限的。
计划从底向上和基于团队的流程:在进行底层设计前,必须要知道顶层的相关信息,包括引脚分配,物理约束和时序要求等。Quartus II提供了一些脚本(Generate bottom-up design partition scripts)来实现顶层信息向底层的传递。
可以通过LogicLock实现对设计在物理上分区。通常对时序要求很难达到的模块,才进行LogicLock。对一般模块进行LogicLock反而降低了布局的灵活性。Quartus II的Chip Planner功能,可以精确到对寄存器进行布局,估算物理延迟,观察模块间的连接。
下面为下篇的内容:
七.功耗优化
八.I/O考虑
九.PLL考虑
十.配置软件的设置
十一. 有效pin的布局
文章评论(0条评论)
登录后参与讨论