下面文件都放在 gitee 中,大家可以自行选择拿取
course_design: 课程设计 - Gitee.com
https://gitee.com/island0920/course_design/tree/master/%E8%AE%A1%E7%BB%84
(正式使用的时候,如果方向不合适,可以 Ctrl + R 进行旋转)
其他要使用的元器件(7408N,74LS181、DCD_HEX、74LS244N、74LS273N、74LS374N)都可以进行搜索,步骤如下:
然后设置层次块并且命名之后,就会出现子文件(相当于主函数和子函数的关系)
然后我们在子函数中就可以用到我们下面讲的连接器对其操作,如下:
(1)掌握ROM的工作原理;
(2)画出逻辑电路图及布出美观整齐的接线图;
(3)掌握ROM读出原理。
存储元由有否二极管组成,若有,由于二极管导通那么数据线上可以读出1;如果没有二极管,数据线上输出接地电平,读出0。
数据读出与验证:通过观察测试结果,验证ROM的读出原理
(1)U3号与门没有任何连线,使之断开,因为学号第一位是0,对应开关为11。
(2)U4号与门连接到数码显示管的第二个引脚,并连接一个正向的二极管。因为学号第二位是5(0010B),对应开关为10
(3)U5号与门连接到数码显示管的第二个引脚,并连接一个正向的二极管。因为学号第三位是0(0010B),对应开关为01
(4)U4号与门连接到数码显示管的第二个引脚和第一个引脚,都连接一个正向的二极管。因为学号第四位是9(0011B),对应开关为00
数码管右侧为低位,左侧为高位,高电平输入有效。要输出数字只需将数字转换成对应的BCD码,并且BCD码中为1对应的位通过一个二极管连接高电平信号和LED灯的引脚。学号后四位依次为0509,通过两个开关控制LED灯即可显示学号的指定位。
1.开关设置为11,学号第一位0成功输出 2.开关设置为10,学号第二位5成功输出
3.开关设置为01,学号第三位0成功输出 4.开关设置为00,学号第四位9成功输出
六、小结与心得体会
因为对 Multisim不太熟悉,最开始连器件在哪都找不到,还得上网查找资料,在查找的过程还了解到DCD-HEX数码管的工作原理以及其他相关概念后,但是思路也并不是很清晰,因此先照着样例把电路图仿真出来,然后根据不同的输入值来进一步分析,观察数码管的变化,推敲出四个与门的输出端和二极管间联系, 根据自己学号后四位修改二极管的位置,实验才顺利解决。通过这个实验,自己对ROM的工作原理有了更深刻的了解。
注意:本题需了解LED灯显示方法并注意连在LED引脚和地线之间加下拉电阻,防止电路电流过大。
(1)掌握算术逻辑单元(ALU)的工作原理;
(2)熟悉简单运算器的数据传送通路;
(3)画出逻辑电路图及布出美观整齐的接线图;
(4)验证4位运算功能发生器(74LS181)组合功能。
74LS181芯片是主要进行算术和逻辑运算的电路,可以作为处理器进行运算的核心部件。它对两个4位操作数进行逻辑或者算术运算等。74LS181的数据引脚:8个数据输入端(A0–A3,B0–B3),4个二进制输出端(F0,F1,F2,F3),CN端处理进入芯片前进位值,CN4记录运算后的仅为,GN先行进位产生端。PN先行进位传递函数。74LS181的控制引脚:4个控制端(S0,S1,S2,S3),控制两个四位输入数据的运算(加减与或),M引脚控制芯片的运算方式,包括算术运算和逻辑运算。
ALU能进行多种算术运算和逻辑运算。4位ALU-74LS181能进行16种算术运算和逻辑运算。功能表如下:
方式 | M = 1 逻辑运算 | M = 0算术运算 | |
---|---|---|---|
S3 S2 S1 S0 | 逻辑运算 | CN=1 (无进位) | CN =0 (有进位) |
0 0 0 0 | F=/A | F=A | F=A加1 |
0 0 0 1 | F=/(A + B) | F=A + B | F=(A + B) 加1 |
0 0 1 0 | F=(/A ) B | F=A + /B | F=( A + /B )加1 |
0 0 1 1 | F=0 | F=负1(补码形式) | F=0 |
0 1 0 0 | F=/(A B) | F=A加A ( / B) | F=A加A / B加1 |
0 1 0 1 | F=/B | F=(A + B) 加A / B | F=(A + B)加A / B加1 |
0 1 1 0 | F=A Å B | F=A减B减1 | F=A减B |
0 1 1 1 | F=A/B | F=A (/ B)减1 | F=A (/ B) |
1 0 0 0 | F=/A +B | F=A加A B | F=A加A B加1 |
1 0 0 1 | F=/( A Å B) | F=A加 B | F=A加B加1 |
1 0 1 0 | F=B | F=( A + /B )加A B | F=( A + /B )加A B加1 |
1 0 1 1 | F=AB | F=AB减1 | F=AB |
1 1 0 0 | F=1 | F=A加 A | F=A加 A加1 |
1 1 0 1 | F=A + /B | F=(A + B) 加 A | F=(A + B) 加 A加1 |
1 1 1 0 | F=A + B | F=(A + / B) 加 A | F=(A + / B) 加 A加1 |
1 1 1 1 | F=A | F=A 减1 | F=A |
(上表中的“/”表示求反)
ALU-74LS181引脚说明:M=1 逻辑运算,M=0算术运算。
引 脚 | 说 明 |
---|---|
M 状态控制端 | M=1 逻辑运算;M=0算术运算。 |
S3 S3 S1 S1运算选择控制 | S3 S3 S1 S1决定电路执行哪一种算术 |
A3 A2 A1 A1 | 运算数1,引脚3为最高位 |
B3 B2 B1 B0 | 运算数2,引脚3为最高位 |
Cn 最低位进位输入 | Cn =0 有进位;Cn =1 无进位; |
Cn+4本片产生的进位信号 | Cn+4=0 有进位;Cn+4=1 无进位; |
F3 F2 F1 F0 | F3 F2 F1 F0运算结果,F3为最高位 |
了解74LS181芯片的工作原理及引脚功能–>了解实验需求–>计书案例电路图–>进行电路设计并仿真–>记录实验数据
运算过程
分别输入两个四位二进制数(A3、A2、A1、A0)和(B3、B2、B1、B0),输入控制信号(S3、S2、S1、S0),假设控制信号实现的是算数运算(即M=0)加法,则运算过程如下:
单刀双掷开关ABCDEFGH控制输入两个四位二进制运算数,单刀双掷开关123456控制输入其他引脚端口的值,通过开关闭合输入不同值,分别对两个运算数进行算术运算和逻辑运算,其中U1和U2两个数码管分别显示两个运算数的值,U3数码管显示运算后的结果。
由于篇幅限制,我们这里就用第一组数据来举例
(1)当S3 S2 S1 S0=0000,数据1=AH,数据2=5H,M=0,CN=1时的测试,此时无进位,且两数进行算术运算,F=A,可以看到U3数码管显示结果为AH,仿真结果如原理图1-2所示。
(2)数据同上,当CN=0有进位时
(3)数据同上,当M=1时:
验证74LS181型4位ALU的逻辑算术功能,填写下表:
S3 S2 S1 S0 | 数据1 | 数据2 | 算术运算(M=0) | 逻辑运算(M=1) | |
---|---|---|---|---|---|
CN=1 (无进位) | CN =0 (有进位) | ||||
0 0 0 0 | AH | 5H | F=AH | F=BH | F=5H |
0 0 0 1 | AH | 5H | F=FH | F=0H | F=0H |
0 0 1 0 | AH | 5H | F=AH | F=BH | F=5H |
0 0 1 1 | AH | 5H | F=FH | F=0H | F=0H |
0 1 0 0 | FH | 1H | F=DH | F=EH | F=EH |
0 1 0 1 | FH | 1H | F=DH | F=EH | F=EH |
0 1 1 0 | FH | 1H | F=DH | F=EH | F=EH |
0 1 1 1 | FH | 1H | F=DH | F=EH | F=EH |
1 0 0 0 | FH | FH | F=EH | F=FH | F=FH |
1 0 0 1 | FH | FH | F=EH | F=FH | F=FH |
1 0 1 0 | FH | FH | F=EH | F=FH | F=FH |
1 0 1 1 | FH | FH | F=EH | F=FH | F=FH |
1 1 0 0 | 5H | 5H | F=AH | F=BH | F=FH |
1 1 0 1 | 5H | 5H | F=AH | F=BH | F=FH |
1 1 1 0 | 5H | 5H | F=4H | F=5H | F=5H |
1 1 1 1 | 5H | 5H | F=4H | F=5H | F=5H |
与之前的 ALU 功能表对比验证可发现,上表结果无误
刚拿到这道题首先是顿时蛮懵的,然后去网上上了解了一些74LS181芯片的引脚功能,以及74181芯片如何对两个运算数进行逻辑运算和算术运算。
本实验使用单刀双掷开关作为两个运算数的输入使能端,可以很清晰地看出高低电平的输入。通过本实验,我对74LS181芯片的工作原理有了更深刻地了解,以及对ALU的运算和逻辑功能也有一定的认识。
用 DSWPK_8 设置如下:
(1)熟练掌握算术逻辑单元(ALU)的应用方法;
(2)进一步熟悉简单运算器的数据传送原理;
(3)画出逻辑电路图及布出美观整齐的接线图;
(4)熟练掌握有关数字元件的功能和使用方法。
(5)熟练掌握子电路的创建及使用。
🔥 该实验需要自定义元器件层次块,本实验目的是仿真单总线结构的运算器,电路图中,上右下三方的8条线模拟8条数据总线;DSWPK_8 代替8开关输入层次块,74244_BLOCK层次块为三态门电路,将部件与总线连接或断开,两个74273层次块作为暂存工作寄存器DR1和DR2;两个74374层次块作为通用寄存器组;众多的开关作为控制电平或打入脉冲;众多的8段数码管显示相应位置的数据信息。核心为8位ALU层次块
3.设计步骤
布线74LS244_BLOCK层次块–>布线74LS273_BLOCK层次块–>布线8_ALU_BLOCK层次块–>布线74LS374_BLOCK层次块–>布线总电路图–>测试仿真–>记录实验数据
(1)74244_BLOCK模块
此模块用于将两个普通的74LS244三态门芯片进行级联,两个芯片的G端统一连接,两个芯片的输入输出端分别负责低四位和高四位,实现控制八位总线通断。保证两片芯片在低电平有效时同时工作,高电平时同时成高阻态,两片芯片工作时,可将8个输入端的数据传输到输出端
(2)74273_BLOCK模块
该模块块选取了一片74LS273N芯片,不同的是,在74LS273芯片CLR输入端接入了VCC高电平,这是为了保证该层次块只要有上升沿时钟脉冲传入就会将输入端值传入到输出端。
(3)74374_BLOCK模块
该层次块选取了一片74LS374N芯片,其实该层次块实现的就是74LS374芯片的功能,理解芯片作用后自然也会了解层次块
(4)8BIT_ALU_BLOCK模块
该模块选取了两篇74LS181N芯片,A0–A3,A4–2A7的8个输入端口是数据1的输入,B0–B3,B4–B7的8个输入是数据2的输入,由于输入的数据位限制,只能选用两片芯片并保证其同时以相同的计算方式工作,运算出结果以输出端1F0–1F3,2F0~2F3输出。相当于将普通的4位ALU级联为八位ALU,计算低位的ALU的进位CN4连到计算高位的ALU的低位进位端CN,两枚芯片的状态控制端统一连在输入端M,输出则低位ALU负责低位输出,高位ALU负责高位输出。
设置好每个层次块,将任务指导书上的电路图进行布线仿真后,一步步推敲每个开关按键是什么作用,通过控制开关按键输入不同的值进行多次逻辑运算或算术运算,观察结果是否符合预期。
答:整个电路仿真单总线结构的运算器完成算术和逻辑运算。具体实现为总线为8位,用一个八路开关控制总线上的数据输入;
答:74LS244N是三态门,控制电平G=1时隔绝电路。控制电平G=0时,74LS244N元件开始工作,选通电路。
答:74LS273N为工作寄存器,输出直接接到ALU的输入端,CLK为接入的脉冲,CLK上升沿有效并且输出寄存的内容,下降沿锁存数据。
答:74LS374N作为通用寄存器,同时具有三态门的作用。CLK上升沿有效,OC高电平为高阻态,逻辑操作不受影响,低电平工作。
结果分析:29H+31H=59H,结果和GR1中存储的结果一致。
步骤与7、大致相似,不同之处在于算术逻辑单元的运算选择控制端分别置为S0=0、S1=1、S2=1、S3=0,进位标志Cin置为0。
结果分析:59H-31H=28H,结果和GR2中存储的结果一致。
步骤与7、大致相似,不同之处在于算术逻辑单元的运算选择控制端分别置为S0=1、S1=1、S2=0、S3=1,同时将M状态控制端置为1,选择逻辑运算。
结果分析:59H=01011001B,28H=00101000B,59H∧28H=00001000B=08H,结果和GR1中存储的结果一致。
步骤与7、大致相似,不同之处在于算术逻辑单元的运算选择控制端分别置为S0=0、S1=1、S2=1、S3=1,同时将M状态控制端置为1,选择逻辑运算。
结果分析:08H=00001000B,28H=00101000B,08H∨28H=00101001B=28H,结果和GR2中存储的结果一致。
步骤与7、大致相似,不同之处在于算术逻辑单元的运算选择控制端分别置为S0=0、S1=1、S2=1、S3=0,同时将M状态控制端置为1,选择逻辑运算。
结果分析:08H=00001000B,28H=00101000B,08H⊕28H=00100000B=20H,结果和GR1中存储的结果一致。
结果分析:20H=00100000B,~20H=11011111B=DFH,结果和GR2中存储的结果一致。
结果分析:20H=00100000B,~20H=11011111B=DFH,结果和GR1中存储的结果一致。
刚拿到这道题的时候,感觉这题看上去十分复杂。然后从逐字逐句地看任务指导书开始,认识了用户自定义层次块,74LS244N、74LS181N、74LS273N、74LS374等一些芯片的具体作用,然后开始仿真布线,在连接主电路图时还是遇到了很多问题,由于自己没有事先将电路图图纸布满全屏,所以之后位置就不够了,迫不得已只能重新连线,当把线连好后,其实也并不知道电路原理以及开关按键各自是什么作用,因此开始上午查找资料,向同学请教,在看了同学一遍演示之后,顿悟,然后自己开始仿真每一组数据,对利用单刀双掷开关打入时钟脉冲上升沿有了更深刻的了解,包括对ALU运算器有了更多的认识,总之,这次实验收获了很多。
了解字发生器的使用方法
字信号发生器可以采用多种方式产生32位同位逻辑信号,用于对数字电路进行测试,是一个通用的数字输入编辑器。
在字信号发生器的左右两侧各有16个端口,分别为015和1631的数字信号输出端,下面的R表示输出端,用以输出与字信号同步的时钟脉冲;T表示输入端,用来接外部触发信号。
在使用Multisim时,我们这里的话为了方便演示就自己输入数字信号了,另外,频率与实际效果可能有出入,可以调整频率达到理想效果(提示:为了避免每次临时设置,可以把字信号发生器将要输出的数字信号“保存save”为xxx.dp文件;运行时“载入load”该文件)
设置好字信号发生器将要输出的32位同步逻辑信号,仿真开始通过给不同的指示灯输入高低电平,使得不同的指示灯按照已设置的频率间断发亮,形成走马灯效果
了解字信号发生器的引脚功能和工作原理–>查看指导书在软件当中如何放置使用字信号发生器–>设置好32位同步逻辑信号–>保存后缀名为.dp的文件–>设置仿真频率–>开始仿真
放置字信号发生器后设置32位同步逻辑信号(也可以设置十六进制的8位同步逻辑信号),使高电平1从低位向高位移动并保持32位同步信号中只有1位为高电平,来保证在仿真过程中指示灯间断点亮,设置频率,初始频率1kHZ导致走马灯移动过快,调整合适的频率使得指示灯依次点亮时间间隔适中,开始仿真并观察过程记录结果。电路图设计如上。
设置好32位同步逻辑信号并,然后设置好频率,避免仿真时两指示灯点亮的时间间隔过短,调整频率适中后开始测试并记录结果,测试结果如 图3-2 所示。
分析:字发生器有32位同步逻辑信号,每一位分别对应0-31号引脚,当对应的位为高电平1时,对应的灯随即亮,通过依次0-15位对应的灯亮并且使字发生器循环输出逻辑信号实现了跑马灯的效果。
果然还是树形好看些,最开始连的图形歪七扭八的,甚至连那个灯泡在哪都不知道(找了好久,才在 Indicators/POWER 那里找到自己想要的灯泡)
这个实验相比于其他的实验是比较容易上手的,而且蛮有意思的。通过设置指示灯位置、32位同步逻辑信号以及仿真频率可以使得走马灯呈现心形等不同的效果
总的来说吧,我们也可以自己设计跑马灯亮的顺序,图案,也可以执行一次指令亮起多盏灯,都是可以实现的啦
当然我们也可以实现朴素版本的,如下:
模拟微程序实现指令
字发生器的一行输出数据可以作为一条微指令,一条机器语言指令由若干条微指令组成。用字发生器的输出取代实验2电路图开关,模拟微指令自动执行实现一条机器语言指令。
GR1中存入数据3H
GR2中存入数据1H。
结果分析:GR1+GR2=3H+1H=(0000 0100B)=4H,与GR1中存储结果一致。
结果分析:GR1-GR2=3H-1H=(0000 0010B)=2H,与GR2中存储结果一致。
结果分析:GR1∧GR2=3H∧1H=(0000 0001B)=1H,与GR1中存储结果一致。
结果分析:GR1∨GR2=3H∨1H=(0000 0011B)=3H,与GR2中存储结果一致。
结果分析:GR1⊕GR2=3H⊕1H=(0000 0010B)=2H,与GR1中存储结果一致。
结果分析:~GR1=~3H=(1111 1100)=FCH,与GR2中存储结果一致。
结果分析:~GR2=~1H=(1111 1110B)=FEH,与GR1中存储结果一致
1.产生的数据需要分时投放总线,并且所有操作都要自动完成,所以i用了两个八路开关来存储要投放的总线的数据。
2.字发生器的序列可以保存到.dp文件,避免每次运行时重新输入字序列,需要时可以读入.dp字序列配置文件,节省时间。