一.设计入口
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功能,可以精确到对寄存器进行布局,估算物理延迟,观察模块间的连接。
七、功耗优化
Quartus II软件支持功耗优化的综合和布局布线选项。不过,时序约束比功耗优化的优先级要高,得先满足前者再考虑后者。软件包含了功耗优化的向导,易于使用。DSE也是一个很好的优化工具。
下面是一些从设计角度进行功耗优化的方法:
1. 时钟功耗管理。Quartus II会自动对时钟网络的功耗进行优化。也可以自己使用门控时钟来减少功耗。
2. 内存功耗。减少内存功耗的方法是,使用内存的门控时钟信号。
3. I/O功耗。决定I/O功耗的因素包括:负载电容,输出频率,输出电压摆幅。电压参考的I/O标准(比如SSTL)的电压摆幅比LVTTL和LVCMOS要低,因此动态功耗低一些。但静态功耗反而高一些。
4. 寄存器插入。在复杂的组合逻辑中插入寄存器,能减少毛刺带来的动态功耗,但也增加了寄存器功耗。
5. 结构优化。使用DSP模块进行数学计算,而不是使用LE。大的移位寄存器使用ram资源实现的FIFO,而不是使用LE。这样都能减少功耗。
八、I/O考虑
Cyclone III芯片的I/O特性比以前的更强大。I/O的设计流程包括:创建pin相关的配置,验证配置是否符合规则。
管脚分配工具(Pin Planner):
Package View(默认视图):提供了可视化的芯片封装,能更直观的分配管脚,避免拥挤。能用不同的方式显示芯片的封装,包括分bank,显示差分管脚,显示已分配管脚等。如果你分不清芯片的哪一边是TOP,可以使用Show Edges,然后你就知道了,bank12是LEFT,bank34是BOTTOM,bank56是RIGHT,bank78是TOP。
Pad View:提供了芯片核心(裸片)的引脚分布顺序。注意某些引脚分布规则,在芯片封装后(比如BGA封装)可能难以理解,但看看裸片的引脚分布就知道了。
Pin Migration View:如果你设计时要考虑器件迁移(兼容),那么用这个视图是最方便的,选择好要兼容的器件,直接就会生成每个引脚的最终选择。按照这个视图的结果做封装就可以了。
配置工具(Assignment Editor),管脚相关的配置:
1. 输出电流(Current Strength):每个I/O标准都可以配置输出电流大小。注意增大电流,会提高I/O性能,但也会提高噪声。电流过小也会有影响,特别是对输出的时钟信号。因此选择合适的电流大小很重要。
2. 摆动(变化)速率控制(slew rate control):对于高速的数据总线,Altera建议打开这项设置,用来降低SSO干扰。这项设置只支持单端的I/O标准,大于等于8mA以上的电流。这项设置的具体使用,会再补充。
3. 片内串行匹配(OCT):OCT有两种模式,校准和非校准。在非校准的情况下,默认选择25欧和50欧的电阻。校准模式下,RUP和RDN管脚需要连接25欧或者50欧的精密电阻,芯片会在FPGA的配置时期,进行校准,设置更准确的OCT值。
4. 专用差分输出缓冲单元:left和right的I/O bank有此单元,最大LVDS输出速率达840Mbps,且不需要外部的发送匹配电阻。这个单元还能对输出信号进行可选择的预加重。信号在线缆中传输时,高频成分的衰减,相对于低频成分要大。因此在输出时,对高频成分适当放大,这样能减少接收端的高频成分和低频成分的不平衡。注意配置选项的名称为(Programmable Pre-emphasis)。
九、PLL考虑
Cyclone III有4个独立的PLL单元(EP3C5和EP3C10只有2个)。PLL的输入时钟只能是专用时钟输入或者是另一个PLL的输出时钟。PLL的C0输出到专用时钟输出脚,可以达到最好的布线效果。
PLL模块可以进行功能仿真和时序仿真。
十、配置软件的设置
1. 可选的配置管脚。Enable user-supplied start-up clock (CLKUSR),这个选项用来控制,是否使用外部时钟来初始化FPGA。FPGA默认用10MHz的内部时钟来初始化。Enable INIT_DONE output,这个选项如果打开,当FPGA配置完成时,该管脚会由低变高。如果使用,需要外部10K欧的上拉。
2. 自动重配。打开auto-restart configuration after error option这个选项,当FPGA配置错误时,会自动重新配置。
3. 估算配置文件大小。rbf格式的文件大小,最接近原始的未压缩文件大小。
4. 转换配置文件的格式。可以把原始的sof文件转化为pof,hexout,rbf,ttf,rpd,jic这些格式。pof和jic是Quartus II烧写软件支持的格式,其它格式用于其它烧写软件。如果要做到多器件配置,可以把多个sof合在一起,转化为一个配置文件。合在一起的顺序需要注意,和配置的顺序是相关的。
十一、 有效pin的布局
1. I/O配置检查。Start I/O Assignment Analysis命令,可以用来检查I/O配置有没有违规的地方。
2. 直流相关。输入或者输出电流过大都会损坏芯片。典型的例子是,输出高的引脚直接接地,输出低的引脚直接接Vcc。每个I/O引脚,最大输出40mA,输入25mA。引脚如果要拉高或者拉低,一定要串联外部电阻。还要注意,连续引脚的总输出电流是有限制的。因此,尽量分散管脚的使用,而且适当限制电流是有必要的。