Note

这篇文章可能对正在学习数字逻辑与计算机组成(Digital Logic and Computer Organization, DL&CO或相关课程的学生有一定帮助。

致敬传奇电路仿真软件 Logisim 🫡

Tip

这里不是 Logisim 使用说明书,这里存放了一些可能对使用 Logisim 有帮助的内容。

如果你在寻找完全入门教程,这里有一些帮助:

官方的 Guide (学会ReadTheFriendlyManual)

USTC 的 数字电路教程 - LogiSim 部分

直接 SearchTheFriendlyWebsite 也可以,问 AI 也可以

(实际上这门课不需要对 Logisim 有深入了解,不看任何教程纯摸索操作也是可以的)

一、你选对 Logisim 版本了吗?

常见的 Logisim 有三种版本(超链接指向下载链接 / Github仓库):

  1. Logisim,更新止步于 2013 年,后面的版本都是它的 Fork
  2. Logisim Italian Fork,比较经典的 Fork,似乎是两年一次更新
  3. Logisim-evolution,比较前沿的 Fork,有较多的新功能,似乎在持续维护

对于 DL&CO 这门课,你应该选择第二个版本,选择正确的版本对你在本地调试有很大的帮助(这三个版本的.circ文件不完全互通,你也不希望自己在本地连好的实验在评测机上打不开吧嘿嘿)。

二、Logisim Tips

以下是一些在使用Logisim时可能会用到的快捷操作:

Important

考虑到本人语言表达能力有限,非常建议你动手试一试下面的操作

熟能生巧嘛

  1. 选择一个元件,在按住 CtrlShift 的情况下,右键可以多次点击放置多个元件

    (按住 CtrlShift 的情况下只能右键多次放置;松开 CtrlShift 的情况下只能左键单次放置)

    (比如说你要放置 x 个某元件,可以按住 Shift 右键放置 x-1 个元件,再松开 Shift 左键放置最后一个元件)

  2. 选中逻辑门再按下数字键可以切换逻辑门的输入位宽(在放置元件时该操作也有效,并且之后放置的门都遵循该设置);

    同理可以改变的有“常量”的值(不是位宽)、复用器的选择端位宽

    在额外按住 Alt 的情况下,数字键专门用于改变数据位宽,比如运算器、寄存器

    最好自己试一试,以防你分不清按不按住 Alt 分别修改的是什么值,以及理解这一条 Tip 在说什么

    你可以多选相同元件,然后批量修改位宽

  3. 放置输入输出引脚后(并且正确为引脚命名),点击 “工程→分析组合逻辑电路” ,可以通过编辑真值表 / 输入逻辑表达式的方式自动生成组合逻辑电路

  4. 如果需要跨文件复制电路,可以点击 “工程→加载库→Logisim库” 导入.circ文件,以整体封装的形式使用电路,也可以在导入后对整个电路复制粘贴(如果你不希望后续的实验存在过多的子电路文件依赖,我建议对整个电路复制粘贴,否则使用封装电路更加简洁)

  5. 编辑模式下鼠标中键点击某根电线(或者在戳模式下左键),会加粗与这根电线有连接的所有电线与节点,可以辅助判断有没有发生错误连线(比如同一逻辑门的两个输入不小心连接到了一起)

  6. 选中元件按方向键可以修改元件朝向(多选元件按方向键也有效,但是电线不会相应旋转)

  7. 一次 Ctrl+D 操作(复制+粘贴)可以代替一轮 Ctrl+CV 操作

  8. Logisim 会主动连接端口,即使之后被分开也会尝试用电线主动连接

(你可以试一试将一个/一堆元件的端口拖动到电线上再尝试拿开元件。这对某些连线操作有帮助,比如寄存器堆实验)

  1. 善用隧道与探针(前者防止电线连接过度复杂,后者有助于 debug)

  2. 子电路封装界面,在拖拽图形时,按住 Shift 可以限制只能上下左右四方向移动;按住 Ctrl 可以解除吸附网格的限制(这一条是给强迫症看的

三、Logisim 电路排查指南

你可以按照以下步骤排查你的电路是否有问题(以及是你的问题还是 Logisim 的问题):

  1. 重启一次 Logisim 可以解决 Logisim 偶发的渲染问题(尤其是出现莫名其妙的蓝线/红线时)

这么说吧,出现了奇奇怪怪的问题时,优先重启环境(注意不要轻易重置环境)看看 bug 会不会复现,然后再怀疑自己

  1. 优先排查出现蓝线/红线的地方,善用鼠标中键排查错误连线(早期很多连线问题都是不小心把两个输入端连接到了一起,这种错误通过鼠标中键可以很快排查)

  2. 没有蓝线/红线但是样例测试不通过 → 针对出现错误输出的部分,对着原理图(如果有)或逻辑式排查问题,善用鼠标中键;如果是时序逻辑电路的话可能还要考虑上升沿/下降沿问题,错误的时钟边沿设置会产生难以排查的问题

  3. 长时间找不到错误点也是很正常的,必要时要有推倒重来的勇气;在难以构建正确的电路时,可以在cslab的实践课程上寻找教程(确保你已经进行了足够多的思考);真的走投无路的话可以尝试在某六字母网站上体会开源精神,注意可能造成的后果自负

不要问我什么是六字母网站;以及考虑到实验内容的与时俱进性,你基本上找不到可以直接借鉴的 “圣遗物”

这是学术诚信问题

四、针对 DL&CO 这门课其他一些想说的

Important

《计算机组成与设计:硬件/软件接口(RISC-V Edition)》 是学校所用教材的一大参考书籍,学有余力的话/学习时遇到困难,这本书可能会让你有额外收获/茅塞顿开(上课用的PPT的一部分内容甚至都是参考于这本书)

(对于呢喃的cs专业课,你都可以找找有没有对应的 “黑皮书” 可供参考)

DL&CO实验交流群里的其他同学很有可能和你踩过一样的坑,他们可能有独特的解决方案(?)

当然,培养独立思考精神是最首要的!一定要让自己的每一次作业都有一定的原创性!
不然你以后学ics写icspa怎么办啊啊啊啊

Warning

以及不要当 ddl 战神,这门课卡 ddl 的成本真的真的有点高 😢

后期实验的平均用时会友好对待所有尝试极限完成实验+报告的每一个人

我不止一次在截止时间前 10min 以内完成并提交作业,千万不要学我

最后欢迎评论补充 (o゜▽゜)o☆


附件:如果你完全不使用隧道可能会发生的后果

完全不使用隧道的后果