SI100B EE Part

Tutorial 1

@Chaofan Li, lichf1@shanghaitech.edu.cn
@Yunxiang He, heyx1@shanghaitech.edu.cn
@Qihan Ding, dingqh@shanghaitech.edu.cn

TA Members

TA Members


李超凡 lichf1@shanghaitech.edu.cn
2022/2023 SI100B fall SP TA,学代会委员,21级娄鑫导师组组长,恩施社会实践队长,科道书院团总支书记,篮球俱乐部副社长,Sertraline乐队主唱、吉他手、前贝斯手,IGEM2023top10,金奖获得者,全国大学生电子设计大赛二等奖获得者

朝夕相处的师生朋友对他不吝赞美:
“伟大的性格!” ——助理教授 娄鑫
“天生的领袖!” ——RF实验室 刘锋昱
“彼阳的晚意!” ——吗喽队友 丁麒涵
“初升的东曦!” ——吗喽队友 贺云翔

TA Members

贺云翔 heyx1@shanghaitech.edu.cn

  • 2008年感动中国年度人物获得者,2006年《时代》周刊年度人物
  • 2023 Fall SI100B SP TA
  • 2023 SPring CS100 TA
  • 2024 SPring 宋词导读 TA
  • 2024 Spring 操作系统 TA
  • 21级大道书院导师组组长(导师已润)
  • IEEE ISCAS 2024 Oral 获得者
  • B站大会员,知乎盐选会员,网易云黑金会员

TA Members

丁麒涵 dingqh@shanghaitech.edu.cn

上科大篮球社社长,创业社副社长,上科大创新创业大赛二等奖获得者,宝山杯双创大赛三等奖获得者,IGEM2023top10,金奖获得者,负责守护世界上最好的三月七,流萤,卡芙卡,托帕,凯茜娅,符玄,花火,黑天鹅,布洛妮娅。

Installation Guide

Checklist: Logisim

  • 一个带有GUI界面的程序,请在您的本地环境中运行它
  • Java版本应大于16。
  • 请使用我们提供的“.jar”文件(版本为“3.8.0”)以避免兼容性问题。
    Windows、Ubuntu和macOS系统都可以运行它。
  • Logisim不会在进行过程中保存您的工作。
    记得在开始时保存,并在工作时经常保存。
  • Command/Control + S 快捷键允许快速保存。

Logisim安装

点击超链接,点击“下一步”:

rightrightright

不要改默认路径!!!不会占用C盘很大空间,但是默认路径方便后续使用...

Logisim安装

完成安装:

Logisim安装

动画加载完成后,出现这个界面,则说明 Logisim 已经成功配置完毕!

Logisim安装

如果你没有安装好 Java,或者错误的打开了该文件,就可能出现默认使用某些解压工具打开 .jar 文件的情况。

这时候,我们按照如下操作流程,修改默认打开方式:

  1. 右键点击 logisim-evolution.jar,点击 属性
  2. 点击 更改

Logisim安装

如果你没有安装好 Java,或者错误的打开了该文件,就可能出现默认使用某些解压工具打开 .jar 文件的情况。

  1. 找到 Java(TM) Platform SE binary。如果在默认的几项里没有,在“其他应用”里可以找到它。

  2. 一路“确定”,重新点击 logisim-evolution.jar。

Get Started With Logisim

Get Started With Logisim

Task1: 创建AND门电路

我们将尝试创建一个 AND 门电路,以帮助我们学习如何使用 Logisim 。请注意程序左下角的缩放和网格功能,这将在我们构建大型电路设计中的时候更好的进行布线。

Task1: 创建AND门电路

  1. img 首先单击 AND 门按钮。这将使 AND 门的影像跟随光标移动。在主原窗口中单击一下,就可以放置一个 AND 门。

  2. img 单击 Input Pin 按钮。现在,在 AND 门左侧的某个位置放置两个输入引脚。

  3. img 单击 Output Pin 按钮。然后在 AND 门的右侧放置一个输出引脚。

此时,您的 Schematic 应该是这样的:

Task1: 创建AND门电路

  1. img 单击 Select 工具按钮。单击并拖动,将输入引脚连接到 AND 门的左侧。这需要几个步骤,因为您只能绘制垂直和水平导线。只需水平绘制导线,松开鼠标键,然后从导线末端开始单击并拖动,继续垂直绘制。您可以将导线连接到左侧 AND 门上的任意引脚。重复同样的步骤,将 AND 门(右侧)的输出连接到输出引脚。双击这三个引脚,为其命名标签。

    完成这些步骤后,您的 Schematic 应大致如下:

    img

