Verilog HDL编码的综合与优化

2019-01-07 06:18张玉峰徐华结
赤峰学院学报·自然科学版 2018年12期
关键词:存器逻辑电路赋值

王 鹏,张玉峰,徐华结

(池州学院 集成电路设计与嵌入式应用研究中心,安徽 池州 247000)

1 引言

随着微电子技术的发展,专用集成电路(ASIC)和用户现场可编程门阵列(FPGA)的设计复杂程度的增加,逻辑电路系统的设计时间要求却越来越短,传统的原理图设计方法已经不能满足用户的设计需要,而硬件描述语言形式化的方法不仅能够准确、直观的对电路进行建模仿真,而且极大的提高了复杂电路的设计效率.在设计过程中设计者使用verilog HDL作为对数字电路进行描述的输入,综合工具将verilog HDL所描述的RTL级电路在附加的约束条件下映射到目标工艺库,输出由工艺库中的标准单元和互联组成的门级网表.在设计过程中正确的理解运用verilog HDL代码,不仅会影响综合所得到的准确性,同时对电路的性能、面积功耗也起着至关重要的作用.

2 Verilog编码与综合网表的生成

2.1 Verilog HDL是一种用于描述数字逻辑电路的硬件描述语言,它可以从逻辑功能上对电路模型进行行为级的描述,也可以通过元器件之间的相互连接关系在结构上对电路模型进行描述.根据对电路模型描述的不同抽象级,verilog HDL可用于系统级(System)、算法级(Alogrithem)、寄存器传输级(RTL)、逻辑级(Logic)、门级(Gate)和开光级(Switch)设计.在设计的过程中硬件描述语言verilog HDL的风格与C语言等其他语言有相似之处,如if语句、case语句等与C语言十分相似,但实际上verilog HDL代码所描述的对应的是实际的电路模型,同时一些非阻塞赋值等语句也是C语言没有的,所以对Verilog HDL语句特殊方面的着重理解,将有益于生成希望得到的电路网表.

2.2 赋值语句

Verilog语言中阻塞赋值和非阻塞赋值的语言结构是需要重点掌握的方法之一,能够完全正确的理解可综合风格的赋值语句才能设计出符合要求的电路,清楚的理解阻塞赋值语句和非阻塞赋值语句含义的差别可以避免代码综合生成的电路中现竞争冒险现象.

表1 阻塞赋值与非阻塞赋值的比较

在综合的过程中综合工具对阻塞赋值和非阻塞赋值的处理方法不同,阻塞赋值在赋值过程中顺序执行,在执行下一条赋值语句时就已经完成对右端对象的赋值,而对于非阻塞赋值是在执行过程中并不会立即赋值,需要在整个过程块结束后才对所有变量完成赋值操作.如表1所示:

表1中有三条赋值语句,其综合出的网表如图1所示,always语句块中三条赋值语句受下降沿时钟clock控制,综合生成三个下降沿触发的触发器,第一条赋值语句是阻塞赋值,将右边data1&result1计算的值赋给左边的result1,完成赋值语句后result1获得新值,第二条赋值语句是非阻塞赋值将右边的result1|data2值非给左边的result2,第二条赋值语引用result1新值,所以result2触发器的输入端通过逻辑门连接到result1触发器的数据输入端,第三条赋值语句是非阻塞赋值,将右边result2|data3的值给左边的result3,因为第二条赋值语句是阻塞赋值,其result2值会在语句块结束时才完成赋值,所以赋值语句三中使用的仍然是其原值,所以在综合过程中result3触发器的数据输入端通过逻辑门连接在result2的数据输出端.

图1 赋值语句综合出的网表

对三条赋值语句对比可以看出,阻塞赋值和非阻塞赋值所综合出的网表有所区别,在verilog的代码编写过程中充分的理解赋值语句将有效的避免生成错的电路网表,同时在运用赋值语句中一些注意要点可以有效的解决在综合后出现的冒险竞争问题,如表1中出现的一个always语句块中同时出现阻塞和非阻塞语句在代码编写中应尽量避免,可以将它分别写在两个always语句块中.

2.3 if、case语句

在verilog HDL中的条件选择语句有if语句和case语句,if语句是用来判断所给的条件是否满足,根据判断结果进行二选一的操作,而case语句是多分支选择语句,在实际问题中遇到多种选择时,可以使用case语句进行选择.不过这两种语句在编写代码时应注意对其中的每条分支进行赋值,不当的编码其综合过程中可能会推导出不希望生成的锁存器.

