欢迎来到天天文库
浏览记录
ID:52341871
大小:1.59 MB
页数:4页
时间:2020-03-26
《一种位串行加法器的设计.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、化工自动化及仪表第40卷一种位串行加法器的设计胡建东h吴昌东16王静梅h李萍2刘勇材h周玉明3(1.西华大学a.机械工程与自动化学院Ib.电气信息学院,成都610039;2.四川农业大学动物医学院,I四JII雅安625014;3.成都学院,成都610106)摘要针对CPU、MCU及DSP等电子器件中,传统加法器在一个时钟内能运算的住数越多,半加器的个数必须相应增加,导致加法器体积成倍增大的问题。提出一种不受操作数位数限制的串行输入/输出操作数和运算结果的加法器,重点介绍基于非常高速集成电路硬体描述语言的设计与实现方法。关键词加法器VHDLQuartusIIDDS中图分类号TH89文献
2、标识码A文章编号1000-3932(2013)1l-1410-04CPU、MCU及DSP等电子器件中的加法运算是最基础、最常见的运算方法,常见加法器是位并行的,在一个时钟周期内完成加法运算⋯。由于传统加法器位数有限,所以传统计算机能运算的数值范围是有限的,能精确到的浮点数位数是有限的。如果将传统加法器设计为位串行行操作,利用多个时钟周期完成一次加法运算,即输入操作数和输出结果由并行输入/输出改为随时钟串行输入/输出,比如由低到高串行输入0101和1001到位串行加法器,输出结果就是1110由低位到高位输出的数字波形,则其运算结果就可以存入FIFO或RAM中,这样不仅能够提高加法器处理
3、数值的上限,而且也能减少硬件资源的应用。位并行加法器速度高,但是占用资源多。在许多实际应用中并不需要这样高的速度,而是希望减少硬件资源占用率,这时就可以使用位串行加法器。在此,笔者将着重介绍上述位串行加法器,以及它基于非常高速集成电路硬体描述语言(Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,VHDL)的设计与实现方法。1位串行加法器的实现原理1.1数学原理二进制数的加法过程是从最低位开始的,低位决定进位数:1和1相加就进1,其他进位0。下一位操作数与上一位进位决定本位相加结果:进位和操作数中1的个数不大于1则
4、进位为0,否则进位为1。如101加101的计算过程为:第一位运算时,低位进位为0,运算结果为0,向前进位为1;第二位相加时,低位进位为1,运算结果为1,向前进位为0;第三位相加时,低位进位为0,运算结果为0,向前进位为1,所得最终结果为1010。1.2设计原理位串行加法器采用输入时钟Clk来控制加法器的操作,其逻辑如图1所示,输入信号Num(0,1)代表两个加法操作数Num(0)和Num(1);Re-set是复位端,低电平时复位;Clk是同步时钟;Carryl、Carry2和Carry3是Num(0)和Num(1)对应位相加的进位结果。要完成整个加法操作,主要是进位和本位操作数相加,
5、而进位结果是由低位决定的。所以本位运算结果输出后,必须保留进位到下两位操作数到来,这样操作数才能实现和上一位进位结果一起运算。由于最低位没有进位,它的处理方式稍有特殊:在上电复位后Carry3为0,所以可以用该时刻的0作为最开始两位操作数的进位,具体操作步骤如下:a.Num(0)和Num(1)的求和结果与进位结果,通过组合逻辑电路分别输出到Result端和Carryl。b.Clk上升沿到来后Carryl才赋值给Car—ry2,Carry2移位至Carry3;Clk下降沿到来时,重复上次移位操作,此时Carry3就是第一位操作数的进位。c.操作数第二位输入与Carry3求和,回到收稿日
6、期:2013-03-28(修改稿)第11期胡建东等.一种位串行加法器的设计1411步骤a。依此循环,直到结果输出完毕。图l位串行加法器由Clk控制其操作的逻辑实现由于在操作数最高位处可能还有进位,所以求和结果可能比操作数长,而操作数是二进制数,所以进位不大于1,结果最多会比操作数多一位,因此如果操作数有n位,那么就需要n+1个时钟才能保证完全输出结果。ClkResIlllResetNum(O.11NUm(I)Num{0lCarry2的作用是延时半个时钟周期,以匹配Num(0,1)和Carry3。如:101加011,若没有Car·ry2,最开始就会出现Num(0,1)=11和Carry
7、3=0,由于输出Result是Carry3和Num(0,1),由组合逻辑电路来确定,因而它们三者几乎保持同步,所以Carryl立即变成1,Result立即变为0;当Clk上升沿到来后,Carryl赋值给Carry3,所以Carry3=I,每一个时钟周期输入对应的两位操作数,所以此时Num(0,1)仍然是11,即变成1、1和进位1相加了,Result立即变为1。而实际上应该是第二批操作数0、1和进位1相加的,这就产生了错误,这个过程的仿真结果如图2所示,即C
此文档下载收益归作者所有