分类: 计算机组成原理

  • RV32I笔记

    instruction types

    R:寄存器 – 寄存器操作

    I:短立即数和访存 load

    S:访存 store

    B:条件跳转

    U:长立即数

    J:无条件跳转

    opcode

    指令不仅仅由 opcode 区分,还有子 opcode.

    主 opcode:

    R 型全是 0110011

    计算 I 型全是 0010011

    lui 是 0110111

    auipc 是 0010111

    读内存 I 型都是 0000011

    写内存型都是 0100011

    jalr 是 1100111

    jal 是 1101111

    B 型是 1100011

    细分 opcode

    12 – 14 位是细分 opcode

    R 型与计算 I 型:

    op code
    add, sub 000
    sll 001
    slt 010
    sltu 011
    xor 100
    srl, sra 101
    or 110
    and 111

    随后,sub 和 sra 和 srai 要将第 30 位置为 1,其它的此位置无立即数的是 0,有立即数的是立即数。

    ALU 操作码设计

    以上 10 个操作加上直接输出 A, B 共 12 个操作,用 4 位就够了。由于不确定透传 A, B 是否需要配合其它译码电路,先给它们两个单独划分一个位,后续再根据需求修改操作码。

    op code
    add 00000
    sub 01000
    sll 00001
    slt 00010
    sltu 00011
    xor 00100
    srl 00101
    sra 01101
    or 00110
    and 00111
    srcA 10000
    srcB 10001
  • COD作业1

    1

    (1)

    T_{p_1}=0.9\times5\times10^9\div4GHz=1.125s

    T_{p_2}=0.75\times1\times10^9\div3GHz=0.25s

    p_2 所用时长更短。

    (2)

    T=1\times10^9\times0.9\div4GHz=0.225s

    I_{p_2}=0.225s\times3GHz\div0.75=9\times10^8

    (3)

    MIPS_{p_1}=\frac{4GHz}{0.9\times10^6}=4444s^{-1}

    MIPS_{p_2}=\frac{3GHz}{0.75\times10^6}=4000s^{-1}

    p_1 的 MIPS 更高,但是按照 (1) 的结论更慢。

    (4)

    MFLOPS_{p_1}=\frac{5\times10^9\times40\%}{1.125s\times10^6}=1778s^{-1}

    MFLOPS_{p_2}=\frac{1\times10^9\times40\%}{0.25s\times10^6}=1600s^{-1}

    2

    (1)

    ALU:计算单元,执行算术运算,SOC 课讲过。

    REGFILE:寄存器单元,提供寄存器读写。

    MUX:选择器,按照控制信号连接对应的电路。

    MEMORY:内存单元,按照地址读写内容。

    (2)

    ALU,REGFILE,MUX 属于 CPU.

    MEMORY(包括 MAR,MDR)属于内存

    (3) 图中 INPUT 和 OUTPUT 使用固定内存映射进行 I/O.

    x86 计算机中显示器信号、键盘、鼠标可以使用内存映射进行 I/O. 除此之外 I/O 设备还有声卡、网卡、硬盘等。

    3

    (1)

    A B Bin D Bout
    0 0 0 0 0
    0 0 1 1 1
    0 1 0 0 1
    0 1 1 1 1
    1 0 0 0 0
    1 0 1 1 0
    1 1 0 0 0
    1 1 1 1 1

    (2) 功能:计算 A-B-Bin,结果为 D,借位 Bout,即一位全减器。

    (3)

    module Foo(A, B, Bin, D, Bout);
        input A, B, Bin;
        output D, Bout;
    
        assign D = A^B^Bin;
        assign Bout=(~A&(B|Bin))|(B&Bin);
    endmodule
    
    

    4

    (1) 不区分,PC(IP)所指位置默认皆为指令,遇到非法指令直接报错。程序应自己设置合适的跳转保证 PC(IP)所指位置皆为指令。
    按地址读取内存时全部视为数据,指令也视为对应的二进制数据。