Verilog专题(二)Module与加法器基础

    对于verilog的学习,这里推荐一个比较好的实践网站HDLBits:https://hdlbits.01xz.net/wiki/Main_Page

    本专题记录一些我觉得有价值的题目,希望通过这些题目可以对verilog更加熟练。

    第二个专题介绍Module的使用方式和加法器基础。

 

题目一

1、下图的代码,模块的连接方式有两种连接方式,法1是根据模块端口名进行连接,格式:.模块端口名(外部信号名);法2是根据模块端口位置进行连接,如mod_a模块的端口顺序是(in1,in2,out),然后端口连接就按照端口的顺序填写(a,b,out)。

 注意:上面两种方式更加推荐法1,法1增加了代码的可读性,让读代码的人看到清晰的端口与端口之前的连线,而法2还需要记住端口的顺序才能明白代码逻辑,因此法1更好。

Verilog专题(二)Module与加法器基础

Verilog专题(二)Module与加法器基础

   

题目二

2、第二题是一个32位加法器,用两个16位的加法器组合而成,代码和仿真波形如下。

Verilog专题(二)Module与加法器基础

Verilog专题(二)Module与加法器基础

Verilog专题(二)Module与加法器基础

    32位加法器由两个16位加法器组成,一个16位加法器是由16个一位全加器组成(full adder),如下图所示的全加器顺序连接结构,称为行波进位加法器(ripple carry adder)。

Verilog专题(二)Module与加法器基础

    一位全加器由两个一位半加器(half adder)和一个或门组成。

Verilog专题(二)Module与加法器基础

    将上图简化一下,便形成32位加法器中的add1(一位全加器)模块,用verilog中的数据流建模(Data-flow Modeling)方式来描述全加器,代码如下:

assign {CO,S} = A+B+CI;

Verilog专题(二)Module与加法器基础

 

    半加器电路是指对两个输入数据位相加,输出一个结果位和进位,没有进位输入的加法器电路,实现了两个一位二进制数的加法运算电路。

    半加器有两个输入和两个输出,输入可以标识为A、B或X、Y,输出通常标识为和S与进位C。A和B经XOR运算后即为S,经AND运算后即为C。

    半加器有两个二进制的输入,其将输入的值相加,并输出结果到和(Sum)和进位(Carry)。半加器虽能产生进位值,但半加器本身并不能处理进位值。

Verilog专题(二)Module与加法器基础

    将上图简化一下,便形成一位全加器中的半加器模块。

Verilog专题(二)Module与加法器基础

    现在再回过头看32位加法器,其实你就会发现32位加法器是由大量的与门、或门和异或门组成。

    当然,每个门都是由MOS管组成,根据MOS管电路的设计不一样,全加器可以分为互补静态CMOS全加器、镜像全加器等;

    根据全加器模块电路的设计不一样,N位加法器可以分为行波进位加法器(ripple carry adder)、进位旁路加法器(carry bypass adder)、线性进位选择加法器(linear carry select adder)、平方根进位选择加法器(square root select adder)、超前进位加法器(carry-lockahead adder)等。

    有兴趣的同学可以参考一本数字IC的经典书籍《数字集成电路分析与设计——深亚微米工艺》,或者等我有时间总结一篇关于加法器的介绍,因为加法器这个模块在IC设计中实在十分重要。

 

题目三

3、第三题是一个关于32位减法器的问题。减法器实际也是由加法器实现的,因为A+B的补码形式=A-B,而B的补码=B取反+1,代码与仿真波形如下。

Verilog专题(二)Module与加法器基础

Verilog专题(二)Module与加法器基础

Verilog专题(二)Module与加法器基础

    从top_module来看的话,与第二题32位加法器结构大同小异,不同的地方有两点:①减法器的第一个cin是sub信号;②然后对信号B进行与sub信号的按位异或,这两个新增的点主要是实现对信号B取补码的功能。

    当sub信号为0时,表示做加法,B与0异或还是信号B本身,然后cin为0,实现的功能就是32位加法器;当sub信号为1时,表示做减法,B与1异或即B取反(~B),然后cin为1,即A+B+cin=A+B的补码=A-B,实现的功能就是32位减法器。(PS:不理解的朋友可以再反复斟酌两段中标红的句子)

 

文献来源:

  1. 《数字集成电路分析与设计——深亚微米工艺》 作者:David A.Hodges等

  2. 《编码的奥秘》 作者:Charles Petzold

  3.  

微信公众号

     建立了一个微信公众号“Andy的ICer之路”,此公众号主要分享数字IC相关的学习经验(后期打算与****同步更新),做公众号的目的就是记录自己的学习过程,很多东西回过头来可能就忘记了,为了记住知识和分享知识,希望自己可以保持更新,有兴趣的朋友可以关注一下!

Verilog专题(二)Module与加法器基础