用Logisim实现计算机组成原理三个实验:七段数码管、有限状态机控制的8*8位乘法器和单周期MIPS CPU设计

目录

标题1.首先是七段数码管 

 标题二:有限状态机控制的8*8位乘法器

标题三:单周期MIPS CPU设计


标题1.首先是七段数码管 

1看一下实验要求:

 

 2.接下来就是详细设计:

1. 组合逻辑设计

       由于7段数码管由7个发光的数码管构成,因为我们想用二进制将0-9这几个数字表示出来。所以他需要4位数字才能够把这7个数码管表示的数字都囊括其中,这7位输出来控制发光二极管来显示数字0~9。

首先先列出七段数码管显示的数字:

由此可见,例如:当想要输出零这个数字时,除了g这段数码管不亮以外,其他的数码管都要亮,以此类推,我们用二进制表示要输出的数字,比如0001那就是要输出1,0010就是要输出2。由此我们可以得到7段数码管显示译码器真值表:

 得到真值表后,接着便是组合逻辑电路的实现。这里利用logisim里的自动生成电路功能:

然后确定输入和输出

 

       

 然后选择真值表的形式依次填入上面得到的译码器真值表(注意和上表一致,others部分全部设置为0),表达式和最小项不用管,设置完成后点击生成电路。就会得到这样一个译码电路:

 接着就是电路的实现,我用一个计数器加时钟来实现输入,当clock时钟为上升沿时,计数器加一,然后用分线器变成二进制输入到封装好的译码电路,七段数码管直接用logisim里的。测试结果完美!

 标题二:有限状态机控制的8*8位乘法器

注意,这个乘法器不是普通的乘法器,它是由Moore型有限状态机控制的乘法器 

1.实验要求:

 2.详细设计:

时序逻辑设计

首先,由于采用有限状态机作为控制电路,我们需要先确认有限状态机的输入与输出

由此可见,有限状态机有三个输入,7个输出(因为还有一个done信号,表示运算结束),这里我们不采用ALU,使用普通的加法器,因此LP信号可以不用给出,所以少了一个输出,变成了6个。接下来便是控制电路的设计。首先先画出状态转换图,如下,sat表示start信号:

 然后便是状态转换表,我们采用二进制编码重写状态转换表和输出表,这样使用的数位少一点。当然了,用独热编码也是OK的,因为有5个状态。独热编码需要5位数字,00001,00010,00100,01000,10000。数位太多了。

用二进制编码重写状态转换表: 

然后再写输出表:

由于已经得到了二进制编码的状态转换表和输出表,接着用logisim自动生成电路按照这些表自动生成就好。

这是下一状态的电路图:

 还有就是输出的电路图:

 然后将这两个组合在一起就是有限状态机:

 得到有限状态机控制电路后就可以开始组件全部的电路:

       注意:当乘法器运行结束后的那个done信号出现之后他应该连到哪里去?这个done信号表明整个电路应该结束,所以我把它跟电路的时钟用与门连接起来,这样一来只要done信号出现,那么时钟将不再起作用,那么自然整个电路就停下来了。 

       运行的时候先输入运行的二进制数字,再点开start信号,最后再开时钟。

标题三:单周期MIPS CPU设计

单周期控制器(也就是cpu控制器,起了另一个名字):设计:

接下来详细介绍控制器的实现:

首先由于整个控制器是需要op以及func作为控制信号的指导,所以需要两个输入引脚将这两个信号输入,对于非R类型的指令而言,只需比较他的op是多少就那么这条指令就成立,比如lw的op指令是23(16进制),用一个比较器比较就可以得出。

而对于R类型的指令,由于R类型的数据的op都是000000,那么接下来就要看它的function,只需比较function就可以得出他们这几条指令,如图:

封装如下:

寄存器文件RegFile设计:

ALU设计:

 总设计:

 ********************************************************************************************************

2023/1/24

正月初三,风轻轻吹…….

物联沃分享整理
物联沃-IOTWORD物联网 » 用Logisim实现计算机组成原理三个实验:七段数码管、有限状态机控制的8*8位乘法器和单周期MIPS CPU设计

发表评论