AHDL语法

  • 格式:doc
  • 大小:78.00 KB
  • 文档页数:15

引言——咱们数电PLD实验关于AHDL的入门教程,看看蛮有劲~

第一章 概 述

本章将对Altera硬件描述语言(Altera Hardware Description

Language)作简要地描述,还要讲述如何处理AHDL文件,介绍AHDL语言的基本概念和基本元素,以使学生能够更好地使用AHDL设计电路。

一、 AHDL简要介绍

AHDL语言是Altera公司设计的配合Altera MAX+PLUSⅡ设计软件使用的一种硬件描述语言。它是一种模块化的高级语言,完全集成于MAX+PLUSⅡ系统中,它将用户的设计以各种设计文件(文本设计文件TDF、图形设计文件GDF等等)形式保存,并可对其进行编译(COMPILE)、调试、检错、模拟(SIMULATE)、下载(DOWNLOAD)等操作。这些操作都在MAX+PLUSⅡ开发系统中完成。AHDL语言还特别适合于描述复杂的组合逻辑、组(group)运算、状态机、真值表和时序逻辑。

一个TDF文件中必须包含一个子设计段和一个逻辑段。

l 子设计段(Subdesign Section ): 说明TDF文件的输入、输出和双向端口。

l 逻辑段(Logic Section):定义文件中各种逻辑运算。

AHDL是一种并行语言。在TDF文件逻辑段中所定义的所有动作都是同时进行的,而不是串行的。给同一个AHDL结点或变量赋值的多个等式在逻辑上是相联的(如果该结点或变量是高电平有效,那么这些等式之间就是“或”的关系,如果是低电平有效,就是“与”的关系)。 二、 AHDL语言的基本元素

AHDL包含许多基本元素,用以在语句中对各种逻辑进行描述。本章讲述如何用AHDL语言进行设计,介绍这些基本元素和基本语句的使用。

(一) 基本概念

以下介绍AHDL语言的基本概念,这些概念无论是在时序逻辑电路设计还是在组合逻辑电路设计中都是组成AHDL 语言(TDF文件)的最基本元素。

1.数值

数值被用来在布尔表达式和等式中指定常量值。AHDL支持十进制数、二进制数、八进制数和十六进制数的所有组合。数值在AHDL中是以以下形式表示的:

数制 值

十进制

二进制 B“<0,1,X的排列>”X表示无关项

八进制 O“”

十六进制 H“”

下面是AHDL有效数字的例子:

B“0110X1X10”,O “4761223”,H“123AECF”,787878。

注意:

l MAX+PLUSⅡ编译器总把数值编译成一组二进制数。

l 数值不能赋值给结点(NODE),而必须用Vcc和GND。 编程举例:

下例中的decodel.tdf文件表示一个地址译码器,当地址为十六进制数370时产生一个高电平有效的地址使能信号。

SUBDESIGN decode1

(

address[15..0] : INPUT;

chip_enable : OUTPUT;

)

BEGIN

chip_enable = (address[15..0]== H“0370”);

END;

在这个例子中,15和0这两个十进制数字用以指定地址总线上的位。十六进制数子H“0370”表示被译码的地址。

图1-1表示一个与decode1.tdf具有相同功能的图形设计文件(.gdf)。

图1-1 decode1.gdf

2. 常量

在AHDL文件中,常量代表数值的描述性名称。这个名称可以在文件中到处使用,它比数值更直观。例如,常量UPPER_LIMIT就比一个数值103更加直观。在AHDL中,常量由Constant语句定义。下面的decode2.tdf文件与decode1.tdf具有相同的功能,但它用常量IO_ADDRESS代替了数值H“370”。 CONSTANT IO_ADDRESS= H“0370”;

SUBDESIGN decode2

(

a[15..0] : INPUT ;

ce : OUTPUT;

)

BEGIN

ce = (a[15..0]== IO_ADDRESS);

END;

注意:常量对于在文件中多次重复使用同一个数值的这种情况是十分有用的,如果要修

改这个值,只要修改CONSTANT语句就可以了。

3.模板

在MAX+PLUSⅡ中建立一个AHDL设计的最快办法就是使用模板。模板是为方便TDF文件输入而准备的一定格式的未完成的语句,用户只要在相应位置添上所需内容就可以完成语句。利用MAX+PLUSⅡ文本编辑器所提供的Template命令(在Template菜单中),学生可以向自己的TDF中插入一个AHDL模板,这样可以加快设计文件的输入速度。选择Template命令后,在屏幕上就会显示如下图1-2所示的对话框。

图1-2 AHDL模板对话框 在AHDL的所有模板中有一个完整AHDL文件结构的模板,叫做“Overall structure”,在该模板中,所有AHDL结构按照它们应该在TDF文件中出现的顺序以注释形式分别列在不同行中。这些段和语句并不是以准确的语法规则写出,必须按自己的需要以符合AHDL语法规则的语句或段来替换这些注释行。

