刚刚初学VerilogHDL的时候,感觉语言风格很像C语言,编程也是完全用软件的思想去写,但是使用过FPGA和学习了数集之后,才醒悟出何为“硬件思想”,本节主要介绍一下西交邱志雄老师一门课中的VerilogHDL描述方法。
VerilogHDL可综合的四大法宝:always、if-else、case、assign ,本文将围绕这四大法宝来讲述。
有可综合的法宝,那么可综合风格禁止出现的情况:function、for、fork-join、while等。
** If-else的硬件映射及优化**
01
if-else的映射硬件结构是多路选择器Multiplexing Hardware(简称Mux)。
我们来看看上面的第一段代码,我们心中要出现该代码描述的电路,该电路由两个加法器和一个Mux组成。
接下来我们看第二段代码:
该段代码描述的电路应该是两个Mux和一个加法器组成:
两段代码描述的功能都一样,但是电路面积却不一样,第二段代码描述的电路少了一个加法器多了一个Mux,在同一个工艺库下,二输入Mux的晶体管数量比一位半加器少,因此第二段代码描述的电路减少了硬件的面积。
从面积的角度看,第二段代码更优,但是真的可以说第二段代码比第一段代码好吗?很显然,一般这么问,答案都为否定。
我们从传播延迟的角度再来分析一下这两个电路:
1、左图的数据通道的延迟是一个加法器和一个Mux,控制通道的延迟是一个Mux。
2、右图的数据通道的延迟依然是一个加法器和一个Mux,控制通道的延迟却是一个加法器和一个Mux。
很显然第二段代码描述电路(右图)的控制通道延迟比较大,如果Aflag到来的延迟比较晚的话,那么第二种电路的性能就会比第一种差。
综上所述,在设计的时候要根据输入约束,再来选择两种不同的设计:是先加后选,还是先选后加。
** If的优先级问题**
02
多if语句具有优先级的判断结构,即输入信号是有不平等关系的,最后一级选择信号具有最高优先级,具有优先级的多选结构会消耗组合逻辑,而且这种写法比较乱,一般不推荐这种写法。(case语句是无优先级的)
但是在某些设计中,有些信号要求先到达(如关键使能信号、选择信号等),而有些信号需要后到达(如慢速信号、有效时间较长的信号等),此时则需要用if...if... 或者 if...else if...结构,一般最高优先级给最迟到的关键信号。
电路之大敌——Latch
03
latch由电平触发,非同步控制,所以非常 容易产生毛刺(glitch) ,这是很大的危害,这对于下一级电路是极其危险的,而且静态时序分析会变得极为复杂,因此只要能用D触发器的地方就不用latch。
易引入latch的途径:使用不完备的条件判断语句,如if缺少else,case缺少default。
逻辑复制 均衡负载
04
通过逻辑复制,降低关键信号的扇出,进而降低该信号的传播延迟,提高电路的性能。
资源共享 减小面积
05
如果电路中存在较多的公共单元,可以通过资源共享,来减小电路的面积,但是一般来说,共享会降低电路性能,所以还是要根据性能和面积而进行取舍。
逻辑重组 降低延时
06
在电路设计中,可以根据信号的延时,对这些资源进行顺序的重排,以降低传播延时。如下图所示,信号A延迟比较高,可以把它尽可能地放到后面隐藏其延迟。
逻辑赋值
07
在时序电路中必须使用非阻塞赋值(<=), 组合逻辑电路必须使用阻塞赋值(=)。
-
晶体管
+关注
关注
77文章
9606浏览量
137637 -
时序电路
+关注
关注
1文章
114浏览量
21672 -
加法器
+关注
关注
6文章
183浏览量
30057 -
VerilogHDL语言
+关注
关注
0文章
2浏览量
5787 -
多路选择器
+关注
关注
1文章
22浏览量
6507
发布评论请先 登录
相关推荐
评论