当前位置:   article > 正文

07_08 常用组合逻辑电路结构——为IC设计的延时估计铺垫_基4布斯算法代码

基4布斯算法代码

学习目的:估计模块间的delay,确保写的代码的timing 综合能给到多少HZ,以满足需求!在coding 阶段 或 architecture阶段,很好的预估电路的delay,哪些地方需要切pipe 做流水线设计,有良好的估计,减少DC综合不过返回来的迭代操作。

目录

1.mux电路

 2.加法器

1.一位全加器

2.八位加法器(串行波进位加法器)(串行进位加法器)Ripple

3.进位选择加法器 carry-select

4.超前进位加法器 carry look ahead

3.减法器

4.加法器优化 Carray Save Adder(CSA)

1.两篇博客的学习

2.(Wallace Tree)

5.乘法器

1.基4布斯编码的乘法 Radix-4 Booth Encoding

6.除法器

7.有符号数/浮点数/double


首先说明(叠个甲),这里是课程笔记,如果觉得侵权请联系删帖。数字IC/数字电路/FPGA设计_从入门到精通

1.mux电路

要大概知道自己的设计对应的结构(黄色的电路结构),因而对delay路径有多长 有一个自己的估计!

1.二选一:assign y = s ? d1 : d0; 通过s信号选择数据d1 或 d0。

2.四选一:case语句,通过两位的s信号s0 s1组合00 01 10 11,选择 数据d0 d1 d2 d3。

 本来用d s 写到敏感列表里面,如果后面再case下添加了信号,而敏感列表里面没加,就会增加一些 latch,@ (*)避免一些 latch

 2.加法器

加法器知识

1.一位全加器

sum为和,a b cin有奇数个1时,输出就为1(画真值表就理解),所以s = a^b^cin 异或逻辑!

cout为进位输出,定义p (propagate传递)、g(generate产生),p表示a b输入能够传递一个进位,g表示a b输入本身能够产生一个进位。
能够产生cout进位的两种情况:传递进位——a或b至少有一个1(p),前面进位cin为1(cin),此时就能有进位输出(p&cin)。生成进位——a与b同时为1,a&b就能够直接产生进位。
①在cin = 1时,p=1的情况下,cout也有进位 (即a或b本身有至少一个1,同时加上本身的进位cin,就会产生进位输出cout=1,就能传递了) ②a、b都为1时就能够产生进位,generate。
所以综合:cout =(p&cin)| g。这种写法是为了 超前进位 的加法器做准备。

简洁写法:直接采用加法的逻辑,不容易出错,DC综合也会的到类似上面的加法器,因此会有类似的delay分析。 写1‘b0是为了提醒自己a和b是一个无符号数,如果a、b是有符号数,就不能写1’b0(下面行波加法器中有详细分析)

2.八位加法器(串行波进位加法器)(串行进位加法器)Ripple

3.进位选择加法器 carry-select

思想:从电路结构上优化

将4位行波加法器封装,优化8位的行波加法器的延迟

延迟:4bit加法器延迟 + 一个mux选择器的延迟! PPA分析:频率增加delay减小(接近50%),面积增加(50%)

启发:在做一些串行逻辑时,如果Timing没法通过,可以考虑select的结构,减小延时,优化timing很好的一种思路!

4.超前进位加法器 carry look ahead

思想:从算法上优化了一位一位的进位加法。

启发:图像、AI、通信网络滤波等等——都可以类似的从算法上优化。

 

 delay肯定是减少了,因为优化了以下描述的最大延时路径。同时四位全加器的sum的逻辑比进位的逻辑简单,每一级的sum = a·b。

然后最大的延迟路径为:或门以前最后一个5信号与延迟(5信号与有结果时,其他的与信号、G3已经运算完成) + 最后一个或门的延时。

 

3.减法器

计算机采用补码计算,负数的补码:原码取反+1

4.加法器优化 Carray Save Adder(CSA)

假设有两个数,使用最好的tree adder结构,延时为10ns,问:当有16bit的三个数相加,采用同样工艺的DC综合,延时会变为多少?20ns、20.5ns ?

 3个数相加的优化方法:CSA Carry-Save Adder

1.两篇博客的学习

博客一:进位保存加法器原理与设计

使用进位保存加法器在执行多个数加法时具有极小的进位传播延迟,它的基本思想即将3个加数的和减少为2个加数的和,将进位c和和s分别计算保存,并且每比特可以独立计算c和s,所以速度极快。

 ①对于m个数相加,每个数n比特宽,总共需要m-1次加法。假如使用超前进位加法器LCA的话,直接相加法总共需要的门延迟为O(lg n);如果使用树形加法器(后期会介绍),门延迟将变为O(lg m * lg n) ②使用进位保存加法器CSA结构则可以将门延迟降到更低,其结构如上图(2)所示,它将3个数相加转换为2个数相加,在树的根部,加数宽度变为O(n+log m),因此如果最后一个加法器用LCA的话,则门延迟为O(lg(n+lg m))。

 

博客二:进位保留加法器与(m;n)压缩器

2.(Wallace Tree)

这里,X Y Z输入全加器,即对应全加器的输入:a b 和 cin。XYZ为三个数对应的bit位。
一个加法器实现:carry和sum的竖式计算

将表达式和实现对路对应起来就很好理解了

CSA总结:所以3个4bit的数相加,并没有使用两个4bit真实的adder串联,而是对三个数用CSA做预处理为两个数Carry和Sum,最后再对这两个数相加得到最终的结果。

delay: 一个1bit加法器的delay(4个并行一位加法器) + 最后一个真正的加法器的delay(两个5位的数相加),远小于串行方式的delay

5.乘法器

最简单的乘法器,延时还是比较高。——手动计算的实现是,一次只用乘数的一位与被乘数相乘,效率低,中间结果很多,使得CSA操作的中间步骤多,造成延时增加。

1.基4布斯编码的乘法 Radix-4 Booth Encoding

1.1原理

原因:按照上面的手动计算,乘数的每一位都会产生一个部分积,这样会使得Wallace Tree层数很多,电路的delay增大。 解决办法:因此采用编码进位的方式,使得本位只留下一个部分积,电路就会得到简化,即表格中的最后一列。

6.除法器

 

7.有符号数/浮点数/double

做法有很多的IEEE规范,复杂,如浮点数——IEEE500还是IEEE700的规则 有相关的IP,同时还是建议算法优化——同上面的,转化为整数

如AI——落地到FPGA,电脑用浮点数,实际落地转为int8、int16这种。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号