利用已有的电路部件,搭建一个可以计算加法和减法的电路。
上面的MC、RAM、PC、Reg、ALU都有控制选中(CS片选)、可写(不可写则可读)的输入,选中时对应灯泡点亮示意。
使用16位中的13位二进制的01来对应。
通过不同的排列组合即可定义每个时钟周期电路的状态(哪些单元可以被操控读写)。
下面是对应电路的控制单元的标识,或运算一组和,就是控制电路了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| import os
A_WE = 1 A_CS = 1 << 1
B_WE = 1 << 2 B_CS = 1 << 3
C_WE = 1 << 4 C_CS = 1 << 5
ALU_SUB = 1 << 6 ALU_EN = 1 << 7
MC_CS = 1 << 8 MC_WE = 1 << 9
PC_CS = 1 << 10 PC_WE = 1 << 11 PC_EN = 1 << 12
NOTHING = 1 << 14
HLT = 1 << 15
dirname = os.path.dirname(__file__) fileName = os.path.join(dirname,'ins.bin')
micro = [
NOTHING,
MC_CS|A_CS|A_WE|PC_WE|PC_EN|PC_CS,
MC_CS|B_CS|B_WE|PC_WE|PC_EN|PC_CS,
ALU_EN|A_CS|B_CS,
ALU_EN|C_CS|C_WE,
MC_CS|MC_WE|C_CS, HLT ]
with open(fileName,'wb') as file: for value in micro: file.write(value.to_bytes(2,byteorder='little'))
print("finished compile")
|
以下是加法的gif演示(减法免了),演示从RAM中读取5和3到寄存器,使用ALU单元求和,输出到C寄存器,再写回到RAM。
备注:首次发布在testerhome