【⭐持续更新中...】
可能有很多童鞋像我一样,刚接触这个软件的时候一脸懵逼,什么操作都不会。
但不用慌,其实这个软件是很简单的,接下来我将由浅入深地介绍一些基本操作(如:电路封装、添加电路等等...)和基本组件(如:引脚、探针、隧道、分线器等等...),后续还将介绍一些进阶组件(如:时钟、寄存器Register、随机存储器RAM、多路选择器MUX、比较器Compatator、位扩展器、三态门、加法器、移位器等等...)的基本使用方法。
首先,大家可以在左上角的偏好设置这里,将文字调成中文,方便阅读:
【前排提醒:收藏一下可以防丢失哦】
1、Pin 方形引脚(输入):左上角这个方形的叫引脚的东西可以进行输入
用选择工具(白色鼠标)选中后,可以更改数据位宽(输入不同的位数)
选中手掌后点击数位,可以更改值(0/1)
2、Pin 圆形引脚(输出):左上角这个圆形的叫引脚的东西可以进行输出
同样可以改变数据的位宽
需要强调一下,最右边是最低位,最左边是最高位哦!下面以8位输入引脚为例:
3、导线:切换成选择工具(白色鼠标)后点击引脚的圆点
轻轻拖拽即可生成导线
补充:各类的线的颜色及状态
如果出现位宽不匹配的情况(橙色线),只需要修改数据位宽,使两端匹配即可。
4、戳工具(“手掌”)和选择工具(“白色鼠标”)
选中戳工具(“手掌”)可以进行拖拽、查看
选中选择工具(“白色鼠标”)可以用于布设导线,选中组件等等功能
5、文本工具、连线工具和标签
在基础库中可以找到如下几个工具:
文本工具可用于:标注电路的注释(标签类似)
连线工具可用于:分隔不同的电路,使其清晰直观。
1、常用逻辑门:
与门:输入都为'1',输出才为'1'。
或门:输入只要有大于等于1个'1',输出就为'1'。
异或门:输入的两个数相异,输出才为'1'。
补充一下:可以在“门尺寸”这里,调节逻辑门的大小,主要是为了让电路更美观
2、非门(NOT Gate):可对每位输入的数据进行按位取反
补充:如果想快速改变组件的朝向,可以在选中组件后,按键盘上的“上”“下”“左”“右”按钮,或者直接在“朝向”菜单中进行更改。
3、探针Probe:主要用于显示一条线路上的数据,可以用于预测查看数据的结果
4、常量Constant:用于表示特定形式的二进制位,可作为比较器、逻辑门的输入参数。
注意:常量是以16进制表示,因此是4位1组,如:16进制的f代表二进制1111,16进制的83代表二进制的1000 0011具体如下图:
5、隧道:以命名作为区分,相同隧道的名字存储了相同的结果。常常可用于进行输入输出。
如下图:将隧道的名字设定为“输入”,然后在输入引脚中输入32位的二进制数,然后将另一个隧道的名字同样设定为“输入”,则可以在输出引脚中输出同样的32位的二进制数,在这里两个引脚是相同的,可以当做是同一个引脚。
6、分线器Splitter:一般是用于将整块数据分解为零散数据,或将零散数据整合为单块数据,或者提取某些数据位。
如下图是将整块数据分解为多个零散数据:
如下图是将多个零散数据“拼接”成一块数据:
如下图是提取输入数据块的低4位
接下来着重介绍一下用法:
4.1 首先在“朝向”处可以更改朝向。
4.2 在“外观”处我们可以更改分线器的外观为“中心式”,相较于默认的左手式会更加好看。
4.3 在“分线器端口数”处可以更改分线器的端口数
4.4 在“位宽”处可以更改接收或输出数据的位宽
如下图:支持输入8位的二进制数
4.5 最为重要的是通过设定“第n位”对应的分线端口来实现数据块的分解:
如下图:最上侧的分线端口为0号,最下侧为3号。
比如下面的例子:第0、1、2位数据对应的是0(顶部)的分线端口输出“001”,第3位数据对应的是1号分线端口输出“1”,第4、5位数据对应的是2号分线端口输出“10”,以此类推.....
可能有同学会问道:“如果只想提取数据中的某一位该怎么办呢?”
下面以提取8位数据中的第5位为例进行说明:首先要将分线端口数设置为2,然后将要提取的数位设置为对应0(顶部)的分线端口,然后其它位设置为对应1(底部)的分线端口,这样就可以将第5位数据输出。
【看懂的可以点赞+收藏一下呀⭐】
如下图,点击左上角的“+”号按钮可以添加电路。
输入电路的名称:
就可以在左侧的栏目中创建一个全新的电路绘制区:
通过点击这“上移”和“下移”箭头,可以调整电路电路在栏目中的顺序
点击下图中的按钮可以进入电路封装模式:
下面来看一个比较复杂的例子:
如下图是在电路编辑模式下,可以看到该电路有5个输入端口和5个输出端口:
进入电路封装模式可以看到,封装后的电路同样有5个输入的接口和5个输出的接口:
首先我们可以用鼠标选中矩形的外框,通过拉动白色的角标可以改变图形的长宽:
还可以任意改动输入、输出接口的摆放位置:
但此时会出现一个小问题,如何去确定各个接口对应的原电路中的端口呢?
一个比较好的方法就是给每个电路打上标签
只需要电路编辑窗口中,选择要打标签的电路,在左下角属性栏的标签处,编辑文本,即可打上标签:
通过点击封装好的电路,拖拽到白色区域:
一个全新的电路就新建好啦:
如果想要查看各个接口对应的端口,只需要把鼠标轻轻靠在接口上即可显示标签:
需要注意的是一定要先打上标签,如图左侧是未打标签的封装电路,无法确定哪个接口对应哪个端口:
之后只需要连上合适的输入和输出电路,就可以正常使用啦!
有童鞋可能会问:封装电路有什么用呢?
其实主要的作用是让电路变得更加简洁,易于后期维护啦。
【如果觉得有帮助就点个赞吧⭐花了好几个晚上才整理出来的呢⭐】
用作更新电路状态的一个组件,常与隧道CLK相连:
在“电路仿真”下的“时钟滴答频率”可改变时钟频率:
默认1KHZ相当于1秒钟点1000下时钟,1时钟周期要点2下时钟,所以1秒是500时钟周期。
快捷键Ctrl+K可以让时钟自动连续跳动。Ctrl+T是一下一下跳动。
寄存器是一种用于存储和传输数据的电路组件,可以在存储库(Memory)下的寄存器(Register)找到,可以选中后更改数据位宽,打上标签。
各个引脚的作用在下图中指出:
数据位宽的意思,简单理解就是:输入或输出的数据有几位(二进制位)。如32位,就是由32个0或1二进制位组成的数据。
接下来我们看下面这个简单例子:
当左下角的引脚为1时,表明接受时钟信号,点一下时钟,就可以将输入的数据从输出端输出。
此时若点击右下角引脚,使之为1,会对寄存器进行清空,输出结果为0。
倘若我们让左下角的引脚为0,表明忽略时钟,这社会不管如何点击时钟,数据都不会进入寄存器输出,这就是“为0时忽略时钟”的含义。
多路选择器(Multiplexer)在复用器Plexers下:可以根据选择端传入的数值,选择输入端的其中一个输入从输出端输出(注意:仅有一个输入端口的值会被选中!)。
选择端位宽(n位):代表输入端有2^n个输入端口(假如:选择端位宽为4,则有16个输入端口,大家可以自己测试)。
数据位宽:是输入端输入的数据位宽,也是输出端输出的数据位宽。
选择端:选择哪一路的输入端会被保留,并且输出(若下方端口传入值为0,则选择左侧0号输入端口输出;值为1,则选择左侧1号输入端口输出。以此类推......)大家可以体悟下面的例子:
比较器的输入接口有两个,分别为“a”和“b”,表示要比较的两个元件或信号。
左侧上方为“a”,一般是传入一个值,与左侧下面的“b”进行比较,如下图:
比较器的输出接口有三个,分别为“a=b”、“ab”,分别表示“两个输入相等”、“a小于b”和“a大于b”。
需要注意的是,待比较的常量一般为16进制,如图中的“2b”转化为2进制后是“0010 1011”。
可以实现输入数据与输出数据间位数的拓展,比如从26位可以拓展到32位等等。
位置:线路Wiring下的位扩展器。
大概长相如下图:
如下图,最高位为0的情况,27~32位补0:
如下图,最高位位1的情况,27~32位补1:
原先输入的26位,自动成为32位中的低26位。
很多童鞋可能会疑惑:三态门是一个什么东东,有什么功能?
在我的理解中,三态门和多路选择器MUX其实具有很相似的功能,均可以用作对数据的选择性输出。
如下图是三态门所在的位置:
如下图是三态门的三个端口:
我们接下来可以看一个小小的案例:
当三态门和多路选择器的选择端输入均为0时,此时多路选择器选择第0路输出,三态门未输出。
当三态门和多路选择器的选择端输入均为1时,此时多路选择器选择第1路输出,三态门输出。
可见三态门起到了一种“阻塞”或者说选择作用,只有当选择端为1(高电平)时,输入的结果才会被输出。
随机存储器RAM是在存储库(Memory)下,主要功能是:通过输入的地址输出数据,也可以写入数据。
主要的引脚如下图:
当str(写信号)为1时,表示可以从左侧的D(写入数据)端,向存储器写入数据。
当ld(读信号)为1时,表示可以从右侧的D(输出数据)端,读出A端地址对应的数据。
随机存储器可调整的参数主要包括:地址位宽、数据位宽、数据接口
如果想将指令加载入RAM中,可以右键RAM - 加载数据镜像,然后在目标文件下,选择.hex后缀的文件即可载入。
载入之后点击编辑存储内容,即可看到载入的指令如下图:
可以直接在编辑器中选中待修改的指令进行修改,然后点击保存即可,这个功能一般很少用,故不过多赘述。
如果想要清空指令只需要同样右键,然后点击清空所有数据内容即可。
可以将输入的数据往一个方向移动若干位。移位器(Shifter)在运算器(Arithmetic)下。可以通过更改数据位宽调整输入和输出的数据位数:
可以通过选择移位类型来选择左移或者右移,还可以选择逻辑移动或者运算移动:
下图是逻辑右移2位,高位补0:
下图是运算右移(算术右移)2位,高位补1:
译码器Decoder是在复用器(Plexers)下。主要的功能是用于选择其中一个输出端口输出高电平。比如:可以用于LED的显示,芯片片选信号的选择(选中的芯片是高电平),控制信号的生成。
如下图就是最经典的3:8译码器:因为它的选择端有3位(转化为十进制范围为0~7),刚好对应8个输出端口。
当选择端的值对应某个端口时,该端口就会输出高电平(1),通过高电平可以改变某些器件的状态,进而实现某种功能。
其实我也一直觉得,译码器和选择器MUX的功能很相似,唯一不同的就是:MUX是通过改变选择端的值,来选择输入端的某一个数据进行输出(可以是多位的);而译码器某种意义上来说并没有输入数据的输入端,只能通过改变选择端的值,来选择输出端的某一个端口输出“1”(因此输出的数据只能是1位的)。
优先编码器(Priority Encoder)在复用器(Plexers)下。主要用途是:在有输入优先级的前提下,选择优先级最高输入的进行输出。
下图是各个端口作用的介绍:
接下来看一个具体的例子,我将讲解各个端口的作用:
先来看使能输出端,只要输入端口没有1,使能输出端就为1,如下图:
再来看使能端,只要输入端口有大于等于1个1且使能端为1(不禁用),组选择输出值就为1,如下图:
如果没有使能端如下图,自动默认不禁用,只要输入端有大于等于1个1,组选择同样为1,如下图
看右上角的输出端口,始终输出的是:输入端值为1的最大地址。注意:输入端的大小是从上往下递增,最上面代表0号端口。
如下图:3号端口值为1,尽管1号端口值也为1,但输出的是二进制11,代表3号端口。
这样就能够将多个具有不同优先级的数据,按地址从高到低逐个输出,很神奇吧。
最后看最下面的使能输入,这个端口为0时代表禁用(不会输出地址和组选择),为1时代表正常输出。
【整理了3天3夜,如果觉得有所帮助,就点个赞吧!】
Cin、Xi、Yi是输入,Cin是前一位的进位,Xi和Yi就是普通的输入。
Cout、Si是输出,Cout是进位(代表值2),Si是普通输出(代表值1)。
如果输入端只有1位为'1',Si亮(代表值1);如果输入端有2位为1,Cout亮(代表值1+1=2);如果输入端有3位为1,Cout和Si均亮(代表值1+1+1=3)。
在组合逻辑电路分析-输入 界面,在输入栏输入各个输入端口名称
在组合逻辑电路分析-输出 界面,在输出栏输入各个输出端口名称
在组合逻辑电路分析-真值表 界面,根据要实现的电路逻辑,依次改变右侧的真值
点击生成电路 - 输入电路名,然后点OK即可
如下图是生成的电路:
发现可以实现功能,但明显要更为复杂!
【✔️如果觉得有帮助记得点赞收藏哦】