您好,欢迎访问三七文档
第8章PLD设计《电子线路辅助设计Protel99SE》第8章PLD设计8.1PLD设计概述8.2CUPL语言基础8.3用CUPL语言设计PLD8.4用CUPL原理图设计PLD第8章PLD设计《电子线路辅助设计Protel99SE》8.1PLD设计概述8.1.1PLD器件概述数字集成电路从逻辑功能上可分为通用型和专用型两类,我们所熟悉的TTL系列、CMOS系列都属于通用型数字集成电路,通用型数字集成电路逻辑功能简单,输入输出逻辑关系固定不变,从理论上讲通用型数字集成电路也可以组成任意复杂的数字电路系统。但是将所设计的数字电路系统做成大规模集成电路,则可进一步缩小电路的体积、重量和功耗,而且会使可靠性大为提高,这种为专门用途而设计的集成电路称为专用集成电路,即所谓ASIC(ApplicationSpecificIntegratedCircuit)。第8章PLD设计《电子线路辅助设计Protel99SE》PLD(ProgrammableLogicDevice)可编程逻辑器件属于专用的集成电路,它的突出优点是逻辑功能用户通过对器件编程自行设定,增强器件逻辑功能的灵活性和保密性,实现了数字集成电路的设计和集成电路制造业的分离。大规模可编程器件是数字系统设计的基础之一。常见的可编程逻辑器件有FPGA、CPLD、EPLD、GAL、PAL、PLA和PROM等。由于历史的原因,对可编程逻辑器件的命名极不规范,一种器件往往具备几种器件的特征,并不能够严格地分类,所以对可编程器件没有统一的分类标准。第8章PLD设计《电子线路辅助设计Protel99SE》目前常用的可编程逻辑器件从结构上可将其分为两大类器件:1)PLD(ProgrammableLogicDevice)可编程逻辑器件,基本结构为与或阵列。2)FPGA(FieldProgrammableArray)现场可编程逻辑器件,基本结构为门阵列。PLD通过修改与有固连内部电路的逻辑功能来编程,FPGA主要通过改变内部连线的布线来编程。第8章PLD设计《电子线路辅助设计Protel99SE》二、PLD99的特点PLD99包含三个专为PLD设计工作定制的EDA/Client服务器:文本专家——具有语法意识的文本编辑器。PLD——用来编译和仿真设计结果。Wave——用来观察仿真波形。第8章PLD设计《电子线路辅助设计Protel99SE》三、PLD的一般设计过程1)明确设计目的了解所需要进行的设计,牢记这次设计可用的布尔表达式、状态机和真值表。明确哪种类型最适合这次设计。2)创建源文件一是使用PLD库元件来绘制PLD器件内部的逻辑功能原理图;二是使用CUPL语言来直接编写描述PLD设计的逻辑功能的源文件。3)编译源文件在设计完成之后,必须使用PLD99内嵌的编译器对设计文件进行编译。并将编译生成的加载文件(一般是JEDEC文件)传送到编程器中,对目标器件进行编程。第8章PLD设计《电子线路辅助设计Protel99SE》8.2CUPL语言基础一、CUPL语言概述1.变量变量是由一串阿拉伯字符组成的。它被用来标示逻辑器件的管脚,定义内部节点、常量、输入输出信号名和一些临时的信号名等等。定义一变量时,需依照如下的一些规则:1)变量名中可以有数字、字符和下划线等,但至少有一个字符。2)变量名区分大小写。3)变量名中间禁止使用空格分隔,可以用下划线。4)名称包含最多31个字符。5)变量名不可包含CUPL语言的特殊字符。6)名称不可采用CUPL关键字。第8章PLD设计《电子线路辅助设计Protel99SE》正确的变量名称如:B0、b0、8550_ENABLE、Raltime_clock_等。错误的变量名称如:66没有包含至少一个的阿拉伯字符O/Oenable包含一特殊字符:/In6a包含一空格,系统将把这作为两个变量Tabl-2包含一划线,系统亦把这作为两个变量变量名可以被用作代替一组数据总线、地址总线或其他的有序数列。如变量名:A0A1A2A3A4A5A6A7常被用来表示微处理器的低八位地址总线。这种情况下,变量名的后缀数字最好从零开始,该数字通常为0~31之间的十进制数,带有后缀0的变量名一般都表示总线的最低位。第8章PLD设计《电子线路辅助设计Protel99SE》第8章PLD设计《电子线路辅助设计Protel99SE》2.数字CUPL编译器所有操作包含的数字都是32位的。数字有4种表示形式:二进制、十进制、八进制和十六进制。数字的默认表示形式,除了器件管脚数和用于索引的变量是十进制外,其他在源文件中使用的数字都是十六进制的。不同的表现形式可以通过在数字前加上不同的前缀加以区别。设计中一旦改变数字的表示形式,这一新形式将成为默认的形式。第8章PLD设计《电子线路辅助设计Protel99SE》数字的前缀标识符可以是大写,也可以是小写。数字前缀标识符见表8-3。第8章PLD设计《电子线路辅助设计Protel99SE》3.注解注解是逻辑描述文件的重要组成部分。好的注解增加了源代码的可读性,显而易见地表达设计者的设计意图。注解并不影响编译的时间,因为编译器在编译前的语法检查中,去除了注释。注解一般包含在符号/*和*/之间,程序忽略在这两个字符间的所有的一切。注解可以跨越多行,它并不是以一行的结束作为终止符。第8章PLD设计《电子线路辅助设计Protel99SE》4.列符速记符是CUPL语言的一个重要的特点。使用最多的速记符是列,一般用在管脚、节点的定义上、位域的声明、逻辑方程式和设置操作上。一般定义列的格式如下:[变量,变量,﹒﹒﹒变量]其中:方括号[]用来作为一列变量的定界符。第8章PLD设计《电子线路辅助设计Protel99SE》如下是定义的两个列的例子:[UP,DOWN,LEFT,RIGHT][A0,A1,A2,﹒﹒﹒A7]当定义为列的所有的变量名可以由小到大,或者相反的次序排列时,可以使用如下的格式:[变量名下标m﹒﹒﹒下标n]其中:m是这一列变量的起始符;n是这一列变量的终止符。注意:上式定义中的后一个下标n前不加变量名。这样,上例中的[A0,A1,A2,﹒﹒﹒A7]可以简写为[A0‥7]第8章PLD设计《电子线路辅助设计Protel99SE》但是[A00‥07]是下列的速记符。[A0,A1,A2,A3,A4,A5,A6,A7]并不代表如下的列:[A00,A01,A02,A03,A04,A05,A06,A07]当然上述两式可以混合使用,如以下的两列是完全等同的。[A0‥2,A3,A4,A5‥7][A0,A1,A2,A3,A4,A5,A6,A7]第8章PLD设计《电子线路辅助设计Protel99SE》5.模板文件当使用CUPL语言创建一逻辑描述源文件时,诸如头信息、管脚声明和逻辑方程式等等都要输入到该文件中。为方便设计者创建源文件AdvancedPLD99提供了结构合适的模板文件。模板文件提供了如下的一些部分1)头信息在关键字后,设计者可以添加所需的一些信息以识别该文件2)标题块可以在此添加关于设计的一些注解,诸如设计任务说明,可选用的逻辑器件的说明等等。3)管脚定义模板文件提供了管脚定义的关键字,合适的输入、输出管脚定义符和注解,定义完管脚后,去掉多余的“Pin=;”,否则编译时将有语法错误。4)声明和局部变量在此可向源文件中加入诸如位域定义等等的声明和中间方程式。5)逻辑方程式在此添加描述逻辑器件的功能方程式。第8章PLD设计《电子线路辅助设计Protel99SE》6.头信息源文件的头信息一般放在文件的开头。CUPL语言提供了10个关键字来描述文件头信息,每个关键字的描述可以用任何有效的ASCII码,包括空格和特殊字符,每句的结尾都应添加上分号。表8-4列出了CUPL语言头信息的关键字和意义描述。第8章PLD设计《电子线路辅助设计Protel99SE》第8章PLD设计《电子线路辅助设计Protel99SE》第8章PLD设计《电子线路辅助设计Protel99SE》7.管脚声明陈述管脚声明定义管脚数和它们的变量名称。其定义格式如下:PINpin_n=[!]VAR;其中:PIN是关键字,用来定义管脚数和它们的变量。pin_n是一个十进制管脚数或者用列定义的一列管脚数,也就是:[pin_n1,pin_n2﹒﹒﹒pin_nn]!该惊叹号用来定义输入或输出信号的极性。=是定义操作符。VAR是单一的变量名或列定义的一组变量名,也就是:[VAR,VAR﹒﹒﹒VAR];用来标志管脚声明的结束。第8章PLD设计《电子线路辅助设计Protel99SE》设计者在设计开发一个逻辑器件的过程中,很容易混淆极性的概念。在进行逻辑器件的设计时,设计者最初所考虑的是该信号是有效还是无效,设计者并没有注意到该信号的高低电平。很多情况下,设计时可能需要在为逻辑低电平(0)时信号有效,而为逻辑高电平(1)时信号无效。这样的信号在逻辑低电平时被激活,因而,当一个信号由高电平激活变为低电平激活时,这一极性也将改变。鉴于此,CUPL允许设计者在管脚定义时定义信号的极性,这样,设计者就不必考虑信号的极性,管脚定义声明了对信号的转换,这将易于控制信号的极性。第8章PLD设计《电子线路辅助设计Protel99SE》假设设计者需要这样的功能:Y=A&B这一表达式表明当A和B有效时,Y有效。例如,设计者可以很容易地用可编程逻辑器件P22V10来实现这一功能:Pin2=A;Pin3=B;Pin16=Y;Y=A&B;第8章PLD设计《电子线路辅助设计Protel99SE》假设由于某种原因,设计者需要输入管脚读到0逻辑状态时认为有效,设计者可改变设计如下所示。Pin2=!A;Pin3=!B;Pin16=Y;Y=A&B;现在尽管惊叹号“!”被加到了管脚定义中来说明极性已反,但方程式还是认为当A有效和B有效时,Y有效。设计中改变的是0电平有效,1电平无效,并没有改变其他的设计。但在管脚定义时,现在已经映射为0电平有效,l电平无效。第8章PLD设计《电子线路辅助设计Protel99SE》使用惊叹号“!”来定义输入输出信号的极性,如果一输入信号的激活是在低电平时(TTL信号电压为0V)。管脚定义时,在变量名前加上惊叹号“!”。当在逻辑方程中信号被激活时,惊叹号提醒编译器选择信号的相反状态。第8章PLD设计《电子线路辅助设计Protel99SE》但VIRTUAL器件是个例外。当使用该逻辑器件时,编译器忽略管脚定义中的所有的极性。这种情况下,方程式本身取反。如果一管脚声明定义了一个高电平有效的输出,但目标器件(如PALl6L8)仅有相反的输出,在这种情况下,为了使选用的逻辑器件可用,编译器将自动对定义的逻辑方程执行DeMorgan理论。第8章PLD设计《电子线路辅助设计Protel99SE》例如,如下是目标器件为PALl6L8的逻辑方程。该逻辑器件的所有的输出管脚被定义为高电平有效。以下的方程是一个或逻辑表达式。C=a#b;但由于PALl6L8对所有的管脚都包含一个反相器。此时,编译器将自动执行DeMorgan理论,编译器将产生如下的乘积项:C=﹥!a#!b;如果设计有过多的乘积项,编译器将给出错误的信息,同时,停止编译。第8章PLD设计《电子线路辅助设计Protel99SE》下面是一些有效的管脚声明有例子:Pin1=clock;/*RegisterClock*/Pin2=!enable;/*EnableI/OPort*/Pin[3,4]=![stop,go];/*ControlSignal*/Pin[5‥7]=[a0‥2];/*AddressBits0-2*/上述例子的后两行是以下的管脚定义的速记符:Pin3=!stop;/*ControlSignal*/Pin4=!go;/*ControlSignal*/Pin5=a0;/*AddressBit0*/Pin6=a1;/*AddressBit1*/Pin7=a2;/*AddressBit2*/第8章PLD设计《电子线路辅助设计Protel99SE》Virtual器件与其他的逻辑器件不同。对于Virtual器
本文标题:第8章 PLD设计
链接地址:https://www.777doc.com/doc-4073801 .html