基于MATLAB的组合逻辑电路设计和仿真.docx
《基于MATLAB的组合逻辑电路设计和仿真.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的组合逻辑电路设计和仿真.docx(24页珍藏版)》请在冰豆网上搜索。
基于MATLAB的组合逻辑电路设计和仿真
课程设计任务书
学生姓名:
专业班级:
指导教师:
工作单位:
信息工程学院
题目:
基于MATLAB的组合逻辑电路设计与仿真
初始条件:
MATLAB软件微机
要求完成的主要任务:
深入研究和掌握数字电路中组合电路的理论知识。
利用MATLAB的强大的图形处理功能,符号运算功能和数值计算功能,实现组合逻辑电路的设计和仿真。
一、以编码器和译码器为例仿真下列波形
1.编码器输入输出波形(8线3线);
2.译码器输入输出波形(3线8线);
3.数据选择器输入输出波形(四选一数据选择器)
二、以译码器的级联为例实现系统的封装并仿真下列波形
译码器的输入输出波形(4线16线)
三、以七段数码管为例子完成数码管的图形输出显示
时间安排:
学习MATLAB语言的概况第1天
学习MATLAB语言的基本知识第2、3天
学习MATLAB语言的应用环境,调试命令,绘图能力第4、5天
课程设计第6-9天
答辩第10天
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要
MATLAB是当今最优秀的科技应用软件之一,具有强大的科学计算与可视化功能、简单易用、开放式可扩展环境。
本文介绍了组合逻辑电路的MATLAB设计和仿真,在这种电路中,任意时刻的输出信号仅取决于当时的输入信号。
具备这种逻辑功能特点的电路叫做组合逻辑电路。
本次课程设计利用MATLAB中的M文件与SIMULINK方式完成了对组合逻辑电路的设计与仿真,初步了解与掌握了这一技能。
课程设计的主要内容包括了编码器、译码器、数据选择器的仿真及子系统的封装。
关键词:
matlab,simulink,组合逻辑电路
Abstract
MATLABisthemostoutstandingofsoftwaretechnologyapplicationnowadays,ithasstrongscientificcomputingandvisualfunction,anditiseasy-to-use,itcanbeextendbecauseofitsextensibleenvironment.ThispaperintroducesthehardwavecircuitdesignandsimulationofMATLAB,inthiscircuit,arbitrarymomentonlydependsontheinputsignalbefore,itscurrentstatedosenotmatter.Thiskindoflogichardwareiscalledcombinationallogiccircuit.
ThepurposeofourtrainingistostrengthentheuseofMATLABtoachievethehandlingofthe.MfilesandSimulink,includinganalyzing,designingandemulatingcombinationallogiccircuit.ItscontentcontainsEncoderanddecoder,dataselectorsimulationandtheencapsulationofthesubsystems.
Keywords:
matlab,simulink,combinationallogiccircuit
绪论
MATLAB和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
本设计利用MATLAB及Simulink仿真软件强大的图形处理功能,符号运算功能和数值计算功能,实现常见的组合逻辑电路如编码器、译码器、数据选择器等逻辑电路的设计及仿真。
本设计通过Simulink仿真软件使用常见的与、或、非等基本逻辑单元,延时信号、时钟信号等信号源和示波器完成以上各种逻辑电路的设计和仿真,同时通过MATLAB汇编语言实现以上各基本组合逻辑电路的逻辑表达式,并在给定输入信号的情况下完成并验证各基本组合逻辑电路的功能。
1matlab简介
1.1MATLAB程序设计
用MATLAB语言编写的程序,称为M文件。
M文件有两类:
命令文件和函数文件。
两者区别在于:
命令文件没有输入参数,也不返回输出参数;而函数文件可以输入参数,也可以返回输出参数。
命令文件对MATLAB工作空间的变量进行操作,而且函数文件中定义的变量为局部变量,当函数文件执行完毕时,这些变量被清除。
M文件可以使用任何编辑程序建立和编辑,而一般常用的是使用MATLAB提供的M文件窗口。
首先从MATLAB命令窗口的File菜单中选择New菜单项,在选择M-file命令,将得到的M文件窗口。
在M文件窗口输入M文件的内容,输入完毕后,选择此窗口File菜单的saveas命令,将会得到saveas对话框。
在对话框的File框中输入文件名,再选择OK按钮即完成新的M文件的建立。
然后在从MATLAB命令窗口的File菜单中选择Open对话框,则屏幕出现Open对话框,在Open对话框中的FileName框中输入文件名,或从右边的directories框中打开这个M文件。
在M文件所在的目录,再从FileName下面的列表框中选中这个文件,然后按OK按钮即打开这个M文件。
在M文件窗口可以对打开的M文件进行编辑修改。
在编辑完成后,选择File菜单中的Save命令可以把这个编辑过的M文件报存下来。
当用户要运行的命令较多或需要反复运行多条命令时,直接从键盘逐渐输入命令显得比较麻烦,而命令文件则可以较好地解决这一问题。
我们可以将需要运行的命令编辑到一个命令文件中,然后再MATLAB命令窗口输入该命令文件的名字,就会顺序执行命令文件中的命令。
1.2Simulink仿真
Simulink是MATLAB软件的扩展,它是实现动态系统建模和仿真的一个软件包,它与MATLAB语言的主要区别在于,其与用户交互接口是基于Windows的模型化图形输入,其结果是使得用户可以把更多的精力投入到系统模型的构建,而非语言的编程上。
1.2.1Simulink启动
Simulink有四种启动方法:
(1)在MATLAB命令窗口中输入simulink,结果是在桌面上出现一个称为SimulinkLibraryBrowser的窗口,在这个窗口中列出了按功能分类的各种模块的名称;
(2)在MATLAB命令窗口中输入Simulink3,结果是在桌面上出现一个用图标形式显示的Library:
simulink3的Simulink模块库窗口;
(3)可以通过单击MATLAB主窗口工具条上的Simulink图标打开;
(4)可以通过单击MATLAB主窗口菜单选择FileNewModel,弹出一个Untitled的Simulink模型窗口,再选择ViewShowLibraryBrowser,弹出SimulinkLibraryBrower模块库窗口。
1.2.2Simulink模块库及模块操作
Simulink模块库按照功能分类可以分为:
连续模块、离散模块、查表模块和用户定义函数模块、数学模块、非线性模块、信号通路模块、接收器模块、输入源模块、特别模块、其他常用方块组及工具箱。
在模型窗口中,选中模块,则其4个角会出现黑色标记,此时可以对模块进行以下的基本操作:
(1)移动:
选中模块,按住鼠标左键将其拖曳到所需的位置即可。
若要脱离线而移动,可按住shift键,再进行拖曳。
(2)复制:
选中模块,然后按住鼠标右键进行拖曳即可复制同样的一个功能模块。
(3)删除:
选中模块,按Delete键即可。
若要删除多个模块,可以同时按住Shift键,再用鼠标选中多个模块,按Delete键即可。
也可以用鼠标选取某区域,再按Delete键就可以把该区域中的所有模块和线等全部删除。
(4)转向:
为了能够顺序连接功能模块的输入和输出端,功能模块有时需要转向。
在菜单FormatFlipBlock旋转180度,FormatRotateBlock顺时针旋转90度。
(5)改变大小:
选中模块,对鼠标移到角上出现,进行拖曳即可。
(6)模块命名:
先用鼠标在需要更改的名称上单击一下,然后直接更改即可。
名称在功能模块上的位置也可以变换180度,可以用FormatFlipName来实现,也可以直接通过鼠标进行拖曳。
HideName可以隐藏模块名称。
(7)颜色设定:
FormatForegroundColor改变模块的前景颜色,BackgroundColor改变模块的背景颜色;而模型窗口的颜色可以通过ScreenColor来改变。
(8)参数设定:
用鼠标双击模块,就可以进入模块的参数设定窗口,从而对模块进行参数设定。
或点击鼠标右键,选择Blockparameters参数设定窗口包含了该模块的基本功能帮助。
通过对模块的参数设定,就可以获得需要的功能模块。
1.3子系统的创建与封装
在建立的Simulink系统模型比较大或很复杂时,可将一些模块组合成子系统,这样可使
1.模型得到简化,便于连线;
2.可提高效率,便于调试;
3.可生成层次化的模型图表,用户可采取自上而下或自下而上的设计方法。
将一个创建好的子系统进行封装,也就是使子系统象一个模块一样,例如可以有自己的参数设置对话框,自己的模块图标等。
这样就使子系统使用起来非常方便。
1.3.1子系统的创建
1.通过子系统模块来建立子系统
在Simulink库浏览器,有一个子系统(Subsystems)的库模块(有的版本在Signals&Systems子库里),点击该图标即可看到不同类型的子系统模块。
2.组合已存在的模块来建立子系统
如果现有的模型已经包含了需要转化成子系统的模块,就可以通过组合这些模块的方式建立子系统。
步骤如下:
确定需建立Subsystem的模型(被选中的均标记有黑块);
点击模型窗Edit菜单下的CreateSubsystem命令,则所选定的模型组合自动转化成子系统;
双击该图标,可打开该子系统窗口,改写输入输出符号;
关闭子系统编辑窗口,设置子系统标签。
1.3.2子系统的封装
子系统可以建立自己的参数设置对话框,以避免对子系统内的每个模块分别进行参数设置,因此在子系统建立好以后,需对其进行封装。
子系统封装的基本步骤如下:
a.设置好子系统中各模块的参数变量;
b.定义提示对话框及其特性;
c.定义被封装子系统的描述和帮助文档;
d.定义产生模块图标的命令。
2组合逻辑电路及其设计
根据逻辑功能的不同,数字电路分为两大类:
一类是组合逻辑电路,另一类是时序逻辑电路。
在组合电路中,任意时刻的输出仅取决于该时刻的输入,与电路的原始状态无关。
常见的组合逻辑电路有数据选择器、编码器、译码器、数据分配器、数据比较器等典型的中规模组合逻辑器件。
在时序电路中,任意时刻的输出不仅取决于该时刻的输入,而且与该时刻之前电路的状态有关。
常见的时序电路有触发器、锁存器等中规模时序器件。
组合逻辑电路的结构具有以下特点:
输出输入之间没有反馈延迟通路;电路中不含有记忆功能的元件。
2.1编码器
用文字、符号或数码表示特定对象的过程叫做编码。
实现编码操作的电路就是编码器。
按照编码信号的不同特点和要求,常用的编码器件有二进制编码器、二-十进制编码器、优先编码器之分。
所谓优先编码器,就是按优先级别的高低进行编码的电路。
至于级别的高低,完全由设计人员根据各个输入信号的要求决定。
以8线3线优先编码器为例,其逻辑功能真值表如表2-1所示,从功能表中可以看出,该编码器有8个信号输入端,3个二进制输出端,输入和输出均以高电平作为有效电平,而且输入优先级别的次序依次I7、I6、I5、I4、I3、I2、I1、I0。
此外为方便多个芯片连接起来扩展电路的功能,还设置了高电平有效地输入使能端EI。
当EI=1时,编码器工作;而当EI=0时,禁止编码器工作,此时不论8个输入端为何种状态,3个输入端均为低电平。
功能表中1和0分别表示高、低电平,画出8线3线编码器的卡诺图并推导出各输出端的逻辑表达式:
A2=EI&(~((~I7)&(~I6)&(~I5)&(~I4)));
A1=EI&(~((~I7)&(~I6)&(I5+I4+(~I3))&(I5+I4+(~I2))));
A0=EI&(~((~I7)&(I6+(~I5))&(I6+I4+(~I3))&(I6+I4+I2+(~I1))));
表2-18线3线优先编码器真值表
输入
输出
EI
I7
I6
I5
I4
I3
I2
I1
I0
A2
A1
A0
H
×
×
×
×
×
×
×
×
Z
Z
Z
L
H
H
H
H
H
H
H
H
Z
Z
Z
L
L
×
×
×
×
×
×
×
L
L
L
L
H
L
×
×
×
×
×
×
L
L
H
H
H
H
L
×
×
×
×
×
L
H
L
L
H
H
H
L
×
×
×
×
L
H
H
L
H
H
H
H
L
×
×
×
H
L
L
L
H
H
H
H
H
L
×
×
H
L
H
L
H
H
H
H
H
H
L
×
H
H
L
L
H
H
H
H
H
H
H
L
H
H
H
2.2译码器
译码是编码的逆过程,它的功能是将具有特定含义的二进制编码进行分辨,并且转换成控制信号,具有译码功能的逻辑电路称为译码器。
常用的译码器件有二进制译码器、3线-8线译码器、4线-16线译码器、BCD译码器、七段显示译码器件等。
2.2.1二进制译码器
常见的集成二进制译码器有CMOS和TTL的定型产品,两者在逻辑功能上没有区别,只是电性能参数不同,用74x137表示两者中的任意一种。
74x139是双线译码器,两个独立的译码器封装在一个集成片中。
下面主要介绍74HC137的逻辑功能及应用。
功能表中1和0分别表示高、低电平,画出3线8线译码器的卡诺图并推导出各输出端的逻辑表达式:
Y7=EI&(~(A2&A1&A0));Y6=EI&(~(A2&A1&(~A0)));
Y5=EI&(~(A2&(~A1)&A0));Y4=EI&(~(A2&(~A1)&(~A0)));
Y3=EI&(~((~A2)&A1&A0));Y2=EI&(~((~A2)&A1&(~A0)));
Y1=EI&(~((~A2)&(~A1)&A0));Y0=EI&(~((~A2)&(~A1)&(~A0)));
74HC137是3线8线译码器,其功能表如表2-2所示。
表2-23线8线译码器真值表
输入
输出
EI
A2
A1
A0
Y7
Y6
Y5
Y4
Y3
Y2
Y1
Y0
L
×
×
×
H
H
H
H
H
H
H
H
H
L
L
L
H
H
H
H
H
H
H
L
H
L
L
H
H
H
H
H
H
H
L
H
H
L
H
L
H
H
H
H
H
L
H
H
H
L
H
H
H
H
H
H
L
H
H
H
H
H
L
L
H
H
H
L
H
H
H
H
H
H
L
H
H
H
L
H
H
H
H
H
H
H
H
L
H
L
H
H
H
H
H
H
H
H
H
H
L
H
H
H
H
H
H
H
2.2.2显示译码器
数码显示器就是用来显示数字、文字或符号的器件。
七段显示器有两种,共阴极和共阳极电路,共阴极电路中,七个发光二极管的阴极连接在一起接低电平。
共阳极显示器的驱动则刚好相反。
为了是数码管能显示十进制数,必须将十进制数的代码经译码器译出,然后经驱动去点亮对应的段。
译码器的功能就是,对应于某一段数码输入,相应的几个输出端有有效信号输出。
常用的七段显示译码器有两类,一类译码器输出高电平有效信号,用来驱动共阴极显示器,另一类输出低电平信号,以驱动共阳极显示器。
下面介绍一种常用的CMOS七段译码器,其真值表如表2-3所示。
表2-3共阴极七段译码器真值表
数
值
输入
输出
A
B
C
D
a
b
c
d
e
f
g
0
L
L
L
L
H
H
H
H
H
H
L
1
L
L
L
H
L
H
H
L
L
L
L
2
L
L
H
L
H
H
L
H
H
L
H
3
L
L
H
H
H
H
H
H
L
L
H
4
L
H
L
L
L
H
H
L
L
H
H
5
L
H
L
H
H
L
H
H
L
H
H
6
L
H
H
L
H
L
H
H
H
H
H
7
L
H
H
H
H
H
H
L
L
L
L
8
H
L
L
L
H
H
H
H
H
H
H
9
H
L
L
H
H
H
H
H
L
H
H
A
H
L
H
L
H
H
H
L
H
H
H
B
H
L
H
H
L
L
H
H
H
H
H
C
H
H
L
L
H
L
L
H
H
H
L
D
H
H
L
H
L
H
H
H
H
L
H
E
H
H
H
L
H
L
L
H
H
H
H
F
H
H
H
H
H
L
L
L
H
H
H
2.3数据选择器
数据选择器又称多路选择器(MUX)。
每次在地址输入的控制下,从多路输入数据中选择一路输出,其功能类似于一个单刀双掷开关。
常用的数据选择器有2选1、4选1、8选1、16选1等。
数据选择器的电路结构一般由与或门阵列组成,也有用传输门开关和门电路混合而成的。
下面以4选1数据选择器为例进行分析,其真值表如表2-4所示。
当输入地址为00时,输出信号为D0;当输入地址为01时,输出信号为D1;当输入地址为10时,输出信号为D2;当输入地址为11时,输出信号为D3。
根据功能表可以写出输出信号Y的表达式:
Y=((~S2)&(~S1)&D0)|((~S2)&S1&D1)|(S2&(~S1)&D2)|(S2&S1&D3);
表2-44选1数据选择器功能表
输入地址
输出
S1
S0
Y
L
L
D0
L
H
D1
H
L
D2
H
H
D3
3基于MATLAB的组合逻辑电路仿真实现
3.1以编码器和译码器为例的仿真
3.1.18线3线编码器的仿真
进入Simulink仿真界面后,按照8线3线编码器的逻辑表达式逐一拖入所需的原件,先摆置好基本位置,然后进行连接,最后得到的8线3线编码器的原理图如图3-1所示。
然后,设置好各输入脉冲后,点击
进行仿真,然后分别点击查看输入输出信号的示波器查看波形,可观察得到8线3线编码器的输入输出波形如图3-2所示。
根据波形可知所设计的8线3线编码器,在一定输入的情况下均可得到相应的正确的输出,即该设计符合设计要求。
图3-18线3线编码器组合逻辑原理图
图3-28线3线编码器输入输出仿真波形
3.2.23线8线译码器的仿真
进入Simulink仿真界面后,按照3线8线译码器的逻辑表达式逐一拖入所需的原件并进行连接如图3-3所示,设置好输入脉冲后,再仿真,然后分别点击查看输入输出信号的示波器查看波形,如图3-4所示,根据以下波形可以看出所设计的3线8线译码器,在给不同输入的情况下均可得到相应的正确的输出,即该设计符合设计要求。
图3-33线8线译码器原理图
图3-43线8线译码器输入输出仿真波形
3.3.34选1数据选择器的仿真
进入Simulink仿真界面后,按照4选1数据选择器的逻辑表达式逐一拖入的原件先摆置好基本位置,然后进行连接,最后得到的4选1数据选择器的原理图如图3-5所示。
图3-54选1数据选择器原理图
设置好输入时钟脉冲后,点击
进行仿真,然后分别点击查看输入输出信号的示波器查看波形,如图3-6所示,其中信号D3是高电平信号,信号D2为周期是2的脉冲信号,信号D1是低电平信号,信号I0为周期是0.5的脉冲信号。
根据以下波形可以看出所设计的4选1数据选择器,在给不同输入的情况下均可得到相应的正确的输出,即该设计符合设计要求。
图3-64选1数据选择器输入输出仿真波形图
3.2以译码器的级联为例实现系统的封装并仿真
3.2.13线8线译码器的封装
在设计完3线8线译码器后为了完成4线16线的设计,需要对3线8线译码器进行封装,下面将详细介绍,首先在3线8线译码器原理图上选中需要封装的部分,然后选择Edit菜单下的CreateSubsystem。
在创建好一个新的系统后需要对其进一步封装,设置其有关属性,首先选中创建好的系统后选择Edit菜单下的MaskSubsystem命令,这是就会出现一个对话框:
MaskEditor,将这个对话框设置好,模块就封装成功了。
首先需要在Icon页设置封装模块的图标,在最顶部的是封装类型,中间的编辑框是用来写如图标绘制命令,这里可以填写MATLAB的绘图命令,但更常用的是显示文本的命令:
disp、text、fprintf和port-label。
设置Icon页后还需要设置Documentation页,在该页中的三个编辑框可以分别为封装模块设置封装类型、秒数文件和帮助文件,封装类型我们已经设置好了,它将作为模块的标题出现在对话框的顶部,在模块的描述编辑框中,我们可以填入对模块的描述文本。
设置好Documentation页后对该模块点击OK键就可以看到封装后的模块了,如图3-7所示,模块的中间是输出了我们设置的文本,然后双击该模块,这次看到的不再是子系统的电路了,而是一个模块对话框,封装后的子系统如图3-7所示。
图3-7封装后的3-8译码器
3.2.24线16线译码器的仿真
4线16线译码器可以用2片3线8线译码器和一个反相器级联而成,其原理图如图3-8所示,
图3-84线16线级联原理图
设置好输入时钟脉冲后,点击
进行仿真,然后分别点击查看输入输出信号的示波器查看波形,如图3-9、图3-10和图3-11所示,根据以下波形可以看出所设计的4线16线译码器,在给