语言简明教程_第1页
语言简明教程_第2页
语言简明教程_第3页
语言简明教程_第4页
语言简明教程_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ABEL-HDL语言简明教程一. ABEL-HDL简介ABEL-HDL(ABEL Hardware Description Language)语言是一种层次化的硬件描述语言,它支持多种行为级输入形式,其中包括逻辑方程式、状态图和真值表等。ABEL编译器和ispLEVERispDesignEXPERTISP Synario版本软件中的ABEL-HDL编译器可通过仿真对ABEL-HDL语言设计进行功能验证。此后,编译器在PLD或FPGA等可编程IC上实现此设计。ABEL-HDL设计还可以通过标准格式的设计传输文件转移到其它设计环境中去使用。二. ABEL-HDL语法ABEL-HDL源文件中的每一行

2、必须符合以下语法规则:l 一行最多为150个字符长。l 每一行可用按回车键来结束;除开始、结束、标题等语句外,多以分号“;”结束。l 不同的关键字、标识符和数之间最少要用一个空格隔开。l 在同一关键字、数、运算符或标识符中不可嵌入空格和句点。l 关键字及特殊常量可用大写、小写或大小写字母混合方式键入,关键字及特殊常量与大小写无关。l 一般标识符也可以是大写、小写或大小写字母混用,但必须注意:一般标识符与大小写有关,这点在编写程序时要特别小心,极易出错。2.1 ABEL-HDL基本语法1. 标识符标识符(用户提供的名字和标号)用于标识下列各项的名称:l 器件 (P16V8R)l 器件引脚及节点

3、(LD,Q3,Q2,Q1,Q0,N_1)l 功能块 (?A&?B&?C)l 集合 (Q3.Q0)l 输入或输出信号 (I3,I2,I1,I0,Q3,Q2,Q1,Q0)l 常量 (H,L,.X.,.C.)l 宏 (NAND3)l 哑变量 (A,B,C)不管标识符描述的是什么,其规则和限制是相同的:1). 标识符最长为31个字符。2). 标识符必须以一个字母或下划线开头。3). 除标识符的第一个字符外,其余字符均可以是大小写字母、数字,波浪线()和下划线(_)。4). 在标识符中不得出现空格,可使用下划线或大写字母来区分一个标识符中的各个字词。5). 除保留的标识符(即关键字和特殊

4、常量)外,标识符与字母大小写有关,即大小写字母的含义不同。6). 除了合法的点后缀(或称为点扩展名,参见“基本逻辑器件的描述”)外,在标识符中不能用句号。注意以下几点:n 标识符应该做到“见名知意”,如And_In1,And_In2,表示二个输入与门的二个输入信号。n 标识符应简单明了,易于区分,避免使用大量相似的标识符。n 一个标识符如用几个单词组成,则各单词之间宜用下划线或大小写字符来区分,以便阅读。如利用标识符THIS_IS_A_COUNTER比利用标识符THISISACOUNTER就更容易阅读和理解。n 使用标识符,需要特别注意:关键字在编程时不得用来给器件、引脚、节点、数组常量、集合

5、、宏或信号命名。2. 特殊常量在赋值语句、真值表和测试向量中,用户可使用常量;也可将一常量赋给标识符,并在整个模块中用此标识符代表该常量。常量的值可以是数值,也可以是非数值的特殊常量(或称为专用常量,是一种特殊的标识符)。常用的特殊常量有:H 逻辑高电平L 逻辑低电平.C. 时钟输入(低电平-高电平-低电平转换).K. 时钟输入(高电平-低电平-高电平转换).U. 时钟上升沿(低电平-高电平转换).D. 时钟下降沿(高电平-低电平转换).X. 任意值.Z. 高阻态3. 运算符ABEL-HDL语言的运算符分为四种基本类型:逻辑运算符、算术运算符、关系运算符及赋值运算符,下面对它们进行说明:1).

