跳转至

Logisim 使用教程

Logisim 是一种用于设计和仿真数字逻辑电路的教学仿真工具。其特点包括:操作简单,界面直观,通过简单的鼠标拖拽连线即可完成数字电路设计和仿真,子电路封装功可以让用户更可以方便地构建更大规模的数字电路。因此,可以使用 Logisim 来设计和仿真用于相关课程的硬件电路,达到教学的目的。

本学期的实验中,Logisim 将不作为必修的实验内容出现,但我们依然鼓励大家学习如何使用 Logisim。它以一种非常直观的方式展现了数字电路的设计与功能,为学习数电以及后续的硬件课程奠定了良好的基础。


搭建 Logisim 实验环境

获取 Java

Logisim是一款基于 Java 虚拟机运行的电路仿真软件。Java 是 Sun Microsystems 于 1995 年首次发布的一种编程语言和计算平台。在使用时,我们只需要在硬件或操作系统上先安装一个 Java 平台,之后就可以正常运行 Java 应用程序。因此在使用 Logisim 之前,我们首先需要配置 Java 环境。你可以在 VLAB 平台上获取 Java 的有关资源。由于篇幅有限,大家可以参考这篇博客中的相关内容或其他教程进行安装配置。

获取 Logisim

由于 Logisim 程序相对比较精简,我们建议各位同学在自己的电脑上搭建 Logisim 实验环境。在配置好 Java 运行环境后,我们可以从 Logisim 的官方网站下载适合自己操作系统的 Logisim 软件,安装完成后即可启动 Logisim 应用程序。此外,我们也可以在 VLAB 平台下载与自己操作系统相匹配的 Logisim,只需要在进入 VLAB 首页后,依次点击使用文档 \(\to\) 资源下载即可进入如下图所示的下载界面。

Image title

VLAB 上的 Logisim 环境下载

在下载界面里,单击下载与自己的操作系统相适应的 Logisim 程序,等待下载并安装完成后即可正常运行 Logisim。如果先前的步骤没有出现问题,我们将打开如下所示的主界面。

Image title

除了在本地安装之外,你也可以通过以下的渠道使用 Logisim。

  • 如果选择在实验室的机房进行实验,可以在实验室机房内电脑上加载硬件实验模板,即可直接获取 Logisim 环境。

  • 如果想使用我们提供的在线环境,可以在 VLAB 平台(选择统一身份认证登录)的虚拟机管理目录下新建一个支持图形界面的 ubuntu 环境,上面已经预装了 Logisim。

如果你想阅读更多有关信息,欢迎访问 Logisim 官方网站官方资源下载站

接下来,我们将学习如何使用 Logisim,创建并运行属于我们的项目。

熟悉 Logisim 界面

Logisim 主界面包括 5 大部分:菜单栏、工具栏、管理窗、属性表以及画布。

Image title

画布区域:画布区域是绘制电路的窗口,也是我们最经常使用的区域。画布区域的背景是浅色点阵,可以在绘制电路时进行辅助定位。我们可以在界面左下角修改画布的显示缩放比例,在上面的示例中,该数值为 100%。

管理窗口:管理窗口提供所有的基本组件,以文件夹目录形式显示。其中最外层的为项目目录,用户所设计的电路都显示在这一级目录下。在默认情况下,项目目录下仅包含一个名为 main 的电路文件。用户可以在项目目录(注意不是 main 文件)上单击鼠标右键,选择 Add Circuit 以添加新的电路设计。

Image title

在项目中添加新电路

对于当前画布上正在显示的电路,管理窗口对应的电路文件名称前会用一个放大镜图标进行标识。

属性表:属性表显示的内容是当前选中组件的基本属性,用户可以根据需要修改组件的属性参数,如大小、端口数目、方向等。该操作为电路设计提供了更高的自由度。

菜单栏:菜单栏中除打开关闭文件等基本操作外,其它功能我们可以暂不了解,等需要用到的时候再深入研究。

工具栏:工具栏包括四大类组件。其中:

Image title

  • 红色框中包括三种工具。左侧的手形工具为操作模式按钮,用于改变电路中选定组件的值;中间的箭头工具为编辑模式按钮,用于编辑组件或者修改电路结构;右侧的文本工具(字母A)用于在电路中添加文字描述。

  • 绿色框中为几种常用基本电路组件的快捷方式:从左到右分别为输入引脚、输出引脚、非门、与门和或门。这几种组件也可以在管理窗口内找到。

  • 深蓝色框中的按钮用于切换左侧管理窗的显示内容,其中扳手工具用于显示工程电路和库文件,树状结构用于显示仿真电路的层次结构。

  • 浅蓝色框中的按钮用于切换查看电路结构和模块封装结构。电路结构为电路内部的设计细节,而模块封装结构则是电路对外界封装后展示的细节。

Logisim 基本操作

在 Logisim 中,项目以电路库的形式呈现。电路库 是一个抽象的概念,它表示具有特定功能的电路资源的集合。

为了便于大家的理解,我们可以用 C 语言的项目结构类比 Logisim 中的项目结构。一般来说,每个 Logisim 项目都对应一个 .circ 文件,包含了整个项目中所用到的电路文件。每个电路文件对应一种特定的模块功能,由若干不同的电路元件构成,而电路文件本身也可以被封装成一个电路元件。除了用户自定义的电路文件,Logisim 项目中还会提供一些自带的组件,用户也可以自行添加相应的内部组件与外部组件。

Image title

Logisim 部件类比关系

对于某一个特定的 Logisim 项目,其结构关系如下图所示。

Image title

Logisim 项目结构示例

可以看到,项目中包含了许多不同的电路文件,如 main、Add、Sub 等。此时画布上显示的电路文件为 Add,内部包含了四个相同的电路元件 FA。Add 本身也可以被打包形成一个电路元件,并供其他电路文件使用。

接下来,我们将尝试绘制一个基本的非门电路。首先,单击工具栏中的输入引脚,移动(不是拖动)鼠标到窗口界面中,再次单击将其放下。输出引脚的操作同理。

Image title

放置输入引脚与输出引脚

如图所示,方形的为输入引脚,用户可以在操作模式下通过单击更改其输入的值;圆形的为输出引脚,用于显示当前电路的输出结果。由于此时输出引脚并没有被连接到电路中,因此输出为蓝色的 X(即不确定值)。

为了让输出引脚输出确定的结果,我们可以将其与输入引脚直接相连。在编辑模式下,鼠标悬停在输入引脚的绿色标记点上,待出现标记后按住左键,拖动鼠标,松开后即可绘制连线。连线可以分支、转弯等。

出现识别标记
连接完成
连线可以转弯
连线可以分支

如果你对于当前的电路布局不满意,那么可以在编辑模式下(左上角选中箭头而不是手型)单击选中一个电路元件,按住左键并拖拽就可以对其进行位置的调整。如果你想要删除一个元件,则可以在单击选中这个元件后,按下键盘上的 Delete 键或者在编辑菜单中选择「删除」。

在放置电路的每个组件时,你会注意到一个十分用户友好的细节:只要放置组件,Logisim 就会恢复到编辑模式,以便于我们移动最近放置的组件或将其连接到我们先前放置的组件。此外,我们也可以通过使用 Ctrl+C 与 Ctrl+V 快捷键实现对于电路元件的「复制-粘贴」工作;通过使用 Ctrl+Z 快捷键「撤销」上一步的操作。

现在我们的输出引脚已经可以正确输出了,它时刻输出与输入引脚相同的结果。你可以在操作模式下单击输入引脚,观察输出引脚的结果变化。

输入为 1
输入为 0

为了得到我们想要的非门,我们可以使用 Logisim 提供的非门组件。如图所示,在管理窗格的 Gates 文件夹下选中 NOT Gate,通过与输入输出引脚相同的操作插入到窗口中。这样,一个最简单的非门就搭建好了!

通过管理窗格插入非门
非门电路的搭建
Tips

