首页 > 编程知识 正文

verilog加法器代码,8位进位保留加法器verilog

时间:2023-05-04 20:58:25 阅读:125023 作者:442

一、内容介绍加法器是数字电路中最基础的电路之一,也是CPU的核心功能之一。

在本专栏中,我实现了一次我知道的所有数字电路的加法器相关模型,并说明了其原理。

用于编程的语言是Verilog,代码样式是强迫症系列样式。

加法器系列链接:

上一篇:进位选择加法器设计

当前: koggle-stone加法器设计

下一篇: brent-kung加法器设计

二是koggle-stone加法器的设计原理1973年,KOGGE-P-M和STONE-H-S提出了并联前缀的进位先行加法器,通过使高位的计算与高位的进位结果无关,大大提高了加法器的速度。

2.1 koggle-stone加法器出现背景以下代码摘自前文:进位前加法器

carry [0]=p [0] q [0] * c _ I carry [1]=p [1] p [0] * q [0] * c _ I carry [2]=p [2] p [2] 上式可转换为c [0]=p [0] q [0] * c _ I [ c _ I=0]=p [0] c [1]=p [1] p [0] * q [1]

第一,超前进位加法器的中心特性是进位的发生只能由三级与门发生。

第二,进位是独立发生的,可以完全独立,但低位进位的运算是高位进位的一部分。

还总结了超前进位加法器的缺点,即布线过于密集。 超前进位加法器需要使用多个与门来保证自己的延迟,过于复杂的组合逻辑本身也大大降低了电路的稳定性,容易发生竞争和冒险,一些亚稳定性会持续传播。

koggle-stone加法器在不改变超前进位加法器特性的情况下优化布线,增加中间阶段,优化布线以提高稳定性。

2.1 koggle-stone加法器的设计原理是基于超前进位加法器的进位生成关系式,将前一个加法器生成的进位cin设为1‘b0。 我们生成的第一个进位carry[0]是第一个进位。 通过观察发现,各进位之间有以下规律。 1 .每个进位产生的项数为n的第一个进位子代为2,第二个进位子代为3。 2 .第I个进位的每个子代也有规律地有第I个子代是p(I ),第i-1个子代是p ) i-1 ) q ) I ),第i-2个子代是p ) i-2 ) ) q ) I ) q ) I )第一个子代是p )

p(0)=cin; p(1)=p [0] . p ) I )=p[i-1]。

q函数也同样地q(1)=q(0)…q (I )=q(I-1 )。

我们得到如图所示的函数,设m=j,即用j划分进位函数,得到修正函数

c(I,j )。

j=0时,进位函数与前一个加法器的进位有关,

j=1时,进位函数为第1级加法器。

引入修正函数后,可以得出以下规律。

c (0,0 )=p(0)=cin;

c (1,0 )=c ) 1,1 ) q )1) ) c (0,0 );

c (2,0 )=c ) 2,2 ) q )2) c (1,0 )=c (2) q (1) ) c ) 0,0 );

c (3,0 )=c ) 3,3 ) q )3) c ) 2,0 )=c )3) q ) 1,0 )=

c (3,1 ) q )3) q )2) q )1) c ) 0,0 );

根据这个定律,我们发现使用二次结构时,我们可以实现四输入(4bits ),每增加一个阶段,我们的输入就会加倍。 由于延迟时间只需增加与门的延迟时间一级,因此采用该结构的加法器整体性能大大提高,布线也针对超前进位加法器进行了优化,最终进位逻辑的复杂度明显优化,适合物理实现。

2*2=4,所以我们可以得到二次树结构。

通过该机制,可以设计对应的3位koggle-stone加法器(进位为4位)。

三、三位koggle-stone加法器的verilog设计c (0,0 )=p )=cin;

c (1,0 )=c ) 1,1 ) q )1) ) c (0,0 );

c (2,0 )=c ) 2,1 ) q )2) q )1) c ) 0,0 );

c (3,0 )=c ) 3,2 ) q )3) q )2) c (1,0 );

module ks _ a # (参数宽度=3) (input [WIDTH-1:0] a_i、b_i、input c_i、outputwire[width33600] ) wire [WIDTH-1:0] q,p; wire[width:0]卡莉; assign p=a_i b_i; assign q=a_i | b_i; assign carry[0]=c_i; assign carry [1]=p [0] q [0] carry [0]; assign carry [2]=p [1] q [1] p [0] q [1] q [0] carry [0]; assign carry [3]=p [2] q [2] p [1] q [2] q [1] carry [1]; //fulladderassignc _ o [ 2:0 ]=a _ I ^ b _ I ^ carry [ 233600 ]; assignc_o[3]=卡莉[3]; endmodule观察koggle-stone加法器的结构,明显布线过于密集是个小问题。

下面进一步介绍其改进型加法器。

下一篇: brent-kung加法器设计

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。