计组头哥实验 实验二 原码一位乘法器设计

实验旨在掌握1位原码乘法运算的原理,利用Logisim设计8*8位无符号数乘法器。通过创建输入输出端口、添加控制电路和数据通路,以及设计数据通路控制器,最终在Logisim中成功实现了电路。通过电路仿真测试和优化,加深了对数字电路设计和Logisim工具的理解。
摘要由CSDN通过智能技术生成

实验目的

掌握1位原码乘法运算的原理,掌握Logisim寄存器组件的使用,理解数据通路和数据通路控制的概念,在Logisim平台实现一个8*8位无符号数一位乘法器电路。

实验内容

1、在Logisim中打开alu.circ文件中无符号数一位乘法器的电路框架;

2、增加RST、CLK等控制电路和数据通路,在CLK驱动下完成8位无符号数的一位乘法。

实验过程(请用简单的文字描述)

   1.确定电路的输入和输出端口。本次实验需要输入两个8位无符号数,输出一个16位无符号数。

   2. 设计乘法器的电路。根据原码乘法运算的原理,将两个8位无符号数逐位相乘,并将结果累加到一个寄存器中。因此,本次实验需要使用一个8位寄存器和一个16位寄存器。

    3.实现Logisim寄存器组件。在Logisim中,可通过选择“Memory”菜单下的“Register”组件来实现寄存器。创建两个寄存器,一个用于存储乘积的低8位,一个用于存储乘积的高8位。

   4.  设计数据通路。根据数据通路的概念,需要确定电路中各部分的数据传输路径。对于本次实验,数据通路如下图所示:

输入端口A --> 8位加法器 --> 8位寄存器(R1) --> 16位加法器 --> 输出端口

                          

输入端口B --> 8位加法器 --> 8位寄存器(R2)

    5.实现数据通路。在Logisim中,可通过选择“Wiring”菜单下的“Wire”组件来连接电路中的各个部分。按照上述数据通路设计出电路连接方式。

    6.设计数据通路控制器。在数据通路中,需要对各部分进行控制以保证电路正常工作。对于本次实验,数据通路控制器需要实现以下功能:

    将输入端口A的数值传输到寄存器R1中;

    将输入端口B的数值传输到寄存器R2中;

    将寄存器R1中的数值和寄存器R2中的数值逐位相乘并累加到寄存器R3中;

    将寄存器R3中的低8位传输到输出端口中。

    7.实现数据通路控制器。在Logisim中,可通过选择“Wiring”菜单下的“Splitter”组件来实现数据通路控制器。创建一个控制器,将输入端口A和B的数值分别传输到寄存器R1和R2中,将寄存器R1和R2中的数值传输到8位加法器中,将8位加法器的结果传输到16位加法器中,将16位加法器的结果传输到寄存器R3中,将寄存器R3中的低8位传输到输出端口中。

    8.测试电路。在Logisim中,可通过选择“电路仿真”菜单下的“Circuit”来模拟电路。输入两个8位无符号数,检查输出是否与预期结果一致。

    9.优化电路。根据实验结果,适当调整电路的参数以提高其性能和效率。

实验详细操作步骤或程序清单

     1.打开Logisim软件,点击“文件” -> “创建”创建新电路。

    2.确认电路的输入和输出端口。在左侧工具栏中选择“线路”下的“Input Pin”组件,拖动并放置到电路界面上。右键点击该组件,选择“Attributes”修改其名称为“inputA”,重复上述步骤创建一个名称为“inputB”的输入端口,再创建一个名称为“output”的输出端口。

    3.设计乘法器的电路。在左侧工具栏中选择“逻辑门”下的“与门”组件,拖动并放置到电路界面上。选中该组件,按Ctrl+C复制一份,将它们连成8位的串行结构。依次进行8次乘法运算,并将结果累加到16位寄存器中。在左侧工具栏中选择“存储库”下的“寄存器”组件,拖动并放置到电路界面上。创建两个寄存器,一个用于存储乘积的低8位,一个用于存储乘积的高8位。

    4.实现Logisim寄存器组件。在电路界面上选择创建的寄存器组件,右键点击,选择“编辑”。在弹出的窗口中,将“位宽”设置为8,并保存修改。

    5.设计数据通路。在左侧工具栏中选择“线路”下的“分线器”组件,拖动并放置到电路界面上。创建一个控制器,将输入端口A和B的数值分别传输到寄存器R1和R2中,将寄存器R1和R2中的数值传输到8位加法器中,将8位加法器的结果传输到16位加法器中,将16位加法器的结果传输到寄存器R3中,将寄存器R3中的低8位传输到输出端口中。

    6.设计数据通路控制器。在电路界面上选择创建的分线器组件,右键选择“添加标签”,将标签命名为“control”。选中控制器,在“Attributes”窗口中将“Bits”设置为4。