除了管理窗格,我们也可以在上方工具栏,即输入输出引脚的旁边选中非门进行绘制。

那么如何画一个竖着的非门呢?首先,我们需要调整器件的方向。在编辑模式下点击输入引脚,在左侧的属性表中将 Facing 属性改为 South。此时输入端口就朝向了下方。

Image title

同样地,非门和输出引脚也可以调整方向。最终我们就得到了下图所示的竖着的非门。

Image title

除了基础的非门电路,大家可以自行了解:按钮、LED、输入管脚、输出管脚、多位宽信号、探针、分线器、基本逻辑门等各类组件的作用与使用效果,以及不同颜色的线缆所代表的含义。

此外,Logisim 所支持的组件都可以在管理窗内的各个文件夹里面找到。每个组件都有其对应的参数,用户可根据需要进行修改。

Image title

Logisim 组件一览

Image title

Logisim 组件使用简介

关于各组件的具体功能及使用方法,用户可自行体验。如有问题,可查阅菜单栏 Help 下的 Tutorial 和 User's Guide 等文档,里面对 Logisim 的使用方法、功能特性以及各组件的使用都有非常详尽的说明。

对于数字电路的初学者来说,可以先学习 Logisim 中组合逻辑相关的组件,时序逻辑相关的组件可在具备了相关的知识储备后进行,这样会相对轻松一些。

Logisim 模块封装

每个 Logisim 项目实际上都是一个电路库。在最简单的情况下,每个项目只有一个电路(默认情况下为 main)。面对更为复杂的电路设计时,我们可以使用多个电路文件(也就是模块)共同实现,每一个子电路只负责一部分特定的功能。

在 Logisim 中,新建一个新的电路文件命名为 Add,并绘制电路结构,参考下图完成一位半加器的设计。

Image title

一位半加器的电路设计
有点疑惑?

上面所示的电路为啥就是一位半加器呢?我们可以从逻辑表达式入手。一位半加器的逻辑表达式为

\(\text{Sum}=a\ \text{XOR}\ b\)

\(\text{Cout}=a\ \text{AND}\ b\)

(如果你不清楚上面的式子是如何得到的,可以列出真值表进行推算)

不难发现,电路图中的异或门和与门恰好与逻辑表达式相对应。

Tips:修改属性

你可能会发现自己放置的异或门与图中的不太一致,此时可以单击选中异或门,在左下方的属性表中修改该异或门的属性,例如输入端口数目、大小、朝向、标签名等。

在电路处于打开状态时(画布区域显示该电路结构,且管理窗口中该电路图标上有一个放大镜标志),点击工具栏中的编辑电路封装图标(下图中的红色框),进入电路封装编辑页面。你可以修改电路的边框形状及大小、端口位置、名称等。下面是一些关键的元素:

  • 锚点:连着一根线的绿色圆圈。它对应着你放置子电路时十字准星与电路的相对位置与朝向。
  • 端口:蓝色的点。它对应着电路的输入和输出引脚。你可以通过点击端口查看它与引脚的对应情况。

上方的工具栏是一些可用的电路封装工具,它们的介绍如下图所示:

Image title

下面是一位半加器的模块封装参考:

Image title

如上图所示修改电路封装样式,并对管脚添加文字注释。完成电路封装编辑后保存,即可在其它电路文件中使用该模块。你可以在管理窗格中直接点击所需的模块,移动鼠标到画布中,即可得到该模块的一个副本。例如,我们可以按照下图的方式用两个一位半加器搭建一位全加器。

Image title

使用一位半加器搭建的一位全加器

同样地,我们也可以对一位全加器进行封装,在另一个电路文件中以此为基础搭建 32bits 位宽的全加器。

注意

在硬件电路中,模块可以嵌套调用(A 调用 B,B 又调用 C),但不能循环调用(A 调用 B,B 又调用 A)或递归调用(模块调用自身)。


休息一会儿

本部分内容到此结束!你理解了多少呢?

参考资料

  • 《数字逻辑电路设计实践》

评论

Authors: wintermelon008