跟我学Cupl

一、简介

Cupl语言大家可能没有听说过,实际上它是国内唯一一种和ABEL语言类似,而且可以在Windows环境

上开发GAL系列PLD的编译环境。WinCupl这种编译环境由ATMEL公司出品,是免费软件,下载页面是

http://www.atmel.com/dyn/products/tools.asp?family_id=653,在该页面中选择WinCupl的下载,登记

一下你的基本情况就能下载了。下载时会给你注册码,很方便。

一、Cupl的保留字    Cuple的保留字包括以下的字串: APPEND  FORMAT OUT ASSEMBLY  FUNCTION  PARTNO ASSY   FUSE   PIN COMPANY  GROUP  PINNNODE CONDITION  IF   PRESENT DATE   JUMP   REV DEFAULT  LOC   REVISION DESIGNER  LOCATION  SEQUENCE DEVICE   MACRO  SEQUENCED ELSE   MIN   SEQUENCEJK FIELD   NAME   SEQUENCERS FLD   NODE   SEQUENCET

    这些字串是不能被用作其它的用途的。尤其是不能被当作标号使用。Cupl语言有一些运算符,包括: & # ( )  -    * + [ ]  /    : . .. /*  */  ; , ! '  =    @ $ ^

    下面是一个门电路的例子,通过这个例子我们可以学到基本的Cupl语言的用法,在该文件中/**/之间

的为注释。

Name             Gates; Partno           CA0001; Date             07/16/87; Designer         G Woolheiser; Company          ATI; Location         San Jose, CA.; Assembly         Example; /******************************************************/ /*                                                    */ /* 这是一个表示 CUPL语言基本用法的例子                */ /* 这个例子实现基本门电路      .                      */ /*                                                    */ 

/******************************************************/ /*   目标设备: P16L8, P16P8, EP300, and 82S153        */ /******************************************************/ /* 输入:  定义简单门电路的输入端                      */ Pin 1 = a;  /* 引脚1:输入端,名称是a  */ Pin 2 = b; /* 输出端: 定义 PAL16L8 和 PAL16LD8器件的输出端。     */ Pin 12 = inva; /* 引脚11:输出端,名称是inva */ Pin 13 = invb; Pin 14 = and;  /* 引脚14:输出端,名称是and,与VHDL不同,and不是关键字,可以作为标号使用 */ Pin 15 = nand; Pin 16 = or; Pin 17 = nor; Pin 18 = xor; Pin 19 = xnor;

/* 逻辑实现部分:  演示如何利用 CUPL 实现基本门电路 */ inva = !a;  /* 反相器              */ invb = !b; and  = a & b;  /* 与门             */ nand = !(a & b); /* 与非门              */ or   = a # b; /* 或门                */ xor  = a $ b; /* 异或门               */ nor  = !(a # b) /* 或非门               */ xnor = !(a $ b); /* 同或门     */

    通过上面例子的学习,我们应该对Cupl语言有了初步的了解。     WinCupl不但可以编译该文件,生成JED的熔丝文件,还可以对该文件进行波形仿真。在做小规模的

PLD设计的时候,使用GAL系列或者ATF系列的PLD比较方便,也比较便宜。

二、Cupl文件的基本格式

在编写Cupl语言源文件需要遵守一定的格式,源文件由头部说明、输入引脚说明、输出引脚说明和逻

辑实现4部分组成,缺一不可。

一、头部说明     头部说明一般包括以下部分: Name WAITGEN ; Partno P9000183 ;  Revision 02 ; Date 1/11/89 ; Designer Osann ; Company Logical Devices, Inc. ; Assembly PC Memory Board ; Location U106 ; Device F155; Format ij ;     Name关键字用来说明逻辑文件的文件名,默认的扩展名是PLD,因此可以不写扩展名。     Partno关键字用来说明对特定的PLD器件对应的某个公司的部件号。如果不知道,可以不要这个部分

。      Revision 设计公司设计该源文件的版本号。可以不填,可以没有      Date     设计日期,可以不填,可以没有      Designer 设计者的名称,可以不填,可以没有      Company  设计者所在公司名称,可以不填,可以没有      Assembly 本设计用于PC机板卡时的名称,可以没有      Location 本设计用于PC机板卡时所在的位置,可以没有      Device   必填字段,用来选择本设计所用的具体PLD器件型号,      Format   用来指定本文件编译后产生的烧写芯片文件的种类。h表示产生HEX格式的ASCII码文件,i

表示HL格式的文件,j表示产生JEDEC格式的文件。

二、引脚说明     在PLD源文件中,所用的输入输出引脚都必须说明后才能使用,因此,可以象下面格式一样说明引脚

:     PIN pin_n=[!]var ;     PIN是关键字,pin_n是引脚号码,var是引脚定义的名字,该名字用在后面的逻辑实现中。!是可选的