Task1: 创建AND门电路

  1. img 单击 Poke 工具并尝试单击 Schematic 中的输入引脚。观察会发生什么。

Task1: 创建AND门电路

  1. 将电路保存为 ex0.circ 。单击 Simulate -> Test Vector... 并从 hw1_release 文件夹中选择 testvector_ex0.txt 文件加载矢量。如果一切顺利,你应该看到所有四个测试向量都通过了。这里展示的是错误连接时的测试结果。


注意:我们不会对这部分进行评分。

Exercise 1.1: Pin

针脚是电路的输出还是输入,取决于它的输出值属性(即 Selection 中的 “Output?” )。

圆形或圆角矩形表示输出针脚,正方形或矩形表示输入针脚。

输入或输出值都会在组件上显示(打印视图除外)。

Exercise 1.2: Tunnel

标签通道的作用类似于导线,但与导线不同的是,连接不是明确绘制的。当你需要连接电路中相隔很远的点时,用标签通道来替代就很有用。下面的插图说明了它是如何工作的:这三个隧道都有相同的标签 a,这三个隧道相当于连接的点。(如果其中一条隧道被标记为其他东西,比如b,那么它将是另一组隧道的一部分)

其主要参数是 “Label(标签)” ,这是一个特别重要的属性,如果两个标签通道的标签名称一样,那么它们相当于之间有导线连接,是连通的。

Exercise 1.3: Constant

Constant 输出在 Value(值)属性中指定的值。它只有一个引脚,输出对应位宽属性的值。

其属性包括:

  • Data Bits(数据位宽):指定输出数据的位宽,一个 位的常量有 个可能的值(范围为 )
  • Value(值):指定常量的值,注意 0x 表示的是十六进制

Exercise 1.4: Splitter

分线器可以把一个多位的输入拆分为若干位,也可反过来把若干个若干位的输入合并为一个输出,可设置具体拆分方式。
其参数包括:

  • Facing(朝向):控制元件的朝向
  • Fan Out(分流端口数):设置输出端口的数量
  • Bit Width In(输入位宽):设置输入位宽
  • Bit X (第X位):设置第X位数据在哪个口输出

Exercise 1.5: 构建子电路

正如 Python 程序可以包含函数一样, Schematic 也可以包含子电路。在这部分实验中,我们将创建几一些子电路来演示它们的用途。

重要提示:Logisim Evolution 规定,不能用关键字(如 NAND )命名子电路,也不能在名称的第一个字符使用数字。

Exercise 1.5: 构建子电路

请按照以下步骤操作

  1. 打开练习 1 的 Schematic ( File -> Open -> ex1.circ )。

  2. 双击左侧菜单电路选择器中的 NAND1 打开 NAND1 空子电路。(注意末尾的 1 ;因为有一个名为 NAND 的组件,所以我们不能将其称为 NAND )。

Exercise 1.5: 构建子电路

  1. 在新的 Schematic 窗口中,创建一个简单的 NAND 电路,左侧为 2 个输入引脚,右侧为输出引脚。请不要使用 Gates 文件夹中的内置 NAND 门(即只使用选择工具图标旁边提供的 AND 、 OR 和 NOT 门)。您可以使用选择工具选择输入/输出,并更改窗口左下角的属性 Label 来更改输入和输出的标签。

  2. 重复上述步骤,再创建几个子电路:

    • NOR
    • XOR
    • 2-to-1 MUX
    • 4-to-1 MUX

Exercise 1.5: 构建子电路

以4-1选择器为例:总计六位输入,分别是四路数据输入A、B、C、D和两位地址选择sel1、sel2。我们可以朴素地感知,这个电路通过地址选择将一路输入接通至输出。

由此可知运行逻辑:
两位地址选择,采用二进制编码,将被译码为四位输出(0001或0010或0100或1000)。通过这四位输出分别和数据输入取逻辑与(AND)并输出,仅有一位数据输入被带出,另外三位输出必为0。最终将取逻辑与之后的四位输出通过四输入或门输出即可。

