Proteus之PLD初级教程
前言
Proteus在数字电路仿真中表现非常出色,虽然Proteus对PLD(CPLD/FPGA)支持不多,但是这并不能否认我们不对此方面有所了解,下面对Proteus中的PLD做个简单的学习。
一、PLD编程软件WinCupl简介
在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的波形仿真部分)。
接下来我们学习如何使用这个软件。
二、编译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-8
3、 摆放好元器件。按如图6所示连接好:
图6
元器件摆放好后的效果
4、载入“.jed”文件;
就像载入单片机“.HEX”文件一样(如果熟悉Proteus操作的可按照自己的方法载入文件),将鼠标放在U1上,右击,然后左击,在“JEDEC Fuse Map File:”处,如图7(a),找到我们刚刚保存源文件的地方,选择“Encoder.jed”文件,然后打开,如图7(b),最后点击“OK”,如图8(C)。
(附件在三楼。)
[ 本帖最后由 xieyi 于 2008-7-11 17:40 编辑 ]







最新回复
xieyi (2008-7-07 13:37:20)
图71.JPG
(a)
图72.JPG
(b)
图73.JPG
(C)
图7
载入“.jed”文件
5、U1(AM16V8)的第2(I1)、3(I2)、4(I3)脚,添加DCLOCK,如图8,
图8.JPG
图8
添加“DCLOCK”
第2脚(I1)频率设置为4 Hz,第3脚(I2)频率设置为2 Hz,第4脚(I3)频率设置为1 Hz如图9,
图9.JPG
图9
设置DCLOCK的频率
6、点击“运行”按钮行进行仿真,我们会发现:在满足使能条件时(E1=1,E2=0,E3=0),LED灯从左至右依次循环点亮,如图10,达到我们的设计要求。
图10.JPG
图10
仿真效果
7、我们也可以用74LS138来仿真,这样有一个对比,最终对比效果如图11,我们发现两个器件仿真效果是一致的。
图11.JPG
图11
与74LS138仿真对比
结语:
我们已经介绍了PLD器件的编程方法、编程工具WinCupl的使用方法以及如何进行在Proteus中的仿真。大家可以根据需求设计自己需要的功能。
作者:人奇
Email:xieyilove2004@163.com
日期:2008-07-06
[ 本帖最后由 xieyi 于 2008-7-7 13:47 编辑 ]
xieyi (2008-7-07 13:37:51)
新开blog,欢迎光临:
http://blog.ednchina.com/xieyi2008/
附件中已经包括教程,代码工程,以及仿真文件。
[ 本帖最后由 xieyi 于 2008-7-7 13:55 编辑 ]
(2008-07-07 13:54:01, Size: 388 KB, Downloads: 74)
icefier (2008-7-08 16:55:16)
bonjour (2008-7-11 11:03:33)
jacky_qiu (2008-7-14 15:34:35)
我们这些菜鸟有福了
谢谢楼主无私奉献
ybzjllj (2008-7-14 20:38:29)
谢谢.gif
2000abc (2008-7-15 20:07:01)
sunlichao (2008-7-16 13:35:26)
wobushiheike (2008-7-16 21:26:03)
wobushiheike (2008-7-16 21:27:04)
wobushiheike (2008-7-17 00:18:46)
mlf283366 (2008-7-22 09:04:16)
mlf283366 (2008-7-22 09:05:42)
shijian (2008-7-22 20:16:28)
forpeople (2008-7-26 11:05:20)
谢谢
forpeople (2008-7-26 11:08:58)
呵呵
非常喜欢雪
nbbao (2008-7-29 06:53:36)
zhu_yan (2008-7-31 16:24:18)
zhu_yan (2008-7-31 16:26:32)
zhu_yan (2008-7-31 16:28:40)
多发表好的文章