BUAA_CO_pre_Logisim
北航计算机组成原理pre阶段Logisim知识分享
通过阅读本文,您大致可以学习到2024年秋季北航计算机组成原理课程pre阶段,关于Logisim知识的内容
Logisim是一个用来仿真模拟电路的软件
常用部件
由于篇幅限制,这里不可能精讲所有部件,只是挑选一些笔者认为比较重要的部件进行介绍
Splitter
又叫分线器。一般是用来把一条有多比特位数据的数据线分开成不同的几小条数据线,或者是把几条线的比特位合并到一条数据线中。在将来的CPU设计中,Splitter还经常用于从一个多位数据线上截取特定比特位,送给不同的部件
举个栗子
图中的Splitter A
,把一个32位的数据分成了四份,每一份都是8位,而Splitter B
,只取了32位数据的低20位。Splitter C
则是把32位输入的低8位作为合并数据的低8位,把32位输入的低20位作为高20位,合并成了一个28位的输出
Logisim的左下角有这个部件的属性
Fan Out
: 表示该Splitter
有几个分支,即将数据分成了几路,或者将几路数据合并了Bit Width In
: 表示总线的位宽,也就是图中Splitter A
左下角的引脚所连线的位宽Appearance
: 选择Splitter
的外貌,是左手手性还是右手手性等Bit 0-31
: 决定总线中的某一位,是否在某一个分支中
Pin
又叫引脚。常见的有输入引脚和输出引脚。还有是否支持三态,即0
, 1
, x
(浮空值)
与引脚有关的还有上拉电阻和下拉电阻,这个主要用来处理来自父级电路的浮空值,把浮空值转换成0(下拉)或者是1(上拉)
Probe
探针,用来显示一条数据线的数据,不会影响电路的工作,debug的时候很好用
Tunnel
一对同名的Tunnel
本质上和一条导线是一样的。Tunnel
可以让你的电路更加清晰,不会有那么多丑陋的导线,错综复杂
Clock
时钟。在时序电路里很重要
时钟会以一定的频率在高电平和低电平之间转换。转换的瞬间统称时钟沿。由低电平转换到高电平称作上升沿,由高电平转换到低电平称作下降沿
Gates
各种门元件。这里不做一一介绍了
MUX
多路选择器。在一个元件内,一个输出可能有多个信息来源,在这些信息中筛选出我们需要的数据,就要用到MUX
MUX
包括输入信号和选择信号,每一个输入信号对应一个2进制编码。还可以根据需要,增加使能端:若使能端为1或浮空值,MUX
均可以正常工作;若为0,则输出为浮空值。
DMX
多路复用器。其功能与MUX
正好相反
DMX
将一个输入,按照需求,送到不同的输出上。相较于MUX
,DMX
还支持三态。如果支持三态,则未被选择的输出引脚会输出浮空值而不是0
Decoder
解码器。解码器的输入只有选择信号。它和DMX
长得很像,对于一个特定的选择信号,解码器对应的输出引脚会输出1
常见于选择写入的使能,在P0的寄存器堆实现中会用到
Arithmetic
运算元件,包括加减乘除、取负数、比较、移位、位加等,比较好理解,这里不做过多介绍
Register
寄存器。寄存器内部会利用触发器等来存储一个值,一般是在时序电路中会被用到,常见的触发模式是时钟上升沿存入
若复位信号不为1,则当时钟上升沿到来时,寄存器会将写入端口收到的数据写入寄存器内部,相应的输出会改变。寄存器的输出就是寄存器内部存着的数据
图中,寄存器左侧的D引脚便是输入端口,en引脚是写使能,有一个三角形的引脚是时钟引脚,0是复位端口,当该输入为1是,无论时钟处于高电平还是低电平,直接将寄存器中存储的值变成0
RAM
RAM
是可读可写的存储器,一般我们用它来作为CPU的内存
RAM
有多种数据传输方式,比较常用的是读写分别用各自的端口
ROM
RAM
是只读的,一般我们用它来存储CPU需要运行的指令
Counter
计数器。它长得和寄存器很像。以上升沿为例,若复位信号不为1,则每个时钟上升沿到来时,计数器会把它内部的数据+1
根据需求,当计数器内部的值到达最大值时,有几个不同的工作模式:
Wrap Around
: 变成0重新计数Continue Counting
: 继续计数Stay At Value
: 保持于最大值或最小值Load Next Value
: 从D端读入下一个数据
常见电路
寄存器的同步复位
寄存器本身是支持异步复位的,但是我们很多时候需要同步复位,也就是当时钟上升沿到来时,若复位信号为1,将寄存器复位
其实方法有很多,我们讲解一种比较清楚、比较容易看懂的做法
说白了,同步复位的要求,就是当时钟上升沿到来时,根据reset
信号的值,决定我们要向寄存器里写什么值,因此我们需要用到MUX
来实现