
Proteus之PLD初级教程.doc
9页Proteus之PLD初级教程前言Proteus在数字电路仿真中表现非常出色,虽然Proteus对PLD(CPLD/FPGA)支持不多,但是这并不能否认我们不对此方面有所了解,下面对Proteus中的PLD做个简单的学习一、PLD编程软件WinCupl简介在Proteus中,PLD器件所需要载入的文件是“.jed ”文件(就像仿真单片机所需要.HEX文件一样),而产生这样的文件,我们需要另外一种编辑环境,这就是WinCuplWinCupl是ATMEL公司出品的Cupl语言的编译环境,用于PLD器件的编程,支持多种器件,包括GAL系列和ATF系列一般来说,ATF系列的同等级产品要必GAL的便宜,比如AFT16V8就兼容GAL16V8,可以擦写100次,价格上也便宜1块~2块,性能都差不多在ATMEL公司的SPLD/CPLD栏目中免费下载WinCupl后,可以得到一个注册码,用这个码就可以激活WinCupl了,这个码没有使用时间的限制WinCupl软件包实际包括两个部分,一个是WinCupl,PLD的编译环境,一个是WinSim(相当于MAX的波形仿真部分)接下来我们学习如何使用这个软件二、编译Wincupl源文件Cupl语言的基本结构在这里不作详细介绍,仅对其在Proteus中的PLD所需要的仿真文件产生进行介绍。
下面以3-8多路选择器(相当于74LS138)为例,介绍编译Wincupl源文件并产生PLD所需要的仿真文件的具体步骤说明:这里我们仅用组合逻辑来实现我们的器件,达到教学目的,更加复杂器件的实现(需要使用时序逻辑)请参见其它学习文档1、启动WinCupl如图1,启动完进入主界面后,单击File菜单的New,从New中单击Projet,就是新建一个工程文件(其实还是PLD文件),在弹出的对话框中,“Name”(源文件名称),填“Encoder”,其它包括“Date”(创建时间)、“Designer”(设计者名称)、“Company”(公司名称)等根据需要进行填写这里有个特殊的地方,就是“Device”(器件名称),系统默认的是virtual,就是不针对任何具体的部件,这里我们改掉,改成g16v8a,这个关键字兼ATF16V8如图2所示;图1 启动界面图2 头文件信息2、单击OK后,系统要你输入你要用的输入引脚数,我们有六个输入端,因此填“6”,如图3,单击OK按钮图3 填写输入引脚数3、系统要你输入要用到的输出引脚数,填“8”,如图4,单击OK按钮图4 填写输出引脚数4、系统要你输入要使用到的中间节点数,我们不需要,填0,单击OK按钮。
这样系统就建立了一个PLD文件,文件名就是ENCODER.PLD系统将该文件显示出来了,就象下面这样:Name Encoder ;PartNo 00 ;Date 2008-4-15 ;Revision 01 ;Designer XIEYI ;Company stepservo ;Assembly None ;Location 0;Device G16V8A ;/* *************** INPUT PINS *********************/PIN = ; /* */ PIN = ; /* */ PIN = ; /* */ PIN = ; /* */ PIN = ; /* */ PIN = ; /* */ /* *************** OUTPUT PINS *********************/PIN = ; /* */ PIN = ; /* */ PIN = ; /* */ PIN = ; /* */ PIN = ; /* */ PIN = ; /* */ PIN = ; /* */ PIN = ; /* */显然,这是一个空文件,我们需要对输入、输出引脚定义,以及其中的逻辑进行填写,3-8多路选择器逻辑相对简单,这里就不啰嗦了。
最后的编写后的文件如下:Name Encoder ;PartNo 00 ;Date 2008-4-15 ;Revision 01 ;Designer XIEYI ;Company stepservo ;Assembly None ;Location 0;Device G16V8A;/* *************** INPUT PINS *********************/PIN 2 = A2 ; /* */ PIN 3 = A1 ; /* */ PIN 4 = A0 ; /* */ PIN 5 = E1 ; /* */ PIN 6 = E2 ; /* */ PIN 7 = E3 ; /* */ /* *************** OUTPUT PINS *********************/PIN 19 = Q0 ; /* */ PIN 18 = Q1 ; /* */ PIN 17 = Q2 ; /* */ PIN 16 = Q3 ; /* */ PIN 15 = Q4 ; /* */ PIN 14 = Q5 ; /* */ PIN 13 = Q6 ; /* */ PIN 12 = Q7 ; /* */ Q0 = !((E1)&(!E2)&(!E3)&(!A0)&(!A1)&(!A2));Q1 = !((E1)&(!E2)&(!E3)&(!A0)&(!A1)&(A2));Q2 = !((E1)&(!E2)&(!E3)&(!A0)&(A1)&(!A2));Q3 = !((E1)&(!E2)&(!E3)&(!A0)&(A1)&(A2));Q4 = !((E1)&(!E2)&(!E3)&(A0)&(!A1)&(!A2));Q5 = !((E1)&(!E2)&(!E3)&(A0)&(!A1)&(A2));Q6 = !((E1)&(!E2)&(!E3)&(A0)&(A1)&(!A2));Q7 = !((E1)&(!E2)&(!E3)&(A0)&(A1)&(A2));写好后,我们需要编译该文件。
首先保存文件(怎么保存就不用我说了吧^_^),然后在“Run”菜单中,单击“Device Dependent Compile”,就是基于器件型号的编译如果没有出现什么键入错误,都能成功编译,如图5编译完成后,即可产生我们所需要的“.jed”文件 图5 编译成功后三、PLD在Proteus中的仿真在Proteus中的仿真步骤如下,具体方法这里也不作介绍了,如不会者,请参见一些入门教程1、 启动Proteus(这个好像不用多说了吧);2、 添加以下器件:①AM16V8(这是我们所需要仿真的器件)②LED-RED③LOGICSTATE④RESPACK-83、 摆放好元器件按如图6所示连接好:图6 元器件摆放好后的效果4、载入“.jed”文件;就像载入单片机“.HEX”文件一样(如果熟悉Proteus操作的可按照自己的方法载入文件),将鼠标放在U1上,右击,然后左击,在“JEDEC Fuse Map File:”处,如图7(a),找到我们刚刚保存源文件的地方,选择“Encoder.jed”文件,然后打开,如图7(b),最后点击“OK”,如图8(C)a)(b)(C)图7 载入“.jed”文件5、U1(AM16V8)的第2(I1)、3(I2)、4(I3)脚,添加DCLOCK,如图8,图8 添加“DCLOCK”。
