第2节 FPGA设计思考
硬件描述语言的层次含义
HDL是目前数字ASIC、FPGA、CPLD等最重要的一种设计输入方式:
- 利于自顶向下的设计
- 利于模块划分与复用
- 可移植性好、通用性好
- 与工艺无关等
常用的概念层次

点击查看全图
Coding Style
- 使用高层次HDL进行硬件设计,所带来的问题是设计者的设计思考与实际电路结构是脱节的;
- 实际设计中,由于每个设计者对语言规则、电路行为的理解不同,编程风格不同,往往对同样的系统功能,描述的方式是不一样的。所综合出来的电路结构更是大相迳庭;
- 即使最后综合出来的电路都能实现相同的逻辑功能,其复杂程度和延时特性都会有较大差别;
- 与设计层次有关;
- 与综合工具相关;
--挥综合工具的最大潜能
--不同综合工具对一些语法细节的解释略有不同。
- 与器件的硬件结构相关
--充分、合理的使用硬件资源
分层次的模块化设计
- 结构层次化编码是模块化设计思想的一种体现。目前大型设计中必须采用结构层次化编码风格,以提高代码的可读性,易于模块划分,易于分工协作,易于设计仿真测试激励;
- 最基本的结构化层次由一个顶层模块和若干个子模块构成,每个子模块根据需要还可以包含自己的子模块。

模块划分的技巧
- 结构层次化设计方法的第一个要点就是模块划分,模块划分非常重要,关系到能否最大程度上发挥项目成员协同设计的能力,更重要的是它直接决定着设计的综合、实现的耗时与效率。
- 模块划分的基本原则如下:
--对每个同步时序设计的子模块的输出使用寄存器,有利于综合工具对逻辑进行优化;
--关的逻辑或可以复用的逻辑划分在同一模块内;
--将不同优化目标的逻辑分开;
--将松约束的逻辑归到同一模块;
--将存储逻辑独立划分成模块;
--合适的模块规模。
尽量避免使用锁存器
- 寄存器:时钟沿敏感,利用时钟沿确定数据传输到输出的时刻;
- 锁存器:电平敏感,只要时钟是高电平(或低电平),就允许数据从输入传输到输出。
- 锁存器会造成设计和时序验证中的各种困难。
--锁存器对输入数据的毛刺非常敏感,会将其传送到输出
--软件无法确定使用锁存器的设计人员的设计意图;
--其他设计者不容易进行设计移植和代码重用。
- FPGA拥有大量的寄存器,基于锁存器的设计比基于寄存器的设计要占用更多的逻辑资源,性能降低。
- 如果坚持用锁存器设计必须保证输入信号绝对没有毛刺,且满足保持时间。
- 同步时序设计应该尽量避免使用锁存器Latch;
- 综合出锁存器的主要原因:
--不完全的条件判断语句;
--设计中有组合逻辑的反馈环路等异步逻辑。
- 防止产生不必要锁存器的措施:
--用完整的if…else语句;
--检查设计中是否含有组合逻辑反馈环路;
--为每个输入条件,设计输出操作,对case语句设置default操作,在状态机中最好有一个default的状态转移,每个状态最好有一个default的操作;
--在使用case语句时,附加“full case”约束,以便将其综合为完全的条件case语句;
--仔细检查综合软件的综合报告,目前大多数综合软件对综合出的锁存器会报告“warning”。
<<上一节 下一节>>