6、 逻辑运算符:逻辑代数中的各种逻辑运算如与、或、非、异或等,在ABEL-HDL语句中均有专门的符号,如下所示:运算符定义举例逻辑代数中的含义!非!A&与A&BA·B#或A#BA+B$异或A$BAÅB!$同或A!$BAB2). 算术运算符:算术运算符定义了表达式中各项之间的算术关系。移位操作运算符也属于此类中。运算符举例说明-A求负数(补码)-A-B减+A+B加*A*B乘/A/B无符号整除%A%B取模:无符号整除的余数<<A<<BA左移B位>>A>>BA右移B位注意:“/”是无符号的取整除法,即其商为正整数。用求

7、模运算符“%”可得到除的余数。移位操作执行无符号的逻辑移位;在右移过程中零由左边移入,而在左移过程中零由右边移入。3). 关系运算符:比较一个表达式的两个项。用关系运算符形成的表达式产生一个布尔真(True)或伪(False)值。运算符说明=(两连写等号)等于!=不等于<小于<=小于等于>大于>=大于等于所有的关系运算符都是无符号的。在使用关系运算符时,一般总是使用括号“( )”,以保证表达式的运算按希望的顺序进行。4). 赋值运算符:赋值运算符一般在EQUATIONS语句段的方程式中使用,而不在表达式中出现。组合型赋值(立即赋值)无延时地进行赋值,只要方程式算完就赋值

8、;寄存器型赋值(时钟赋值)则在与该输出相关的时钟信号的下一个时钟脉冲有效边沿到来时进行赋值。运算符说明=组合型赋值:=寄存器型赋值注意:在电子系统设计第2章的RTL语言中,用“ß”表示时钟赋值,而用“:=”表示立即赋值或定义命名变量。4. 表达式和方程式表达式是标识符和运算符的结合,除赋值运算符不能在表达式中使用之外,其它运算符包括逻辑运算符、算术运算符、关系运算符都可以用于表达式中。逻辑方程式Equations也称为布尔方程,表示输入信号和输出信号之间的逻辑关系。所有运算符(包括赋值运算符在内)都可以用于方程式中。5. 块(block)块是包括在花括号“ ”中的一段文本。块常用于方

9、程式、状态图、宏和命令中。一个块中的文本可以是一行或多行。例如:不用块的表达式:WHEN (Mode=S_Data) THEN Out_data:=S_in;ELSE WHEN (Mode=T_Data) THEN Out_data:=T_in;WHEN (Mode=S_Data) THEN S_Valid:=1;ELSE WHEN (Mode=T_Data) THEN T_Valid:=1;用块的表达式,以上语句可被简化:WHEN (Mode=S_Data) THEN Out_data:=S_in; S_Valid:=1;ELSE WHEN (Mode=T_Data) THEN Out_Da

10、ta:=T_in; T_Valid:=1;6. 集合(set)集合是信号及常量的汇集。集合简化了ABEL-HDL语言的逻辑描述和测试向量,它允许把一组信号用一个名字来引用。由逗号或范围运算符“.”分开的常量及信号清单,再用方括号将其括起来,即可表示一个集合。例如:MultiOut及Select集合定义为:MultiOut=B0,B1,B2,B3,B4,B5,B6,B7; Select=S2,S1,S0;以上集合也可用“.”来表示:MultiOut=B0.B7; Select=S2.S0;用“.”来定界范围的标识符必须有兼容(形式相似)的名字,它们必须以相同的字母开头,以数字结束,例如上面的B0

11、、B1、B2等。注意:集合所支持的运算符有限,它支持大多数逻辑运算符、关系运算符和赋值运算符,但仅支持算术运算符中的加“+”、减“-”、取负(取补码)“-”。7. 字符和数ABEL-HDL语言的字符由ASCII字符组成,可以使用大小写字母及101键盘使用的大部分字符:az小写字母AZ大写字母09数字<space>空格符<tab>制表符! # $ ? + & * ( ) - _ = + ; : ' " | , < > . / %总共有96个。字符可用于标识符、字符串和注释。8. 注释注释是使源文件易懂的另一种方法。用户可用如下方式进行

