• Hust计算机组成原理实验


    logisim的使用

    1.添加门电路

    点击资源栏-Gates选项中的门电路,即可在右边画布添加
    在这里插入图片描述
    添加成功后如下:
    在这里插入图片描述

    2.添加引脚

    引脚可在菜单栏中找到
    在这里插入图片描述
    也可在资源栏-Wiring中找到
    在这里插入图片描述
    添加入画板后,可在属性表中修改面向方向
    在这里插入图片描述
    最后得到如下图
    注:方形为输出,圆形为输入。
    在这里插入图片描述

    3.添加导线

    使用光标连接两个结点即可
    在这里插入图片描述

    • 灰色:线的位宽未知。发生这种情况是因为导线未连接到任何组件的输入和输出。(所有输入和输出都有一个定义的位宽。)
    • 蓝色:导线带有一位值,但没有任何东西将特定值驱动到导线上。我们称之为浮动位; 有人称之为高阻抗值。在此示例中,将值放置到导线上的组件是三态引脚,因此它可以发出此浮动值。深绿色:电线带有一位0值。
    • 亮绿色:导线带有一位1值。
    • 黑色:电线带有多位值。可能未指定部分或全部位。
    • 红色:电线带有错误值。这通常是因为门无法确定正确的输出,可能是因为它没有输入。它也可能因为两个组件试图将不同的值发送到线路上而产生; 这就是上面的例子中发生的情况,其中一个输入引脚将0置于线上,而另一个输入引脚将1置于同一线上,从而导致冲突。当任何携带的位是错误值时,多位线将变为红色。
    • 橙色:连接到导线的元件的位宽不一致。橙色线有效地“断开”:它不承载组件之间的值。在这里,我们将一个两位组件附加到一位组件,因此它们是不兼容的。

    若出现橙色线缆,修改门电路的Data Bits值,使之组件位数一致。

    连接完成后,电缆都为绿色,表示连接完成。
    在这里插入图片描述

    4.添加文本

    选择文本工具在这里插入图片描述
    点击引脚,输入标签。对引脚注释
    或点击任意未知,进行注释。
    在这里插入图片描述

    5.测试电路

    选择戳工具在这里插入图片描述,点击输入引脚,即可改变它的输入值。
    在这里插入图片描述
    可以看到,当线缆表示1时,为亮绿色;线缆表示0时,为深绿色。

    补充工具

    在这里插入图片描述

    实验一,运算器实验

    同学们需要在视频中对于你所实现的8位串行可控加减法器CLA741824位快速加法器16位快速加法器32位快速加法器以及ALU的进行介绍并回答相应问题。

    1. 依次比照你所实现的各个电路,口述你对该电路的实现思路以及你是如何从头构建起这个电路并使其正常工作的。
    2. 对于每一个电路,你可以回顾并介绍你在实现该电路过程中遇到的问题,以及你是如何解决这个问题的(加分项)
    3. 此外,我们对每个电路,也都准备了相应的问题和演示要求,同学们在视频演示中演示到了相应的电路时,除了上述两条,还需要在视频中对如下问题进行回答。同学们如果不知道从什么角度来介绍电路,也可以从这些问题中获得思路启发。

    8位串行可控加减法器

    1. 对于加减法的控制,你是采取何种方式实现的?
    2. 你是怎样实现溢出检测的?其数学原理是什么?

    分析一位全加器

    P 65 P_{65} P65

    设输入为x,y,进位为c。
    则该位为x^y^c
    进位当且仅当x,y都为1,或z为1,且x,y有一个为1。用符号表示为
    (x&y) | (x^y)&z

    用电路表示为
    在这里插入图片描述
    已在一位全加器FA中给出。

    八位串行加法器即可给出

    P 65 P_{65} P65
    在这里插入图片描述

    8位串行可控加减法器

    P 66 P_{66} P66

    在8为串行加法器的基础上加入可控符号Sign,若为减法,将y的补码修改为(-y)的补码(取反+1)。

    若有 S 补 = x 补 − y 补 S_补 = x_补 - y_补 S=xy,即有
    S 补 = x 补 + (反码 ( y 补 ) + 1 ) = ( x 补 + 反码 ( y 补 ) ) + 1 S_补 = x_补 + (反码(y_补)+1) = (x_补 + 反码(y_补)) + 1 S=x+(反码(y)+1)=(x+反码(y))+1;
    可将最低为的Cin设为1,当作减法计算中反码加1的操作。

    Sub为1时,y取反;Sub为0时,y不变。有-y = y^Sub
    在这里插入图片描述
    对于OF溢出,检测方法有两种:

    1. 根据操作数和运算结果的符号位是否一致进行检测(负负得正,正正得负时溢出), S f S_f Sf为运算结果的符号位
      O F = X f Y f S f ‾ + X f ‾   Y f ‾ S f OF = X_fY_f\overline{S_f} + \overline{X_f}\ \overline{Y_f}S_f OF=XfYfSf+Xf YfSf
    2. 根据运算时最高数据位产生的进位信号 C d C_d Cd,符号位产生的进位信号 C f C_f Cf判断,当两个进位不一致时溢出
      O F = C f ⊕ C d OF = C_f \oplus C_d OF=CfCd

    显然方法二更容易实现。

    对于无符号溢出,Cout为1即可判断溢出。
    在这里插入图片描述

    回答问题

    1. 对于加减法的控制,你是采取何种方式实现的?
      当Sub为1时,y取反,且在最低位加法器有进位1;
      当Sub为0时,y不变。
      − y = y ⊕ S u b -y = y \oplus Sub y=ySub
      将Sub作为最低一位加法器的进位,Sub=1时,与y的每一位作异或运算。

    2. 你是怎样实现溢出检测的?其数学原理是什么?
      根据运算时最高数据位产生的进位信号 C d C_d Cd,符号位产生的进位信号 C f C_f Cf判断,当两个进位不一致时溢出,有
      O F = C f ⊕ C d OF = C_f \oplus C_d OF=CfCd

    CLA74182(先行进位加法器)

    P 67 P_{67} P67

    1. CLA74182的作⽤是什么?

    参数

    低位进位 C 0 C_0 C0
    产生进位 C i C_i Ci
    进位生成函数 G i G_i Gi
    进位传递函数 P i P_i Pi
    成组进位生成函数 G ∗ G^* G
    成组进位传递函数 P ∗ P^* P

    公式

    S i = P i ⊕ C i C i + 1 = G i + P i C i ⇒ C 1 = G 0 + P 0 C 0 ⇒ C 2 = G 1 + P 1 C 1 = G 1 + P 1 G 0 + P 1 P 0 C 0 ⇒ C 3 = G 2 + P 2 G 1 + P 2 P 1 G 0 + P 2 P 1 P 0 C 0 ⇒ 以此类推 S_i = P_i \oplus C_i \\ C_{i+1} = G_i + P_iC_i \\ \quad\\ \Rightarrow C_1 = G_0 + P_0C_0 \\ \Rightarrow C_2 = G_1 + P_1C_1 = G_1 + P_1G_0 + P_1P_0C_0\\ \Rightarrow C_3 = G_2+P_2G_1+P_2P_1G_0+P_2P_1P_0C_0 \\ \Rightarrow 以此类推 Si=PiCiCi+1=Gi+PiCiC1=G0+P0C0C2=G1+P1C1=G1+P1G0+P1P0C0C3=G2+P2G1+P2P1G0+P2P1P0C0以此类推
    G ∗ = G 3 + P 3 G 2 + P 3 P 2 G 1 + P 3 P 2 P 1 G 0 P ∗ = P 3 P 2 P 1 P 0 G^* = G_3+P_3G_2+P_3P_2G_1+P_3P_2P_1G_0 \\ P_* = P_3P_2P_1P_0 G=G3+P3G2+P3P2G1+P3P2P1G0P=P3P2P1P0
    在这里插入图片描述

    问题

    1. CLA74182的作⽤是什么?
      提前得到所有全加器所需的进位输入信号,所有全加器都可以并行计算从而提高运算性能。

    位快速加法器

    1. 快速加法器与普通的串⾏加法器的区别是什么?他是通过什么⽅法来实现“快速”的?

    16位快速加法器

    在这里插入图片描述

    32位快速加法器

    在这里插入图片描述

    1. 你的溢出检测是如何实现的?这⾥是否可以选择其他的溢出检测⽅法?
      使用利用变形补码的符号位进行检测。
    2. 实现此电路有哪些值得注意的地⽅?

    ALU

    根据已有工具构造
    在这里插入图片描述

    实现功能

    ALU OP十进制运算功能
    00000Result = X << Y 逻辑左移(Y 取低五位)Result2=0
    00011Result = X >>>Y 算术右移(Y 取低五位)Result2=0
    00102Result = X >> Y 逻辑右移(Y 取低五位)Result2=0
    00113Result = (X * Y)[31:0]; Result2 = (X * Y)[63:32] 有符号
    01004Result = X/Y; Result2 = X%Y 无符号
    01015Result = X + Y (Set OF/UOF)
    01106Result = X - Y (Set OF/UOF)
    01117Result = X & Y 按位与
    10008Result = X | Y 按位或
    10019Result = X⊕Y 按位异或
    101010Result = ~(X |Y) 按位或非
    101111Result = (X < Y) ? 1 : 0 符号比较
    110012Result = (X < Y) ? 1 : 0 无符号比较

    有关运算器的使用可参考:Logisim元件用法详解四:Arithmetic 运算器

    在这里插入图片描述

    1. 怎样实现功能选择?
    2. 依次介绍各个功能的实现⽅式
    3. 重点介绍OF,UOF,加法,减法
    4. 运⾏运算器测试电路检测

    实验二、存储器实验

    3.1存储扩展实验

    在这里插入图片描述

    3.2 MIPS寄存器文件设计

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    羊了个羊通关秘籍
    聚星文社工具【聚星文社】Ai小说推文一键生成工具大更新:一键出图、一键改文、一键关键帧、MJ+SD推文神器
    数据结构第29节 后缀树和后缀数组
    (十三)admin-boot项目之redis注解实现接口限流
    djangoMTV初探
    mybatis_plus
    【Linux】基础:进程地址空间
    MySql触发器使用
    不到20W纯电SUV提回家,到店实拍2022款奇瑞大蚂蚁
    CloudCompare 二次开发(12)——点云投影到球面
  • 原文地址:https://blog.csdn.net/weixin_44518102/article/details/128121118