一、设计要求
在 logisim 模拟器中打开Educoder平台“原码一位乘法器设计”的 alu.circ 文件,在 alu.circ 文件中原码一位乘法器子电路中增加控制电路和数据通路使得该电路能自动完成 8 位无符号数的一位乘法运算,设置引脚初始值,然后驱动时钟自动仿真,电路可自动完成运算,运算结束结果传输到输出引脚,运算结束时电路应该自动停止。路框架及电路引脚见下图。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/096e1eab3af0902d7c54ca18981f2a58.jpeg#pic_center)
二、方案设计
1.设计原理
原码一位乘法流程为:
原码一位乘法的硬件逻辑:
2.设计思路
(1)由原码一位乘法可知,乘数依次从最低位乘以被乘数,然后和部分积进行累加。
(2)因为乘数每次用完最低位后就不用了,所以我们可以右移一位,将最低位丢掉。
(3)在进行累加时,因为每次做完乘法都是高一位的,所以我们把部分积右移一位,这样就可以实现对齐。另外,丢掉的那
一位可以存在乘数寄存器的最高位,这样每次右移丢掉的一位都在最前列。在运行8次后,第一次丢掉的刚好到达最低位。
(4)乘法部分如果Yi = 0,则结果为0,如果Yi = 1,则结果为X。可知乘法可以用数据选择器实现。对运算次数进行控制,
在第0次运算时,把Y载入乘数寄存器中。在第8次运算后停止运算。因为是无符号数运算,所以不需要考虑符号位。
3.设计电路图
三、实验步骤
1.添加计数器,将复位按钮连接到所有寄存器和计数器的复位信号上,将时钟脉冲连接到所有寄存器和计数器的时钟信号上
2.添加比较器,利用第1步添加的计数器对时钟进行计数,利用比较器比较计数器的输出,当计数值为0时,即初始状态,生成加
载Y引脚的值所需要的选择控制信号,当运算次数达到要求(8次)时,生成相应的停机信号,即控制对应寄存器和计数器的使能信
号,将使能信号置为低电平。∑寄存器表示部分积,Y寄存器表示乘数
3.实现{∑,Y} = {∑+Yn|X|,Y}/2 这一核心运算
4.对于寄存器Y的输入,增加二路选择器进行相应的控制
5.微调线路,使线路简洁美观,完成电路搭建
四、故障与调适
1.连线故障导致不能正确完成原码一位乘法运算
原因分析:一开始对于各寄存器,计数器的引脚位置及功能不是很了解,凭着自己的主观判断去断定引脚的功能,连接的
线路引脚与实际功能不匹配导致无法完成运算。
解决方案:去MOOC慕课学习了logisim的组件库中的相应器件才知道各引脚的功能,并纠正了自己的线路,实现运算。
2.在实现Yn+|X|时,不能正确地分离出高位信号,logisim总是报错“位宽不匹配”
原因分析:分线器的参数设置有误,导致最高位没有被单独分离出来,使得分线后的输入与二路选择器的标准输入不匹
配,如二路信号输到一路输入中,必然报错。
解决方案:重新设置分线器参数,使之能够正确分离出最高位信号,实现Yn+|X|。
五、测试与分析
赋予X,Y值,按下Ctrl+K键启动时钟进行运算
Educoder平台测试结果:
六、实验总结
1.要熟练掌握实验相关的基础理论知识,及其在电路中的实现逻辑;
2.对于常用的逻辑门、复用器、运算器等logisim组件的引脚及功能要了解,不了解也不能主观臆断,需要去查阅相关资料,
保证正确使用各组件,否则不可能达到实验要求;
3.实验组件的参数设置要互相匹配。
-
本次实验难度较大,自己在开始进行实验时的方法存在很大的问题,即不先去落实好理论知识,而是直接开始在logisim里面开始实验,使得自己一头雾水,既浪费了时间,又没有任何实质性的收获。我回顾了前两次的实验过程,发现这次实验自己有些急于求成,没有踏实地去先搞懂理论知识。意识到问题之后我转变实验方法,先去复习了原码一位乘法的原理和实现步骤及其硬件逻辑,并且在MOOC慕课上找到相关课程,跟着老师的思路对实验进行思考,心中有了大致脉络之后再去做实验,果然顺利了许多。所以说做实验切忌急于求成,必须要在理论基础扎实的前提下,再去动手,否则只会浪费时间,做无用功。