12、注释:1). 用一双引号“"”开始,以另一双引号或行结束来结束。2). 用一双斜杠“/”开始,以一行结束来结束。语言处理程序对双引号中的内容不进行处理。注释不可嵌于关键字中。注意:在单引号“'”内的信息是所需的字符串,它是语句的一部分,而不是注释。如:IC4 device 'P16V8R'语句中的'P16V8R'是语句的一部分,不是注释。9. 基本逻辑器件的描述基本逻辑器件有门和触发器(在ABEL-HDL语言中,触发器统称为寄存器)。门电路可直接用逻辑表达式表示,如:Out1=A&B&!C;语句表示一个与门。寄存器需要时钟方程、

13、输出方程、复位方程等一组方程才能完整地描述。为了简洁,通常对一个寄存器只定义一个标识符,而对于寄存器的时钟信号、复位信号等则在该寄存器标识符后面加点后缀来表示。下表给出了ABEL-HDL常用的点后缀:点后缀含义点后缀含义.AP异步寄存器置位.AR异步寄存器复位.CLK边沿触发器的时钟输入.DD触发器的激励输入.FB寄存器反馈.JJK触发器的J激励输入.KJK触发器的K激励输入.LD寄存器并行置数输入.OE输出使能.LE寄存器的锁存使能输入.SP同步寄存器置位.SR同步寄存器复位在编程时,以上点后缀的方程要根据具体电路选用,没必要全用。PRESETCLEARDQQ.OE.SP (.AP).D.C

14、LK.SR (.AR).Q.PINISTYPE 'reg_d'例如,下图给出了一种典型的D触发器的各个点后缀描述:与上图相对应的D触发器的一段ABEL-HDL基本功能描述语句如下:d_d,cp,clear,preset PIN;/d_d为D输入端信号,cp为触发时钟信号,clear为清零信号,preset为预置信号q_d PIN ISTYPE 'reg_d'/q_d为Q输出端信号,亦可写为ISTYPE 'reg'(参见2.2小节中的ISTYPE属性定义语句)EQUATIONSq_d.CLK=cp; /以该D触发器的Q输出端信号q_d作为触发器标识

15、符q_d.AR=clear; /指定clear为异步清零信号q_d.AP=preset; /指定preset为异步预置信号q_d:=d_d; /指定该D触发器的逻辑功能,在cp上升沿时输入端d_d置到输出端q_d10. 变量及变量代换变量的结构能用于宏、模块及命令中。ABEL-HDL语言支持两种变量,定义如下:n 哑变量(相当于“哑元”、“形参”):宏、模块或指示字中可被真实变量替代的标识符。 n 真实变量(相当于“实参”):用于宏、模块或指示字中的变量,真实变量可以替代哑变量。一个真实变量可以是标识符、数字、字符串、运算符、集合或ABEL-HDL语言的其它元素。可在宏说明中规定哑变量,也可在

16、宏、模块或命令的体中规定哑变量(参见2.2小节ABEL-HDL源文件基本结构中的MACRO宏定义语句)。例如:OR_EM MACRO (a,b,c) ?a#?b#?c;定义了一个名为OR_EM的宏,它是三个变量的逻辑或,这些变量在宏定义中用哑变量a、b、c来表示;在大括号内的宏定义体中,哑变量前带上问号“?”构成一个整体,表示需要用真实变量来代替这个整体。例如:D=OR_EM(X,Y,Z&L);就表示用真实变量X、Y和Z&L来调用OR_EM宏,结果为D=X#Y#Z&L。真实变量必须严格按其本身形式替代,其中的空格也不能忽略。哑变量与真实变量的关系总结如下:1). 哑变量

17、的位置是保留给真实变量的。2). 前面带问号的哑变量需用真实变量替代。3). 变量替代在检查源文件前完成。4). 真实变量中空格有意义。2.2 ABEL-HDL源文件基本结构一个完整的ABEL-HDL源文件由若干文件段组成,一般分为标题段、定义段、逻辑描述段、测试向量段和结束段。1. 标题段1). 模块语句:MODULE格式为:MODULE 模块名此语句是必须的。它是一个模块的头,最后还必须有一个End语句与之相配合。模块名是用户自定义的模块名称标识符。模块语句相当于原理图文件中的元件符号。2). 标题语句:TITLE格式为:TITLE ''此语句为可选,主要说明模块的内容、用

