zoukankan      html  css  js  c++  java
  • CycloneIII设计向导第四篇.设计和编译

    一.设计入口

    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。引脚如果要拉高或者拉低,一定要串联外部电阻。还要注意,连续引脚的总输出电流是有限制的。因此,尽量分散管脚的使用,而且适当限制电流是有必要的。

  • 相关阅读:
    Roce ofed 环境搭建与测试
    Ubuntu 1804 搭建NFS服务器
    Redhat 8.0.0 安装与网络配置
    Centos 8.1 安装与网络配置
    SUSE 15.1 系统安装
    VSpare ESXi 7.0 基本使用(模板、iso、SRIOV)
    VSpare ESXi 7.0 服务器安装
    open SUSE leap 15.1 安装图解
    KVM虚拟机网卡连接网桥
    GitHub Action一键部署配置,值得拥有
  • 原文地址:https://www.cnblogs.com/fpga/p/1570039.html
Copyright © 2011-2022 走看看