FPGA进阶(二)高质量VerilogHDL描述方法(上)

高质量VerilogHDL描述方法(上)

Verilog可综合语言概述

Verilog HDL 的基本功能之一是描述可综合的硬件电路。如何合理使用 Verilog HDL 描述高性能的可综合电路是非常重要的。
这里要注意HDL意思为硬件描述语言,对其应有正确的认识,在对已知的硬件电路进行编写前,应当对所要实现的电路“胸有成竹”。
相比C语言,最显著的区别在与HDL语言具备以下硬件设计的基本概念:
互连(connectivity ):- wire型变量描述各个模块之间的端口与网线连接关系
并发(concurrency):- 可以有效地描述并行的硬件系统
时间(time):- 定义了绝对和相对的时间度量,可综合操作符具有物理延迟
硬件描述语言描述的电路,最终将通过逻辑综合工具、布局布线工具将其实现为芯片。但是,并不是 verilog 中所有的关键词都可以被综合为硬件电路。通常,只有四个关键字能够被综合为电路,分别是 always、if-else、case、assign,我们称之为可综合四大法宝。不可综合的关键字都用于书写 testbench。

Verilog可综合语言描述技巧

不同的verilog代码书写出来的结果相同,但其综合出来的电路结构可能不同!
因此我们要对verilog代码的书写方式与所综合出来的硬件电路建立起联系,从而可以对自己设计出来的硬件电路胸有成竹。
下面介绍一些可综合语言书写的一些技巧:

1、If-else相关语句的硬件结构映射及优化

单if语句(if…else if… .else if…)

if-else语句映射的硬件结构为Multiplexing Hardware (多路选择器)输出结果由输入的选择条件决定:

但是当我们将代码修改为如下所示的形式,其综合出来的电路就不尽相同:

可以看出,第二种书写方式相对于第一种,先进行了数据选择运算,然后在进行加法运算,那么这两种方式有何不同呢?
1、由第一种转换为第二种方式,减少了一个加法器,减小了硬件的面积(加法器相对与数据选择器需要更多的硬件电路进行实现)。
2、第一种与第二种电路的数据通道相同,但是第二种方式的控制通道相对较长一些。换一种方式理解就是第二种方式的书写方式对Aflag信号到来的时间要求较高,必须较早到来,否则可能会出现错误的输出,但是第一种对Aflag信号到来的时间要求较低。
下图为单if语句及其综合出来的电路,可以看出逻辑综合工具会将其映射为无优先级的判断结构。并且消耗的逻辑资源较少。

综上所述,由第一种电路转化为第二种电路的做法是典型的以速度换面积的方式。
需根据输入约束,小心设计:先“加”后“选”还是先“选”后“加”。
推荐初学者尽量使用单 if 语句(if…else if… .else if…) 描述多条件判断结构。

多if语句(if…if…if…)

多if语句在我们平时书写(对于我这种新手来说)较少用到,其描述语言及映射得到的硬件电路如下图所示:

可以看出:最后一级选择信号具有最高优先级,且具有优先级的多选结构会消耗组合逻辑。
存在即合理,那么为何会有这种电路呢?
若某些设计中,有些信号要求先到达(如关键使能信号、选择信号等),而有些信号需要后到达(如慢速信号、有效时间较长的信号等),此时则需要使用if…if…结构。
设计方法:最高优先级给最迟到达的关键信号。
这样即可以解决此问题。

2、case语句的硬件结构映射及优化

case语句与单if条件语句类似,同样是无优先级的判断结构但是相对于单if语句,case语句的各个条件必须互斥。其多用于译码电路。

3、latch

latch是由于组合逻辑电路中if语句与case语句的条件不完善(if缺少else,case缺少default)导致的。如下图示:

在进行设计的时候一定要避免出现latch。latch容易产生毛刺(glitch),DFF则不易产生毛刺。且latch将静态时序分析变得极为复杂。只要能用D触发器的地方,就不用组合逻辑电路设计。

4、逻辑复制,均衡负载

在电路设计过程中,可能某个信号所要输出给的下一级电路特别多,就会导致其驱动能力减弱,并且使得某些路径上的传播延时增加。**通过逻辑复制,降低关键信号的扇出,进而降低该信号的传播延迟,提高电路性能。**逻辑复制如下图示:

5、资源共享,减小面积

对于在同一时钟周期内要计算的内容有重复的,我们可以进行资源共享,减少不必要的资源浪费,如下图示:

6、资源重排,降低延迟

对于某一级信号中到来相对较晚的信号,要将其置于这一周期的后端进行计算,可以很好的改善电路的时序性能,如下图示:

7、“:?”连线,always运算

assign语句一般只用其进行信号的链接,而不用于逻辑运算,“:?”的多层嵌套会导致代码难以阅读,并且多层潜逃后很难被综合器解释。

总结

1、牢记并理解可综合“四大法宝”所对应的硬件结构
2、写前,确认电路指标是什么:性能?面积?
3、硬件思维方式,代码不再是一行行的代码而是一块一块的硬件模块;
4、对所需实现的硬件电路“胸有成竹”;

电路优化的质量取决于代码的书写方式。请不要把电路性能优化寄希望于综合工具!

注:本文总结与mooc中邸志雄老师的芯动力课程。课程链接

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值