MAX+PLUSⅡ还提供了许多AHDL结构的模板。这些模板按字母顺序排列,可用这些模板替代“Overall structure”模板中的各注释行。下例给出了Defaults语句的模板。

DEFAULTS

__node_name = __constant_value;

END DEFAULTS;

一旦在文件中插入一个模板,就必须把模板中所有待定符用自己的标识符和表达式替代。每一个待定符都以两个下划线(__)开始,以便于识别,每个关键字都要大写。

AHDL语言概述(2)

2009-03-09 22:04

4.结点和组

结点是由变量段的结点说明语句定义的,它可被用来记载一个中间表达式的值。结点在AHDL中十分类似于变量在计算机高级语言(如C)中的作用。如果一个布尔表达式要被重复使用,结点定义就显得十分有用了。该布尔表达式可用一个结点名称替代,这更便于提高设计的可读性。下例的boole1.tdf文件与P.6页的boole2.tdf具有同样的逻辑,但它只有一个输出。

SUBDESIGN boole1

(

a0 ,a1, b : INPUT;

out : OUTPUT;

)

VARIABLE

a_equals_2 : NODE;

BEGIN

a_equals_2 =a1 & !a0;

out = a_equals_2 # b;

END;

在这个文件中定义了一个结点a_equals_2,并把表达式a1 & !a0的值赋给它。图1-3给出了与boole1.tdf具有同样逻辑功能的GDF文件。

注意:在多个表达式中使用同一个结点,可以节省可编程器件的资源。

组的定义:

一个组最多可包含256个成员(或者说“位”),它是许多结点的集合,并被当作一个整体来操作。

在布尔等式中,一个组可以被设置成等于一个布尔表达式的值、另一个组的值、一个单独的结点的值、Vcc、GND、1或0,在上述各种情况下,组的值是不同的。一个组被定义之后,[ ]可用来代表该组的所有单元。例如:a[4..1]可用a[ ]来代表。

下例中的group1.tdf给出了一个定义了两个组的简单的布尔等式。

SUBDESIGN group1

a[1..2] :INPUT;

d[1..2] :OUTPUT;

)

BEGIN

d[ ] =a[ ]+B“01”;

END;

在这个例子中,数字1(十进制)被加到组a[ ]上。如果a[ ]的初值是00,那么这个程序的结果就是d[ ]==1(数字)。

下面的例子给出了正确的组值

l 如果一个组被设置为等于另外一个组,那么这两个组的位数必须相同,第一组的各位分别与第二组相应的位相连。例d[2..0]

=q[8..6],即d2与q8相连,d1与q7相连,d0与q6相连。

l 当一个组被设置等于一个单独的结点时,这个组的所有位都与该结点相连。例d[2..0] = n, 即d2、d1和d0与n相连。

如果一个组被设置等于Vcc或GND,那么该组的所有位都被设置为该值。例d[2..0] = Vcc,即d2、d1和d0都连为Vcc。 l 如果一个组被设置等于1(十进制数), 那么该组只有最低有效位被连到Vcc上,而其它位都被连接到GND上。例d[2..0] = 1,即只有d0被连到Vcc上;数值“1”被扩展为B“001”。

AHDL语言概述(3)

2009-03-09 22:04

5.布尔表达式

布尔表达式由操作数及它们之间的逻辑运算符、算术运算符、比较符、括号组成。布尔表达式可以用在布尔等式中,还可以用在IF、CASE等语句中。

(1) 逻辑运算符

AHDL支持以下这些逻辑运算符:

运算符 实例 说明

!或 NOT !tob 或 NOT ACC 求反(求非)运算

&或AND bre&butt或bre AND

butt 与

!&或 NAND A[3..1] !& b[5..3] 与非

# 或 OR Trick # treat 或

!# 或 NOR C !# d 或非

$或 XOR Foo $ boo 异或 !$ 或 XNOR X2 !$ X4 同或

(2) 算术运算符

运算符 实例 说明

+ (一元) +1 正号

- (一元) -a[7..4] 负号

+ Count[7..0] +

Delta[7..0] 加

- Right[] - left[] 减

注意:

l AHDL仅支持以上算术运算,其它运算(乘或除)必须调用器件才能实现。

l 运算符只能用在都为结点组或数值的两个操作数之间。

l 如果两个操作数都是结点组,那么这两组的长度必须相同。

l AHDL还支持“==”、“!=”、“〈”、“〈=”、“〉”、“〉= ”等算术比较符。

(3) 布尔表达式

布尔表达式是由一组被运算符或比较符(有时还有括号)分隔开的结点、数值、常量和另外的一些布尔表达式所组成,布尔等式则是把一个布尔表达式的值赋给一个结点或组。下面的boole2.tdf文件给出了两个简单的布尔表达式,它们各表示一个逻辑门。

SUBDESIGN boole2

(