ABEL-HDL语言简明教程

ABEL-HDL语言简明教程

ABEL-HDL语言简明教程

一. ABEL-HDL简介

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

二. ABEL-HDL语法

ABEL-HDL源文件中的每一行必须符合以下语法规则: ? 一行最多为150个字符长。

? 每一行可用按回车键来结束;除开始、结束、标题等语句外,多以分号“;”结束。 ? 不同的关键字、标识符和数之间最少要用一个空格隔开。

? 在同一关键字、数、运算符或标识符中不可嵌入空格和句点。

? 关键字及特殊常量可用大写、小写或大小写字母混合方式键入,关键字及特殊常量与大小写无关。

? 一般标识符也可以是大写、小写或大小写字母混用,但必须注意:一般标识符与大小写有关,这点在编写程序时要特别小心,极易出错。

2.1 ABEL-HDL基本语法 1. 标识符

标识符(用户提供的名字和标号)用于标识下列各项的名称: ? 器件 (P16V8R)

? 器件引脚及节点 (LD,Q3,Q2,Q1,Q0,N_1) ? 功能块 ({?A&?B&?C}) ? 集合 ([Q3..Q0])

? 输入或输出信号 (I3,I2,I1,I0,Q3,Q2,Q1,Q0) ? 常量 (H,L,.X.,.C.) ? 宏 (NAND3) ? 哑变量 (A,B,C)

不管标识符描述的是什么,其规则和限制是相同的: 1). 标识符最长为31个字符。

2). 标识符必须以一个字母或下划线开头。

3). 除标识符的第一个字符外,其余字符均可以是大小写字母、数字,波浪线(~)和下划

线(_)。

4). 在标识符中不得出现空格,可使用下划线或大写字母来区分一个标识符中的各个字词。 5). 除保留的标识符(即关键字和特殊常量)外,标识符与字母大小写有关,即大小写字母

的含义不同。

6). 除了合法的点后缀(或称为点扩展名,参见“基本逻辑器件的描述”)外,在标识符中

不能用句号。 注意以下几点:

? 标识符应该做到“见名知意”,如And_In1,And_In2,表示二个输入与门的二个输入信

1

ABEL-HDL语言简明教程

号。

? 标识符应简单明了,易于区分,避免使用大量相似的标识符。

? 一个标识符如用几个单词组成,则各单词之间宜用下划线或大小写字符来区分,以便阅

读。如利用标识符THIS_IS_A_COUNTER比利用标识符THISISACOUNTER就更容易阅读和理解。

? 使用标识符,需要特别注意:关键字在编程时不得用来给器件、引脚、节点、数组常量、

集合、宏或信号命名。 2. 特殊常量

在赋值语句、真值表和测试向量中,用户可使用常量;也可将一常量赋给标识符,并在整个模块中用此标识符代表该常量。常量的值可以是数值,也可以是非数值的特殊常量(或称为专用常量,是一种特殊的标识符)。常用的特殊常量有: H 逻辑高电平 L 逻辑低电平

.C. 时钟输入(低电平-高电平-低电平转换) .K. 时钟输入(高电平-低电平-高电平转换) .U. 时钟上升沿(低电平-高电平转换) .D. 时钟下降沿(高电平-低电平转换) .X. 任意值 .Z. 高阻态 3. 运算符

ABEL-HDL语言的运算符分为四种基本类型:逻辑运算符、算术运算符、关系运算符及赋值运算符,下面对它们进行说明: 1). 逻辑运算符:

逻辑代数中的各种逻辑运算如与、或、非、异或等,在ABEL-HDL语句中均有专门的符号,如下所示: 运算符 定义 举例 逻辑代数中的含义 ! 非 !A ā & 与 A&B A·B # 或 A#B A+B $ 异或 A$B A?B !$ 同或 A!$B A⊙B 2). 算术运算符: 算术运算符定义了表达式中各项之间的算术关系。移位操作运算符也属于此类中。

运算符 举例 说明 - -A 求负数(补码) - A-B 减 + A+B 加 * A*B 乘 / A/B 无符号整除 % A%B 取模:无符号整除的余数 << A<> A>>B A右移B位 注意:“/”是无符号的取整除法,即其商为正整数。用求模运算符“%”可得到除的余数。移位操作执行无符号的逻辑移位;在右移过程中零由左边移入,而在左移过程中零由右边

2

ABEL-HDL语言简明教程

移入。

3). 关系运算符:

比较一个表达式的两个项。用关系运算符形成的表达式产生一个布尔真(True)或伪(False)值。 运算符 说明 ==(两连写等号) 等于 != 不等于 < 小于 <= 小于等于 > 大于 >= 大于等于 所有的关系运算符都是无符号的。在使用关系运算符时,一般总是使用括号“( )”,以保证表达式的运算按希望的顺序进行。 4). 赋值运算符:

赋值运算符一般在EQUATIONS语句段的方程式中使用,而不在表达式中出现。 组合型赋值(立即赋值)无延时地进行赋值,只要方程式算完就赋值;

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

块是包括在花括号“{ }”中的一段文本。块常用于方程式、状态图、宏和命令中。一个块中的文本可以是一行或多行。

例如:不用块的表达式:

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_Data:=T_in; T_Valid:=1;} 6. 集合(set)

集合是信号及常量的汇集。集合简化了ABEL-HDL语言的逻辑描述和测试向量,它允许把一组信号用一个名字来引用。由逗号或范围运算符“..”分开的常量及信号清单,再用方括号将其括起来,即可表示一个集合。

例如:MultiOut及Select集合定义为:

3

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4