Proteus之PLD初级教程<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Proteus在数字电路仿真中表现非常出色,虽然Proteus对PLD(CPLD/FPGA)支持不多,但是这并不能否认我们不对此方面有所了解,下面对Proteus中的PLD做个简单的学习。
在Proteus中,PLD器件所需要载入的文件是“.jed ”文件(就像仿真单片机所需要.HEX文件一样),而产生这样的文件,我们需要另外一种编辑环境,这就是WinCupl。
WinCupl是ATMEL公司出品的Cupl语言的编译环境,用于PLD器件的编程,支持多种器件,包括GAL系列和ATF系列。
一般来说,ATF系列的同等级产品要必GAL的便宜,比如AFT16V8就兼容GAL16V8,可以擦写100次,价格上也便宜1块~2块,性能都差不多。
在ATMEL公司的SPLD/CPLD栏目中免费下载WinCupl后,可以得到一个注册码,用这个码就可以激活WinCupl了,这个码没有使用时间的限制。
WinCupl软件包实际包括两个部分,一个是WinCupl,PLD的编译环境,一个是WinSim(相当于MAX的波形仿真部分)。
接下来我们学习如何使用这个软件。
Cupl语言的基本结构在这里不作详细介绍,仅对其在Proteus中的PLD所需要的仿真文件产生进行介绍。下面以3-8多路选择器(相当于74LS138)为例,介绍编译Wincupl源文件并产生PLD所需要的仿真文件的具体步骤。
说明:这里我们仅用组合逻辑来实现我们的器件,达到教学目的,更加复杂器件的实现(需要使用时序逻辑)请参见其它学习文档。
1、启动WinCupl。如图1,启动完进入主界面后,单击File菜单的New,从New中单击Projet,就是新建一个工程文件(其实还是PLD文件),在弹出的对话框中,“Name”(源文件名称),填“Encoder”,其它包括“Date”(创建时间)、“Designer”(设计者名称)、“Company”(公司名称)等根据需要进行填写。这里有个特殊的地方,就是“Device”(器件名称),系统默认的是virtual,就是不针对任何具体的部件,这里我们改掉,改成g16v<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />8a,这个关键字兼ATF16V8。如图2所示;
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
图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 编译成功后
在Proteus中的仿真步骤如下,具体方法这里也不作介绍了,如不会者,请参见一些入门教程。
1、 启动Proteus(这个好像不用多说了吧);
2、 添加以下器件:
①AM16V8(这是我们所需要仿真的器件)
②LED-RED
③LOGICSTATE
④RESPACK-8
3、 摆放好元器件。按如图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”
第2脚(I1)频率设置为4 Hz,第3脚(I2)频率设置为2 Hz,第4脚(I3)频率设置为1 Hz如图9,
图9 设置DCLOCK的频率
6、点击“运行”按钮行进行仿真,我们会发现:在满足使能条件时(E1=1,E2=0,E3=0),LED灯从左至右依次循环点亮,如图10,达到我们的设计要求。
图10 仿真效果
7、我们也可以用74LS138来仿真,这样有一个对比,最终对比效果如图11,我们发现两个器件仿真效果是一致的。
图11 与74LS138仿真对比
用户3612 2008-9-28 13:39