网站搜索:
第2节 FPGA设计思考
文章出处:与非网
更新于2008-05-18 02:46:09

第2节 FPGA设计思考

硬件描述语言的层次含义

    HDL是目前数字ASIC、FPGA、CPLD等最重要的一种设计输入方式:

  • 利于自顶向下的设计
  • 利于模块划分与复用
  • 可移植性好、通用性好
  • 与工艺无关等

    常用的概念层次

  • 系统级
  • 功能模块级
  • 行为级
  • 寄存器转移级
  • 门级

点击查看全图

Coding Style

  • 使用高层次HDL进行硬件设计,所带来的问题是设计者的设计思考与实际电路结构是脱节的;
  • 实际设计中,由于每个设计者对语言规则、电路行为的理解不同,编程风格不同,往往对同样的系统功能,描述的方式是不一样的。所综合出来的电路结构更是大相迳庭;
  • 即使最后综合出来的电路都能实现相同的逻辑功能,其复杂程度和延时特性都会有较大差别;
  • 与设计层次有关;
  • 与综合工具相关;
    --挥综合工具的最大潜能
    --不同综合工具对一些语法细节的解释略有不同。
  • 与器件的硬件结构相关
    --充分、合理的使用硬件资源

分层次的模块化设计

  • 结构层次化编码是模块化设计思想的一种体现。目前大型设计中必须采用结构层次化编码风格,以提高代码的可读性,易于模块划分,易于分工协作,易于设计仿真测试激励;
  • 最基本的结构化层次由一个顶层模块和若干个子模块构成,每个子模块根据需要还可以包含自己的子模块。

 

  • 结构的层次不宜太深;
  • 顶层模块仅包含对所有模块的组织和调用;
  • 所有I/O信号的描述在顶层模块完成;
  • 子模块之间可以有接口;不要建立子模块之间跨层次的接口;
  • 子模块的合理划分很重要,应该综合考虑子模块的功能、结构、时序、复杂度等多方面因素。

    模块划分的技巧

  • 结构层次化设计方法的第一个要点就是模块划分,模块划分非常重要,关系到能否最大程度上发挥项目成员协同设计的能力,更重要的是它直接决定着设计的综合、实现的耗时与效率。
  • 模块划分的基本原则如下:
    --对每个同步时序设计的子模块的输出使用寄存器,有利于综合工具对逻辑进行优化;
    --关的逻辑或可以复用的逻辑划分在同一模块内

    --将不同优化目标的逻辑分开;
    --将松约束的逻辑归到同一模块;
    --将存储逻辑独立划分成模块;
    --合适的模块规模。

尽量避免使用锁存器

  • 寄存器:时钟沿敏感,利用时钟沿确定数据传输到输出的时刻;
  • 锁存器:电平敏感,只要时钟是高电平(或低电平),就允许数据从输入传输到输出。
  • 锁存器会造成设计和时序验证中的各种困难。
    --锁存器对输入数据的毛刺非常敏感,会将其传送到输出
    --软件无法确定使用锁存器的设计人员的设计意图;
    --其他设计者不容易进行设计移植和代码重用。
  • FPGA拥有大量的寄存器,基于锁存器的设计比基于寄存器的设计要占用更多的逻辑资源,性能降低。
  • 如果坚持用锁存器设计必须保证输入信号绝对没有毛刺,且满足保持时间。
  • 同步时序设计应该尽量避免使用锁存器Latch;
  • 综合出锁存器的主要原因:
    --不完全的条件判断语句;
    --设计中有组合逻辑的反馈环路等异步逻辑。
  • 防止产生不必要锁存器的措施:
    --用完整的if…else语句;
    --检查设计中是否含有组合逻辑反馈环路;
    --为每个输入条件,设计输出操作,对case语句设置default操作,在状态机中最好有一个default的状态转移,每个状态最好有一个default的操作;
    --在使用case语句时,附加“full case”约束,以便将其综合为完全的条件case语句;
    --仔细检查综合软件的综合报告,目前大多数综合软件对综合出的锁存器会报告“warning”。

<<上一节       下一节>>



关于OpenHW | OpenHW使用说明 | FAQ | 相关法律 | 版权声明 | 网站地图
联系邮件:xiaoquan@eefocus.com  联系电话: 010-58859035-8012
Powered by eefocus.com