BUAA_CO_P3 一些增强电路可拓展性的方法
时间:2023-01-27 07:30:00
P3 一些增强电路可扩展性的方法
不知不觉就要和logisim说再见了(好兴奋好兴奋),趁着你还记得如何使用这个软件,写一些使用logisim搭建单周期CPU留作纪念的技巧。
1.狂用Tunnel
使用Tunnel可避免混乱连接,更好地理清各单元的输入/输出/控制信号。特别是在顶层电路中,对于功能单元,Tunnel就像是一个函数输入/输出不仅能在添加指令时直观地显示逻辑关系,还能突出各功能单元模块化特点。这样,即使指令数不断增加,也能得到更清晰的顶层电路。下图是我几乎完整的Tunnel顶层电路设计
2.使用输入端MUX
随着指令数量的增加,一些功能单元可能需要不同的输入。配合上一个Tunnel,利用MUX扩展输入端很方便。注意这个时候MUX由控制单元产生的控制信号。在顶层电路中ALU模块的连接方式
3.适当增加MUX的Select Bits
随指令数的增加,MUX输入端必然会有越来越多的信号。IFU单元中nPC模块的MUX,虽然目前只涉及四个指令,但还是设置了三位Select Bits,以扩展后续指令。
控制信号IFU_MUX常量0(如下图所示)可以暂时添加到控制单元的和或门阵列中,然后在需要扩展指令时进行更改。
4.控制单位将指令最多的情况设置为0
这个听起来有点尴尬,结合上一个IFU_MUX解释信号。
显然,我们对大多数指令都是常规的pc=pc 4的操作。因此,我们将pc 4放在了MUX最上方的输入端口(即对应的控制信号为0)。这样的好处在于,在搭建控制单元的与或门阵列时,对于大多数指令,我们不必将它连接到或门上(因为不连接或门对应的输出信号为0)。
从负面理解:可以想象,如果我们把它放在一边pc 4放在了MUX第二个输入端,在控制单元的和或门阵列中将每个新加入的指令连接到上图上端或门上,这将是一项繁琐的工作。
以及如何定义指令最多的情况,我认为可以借助nop指令,即:将nop指令对应的情况设为0。nop指令本质上没有任何操作,相应的指令操作默认即大多数指令对应的情况 (思考题2似乎可以从这个角度理解
5.建立一套控制信号命名规则
随着指令数量的增加,需要产生越来越多的控制信号。建立一套控制信号命名规则可以帮助更快地找到需要引出的控制信号 (贴上自己奇怪的名字,比如GRF_aw_M代表控制GRF单元写入(write)地址端(address)多路选择器(MUX)的控制信号
6.其他美化电路的方法 (强迫症必看)
以下仅代表个人审美观点,不喜欢就不喷(
a.设置分线器的属性
分线后合并×
在输出之前,合并所需的位数√
不能留下的分叉×
只保留需要输出的位数√(属性栏设置none实现)
b.编辑子电路外观
调整各端口间距至两个点阵。这样引出Tunnel可以平行引出
而不是默认间距一个点阵导致连线曲折
c.调整子电路端口的朝向和顺序
确保输入端口向左,输出端口向右,控制信号端口向上/向下
按照命名字典的顺序,从上到下从左到右排列每个端口
(以上两点方便顶层电路连接时,无需重复点击子电路查看端口对应关系
d.多用Ctrl C/V
特指GRF单元。得到一个整齐的寄存器阵列,整个人呼吸顺畅
over!goodbye logisim~
Author:Mr.Lin