F阶段
| A | B | P1 | P2 | N1 | N2 | Y |
|---|---|---|---|---|---|---|
| 0 | 0 | 1 | 1 | 0 | 0 | 1 |
| 0 | 1 | 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 | 0 | 0 |
| 1 | 1 | 0 | 0 | 1 | 1 | 0 |
该门电路是或非门,使用6个晶体管
用其他门电路搭建或门使用晶体管数量为6+6+6+2+2=22,表达式为Y=$A\overline{B}+\overline{A}B$
化简后的异或门使用的晶体管数量为4+4+6=14,表达式为Y=$$\overline{\overline{A+B}+AB}$$,使用或非门与非门越多,晶体管越少
异或门分析
| A | B | P1 | N1 | P2 | N2 | P3 | N3 | Y |
|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 |
| 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
同或门:$$Y=AB+\overline{A}\overline{B}=AB+\overline{A+B}=\overline{\overline{AB}(A+B)}$$
16-4 encoder
| A15 | A14 | A13 | A12 | A11 | A10 | A9 | A8 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 | Y3 | Y2 | Y1 | Y0 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | |
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | |
| 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | |
| 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | |
| 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | |
| 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | |
| 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | |
| 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
优先编码器的套路是采用多输入的有n-1个非门输入的与门来屏蔽低位输入。
3位4选1选择器的意思是,输入和输出的位宽都是3位,可用3个并行的4选1选择器完成,它们公用一套线路
| D3 | D2 | D1 | D0 | S1 | S0 | Y | ||
|---|---|---|---|---|---|---|---|---|
| X | X | X | 000 | 0 | 0 | 000 | ||
| X | X | 001 | X | 0 | 1 | 001 | ||
| X | 010 | X | X | 1 | 0 | 010 | ||
| 011 | X | X | X | 1 | 1 | 011 |
full adder
| Cin | A | B | S | Cout |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |
S=Cin^A^B; Cout=AB+Cin(A+B)
half sub
| A | B | 差Difference | 借位C |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 0 |
full sub
| A | B | 来自低位的借位输入Cin | D | 向高位的借位输出Cout |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 1 |
| 0 | 1 | 0 | 1 | 1 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 0 |
| 1 | 1 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 | 1 |
与非门SR锁存器
| $$\overline{S}$$ | $$\overline{R}$$ | Q |
|---|---|---|
| 1 | 1 | 保持 |
| 1 | 0 | 0 |
| 0 | 1 | 1 |
| 0 | 0 | 禁止 |
D锁存器
| WE | D | S | R | Q |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 保持 |
| 0 | 1 | 0 | 0 | 保持 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 1 | 1 | 0 | 1 |
F4
数列求和
1 | 0: li r0, 10 # 这里是十进制的10 |
1 | PC r0 r1 r2 r3 |
10以内奇数列求和
1 | 10001001 # 0: li r0, 9 |
1 | PC r0 r1 r2 r3 |
1 |
|
1 | PC sum i |
数列求和电路的状态
| CLK | B0 | B1 | B2 | B3 | A0 | A1 | A2 | A3 | A4 | A5 | S0 | S1 | S2 | S3 | S4 | S5 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
| 2 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
| 3 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
| 4 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
| 5 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 |
| 6 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
| 7 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 |
| 8 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 |
| 9 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 |
| 10 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
F5
数列求和机器码
1 | 10001010 # 0: li r0, 10 |
1 | 8a |
优化10以内奇数和指令序列
1 | 10001001 # 0: li r0, 9 |
1 | 89 |
已完成sCPU!
out rs指令,在七段数码管输出结果
| op | rs | xxxx |
|---|---|---|
| 01 | 10 | xxxx |
11100011 # 7: bner0 r3, 8
01100000 #8: out r2
F6
PC寄存器的位宽是多少?
答:32位
GPR共有多少个? 每个GPR的位宽是多少?
答:GPR共有32个,每个的位宽是32位
R[0]和sISA的R[0]有什么不同之处?答:RV32I的R[0]通过硬连线设置为0,不可改变;sISA的R[0]可以自由设置值。
指令编码的位宽是多少? 指令有多少种基本格式?
答:指令编码的位宽是32位,指令有R, I, S, B, U, J种基本格式。
在指令的基本格式中, 需要多少位来表示一个GPR? 为什么?
答:需要5位来表示一个GPR,因为有32个GPR,5位二进制数可以表示32个编号。
add指令的格式具体是什么?add rd, rs1, rs2
还有一种基础指令集称为RV32E, 它和RV32I有什么不同?
RV32E只有16个寄存器,从x0到x15.
| imm[11:0] | rs1 | 000 | rd | 0010011 | ADDI |
|---|
addi rd, rs1, imm
addi是I-Type,它将一个立即数和rs1的内容相加后存到rd中。
已完成F阶段
视频链接https://www.bilibili.com/video/BV1pKz7BSEVc/