目录
- 单周期处理器设计思路
- 加法器的优化
- 行波进位加法器(RCA)
- 先行进位加法器(CLA)
- 两种加法器的对比
- CLA的再优化
- 可以用加法器实现的其他操作
- 编写可维护的RTL代码
单周期处理器设计思路
加法器的优化
(用综合器综合±*/等效果更好)
行波进位加法器(RCA)
先行进位加法器(CLA)
两种加法器的对比
-
RCA在计算某一分支的时候,使用较多的门,一个连着一个,延迟大。而在计算其他分支时,延迟小。而最终的延迟,就是最大的分支的延迟。
-
而CLA,则更好地平衡了两个分支的延迟,让两个分支的延迟尽量相同,则总延迟也会下降
CLA的再优化
-
当计算的位宽更大时,也会导致延迟增加
-
因此将整个大位宽的CLA拆成几个小位宽的CLA
-
FA为全加器
-
将全加器替换成4位CLA
可以用加法器实现的其他操作
-
减法指令
-
右边的图为真值表,可以发现溢出的时候Cn-1和Cn一定不相同
-
移位指令
-
交叉开关式 桶形移位器
- 直接用一个选择器来实现
-
级联式 桶形移位器
- 用2-1选择器阵列来实现
-
编写可维护的RTL代码
-
错误示范
-
需求:
-
解决方法
- verilog编写选择器
- 容易出错
- 不能模糊匹配
- casex和casez支持模糊匹配,但是不知道会综合出什么电路
- 用excel写表格,让python脚本帮你生成verilog的case语句
- excel是人写的,可以只保留关键信息
- python负责生成大量重复的case代码
- 缺点:case语句为行为建模
- chisel 的 ListLookup API
- 写起来方便,综合器会自动帮你编译成级联的选择器
- 但是对综合器要求高,可能影响性能
- chisel 的 Decoder API
- 与 ListLookup API 几乎相同
- 但是有特定算法优化,性能大大提升
- verilog编写选择器