9.2 AHDL硬件描述语言
AHDL是一种模块化的高级语言。它集成于MAX+PLUS II的软件开发系统中,特别适合于描述复杂的组合逻辑、组运算、状态机和真值表。AHDL文件作为一种文本文件,既可以用MAX+PLUSII提供的文本编辑器,也可以用其他文本编辑器来建立文本设计文件 (.tdf)。但是MAX+PLUSII文本编辑器更适合进行文本编辑、编译和调试等工作,尤其是在信息处理器中对错误有自动定位的功能,使调试十分方便。MAX+PLUSII编译器还可以产生AHDL文件设计的报告文件(.tdx)和文本设计输出文件(.tdo)。
在AHDL文件中包含很多有特的段和语句,并且包含许多用以在行为语句中对逻辑进行描述的元素。可以使用AHDL建立完整层次的工程设计项目,或者在一个层次的设计中混合使用AHDL文件和其他类型的设计文件。
9.2.1 AHDL的基本元素
AHDL具有计算机编程语言的一般特性,其语言元素是编程语句的基本单元。准确理解和掌握AHDL元素的含义和用法是十分重要的。
1.AHDL的数值
数值被用来在逻辑表达式、真值表、状态机和等式中指定常量值。AHDL支持十进制、二进制、八进制和十六进制数的所有组合。采用不同前缀B(二进制)、Q或O(八进制)、X或H (十六进制数)来区分,接着用双引号把数值包括起来。
例如:以下是正确的写法:
56 B"011010” B"0110X1X10” Q”4671223” H"123AECF”
以下规则也适用于AHDL的数值。
①MAX+PLUSII编译器总是把逻辑表达式中的数值翻译为二进制数。
②在表达式中的一个单一节点不能用数值赋值,必须用常量VCC和GND(关键字)来赋值。VCC表示信号的高电平和逻辑“1”;GND表示信号的低电平和逻辑“0”。
③字符常量可由Constant(常量)语句定义。
2.符号名
符号名由一串字母数字符号组成,与字母的大小写无关,长度不得超过32个字符,字母不分大小写。符号名又分为带引号的和不带引号的符号名,带引号的是把符号名括引在单引号内。因此定义符号名时应按以下规定。
●不带引号的符号名由字母a~z、A~Z、0—9、斜线(/)、下划线(_)等符号组成,但是不能是关键字、保留标识符;还有不能只由数字(0一9)符号组成。
●带引号的符号名由字母a—z、A—Z、0~9、斜线(/)、半字线(-)、下划线(_)等符号组成。关键字可被括在单引号内作为符号名使用,但是单引号内不能是保留标识符。
例如,合法的不带引号和带引号的符号名:
a /a2 ‘-bar’ ‘table’ ‘1221’
不合法的不带引号和带引号的符号名:
node -foo 55 ‘bowling4$’ ‘has a space’
在AHDL中有三种类型的符号名。
①用户定义的标识符。它们在AHDL文件中被用来对如下部分进行命名:内部和外部节点、常量、状态机变量、状态名和状态位、实例。
②子设计名:是用户为下层设计文件定义的名称,其长度不得超过8个字符。该名称必须与相应的TDF文件同名。
③端口名:是为逻辑函数的输入和输出指定的端口名称。
3.关键字和保留标识符
在AHDL语句的开始、结尾及中间过程都需要使用关键字。保留标识符是AHDL为一些专门用途所保留的名称,用户不能随意使用这些标识符。应避免在设计文件中使用保留标识符和关键字作为节点名、常量名和端口名。
使用保留标识符和关键字的区别是:关键字被括在单引号中可当作符号名使用,而保留标识符则不能;但它们都可以在注释中任意使用。它们与字母的大小写无关,Altera公司建议用大写字母来写关键字,以便阅读文件。
(1)关键字(Reserved Keywords)
AND | FUNCTION | OUTPUT |
ASSERT | GENERATE | PARAMETERS |
BEGIN | GND | REPORT |
BIDIR | HELP_ID | RETURNS |
BITS | IF | SEGMENTS |
BURIED | INCLUDE | SEVERITY |
CASE | INPUT | STATES |
CLIQUE | IS | SUBDESIGN |
CONNECTED_PINS | LOG2 | TABLE |
CONSTANT | MACHINE | THEN |
DEFAULTS | MOD | TITLE |
DEFINE | NAND | TO |
DESIGN | NODE | TRI_STATE_NODE |
DEVICE | NOR | VARIABLE |
DIV | NOT | VCC |
ELSE | OF | WHEN |
ELSIF | OPTIONS | WITH |
END | OR | XNOR |
FOR | OTHERS | XOR |
(2)保留标识符(Reserved Identifiers)
CARRY | CASCADE | CEIL | DFFE | DFF | EXP | FLOOR | GLOBAL |
JKFFE | JKFF | LATCH | LCELL | MCELL | MEMORY | OPENDRN | SOFT |
SRFF | SRFFE | TFF | TFFE | TRI | USED | WIRE | X |
这些保留标识符包括了所有缓冲器、触发器和锁存器等基本元件的名称以及预定义的逻 辑级X。
4.节点和组
字符串常量既可以用双引号 节点可以看成是单个信号。组是多个节点的集合,被当作一个整体来操作。在逻辑表达
式和等式中,常把相同类型的符号名和端口名称当作组来说明和应用。一个组最多可包括
256个成员(或位)。在设计文件的逻辑段或变量段中,组可由许多节点组成,并且在表达式和等式中一个节点和常量VCC,GND可以被复制成一个组。
(1)单值域组
它是由一个符号名或端口名后跟一个括在方括号中的整数域组成的。整数域可由数字或 算术表达式表示,在它们中间用二个断续点(..)隔开,并且括在方括号内。例如:a[4..1]表示a4,a3,a2,a1这四个节点。域一般按降序排列,如果要按升序或混合排列,则必须用Options语句说明。
如果一个组在前面已被定义了,则可利用[]来表示该组,例如,a[4..1](已被定义过)也可用a[]表示。为了表示一个组里的单个符号名或某个节点,可以把单个数字放在方括号内,如a[3];也可在符号名后紧接一个数字,如a3与a[3]的意义相同。还有其他表示组的方式,例如:a[2*2..2-1],a[B"100"..B"001"]都表示一个具有a4,a3,a2,a1的组。
(2)双值域组
它是由一个符号名或端口名后跟括在方括号中的两个整数域组成的,如b[2..1][5..3]表示具有成员b[2][5],b[2][4],b[2][3],b[l][5],b[l][4],b[l][3]的组。也可用如下方法来表示一个组的成员:b2_5,b2_4,b2_3,bl_5,bl_4,bl_3。
(3)序列组
一个序列组是由一组符号名、端口名或数字组成的。它们之间用逗号分隔,并且被括在圆括号中。例如(a,b,c)和(a,b,c[5..1])都是合法的组名。这种序列组对于指定端口名是非常有用的。例如一个DFF(D触发器)类型的变量reg的输入端口可以被写作reg.(d,clk,clrm,prm)。序列组中的逗点还可用于保持一个未分配组成员的位置,如(a4,,a1)。
a[4..1]与(a4,a3,a2,a1)表示的意义完全相同。a[3..1]和(a4,a2,a1)表示a[4..1]的部分成员。
(4)给组赋值
在逻辑表达式中,一个组可以被表达式、另一个组、单个节点、常量VCC与GND、数值1与0等赋值。每种情况下组的赋值是不同的。
①如果一个组被设置等于VCC或GND,那么该组内的每个成员(位)都被赋值为VCC或GND。例如,a[2..0]=VCC,则表示a2,al,a0都为VCC。
②如果一个组被设置等于一个节点,那么该组内的所有成员都与这节点相连。如 a[2..0]=b。
③如果一个组被设置等于1(十进制数),例如a[2..0]=1,在编译时,数值l将被扩展为 B"001'’,所以只有a0被连到VCC上,其他成员为GND。
④如果一个组被设置等于另一个组,例如aL2..0]=b[5..3],那么表示a2=b5,a1=b4, a0=b3。如果a[3..0]=b[4..3],那么表示a3=b4,a2=b3,a1=b4,a0=b3。
5.符 号
在AHDL中有各种预先定义的符号。包括一般符号、运算符号(算术和逻辑)和比较符号。它们在AHDL文件中有各种不同的含义和作用。
(1)AHDL的一般符号
AHDL的一般符号及功能如表9.2.1所列。
表9.2.1 AHDL符号
符 号 | 功 能 |
_(下划线) -(半字线) /(正向斜线) | 组成符号名的字符 |
--(双半字线) | 注释的开始,直到这一行的结尾 |
%(百分号) | 在两个%之间为注释 |
()(左和右圆括号) | ①用于序列组的名称; ②用于参数语句、子设计段和函数原型语句中; ③在真值表语句中选择性括引输入和输出; ④括引状态机中的状态位和状态; ⑤在表达式中最优先级的运算; ⑥选择性地括引判断语句中的条件 |
[](左和右方括号) | 括引单值或双值域数组的数域 |
‘’(单引号) | 带引号的符号名 |
“”(双引号) | 括引标题语句、参数语句和判断语句中的字符串、函数语句中的文件名以及括引非十进制数字 |
..(省略号) | 用在一个区域的MSB和LSB之间 |
;(分号) | 用在AHDL语句和段的末尾 |
,(逗号) | 分隔序列组和表中的各成员 |
,(冒号) | 在说明语句中分隔符号名和类型名 |
=(等号) | ①为输入端口、语句中的参数设置默认值; ②在逻辑等式中赋值; ③为状态机状态赋值; ④在选择语句中为选择指定的设置; ⑤把一个信号同内部直接引用中的一个端口相连起来采用给端口联合起名 |
(2)算术运算符和比较运算符
表9.2.2列出AHDL的算术运算符和比较运算符及其使用说明。它们可分为在逻辑表达式中的运算符和在算术表达式中的运算符。其形式相似,含义不完全相同。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论