[原创] Proteus之PLD初级教程


Proteus之PLD初级教程


前言

  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,就是不针对任何具体的部件,这里我们改掉,改成g16v8a,这个关键字兼ATF16V8。如图2所示;





图1.JPG


1
启动界面





图2.JPG


2
头文件信息


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





图3.JPG


3
填写输入引脚数


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





图4.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.JPG


5
编译成功后


三、PLDProteus中的仿真

Proteus中的仿真步骤如下,具体方法这里也不作介绍了,如不会者,请参见一些入门教程。


1、
启动Proteus(这个好像不用多说了吧);


2、
添加以下器件:


AM16V8(这是我们所需要仿真的器件)


LED-RED


LOGICSTATE


RESPACK-8


3 摆放好元器件。按如图6所示连接好:





图6.JPG


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


    5U1(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=1E2=0E3=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 编辑 ]

    Proteus之PLD初级教程.rar
    (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)

    dddddddddddddddddddddddddddddd
  • mlf283366 (2008-7-22 09:05:42)

    dddddddddddddddddddddddddddddd
  • 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)

    希望lz继续努力,
    多发表好的文章