《基于Matlab的组合逻辑电路设计与仿真(共25页).doc》由会员分享,可在线阅读,更多相关《基于Matlab的组合逻辑电路设计与仿真(共25页).doc(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上目录专心-专注-专业摘要本文主要介绍利用Matlab强大的图形处理功能、符号运算功能以及数值计算功能,及Matlab仿真工具Simulink实现组合逻辑电路的调试、仿真。主要包括:用Matlab编写常用组合逻辑电路逻辑表达式的M文件,并在给定输入信号的情况下完成并验证各基本组合逻辑电路的功能(8线3线编码器、3线8线译码器、4线16线译码器、数据选择器、七段数码管);并通过Simulink仿真软件使用常见的与、或、非等基本逻辑单元,时钟信号等信号源和示波器完成以上各种逻辑电路的设计和仿真,通过程序设计和波形输入输出仿真两种方法来共同完成各种基本的组合逻辑电路的设计。关
2、键字:Matlab、组合逻辑电路、SimulinkAbstractThis paper mainly introduces the use of Matlab powerful graphics processing functions, symbolic operation function and numerical calculation function, and Matlab simulation tools Simulink realize the assembly logic circuit test, the simulation. Mainly includes: with
3、Matlab commonly used the assembly logic circuit logical expression of M files, and in a given input signal and the basic validation to complete the assembly logic circuit function (8-to-3 Line Decoder, 3-to-8 Line Decoder, 4-to-16 Line Decoder, Multiplexer, Seven period of digital tube); And through
4、 the Simulink software use common and, or, the basic logic unit, the clock signal source and oscilloscope complete the above all kinds of logic circuit design and simulation, through the program design and waveform input/output simulation two methods to finish all kinds of common basic combinational
5、 logic circuit design.Key words: Matlab 、The assembly logic circuit、Simulink 1 Matlab简介Matlab和、并称为三大数学软件。它在数学类科技应用软件中在方面首屈一指。Matlab可以进行运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、金融建模设计与分析等领域。1.1 Matlab程序设计Matlab有两种工作方式:一种是交互式的命令行工作方式;另一种是M文件的程序工作方式。在前一种工作方式下,Matlab被当做一种高级数学演算纸和图形表现器来
6、使用,Matlab提供了一套完整的而易于使用的编程语言,为用户提供了二次开发的工具,下面主要介绍Matlab控制语句和程序设计的基本方法。用Matlab语言编写的程序,称为M文件。M文件有两类:命令文件和函数文件。两者区别在于:命令文件没有输入参数,也不返回输出参数;而函数文件可以输入参数,也可以返回输出参数。命令文件对Matlab工作空间的变量进行操作,而且函数文件中定义的变量为局部变量,当函数文件执行完毕时,这些变量被清除。M文件可以使用任何编辑程序建立和编辑,而一般常用的是使用Matlab提供的M文件窗口。首先从Matlab命令窗口的File菜单中选择New菜单项,在选择M-file命令
7、,将得到的M文件窗口。在M文件窗口输入M文件的内容,输入完毕后,选择此窗口File菜单的save as命令,将会得到save as 对话框。在对话框的File 框中输入文件名,再选择OK按钮即完成新的M文件的建立。然后在从Matlab命令窗口的File 菜单中选择Open对话框,则屏幕出现Open对话框,在Open对话框中的File Name 框中输入文件名,或从右边的directories框中打开这个M文件。在M文件所在的目录,再从File Name 下面的列表框中选中这个文件,然后按OK按钮即打开这个M文件。在M文件窗口可以对打开的M文件进行编辑修改。在编辑完成后,选择File菜单中的Sa
8、ve命令可以把这个编辑过的M文件报存下来。当用户要运行的命令较多或需要反复运行多条命令时,直接从键盘逐渐输入命令显得比较麻烦,而命令文件则可以较好地解决这一问题。我们可以将需要运行的命令编辑到一个命令文件中,然后再Matlab命令窗口输入该命令文件的名字,就会顺序执行命令文件中的命令。1.2 Simulink工具Simulink是MATLAB软件的扩展,它是实现动态系统建模和仿真的一个软件包,它与MATLAB语言的主要区别在于,其与用户交互接口是基于Windows的模型化图形输入,其结果是使得用户可以把更多的精力投入到系统模型的构建,而非语言的编程上。1.2.1 Simulink的启动Simu
9、link有四种启动方法: (1)在MATLAB命令窗口中输入simulink,结果是在桌面上出现一个称为Simulink Library Browser的窗口,在这个窗口中列出了按功能分类的各种模块的名称;(2)在MATLAB命令窗口中输入Simulink3,结果是在桌面上出现一个用图标形式显示的Library :simulink3的Simulink模块库窗口;(3)可以通过单击MATLAB主窗口工具条上的Simulink图标打开;(4)可以通过单击MATLAB主窗口菜单选择FileNewModel,弹出一个Untitled的Simulink模型窗口,再选择View Show Library
10、Browser,弹出Simulink Library Brower模块库窗口。1.2.2 Simulink模块库及操作Simulink模块库按照功能分类可以分为:连续模块、离散模块、查表模块和用户定义函数模块、数学模块、非线性模块、信号通路模块、接收器模块、输入源模块、特别模块、其他常用方块组及工具箱。在模型窗口中,选中模块,则其4个角会出现黑色标记,此时可以对模块进行以下的基本操作:(1)移动:选中模块,按住鼠标左键将其拖曳到所需的位置即可。若要脱离线而移动,可按住shift键,再进行拖曳。(2)复制:选中模块,然后按住鼠标右键进行拖曳即可复制同样的一个功能模块。(3)删除:选中模块,按De
11、lete键即可。若要删除多个模块,可以同时按住Shift键,再用鼠标选中多个模块,按Delete键即可。也可以用鼠标选取某区域,再按Delete键就可以把该区域中的所有模块和线等全部删除。(4)转向:为了能够顺序连接功能模块的输入和输出端,功能模块有时需要转向。在菜单FormatFlip Block旋转180度, FormatRotate Block顺时针旋转90度。(5)改变大小:选中模块,对鼠标移到角上出现,进行拖曳即可。(6)模块命名:先用鼠标在需要更改的名称上单击一下,然后直接更改即可。名称在功能模块上的位置也可以变换180度,可以用FormatFlip Name来实现,也可以直接通过
12、鼠标进行拖曳。Hide Name可以隐藏模块名称。(7)颜色设定: Format Foreground Color改变模块的前景颜色,Background Color改变模块的背景颜色;而模型窗口的颜色可以通过Screen Color来改变。(8)参数设定:用鼠标双击模块,就可以进入模块的参数设定窗口,从而对模块进行参数设定。或点击鼠标右键,选择Block parameters 参数设定窗口包含了该模块的基本功能帮助。通过对模块的参数设定,就可以获得需要的功能模块。1.2.3 仿真参数设置构建好一个系统的模型之后,接下来的事情就是运行模型,得出仿真结果。运行一个仿真的完整过程分成三个步骤:设置
13、仿真参数,启动仿真和仿真结果分析。选择Simulation菜单下的Parameters命令,就会弹出一个仿真参数对话框,它主要用三个页面来管理仿真的参数:Solver页,它允许用户设置仿真的开始和结束时间,选择解法器,说明解法器参数及选择一些输出选项;Workspace I/O页,作用是管理模型从MATLAB工作空间的输入和对它的输出;Diagnostics诊断页,允许用户选择Simulink在仿真中显示的警告信息的等级。2 逻辑电路原理分析根据逻辑功能的不同,数字电路分为两大类:一类是组合逻辑电路,另一类是时序逻辑电路。在组合电路中,任意时刻的输出仅取决于该时刻的输入,与电路的原始状态无关;
14、在时序电路中,任意时刻的输出不仅取决于该时刻的输入,而且与该时刻之前电路的状态有关。组合逻辑电路的结构具有以下特点:输出输入之间没有反馈延迟通路;电路中不含有记忆功能的元件。2.1 编码器编码器可分为普通编码器和优先编码器。普通编码器不能有两个以上的编码信号同时输入到编码器上,而优先编码器允许有多个编码信号同时加到编码器的输入端但电路只对编码信号中的优先级别进行编码,对于比它低级别的信号不予理睬。以8线3线优先编码器为例,其逻辑功能真值表如表2-1所示,从功能表中可以看出,该编码器有8个信号输入端,3个二进制输出端,输入和输出均以低电平作为有效电平,而且输入优先级别的次序依次A7,A6,A5,
15、A4,A3,A2,A1,A0。此外还设置了低电平有效地输入使能端EI。表2-1 8线3线优先编码器真值表输入输出EIA0A1A2A3A4A5A6A7B2B1B01111011111111111000000010010011010001110110011111000011111101001111111100011111111112.2 译码器译码器是的一个重要的器件,其可以分为:变量译码和显示译码两类。变量译码一般是一种较少输入变为较多输出的器件,一般分为2n译码和8421BCD码译码两类。显示译码主要解决二进制数显示成对应的十、或十六进制数的转换功能,一般其可分为驱动LED和驱动LCD两类。译
16、码器的种类很多,二进制译码器、二-十进制译码器和显示译码器是三种最典型的译码电路。译码器是典型的组合,译码器是将一种编码转换为另一种编码的逻辑电路。从广义的角度看,译码器有三类:二进制码译码器,一般是将二进制码译为十进制码;代码转换译码器,是从一种编码转换为另一种编码;显示译码器,一般是将一种编码译成十进制码或特定的编码,并通过显示器件将译码器的状态显示出来。2.2.1 二进制译码器常见的集成二进制译码器有74x138和74x139。其中74x139是双线译码器,两个独立的译码器封装在一个集成片中。下面主要介绍74HC138的逻辑功能及应用。74HC138是3线8线译码器,其功能表如表2-2所
17、示。译码器有3个二进制输入端A2、A1、A0,它们共有8中状态的组合,即可译出8个输出信号B7B0,输出为低电平有效。当 =1且 + =0时,译码器工作;而当 =0或 + =1 时,禁止译码器工作,此时不论3个输入端为何种状态,8个输入端均为高电平。表2-2 3线8线译码器真值表输入输出A2A1A0B7B6B5B4B3B2B1B001111111111111111111111111111100000111111101000011111110110001011111011100011111101111001001110111110010111011111100110101111111001110
18、1111111功能表中1和0分别表示高、低电平,画出3线8线译码器的卡诺图并推导出各输出端的逻辑表达式: 利用3线8线译码器可以构成4线16线,5线32线或6线64线译码器。利用两片3线8线译码器和一个反相器可以构成4线16线译码器。2.2.2 显示译码器为了是数码管能显示十进制数,必须将十进制数的代码经译码器译出,然后经驱动去点亮对应的段。译码器的功能就是,对应于某一段数码输入,相应的几个输出端有有效信号输出。下面介绍一种常用的CMOS七段译码器,其真值表如表2-3所示。表2-3 共阴极七段译码器真值表数值输入输出A3A2A1A0abcdefg000001111110100010110000
19、200101101101300111111001401000110011501011011011601101011111701111110000810001111111910011111011A10101110111B10110011111C11001001110D11010111101E11101001111F111110001112.3 数据选择器数据选择器功能是在地址选择信号的控制下,从多路数据中选择一路数据作为输出信号。常见的数据选择器有4选1数据选择器、8选1数据选择器、16选1数据选择器等之分。下面以4选1数据选择器为例进行分析,其真值表如表2-4所示。表2-4 4选1数据选择器功
20、能表输入地址输出S1S0Y00I001I110I211I3当输入地址为00时,输出信号为I0;当输入地址为01时,输出信号为I1;当输入地址为10时,输出信号为I2;当输入地址为11时,输出信号为I3。根据功能表可以写出输出信号Y的表达式:3 组合逻辑电路设计与仿真3.1 8线3线编码器的设计与仿真3.1.1 M文件程序验证建立一个新的M文件,命名为bma83.m。根据8线3线编码器的逻辑表达式,编写其程序见附录。在command window窗口中输入bma83,按Enter键后在弹出的语句后面输入0 1 1 1 1 1 1 1,再按Enter键后输入EI的值为0,按Enter键后就会显示数
21、组的值为:0 0 0。同理输入不同的初始值会得到相应的输出数据,过程如图3-1所示。图3-1 8线3线编码器程序验证 3.1.2 Simulink仿真进入Simulink仿真界面后,按照8线3线编码器的逻辑表达式逐一拖入所需的原件并进行连接如图3-2所示。图3-2 8线3线编码器逻辑电路图设置好输入时钟脉冲后,点击 进行仿真,然后分别点击查看输入输出信号的示波器查看波形,如图3-3和图3-4所示,根据波形可知所设计的8线3线编码器,在定输入的情况下均可得到相应的正确的输出,即该设计符合设计要求。图3-3 8线3线编码器输出波形图3-4 8线3线编码器输入信号波形3.2 3线8线译码器的设计与仿
22、真3.2.1 M文件程序验证建立一个新的M文件,命名为yma38.m。根据3线8线译码器的逻辑表达式,编写其程序见附录。在command window窗口中输入yma38.m,按Enter键后在弹出的语句后面输入数据1 0 1,再按Enter键后输入使能端的值为1 0 0,按Enter键后就会显示数组的值为:1 1 0 1 1 1 1 1。同理输入不同的初始值会得到相应的输出数据,过程如图3-5所示。图3-5 3线8线译码器程序验证3.2.2 Simulink仿真进入Simulink仿真界面后,按照3线8线译码器的逻辑表达式逐一拖入所需的原件并进行连接如图3-6所示。图3-6 3线8线译码器逻
23、辑电路图设置好输入时钟脉冲后,点击 进行仿真,然后分别点击查看输入输出信号的示波器查看波形,如图3-7和图3-8所示。图3-7 3线8线译码器输入信号波形图3-8 3线8线译码器输出波形根据以上波形可以看出所设计的3线8线译码器,在给不同输入的情况下均可得到相应的正确的输出,即该设计符合设计要求。3.3 数据选择器的设计与仿真3.3.1 M文件程序验证建立一个新的M文件,命名为shu.m。根据4选1数据选择器的逻辑表达式,编写其程序见附录。在command window窗口中输入shu.m,按Enter键后在弹出的语句后面输入1 0 1 0,再按Enter键后输入1 0,按Enter键后就会显
24、示数组的值为:1。同理输入不同的初始值会得到相应的输出数据,过称如图3-9所示。图3-9 4选1数据选择器程序验证3.3.2 Simulink仿真进入Simulink仿真界面后,按照4选1数据选择器的逻辑表达式逐一拖入所需的原件并进行连接如图3-10所示.图3-10 4选1数据选择器逻辑电路图设置好输入时钟脉冲后,点击 进行仿真,然后分别点击查看输入输出信号的示波器查看波形,如图3-11所示,根据以下波形可以看出所设计的4选1数据选择器,在给不同输入的情况下可得到相应的正确的输出,即该设计符合设计要求。图3-11 4选1数据选择器输入输出波形3.4 4线16线译码器的设计与仿真3.4.1 3线
25、8线译码器封装在设计完3线8线译码器后为了完成4线16线的设计,需要对其进行封装,首先在3线8线译码器原理图上选中需要封装的部分,然后选择Edit菜单下的Create Subsystem,如图3-12所示。图3-12 封装系统在创建系统后需要对其进一步封装,首先选中创建好的系统选择Edit菜单下的Mask Subsystem命令,会出现一个对话框:Mask Editor,输入命令如图3-13所示,并在设置图标的透明度时,选取Transpoarent是显示图标下的内容。图3-13 Icon&Port设置设置Icon页后还需要设置Documentation页,如图3-14所示,在该页中可以为封装模
26、块设置封装类型、描述文件和帮助文件,在模块的描述编辑框中,可以填入对模块的描述文本。图3-14 Documentation设置设置好Documentation页后对该模块点击OK键就可以看到封装后的模块了,如图3-15所示,模块的中间是输出了我们设置的文本,然后双击该模块,这次看到的不再是子系统的电路了,而是一个模块对话框。图3-15 封装后的元件3.4.2 4线6线译码器的仿真4线16线译码器可以用2片3线8线译码器和一个反相器级联而成,其原理图如图3-16所示。图3-16 4线16线译码器逻辑电路图通过将输入信号的最高位与第一个3线8线译码器的E1端相连,并经过一个反相器和第二个3线8线译
27、码器的E1连接,再将两个译码器的E2A和E2B使能端相连作为4线16线译码器的使能端,且低电平有效。设置好输入时钟脉冲后,点击 进行仿真,然后分别点击查看输入输出信号的示波器查看波形,如图3-17、图3-18和图3-19所示。图3-17 4线16线译码器输入信号波形 图3-18 输出信号高8位 图3-19 输出信号低8位根据以上波形可以看出所设计的4线16线译码器,在给不同输入的情况下可得到相应的正确的输出,即该设计符合设计要求。3.5 七段数码管的设计与仿真3.5.1 M文件程序验证建立一个新的M文件,命名为seg7.m。根据七段数码管的逻辑表达式,编写其程序见附录。在command win
28、dow窗口中输入seg7.m,按Enter键后在弹出的语句后面输入1 0 0 1,按Enter键后就会显示数组的值为:1 1 1 1 0 1 1。同理输入不同的初始值会得到相应的输出数据,过程如图3-20所示。图3-20 七段数码管程序验证3.5.2 Simunlink仿真进入Simulink仿真界面后,按照七段数码管的逻辑表达式逐一拖入所需的原件并进行连接如图3-21所示。图3-21 七段数码管逻辑电路图设置好输入时钟脉冲后,点击 进行仿真,点击查看输入输出信号的示波器查看波形,如图3-22和图3-23所示,根据以下波形可以看出所设计的七段数码管,在给不同输入的情况下均可得到相应的正确的输出
29、,即该设计符合设计要求。图3-22 七段数码管输入信号波形图3-23 七段数码管输出波形4 心得体会这次课程设计已经差不多结束了,一周时间虽然很短,但在这段时间里感觉学到了很多。经过上两个学期末的课程设计和加强训练,自己动手设计、仿真及最终总结写报告的能力有了很大的提升,所以这次课程设计完成还是比较顺利的。在本次设计中主要是应用各种基本组合逻辑器件的真值表化简出对应的逻辑表达式,然后根据这些逻辑表达式在Simulink环境下画出对应的原理图,设定了初始信号之后就可以得到相应的输出波形。本次设计中我感觉到自己对MATLAB的Simulink仿真不是很熟悉,在用到所需元件时都要进行查阅,通过本次课
30、设,自己对于Simulink中各个模块的应用有了更深的认识。此外本次设计还需要我们熟悉MATLAB的一些函数的基本功能以及它们的基本语句,对之前学过的Matlab实验课程进行了复习和巩固,在今后要进一步增加自己的MATLAB学习,提高自己MATLAB汇编技能。很感谢学校给我们这次Matlab课程设计的机会,一直认为学校每学期布置的课程设计和加强训练很有意义,通过课程设计不仅锻炼了自己的动手能力,还学会了好多我们所学专业需要用到的软件,对以后学习和工作巩固了基础,另外最后总结写报告的时候对常用的文字处理软件的掌握熟练了好多。当然,经过了课程设计,我也发现了自己的很多不足,我也会更加努力,认真学习
31、,争取在以后的课程中做得更好。参考文献1 张志涌. 精通MATLAB6.5版(第一版) .北京:北京航空航天大学出版社,2003.032 蒙以正. MATLAB5.X与技巧. 北京:出版社,1999.03 3 阮沈勇、王永利. MATLAB程序设计. 北京:电子工业出版社,2004.014 罗建军. MATLAB教程. 北京:电子工业出版社,2005.075 黄忠霖、黄京著. MATLAB符号运算及其应用. 北京:国防工业出版社,2004.016 吴友宇. 数字电子技术基础. 北京:清华大学出版社,2009.4附录1.8线3线编码器源程序:a=input(please input a7 a6
32、a5 a4 a3 a2 a1 a0:) ;EI=input(piease input EI:);a7=a(1); a6=a(2); a5=a(3); a4=a(4) ;a3=a(5) ; a2=a(6); a1=a(7); a0=a(8) ;b2=(EI)&(a4)+(a5)+(a6)+(a7);b1=(EI)&(a2)&a4&a5)+(a3)&a4&a5)+(a6)+(a7);b0=(EI)&(a1)&a2&a4&a6)+(a3)&a4&a6)+(a5)&a6)+(a7); b=b2 b1 b0;disp(b);2.3线8线译码器源程序:a=input(please input a2 a1
33、a0:) ;a2=a(1); a1=a(2); a0=a(3);E=input(pllease input E1 E2A E2B:);E1=E(1);E2A=E(2);E2B=E(3);b7=(E1&(E2A+E2B)&a2&a1&a0);b6=(E1&(E2A+E2B)&a2&a1&(a0);b5=(E1&(E2A+E2B)&a2&(a1)&a0);b4=(E1&(E2A+E2B)&a2&(a1)&(a0);b3=(E1&(E2A+E2B)&(a2)&a1&a0);b2=(E1&(E2A+E2B)&(a2)&a1&(a0);b1=(E1&(E2A+E2B)&(a2)&(a1)&a0);b0=
34、(E1&(E2A+E2B)&(a2)&(a1)&(a0);b=b7 b6 b5 b4 b3 b2 b1 b0;disp(b);3.4选1数据选择器源程序:s=input(please input I0 I1 I2 I3:);I0=s(1); I1=s(2);I2=s(3); I3=s(4);S=input(please input S2 S1:);S2=S(1); S1=S(2);I=(S2)&(S1)&I0)|(S2)&S1&I1)|(S2&(S1)&I2)|(S2&S1&I3);disp(I);4. 七段数码管源程序:Q=input(please input Q1 Q2 Q3 Q4:);
35、A=Q(1); B=Q(2); C=Q(3); D=Q(4);a=(B&C)|(A)&C)|(B)&(D)|(A)&B&(C)&D)|(A&(B)&(C)|(A&B&(C)&(D);b=(A)&(B)|(B)&(D)|(A&D&(C)|(A)&(C)&(D)|(A)&C&D);c=(A&(B)|(A)&B)|(C)&D)|(A)&C&D)|(A)&(C)&(D);d=(A&(C)|(B)&C&D)|(A)&(B)&(D)|(B&(C)&D)|(B&C&(D);e=(A&B)|(A&C)|(B)&(D)|(C&(D);f=(A&(B)|(A&C)|(C)&(D)|(A)&B&(C)|(B&C&(D);g=(A&(B)|(A&D)|(C&(D)|(A)&B&(C)|(A)&(B)&C);abcdefg=a b c d e f g;disp(abcdefg);