方案设计细节:

无符号原码一位乘的计算: 维护一个部分积,初始为0,每次取乘数b的最低位,如果最低位为1,部分积=部分积+乘数a,如果最低位为0,部分积=部分积+0;然后将部分积右移一位(如果刚刚的运算没有发生进位,最高位补0),同时将乘数b右移一位。第i次(i<=8)对部分积的右移操作移出来的数为最终乘积的第i低位,8次结束后的部分积为最终乘积的高8位。该计算方法本质是计算乘数a与乘数b的各位相乘得到的部分积,然后将所有的部分积相加。

实验电路的设计:需要实现的部分操作与实现思路如下:

对部分积作加运算时对加数0或乘数a的选择:用多路选择器实现,选择依据为乘数b的当前最低位,最低位的选择用了分线器来实现。

  对所维护的部分积作加运算:用8位串行加法器实现。

对部分积的右移和对乘数b的右移:用四组八位宽的分线器实现。其中新部分积的最高位由串行加法器的进位得到,乘数b的最高位由部分积右移出来的那一位得到,这么做的好处是省空间,高效率,运算完成后的部分积就是乘积的低八位。 

 部分积与乘数b的保存:两个寄存器实现,输出的数据既用于下次运算,也在运算完成后作为成绩结果输出。

   边界情况的处理:用一个计数器来统计脉冲次数,以此对边界情况做特殊处理。 

 实验电路图

实验结果(上传实验结果截图或者简单文字描述)

疑难小结

在本实验中我遇到了以下几个问题:    

1.如何使用Logisim寄存器组件?

首先需要在Logisim的工具栏中找到“存储库”选项,选择“寄存器”组件。将其拖放到电路设计面板上,然后右键单击该组件进行设置。在弹出窗口中,可以设置该寄存器的位宽、名称、初始值等参数。

2.如何验证电路的正确性和稳定性?、

在Logisim平台上,我们可以通过仿真功能来验证电路的正确性和稳定性。在设计好电路之后,可以点击工具栏中的“模拟”按钮进行仿真。在仿真窗口中,可以输入测试数据并观察电路的输出结果,以此检验电路的正确性和稳定性。

3.在实现8*8位无符号数一位乘法器的电路时,常见的一个难点是如何将两个8位无符号数拆分成四个4位无符号数进行运算。这时可以使用Logisim平台提供的“Splitter”组件,将两个8位无符号数分别拆分成高4位和低4位。

4.另一个可能会遇到的问题是如何判断电路设计是否正确。

在Logisim平台上,我们可以使用“Probe”组件来观察电路中各个信号的值,并通过与参考模型的比较来判断电路设计是否正确。

6.在进行仿真时,如果发现电路输出结果不正确,可以逐步排查错误的原因。常见的错误包括:输入数据格式错误、电路连接错误、计算过程中溢出等。此时需要仔细检查电路设计和仿真设置,并适当调整参数以及修改电路连接方式。
在本次实验中,我也掌握了以下几个内容:

    1.1位原码乘法运算的原理及其在电路中的实现方式。

    2.Logisim寄存器组件的使用以及数据通路和数据通路控制的概念。

    3.在Logisim平台上实现一个8*8位无符号数一位乘法器电路的方法和步骤。

    4.在电路设计过程中遇到的问题和解决方案,如数据拆分、结果判断等。

通过本次实验,我们不仅加深了对数字电路设计的理解,还锻炼了自己的设计能力和解决问题的能力。同时,我们也学会了如何使用Logisim平台进行电路仿真和调试,这将为今后的学习和工作打下坚实的基础。

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真的卷不栋了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值