热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

原码一位乘法器设计实验

实验目的掌握原码一位乘法运算的基本原理,熟练掌握Logisim寄存器电路的使用,能在Logisim平台中设计实现一个8*8位的无符号数乘法器。设计要

实验目的

掌握原码一位乘法运算的基本原理,熟练掌握 Logisim 寄存器电路的使用,能在 Logisim 平台中设计实现一个 8*8 位的无符号数乘法器。


设计要求

在 alu.circ 文件中原码一位乘法器子电路中增加控制电路和数据通路使得该电路能自动完成 8 位无符号数的一位乘法运算,设置引脚初始值,然后驱动时钟自动仿真,电路可自动完成运算,运算结束结果传输到输出引脚,运算结束时电路应该自动停止。


方案设计

无符号原码一位乘的计算&#xff1a; 维护一个部分积&#xff0c;初始为0&#xff0c;每次取乘数b的最低位&#xff0c;如果最低位为1&#xff0c;部分积&#61;部分积&#43;乘数a&#xff0c;如果最低位为0&#xff0c;部分积&#61;部分积&#43;0&#xff1b;然后将部分积右移一位&#xff08;如果刚刚的运算没有发生进位&#xff0c;最高位补0&#xff09;&#xff0c;同时将乘数b右移一位。第i次&#xff08;i<&#61;8&#xff09;对部分积的右移操作移出来的数为最终乘积的第i低位&#xff0c;8次结束后的部分积为最终乘积的高8位。该计算方法本质是计算乘数a与乘数b的各位相乘得到的部分积&#xff0c;然后将所有的部分积相加。
实验电路的设计&#xff1a;需要实现的部分操作与实现思路如下&#xff1a;


  • 对部分积作加运算时对加数0或乘数a的选择&#xff1a;用多路选择器实现&#xff0c;选择依据为乘数b的当前最低位&#xff0c;最低位的选择用了分线器来实现。
    在这里插入图片描述

  • 对所维护的部分积作加运算&#xff1a;用8位串行加法器实现。
    在这里插入图片描述

  • 对部分积的右移和对乘数b的右移&#xff1a;用四组八位宽的分线器实现。其中新部分积的最高位由串行加法器的进位得到&#xff0c;乘数b的最高位由部分积右移出来的那一位得到&#xff0c;这么做的好处是省空间&#xff0c;高效率&#xff0c;运算完成后的部分积就是乘积的低八位。
    在这里插入图片描述

  • 部分积与乘数b的保存&#xff1a;两个寄存器实现&#xff0c;输出的数据既用于下次运算&#xff0c;也在运算完成后作为成绩结果输出。
    在这里插入图片描述

  • 边界情况的处理&#xff1a;用一个计数器来统计脉冲次数&#xff0c;以此对边界情况做特殊处理。

在这里插入图片描述

实验电路图
在这里插入图片描述


实验步骤


  • 理解原码一位乘法的方法。
  • 分析用到的部件的作用。
  • 针对做原码一位乘法中需要的操作&#xff0c;实现各个操作的逻辑电路。
  • 对边界情况出现的问题进行分析与修改。

故障与调试

在本次实验中遇到了两个较大的问题&#xff0c;对于部分复用器具体实现的功能的误解与对边界情况故障的调试。


  • 前者问题主要出在寄存器&#xff0c;多路选择器和分线器上&#xff1a;所用寄存器不是上学期在数字逻辑中讨论较多的一维寄存器&#xff0c;本实验所用寄存器只是用来暂存数据的。多路选择器的功能是对两个八位数据的二选一&#xff0c;一开始理解的是上学期接触的那种两部分输入&#xff0c;一部分是数据&#xff0c;一部分用来对数据的选择的多路选择器&#xff0c;这对我设计实验电路中的数据选择部分造成了一定的困难。分线器之前没有用过&#xff0c;其实功能很简单&#xff0c;相当于实现了一个对数据的“合并”操作。

  • 第二个问题出在对边界情况的处理上&#xff0c;具体来说是第一个与最后一个脉冲。在人为的模拟这个过程的时候看起来步骤简单且一致&#xff0c;但实际上要在模拟电路中实现这样一个“有序的循环”&#xff0c;要对边界情况做合理的处理。首先第一个脉冲应该是将初始的乘数b送进寄存器里&#xff0c;之后是该寄存器的数据存的是上一次右移的乘数与部分积右移出来的那一位的拼接&#xff0c;因此这个地方要用一个多路选择器来实现&#xff0c;选择依据为计数器的当前值&#xff0c;用了一个比较器和一个Load隧道实现。当8次正式的运算循环结束后&#xff08;第九个脉冲&#xff0c;计数器为8&#xff09;部分积为乘积高八位&#xff0c;此时的在电路中的乘数b为乘积的低八位&#xff0c;此时应忽略脉冲&#xff0c;并将寄存器中的结果输出&#xff0c;用了一个比较器和Stop隧道实现。


测试与分析

在这里插入图片描述


实验总结

本次实验暴露出了一些自身存在的问题&#xff0c;对一些复用器功能的不熟悉&#xff0c;设计逻辑电路的方法与步骤不够科学。但通过本次实验&#xff0c;我理解了原码一位乘法的原理&#xff0c;并且对于部分复用器的使用更加熟练&#xff0c;优化了逻辑电路的设计的方法。本次实验使我收益匪浅。


推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
author-avatar
赵lamarta
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有