可推知输出Y=Asel1‘sel2’+Bsel1‘sel2+Csel1sel2’+Dsel1sel2

Exercise 1.5: 构建子电路

  1. 注意事项
    • 请不要更改子电路的名称或创建新的子电路
    • 请在分别命名的电路中工作,否则自动跟踪器将无法正常工作。
    • 请勿使用除 AND 、 OR 和 NOT 以外的任何内置门电路。
    • 建立子电路后,您可以(而且我们鼓励您)用它来建立其他电路。您可以像放置其他元件一样,点击并放置您创建的子电路。

Exercise 1.5: 构建子电路

在作业中,我们有一些标注了 Don't Touch 的电路,这部分是固定位置的输入输出,用于进行作业的结果检测。

  • 你可以复制它们,但请不要以任何形式移动它们。
  • 如果因为移动 IO 部分导致测试不通过,TA 有权利不进行补测事宜。
    • 当然,如果你及时发现了问题,可以选择重新下载模板文件。

Appendix

异或 XOR; 同或 XNOR; 与非 NAND;
或非 NOR; 传输门 TG.


使用LaTeX能够轻松打出异或符号和同或符号:在线LaTeX公式编辑器

XOR“\oplus”

XNOR"\odot"

Exercise 2.1: 半加器

对于一个 1 Bit 的二进制( 0 or 1 )来说,它的加法被定义为:

  • 0 + 0 = 0
  • 1 + 0 = 1
  • 0 + 1 = 1
  • 1 + 1 = (1)0

其中,在 1+1 中出现的 (1) 被称之为“进位”标志。因此,在硬件上,我们定义半加器有两个输入 a 和 b 和两个输出 sum(表示 1 Bit 加法的结果) 和 cout(表示进位),其公式为:

半加器只能执行 1 Bit 的加法运算,这显然不够“给力”。我们需要进一步分析加法的逻辑,来构建更加有用的加法单元:全加器。

Exercise 2.2:全加器

全加器的核心是考虑了进位(被记为 cin)。对于某一位来说,我们除了考虑两个加数的对应位数 a 和 b,还要考虑是否有前一位传来的进位信息。因此,我们的输入就有三个数:a,b,cin。我们需要构建这三个数到输出 sum 和 cout 的逻辑运算。

运行逻辑
cout: a、b、cin之中至少两个为高电平时,输出高电平。此时我们对输入两两取逻辑与,如果a、b、cin之中至少有两个高电平,那么三个逻辑与的输出也至少有一个为高电平,对逻辑与的三个输出取逻辑或即可。
sum: a、b、cin之中仅有一个或全部为高电平时,输出高电平。将a、b、cin输入一个三输入异或门即可。

Exercise 3: 七段数码管的解码器

七段 LED 数码管是一种常用的显示元件,常应用于手表、计算器等仪器中,用于显示数值。下图是数码管的原理图,数码管分为共阴极和共阳极两种类型,共阴极就是将七个 LED 的阴极连在一起,让其接低电平。这样给任何一个 LED 的另一端高电平,它便能点亮。而共阳极就是将七个 LED 的阳极连在一起,让其接高电平。这样,给任何一个 LED 的另一端低电平,它就能点亮。这里的 LED 是共阴极 LED。

Exercise 3: 七段数码管的解码器

我们将以1号管为例讲解

观察.circ文件:
Input_Number: 是一个四位二进制输入用以表示一位十六进制
Disp: 是一个七位二进制输出用以控制七根LED管开关

既然只研究1号管,我们只需要关心: 四位输入是如何决定Disp1的高低电平的?

Exercise 3: 七段数码管的解码器

在4-1选择器中我们已经熟悉了两位二进制输入表示一位四进制的想法,这里我们用分线器将输入拆分为独立的四个二进制输入A、B、C、D。

Exercise 3: 七段数码管的解码器

你的工作流程:

真值表SOP形式 化简(卡诺图)(可选)逻辑表达式构建AOI电路

sop:sum of product
卡诺图:用于化简SOP逻辑表达式
AOI:and or inverter(not) 电路,只有and or not门的电路

我们将以1号管为例讲解

#c

真值表

在线真值表


真值表SOP (sum of product)

在线真值表

SOP化简(卡诺图)

我们只需将逻辑表达用电路实现即可

y = B'C + CD' + AB' + AD + A'BC'

构建AOI电路