,用来说明引脚的极性,如果没有!,输入是什么就是什么,为同相,如果有!,就表示输入后信号反相。    下面是一个实际的例子:    Pin 2 = !A;    Pin 3 = !B;    Pin 16 = Y;    Y = A & B;  /* 逻辑实现部分 */    当然,如果有一系列的引脚需要说明,这些引脚又是连续的,可以用[]符号来说明,比如    Pin[2..6] = A[1..5];    就表示引脚2到6用A1到A5来表示,比较方便。

三、逻辑实现部分    逻辑实现部分用来实现引脚之间的逻辑关系。它主要靠一些逻辑操作符来实现引脚之间的关系。这些

逻辑关系包括:      逻辑符号  例子     关系   操作优先级         ! !A NOT 1  & A & B AND 2  # A # B OR 3         $       A $ B   XOR     4      其中,!表示非,&表示与,#表示或,$表示异或,异或的操作优先级最低,非的优先级最高。

     搞清楚了这些东西,就可以自己实现最基本的逻辑门电路了。

三、如何使用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语言的基本结构,下面我们做另一个例子,就是两输入端与

门。具体步骤是:     1、启动WinCupl。启动完进入主界面后,单击File菜单的New,从New中单击Projet,就是新建一个工

程文件(其实还是PLD文件),在弹出的对话框中,可以填您的源文件名字(Name),填MYGATE,其它的

东西怎么填请您复习第2课的PLD文件头部文件的说明部分。这里有个特殊的地方,就是器件(Device),

系统默认的是virtual,就是不针对任何具体的部件,这里我们改掉,改成g16v8a,这个关键字兼容

ATF16V8。     2、单击OK后,系统要你输入你要用的输入引脚数,因为我们只有两个输入端,因此填2,单击OK按钮

。     3、系统要你输入要用到的输出引脚数,填1,单击OK按钮。     4、系统要你输入要使用到的中间节点数,我们不需要,填0,单击OK按钮。这样系统就建立了一个

PLD文件,文件名就是MYGATE.PLD。系统将该文件显示出来了,就象下面这样: Name     MYGATE ; PartNo   00 ; Date     2006-8-9 ; Revision 01 ; Designer WUJIAN ; Company  TALE ; Assembly None ; Location  ; Device   g16v8a ;

/* *************** INPUT PINS *********************/ PIN     =                         ; /*                                 */ PIN     =                         ; /*                                 */

/* *************** OUTPUT PINS *********************/ PIN     =                         ; /*                                 */

    因此,这个文件是空的,我们填一下,将输入输出引脚都填好,把逻辑也写完,就象下面这样: Name     MYGATE ; PartNo   00 ; Date     2006-8-9 ; Revision 01 ; Designer WUJIAN ; Company  TALE ; Assembly None ; Location  ; Device   g16v8a ; /* *************** INPUT PINS *********************/ PIN  2   = a                        ; /*                                 */ PIN  3   = b                        ; /*                                 */

/* *************** OUTPUT PINS *********************/ PIN  12   = Y                        ; /*                                 */

Y = a & b;     写好后,我们需要编译该文件。在Run菜单中,单击Device Dependent Compile,就是基于器件型号

的编译。如果没有出现什么键入错误,都能成功编译。编译完成后,我们来仿真一下看看波形。

二、仿真的基本方法    编译完成后。单击工具栏图标的从右侧数第2个,启动WinSim。启动完成后,单击WinSim菜单File中的

New。     1、在弹出的Design Properties对话框中,单击Design File按钮,选中MYGATE.PLD文件,按“确认

”按钮继续。在Design Properties对话框中,单击OK按钮确认。     2、接下来WinSim会提示是否创建MYGATE.SIM文件并编译它,单击“是”继续。     3、不管接下来的提示,在WinSim中Signal(信号)菜单中单击Add,在弹出的Add Signal对话框中不

断单击OK按钮将a、b、y三个信号加到波形图中。单击Done关闭该对话框。     4、在WinSim的File菜单中单击Save项保存该项目。     5、在黑色的网格的左上方有个Value,Value右边有个1,在1所在的灰色条上单击鼠标右键,在弹出

的菜单中的Add Vector上单击鼠标左键,在弹出的对话框中输入3,表示增加波形仿真的3段。     6、在a的右侧的波形上单击鼠标右键,依次选0,0,1,1,在b的波形上单击鼠标右键,依次选0,1

,0,1。     7、保存该工程。在Simulator菜单中选择Simulator开始仿真,就可以看到y的波形了。如下图所示。

    本次课我们学习了如何利用WinCupl进行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)。

将鼠标放在U1上,右击,然后左击,在“JEDEC Fuse Map File:”处

(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,

设置DCLOCK的频率

图9  设置DCLOCK的频率

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

 

仿真效果

点击看原图

 

 

图10  仿真效果

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

与74LS138仿真对比

点击看原图

 

 

图11  与74LS138仿真对比

  结语:

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

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值