18、途、作者、设计时间和地点等,单引号中为说明的内容。在编译时不处理此语句。2. 定义段该段规定设计中使用的信号名称及其属性,定义常量、宏等,说明底层模块和电原理图的设计逻辑,以及说明一个器件。每个模块至少有一个定义段,定义段一般在标题段后面。1). DEVICE器件定义语句格式为:器件标识符 DEVICE '实际器件'其中,实际器件为所代表的实际器件的工业型号,用字符串表示。在ispLEVERispDesignEXPERTISP Synario软件中所使用的实际器件是在器件列表框中选择的,故器件定义语句可以省略。2). PIN管脚定义语句格式为:!信号名,!信号名 PIN 管脚号

19、,管脚号 ISTYPE '属性,属性'各信号是能与模块外部有输入输出关系的信号。信号缺省为高电平有效,前面加“!”表示该信号为低电平有效,各信号名与具体ISP器件管脚号对应。如果不希望预先设定(锁定)信号的管脚位置,则关键字PIN后面的管脚号可以不写。例如:CLK,I3,I2,I1,I0 PIN 11,28,27,26,25;3). NODE节点定义语句格式为:!节点名,!节点名 NODE 节点号,节点号 ISTYPE '属性,属性'节点定义语句与管脚定义语句结构类似。节点定义用于说明模块中代表实际器件内部节点的标识符,或称为“伪管脚”,它表示外部管脚上不能得到

20、的内部(局部)信号,但它对形成中间信号很有用。4). ISTYPE属性定义语句属性定义语句用于对其管脚及节点具有可编程特性的器件进行管脚及节点的属性定义,一般跟PIN或NODE语句连用。下表是在ISTYPE标题下的属性(用单引号括起):pos正极性neg负极性com(缺省值)组合型(该信号与时钟无关)reg寄存器型(该信号与时钟同步)reg_dD型寄存器reg_jkJK型寄存器reg_srRS型寄存器reg_tT型寄存器reg_l锁存器(电平触发)5). 常量定义语句格式为:常量名,常量名=表达式,表达式;常量是模块中保持常数值的标识符,它用“=”符号来规定。常量定义语句必须在定义段中或者在C

21、ONST命令之后。6). MACRO宏定义语句格式为:宏名 MACRO (哑变量,哑变量) block;宏说明语句定义一个宏。使用宏可将函数名包含于源文件中,而无需重复这段代码。例如:NAND3 MACRO (A,B,C) !(?A&?B&?C);就定义了一个宏。如果引用该宏:D=NAND3(Clock,Hello,Busy);则得到的实际结果相当于:D=!(Clock&Hello&Busy);3. 逻辑描述段完成了以上的定义后,用户可用一个或多个以下的表达方式来描述逻辑功能。1). EQUATIONS方程语句格式为:EQUATIONS方程语句表示一组布尔方程的

22、开始。方程用布尔函数来描述逻辑功能。如下面的方程语句描述了2线-4线译码电路:EQUATIONSY0=!A2&!A1;Y1=!A2&A1;Y2=A2&!A1;Y3=A2&A1;2). TRUTH_TABLE真值表语句格式为:TRUTH_TABLE (输入向量标识符->输出向量标识符)输入向量->输出向量;或者:TRUTH_TABLE (输入向量标识符:>输出向量标识符)输入向量:>输出向量;或者:TRUTH_TABLE (输入向量标识符:>寄存器向量标识符->输出向量标识符)输入向量:>寄存器向量->输出向量;其中,“->”表示输入与输出(左与右的信号向量)关系为组合型(与时钟无关,即左变化则右立即变化);“:>”表示输入与输出(左与右的信号向量)关系为寄存器型(同步时序型,即左变化而右不立即变化,要等到下一时钟有效边沿时右才发生相应变化)。如下面的真值表语句描述了一个组合逻辑电路4线-2线编码器:TRUTH_TABLE (I3,I2,I1,I0->O1,O0)0,0,0,1->0,0;0,0,1,0->0,1;0,1,0,0->1,0;1,0,0,0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论