原创 [原创] Proteus之PLD初级教程

2008-7-7 13:08 8884 7 8 分类: 工程师职场

ProteusPLD初级教程<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


前言


Proteus在数字电路仿真中表现非常出色,虽然ProteusPLDCPLD/FPGA)支持不多,但是这并不能否认我们不对此方面有所了解,下面对Proteus中的PLD做个简单的学习。


一、PLD编程软件WinCupl简介


Proteus中,PLD器件所需要载入的文件是“.jed ”文件(就像仿真单片机所需要.HEX文件一样),而产生这样的文件,我们需要另外一种编辑环境,这就是WinCupl


WinCuplATMEL公司出品的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,就是不针对任何具体的部件,这里我们改掉,改成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  启动界面



df07c897-0e34-4477-bd7e-af3528fb53ae.JPG


2  头文件信息


2、单击OK后,系统要你输入你要用的输入引脚数,我们有六个输入端,因此填“6,如图3,单击OK按钮。



e881b51e-de2f-4429-9f2e-ea91e6ca0d47.JPG


3  填写输入引脚数


3、系统要你输入要用到的输出引脚数,填“8,如图4,单击OK按钮。



6360e5f4-2837-4a9b-9f3e-f4b05f8044c2.JPG


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  编译成功后


三、PLDProteus中的仿真


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”文件


5U1(AM16V8)的第2(I1)3(I2)4(I3)脚,添加DCLOCK,如图8



6a84fcb5-a508-4ead-9b90-b783bf5ab688.JPG


8  添加“DCLOCK


2脚(I1)频率设置为4 Hz,第3脚(I2)频率设置为2 Hz,第4脚(I3)频率设置为1 Hz如图9



a3389cf6-4fe2-4af7-a429-d1ac339d4c09.JPG


9  设置DCLOCK的频率


6、点击“运行”按钮行进行仿真,我们会发现:在满足使能条件时(E1=1E2=0E3=0),LED灯从左至右依次循环点亮,如图10,达到我们的设计要求。



点击看大图


10  仿真效果


7、我们也可以用74LS138来仿真,这样有一个对比,最终对比效果如图11,我们发现两个器件仿真效果是一致的。



点击看大图


11  74LS138仿真对比


结语:





作者:人奇


Emailxieyilove2004@163.com


日期:2008-07-06







 

我们已经介绍了PLD器件的编程方法、编程工具WinCupl的使用方法以及如何进行在Proteus中的仿真。大家可以根据需求设计自己需要的功能。


 


 


 


 

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户3612 2008-9-28 13:39

早想研究这个问题了,只是一直没找到资料,谢谢了@
相关推荐阅读
用户1378101 2009-07-11 23:48
用反相器74HC04和晶振做晶体振荡电路产生时钟信号
        采用下图所示电路可以实现方波时钟信号输出的功能:        时钟信号为CMOS电平输出,频率等于晶振的并联谐振频率。74HC04在这里相当于一个有很大增益的放大器;R2是反馈电阻,...
用户1378101 2008-11-13 17:36
[转]移动硬盘上安装XP
前提条件为了继续下面的大部分操作,需要有一台已綷-安装好Windows操纵系统的台式机。● 一个兼容USB 2.0标准的移动存储设备。这个设备可以是移动硬盘,甚至可以是大容量闪存盘(市面上已綷-有不少...
用户1378101 2008-09-28 13:20
Proteus 无法仿真的一些问题
1、timestep too small关于time step too small的含义所有SPICE仿真都有可能会出现这种问题,从数学上讲,是因为迭代运算在步长很小的迭代中都无法找到允许误差下的解。...
用户1378101 2008-08-19 11:46
[转贴]一位可怜男网友的求助信
一位可怜男网友的求助信 --------------------------------------------------------------------------------亲爱的技术顾问:...
用户1378101 2008-08-19 11:45
把男友升级为老公后发生的bug (搞笑) (转载)
技术负责人,您好:   去年本人把"男友5.0"升级为"老公1.0",发现财务软件发生意外的变化,导致与在"男友5.0"版本下,运行良好的"flower"和"装饰品"应用程序的连接发生障碍。而且"老公...
用户1378101 2008-07-17 12:53
女人一定要对自己好一点(转)
1、女人一定要对自己好一点。一旦累死了,就别的女人花你的钱,住你的房,睡你的老公,还打你的孩子。 2、问世间情为何物?圣人答曰:“废物!”3、我以为我颓废,原来我报废了! 4、叶子的离开,是因为风的追...
EE直播间
更多
我要评论
1
7
关闭 站长推荐上一条 /3 下一条