表2中的第一个编码的if语句中只当a=1时,对 q进行了赋值将d的值赋给q,而a=0时编码中没有写出q该取什么样的值,这时候会默认变量保持原值生成一个锁存器,如第一个代码右边生成的电路图所示.如果设计者希望当a=0时将0的值赋给q,在第二代码中加上一个else语句,其生成的电路图如第二个代码右边电路所示,这时电路就不会生成锁存器.

表2 if语句生成锁存器

verilog HDL中case语句是多分支的选择语句,在编码时与if语句类似,表3中的第一个case语句当sel取00和01时,分别将a和b的值赋给q,当sel取00和01以外的值10和11时,并未告诉q应该赋予何值,这时会默认保持原值生成一个锁存器,如果不希望生成多余的锁存器,可以在case语句中加入default项避免在电路中生成不必要的锁存器,如表3中第两个代码所生成的电路所示.

表3 case语句生成锁存器

3 verilog编码与网表性能的优化

Verilog HDL的编码的准确性影响着综合所生成网表的功能的正确描述,同时不同的编码方式和结构所综合出来的网表的性能也不尽相同,通过对verilog HDL代码的优化可以实现优化综合所生成的网表,根据不同的电路需求在面积、功耗、性能间进行平衡,以完成最终的设计需求.

下面以流水线设计(pipe-line)为例,通过pipe-line的设计方法对电路的性能和所使用逻辑资源进行优化和权衡.在verilog HDL对复杂的组合逻辑电路和时序电路描述过程中,工具能自动的综合生成电路并对电路的进行全面验证,但对于一些对时钟速度要求很高的电路和一些特殊的电路,如CPU的指令读取、执行和高性能的DSP系统设计其结构还是需要设计者来定夺,而pipe-line技术被广泛的采用在这些电路的设计中.pipe-line设计是将规模和层次较多延时较长的组合逻辑电路分成几个部分,在每个部分之间插入寄存器暂存两个寄存器中间组合逻辑电路产生的数据,而k级流水线就是在组合逻辑电路的起始端到输出端之间插入K个寄存器.

图2在电路中可以达到的时钟最快周期与建立时间(tsu)、组合逻辑电路延迟(tcomb)和寄存器输出响应时间(tc-q)有关,不考虑时钟抖动(skew)等因数的情况下,时钟周期可以达到的时间T的表达式如下:

建立时间(tsu)、寄存器的延迟(tc-q)相对与组合逻辑电路的延迟时间(tcomb)较小,若设:t1comb为20t,tsu和tc-q分别为5t和3t,则图2时钟可以达到的最快周期为T>20t+5t+3t=28t.

图2 正常结构的电路图

采用pipe-line结构在图3的组合逻辑电路t1comb中插入一个寄存器,将组合逻辑电路t1comb分成t2comb和t3comb时延分别为8t和12t如图3所示,此时电路中时钟可以达到的最快周期为 max{tc-q+tsu+t2comb,tc-q+tsu+t3comb},T>max{16t,20t}.

图3 采用pipe-line结构设计图

通过对比采用pipe-line结构的设计在电路的性能上得到了提升,付出的代价是增加了一个寄存器,在高性能的电路系统面积相对宽裕的情况下,对一些时序紧张的路径采用pipe-line结构设计是一种重要的方法.

4 结语

通过对verilog HDL的编码和综合过程的研究和理解,能够有助于设计者设计出正确的逻辑功能的电路,避免在设计过程中综合出与设计意图不相符的电路网表,同时通过对verilog HDL编码结构的调整能够对生成的网表进行优化达到电路系统设计要求,缩短设计周期提升设计效率.

猜你喜欢
存器逻辑电路赋值
L-代数上的赋值
一种低功耗的容软错误锁存器设计
45 nmCMOS工艺三模冗余加固锁存器的性能评估
数字电子时钟逻辑电路的教学设计与仿真
强赋值幺半群上的加权Mealy机与加权Moore机的关系*
算法框图问题中的易错点
容忍单粒子多节点翻转的三模互锁加固锁存器
基于软件技术的组合逻辑电路模型分析与实现研究
短区间自动闭塞车站接近区段逻辑电路设计
利用赋值法解决抽象函数相关问题オ