1
第三章 硬件编程语言 ABEL-HDL
ABEL-HDL是 Synario软件主要的设计输入手段
第一节 ABEL语言元素
一、标识符和关键字
1,标识符标识符是一组字母数字串,用来代表器件、器件管脚、节点、集合、输入信号、输出信号、宏、常量、及变量等。
所有标识符必须遵守以下规则:
( 1)最大为 31个字符;
( 2)以字母或下划线开头;
2
( 3)不能使用空格,单词间的分隔用下划线
( 4) 大小写字母视为不同的字例 P71 图 5。 3 ( a) Ld,CIk ( b) out2
例 _X56 AND_IN1 而 7S &4不合法
3
例 P71 图 5。 3 ( a) Ld,CIk ( b)
out2
例 _X56 AND_IN1 而 7S
&4不合法
4
2、关键字
关键字是特殊的标识符,是软件的保留标识符,具有特定意义,不能用来命名器件、引脚、节点、数组、宏定义和命名信号。
常用的关键字如表 5。 2所示 P72
例如,PIN 引脚,TITLE 标题
关键字不分大小写。
5
二、字符串和注释
1、字符串
字符串是用单引号括起开的一系列 ASCII码字符,
用于标题语句、模块语句及管脚、节点和属性的定义中,之间可使用空格。
例如,‘ use ABEL?
注,字符串中使用单引号需在前面加反斜线。
例如,?it\?s easy to use ABEL?
2、注释用于源文件的提示,不影响文件的含义,以双引号开始,以行的末尾或另一个双引号结束。
6
三、操作数
ABEL支持基本数值运算。操作数可以用二进制、八进制、十进制、十六进制数表示,并加前缀,具体如下:
^b 二进制 ^O 八进制
^d 十进制 ^h 十六进制注 1) 字母大小写均可;
2)无数制符号时视为隐含数制十进制;
3)数值最高精度是 32位;
4)操作数可以用字母表示,其实际值是字母转换为二进制 ASCII码,然后连接在一起构成数。
例,‘ a?= ^h61 =97?abc?= ^h616263=6382203。
7
四、逻辑常量的表示 (九种常量)
H 逻辑高电平 L 逻辑低电平
,C,时钟输入(低高低),K.时钟输入(高低高)
,U,时钟上升沿(低高),D.时钟下降沿(高低)
,F,浮动输入或输出信号,X,任意态
,Z,高阻态
注:编程时可用字母定义上述逻辑常量。
例如,X=,X,Z=,Z,
8
五、运算符
1、逻辑运算
运算符 运算符 优先级
非运算 —— ! 1
与运算 —— & 2
或运算 —— # 3
异或运算 —— $ 4
同或运算 ——! $ 4
例如:逻辑代数,A[BC( A⊙ B) +āD]
ABEL语言,A&(B&!C&(A!$B)#!A&D)
注意,ABEL语言仅使用()。
9
2、算术运算
运算符 意义 例
- 取二进制补码 -A
- 算术减法 A-B
+ 算术加法 A+B
* 算术乘法 A*B
/ 算术除法 A/B
% 取模 A%B
<< A左移B位 A<<B
>> A左移B位 A>>B
10
3、关系运算
运算符 意义 例
== 等于 A==B
!= 不等于 A!=B
< 小于 A<B
<= 小于等于 A<=B
> 大于 A>B
>= 大于等于 A>=B
11
4,赋值运算
用 =表示组合逻辑的即刻赋值,输入变化便有输出变化响应;
用 =:表示时序逻辑的时钟赋值,输入变化时输出要等到时钟作用时刻到才有响应;
例如:
A F F=A&B
B
A
CP L L=,A
思考,P71 图 5。 3( b) out3和 outflag的逻辑描述?
D
Q
12
六、集合
1、集合的表示
集合是一个整体进行运算的一组信号或常量,对集合的任何运算实际上是对每个元素进行的。集合将一组信号用一个标识符来表示,
从而简化了 ABEL的逻辑设计何测试向量的描述。
集合用方括号,元素间用逗号或排列运算符,,.” 隔开。
例如,Address=[A15,A14,A13,A12,A11,A10,A9,A8,
A7,A6,A5,A4,A3,A2,A1]
可以表示为,Address=[A15..A1]
例如,X=.X.
Address=[A15,A14,A13,A12,X,X,X,X]
可以表示为,Address=[A15..A12,X,X,X,X]
13
例如,Address=[A15,A14,A13,A12,
A11,A10,A9,A8,A7,A6,A5,A4,
A3,A2,A1]
可以表示为,Address=[A15..A1]
例如,X=.X.
Address=[A15,A14,A13,A12,X,X,
X,X]
可以表示为,Address=[A15..A12,X,X,
X,X]
14
2、集合的运算
集合的运算除移位外其它均适合,但参与运算的集合元素的个数必须相等。
例如,Address=[A15..A10,X,X,X,X,X,X,X,
X,X,X]
Equations
! IO=( Address>=^hE000)&(Address <=
^hE700 )
表明,Address对应的地址范围在 ^hE000和
^hE700 之间,表达式为真,输出 IO为低有效,
15
第二节,ABEL语言结构
本节介绍 ABEL设计描述的完整结构。语言元素必须按一定的语言结构才可以构成布尔代数、真值标、状态机。此外设计前必须给出所用器件的说明及进行初始化定义,写出器件仿真用的测试向量。
一、基本结构
一个 ABEL源文件由一个或多个相互独立的模块组成。
每个模块由 模块声明、定义段、逻辑描述、测试向量段 组成。
每个模块必须由头有尾。
几个不同的源文件也可以组合成为一个源文件,描述一个完整的系统。
16
ABEL源文件的格式(结构化单元)
Module name ; 模块开始
Flags ; 标志语句
Title ; 标题语句
Declarations ; 定义段
Constant Declarations ; 常量定义
Macro Declarations ; 宏定义
Device Declarations ; 器件定义
Pin and Node Assignments ; 管脚及节点定义
Attribute Declarations ; 属性定义; 逻辑描述段
17
Boolean Equations ; 布尔方程
Truth Tables ; 真值表
State Diagrams ; 状态图; 测试向量段
Test Vectors ; 测试向量头
Module end ; 模块结束注:模块声明必须有,其它部分可选,
各部分要有关键字标识 。
18
二、模块语句和标题语句
1,Module 模块语句
每个模块以 Module语句开始,以 End语句结束。
格式,Module 模块名
…,
END [模块名 ][;]
说明,(1)一个源文件中的模块不能重名 ;
(2)每个模块包含完整的逻辑设计所需的定义段、
方程、真值表、状态图及仿真向量;
19
2,TITLE 标题语句
格式,Title?标题
说明:
( 1)用于赋给模块一个标题,作为编译产生的编程器下载文件及设计编制文件的题头。
( 2)关键字 TITLE后的字符串是所定义的标题;
( 3) TITLE语句属任选语句,编译不处理;
( 4)若标题语句中字符串包含 *,则符合
JEDEC标准,编程器下载文件不再使用该标题作为题头。
20
3,DECLARATIONS定义段
模块中的定义段说明设计所使用的器件、定义器件管脚及节点的标识符,也可以再定义段中定义常量、属性及宏。每个模块必须有自己的定义段。
定义语句:
( 1) Device器件定义语句
格式,器件名 [,器件名 ]… DEVICE 实际器件
说明:器件名 —是模块中使用器件的标识符,必须是合法的文件名;实际器件为所代表的实际器件的工业型号,用字符串表示。该语句把模块中使用的器件名与设计中实际采用的可编程器件联系再一起。
21
( 2) PIN管脚定义语句格式 1,[! ]信号 名 [,[! ]信号名 … ] PIN[引脚号 [引脚号 … ]];
格式 2,[! ]信号 名 [,[! ]信号名 … ] PIN[引脚号 [引脚号 … ]]istype ‘属性 ’ ;
说明,
1)该语句说明引脚标识符与真实引脚间的关系,格式 2给出可编程器件引脚的属性。语句结尾用分号。
2)属性:
Pos 正极性 neg负极性 reg 寄存器信号
com组合信号 latch锁存输入脚
feed-pin 管脚反馈 feed-reg 寄存器反馈
feed-or 或门反馈 reg-d D型寄存器
22
例 P84
3)当模块中使用多个器件时,应选可选项 IN说明本管脚对应的器件。
4),!,表示管脚为低有效,编译时自动取反。
例:! Clock,Reset,S1 Pin In U2,12,
15,3;
23
(3)NODE节点定义语句
格式,[! ]节点名 [,[! ]节点名 ]… NODE 节点号
[=‘ 属性 [,属性 ]… ’ ]… ;
说明:
1)该定义在模块中代表实际器件内部节点的标识符。
2)节点为,伪管脚,,表示外部管脚上不能得到的内部信号,但对形成中间信号有用。
3)节点定义语句必须在器件定义语句后,结尾用分号。
例,A,B,C Node 21,22,23
B Node 22=‘ pos,com’,节点 22为正极性且信号为组合型。
24
(4)常量定义语句
格式,常量名 [,常量名 ]… =表达式 [表达式 ]… ;
说明:
( 1)用于定义一个模块中所有的常量,用带定值的标识符来表示。
( 2)常量的取值用等号右边的表达式赋予,
结尾用分号。
例,X=.X.;
A,B,C=5,[1,0],6;
25
4,逻辑描述
ABEL描述逻辑功能的方法有三种:
布尔代数 /真值标 /状态机
( 1) EQUATIONS 方程语句
格式,EQUATIONS
布尔代数式
例如:书 P75 程序 5。 1
注,1)每行布超 150个字符;
2)一个完整的方程以;结尾。
26
( 2) Truth_Table真值表
格式 1 (组合逻辑)
Truth_Table(输入向量 ->输出向量)
格式 2 (时序逻辑)
Truth_Table(输入向量,>输出向量)
格式 2 (时序逻辑 +组合)
Truth_Table(输入向量,>寄存器输出 ->输出向量)
例,P77 程序 5.2 程序 5.3
27
(3)STATE_ DIAGRAM状态机语句
状态机是使用状态图进行逻辑设计,以此描述时序电路的状态迁移规律。
由如下语句来定义,
IF THEN ELSE、
CASE、
GOTO,
WITH END WITH
28
STATE_ DIAGRAM语法结构
STATE_ DIAGRAM[IN器件名 ][状态寄存器 ][->状态输出 ]
STATE 状态表达式:方程 ;
[方程 ];
……,;
转移语句 ;
注:
a)状态表达式是描述当前状态的表达式;
b) 冒号后的方程是该状态下的即刻输出方程;
c)“转移语句,用来说明状态的迁移,是状态机描述的关键。
可以为,IF THEN ELSE或 GOTO语句,后面可跟 WITH END
WITH;
C)在下一个时钟执行转移语句,使状态转移到下一个状态。
29
d) 每一状态必须包含有转移语句,如果某个状态的所有转移条件不满足,则状态机下一个状态为不定态。
1)无条件迁移:
/Z1Z2 当前状态为 A,时钟作用后的状态为 B。 即刻输出 Z1=1,Z2=0
/10 STATE A,GOTO B WITH Z1=1;
Z2=0;
ENDWITH
A
B
30
语法,GOTO 状态表达式;
说明:
a)状态表达式是表示状态机的下一状态的表达式,后面可跟 WITH_END WITH转移态方程,
b)GOTO语句使状态机无条件转移到由状态表达式定义的状态,
表达方法有多种形式,
例:
GOTO 0;,进入状态 0.
GOTO X+Y;,进入状态 X+Y
31
例,
STATE_ DIAGRAM[a,b]“状态值由标识符为 a,b的寄存器定 义
STATE 0,Y=0;
GOTO 1;
STATE 1,Y=1;
GOTO 2;
STATE 1+1,Y=2;,状态 2用表达式定义
GOTO 3;
STATE 3,Y=3;
GOTO 0;
注:这些状态不需要指定特别的顺序。
32
2)简单分支
if X then B else C;
或 if X==1 then B else C;
X/Z
1/0 0/1
A
B C
33
语法,IF 表达式 THEN 状态表达式 [ ELSE状态表达式 ];
说明:
a) 该语法描述状态机从一个状态转移到另一个状态;
b) 状态运行时,先对 IF关键字后的表达式赋值,判断其结果是否为真。若为真,则状态进入,THEN”关键字后的状态表达式定义的下一个状态;若为假,则状态机进入,ELSE”关键字后表示的下一个状态。
34
c) 在给定的状态中,可使用任意数目的 IF语句,而
ELSE是可选项
例,IF A==B THEN 2;
,如果 A等于 B,则进入状态 2。
IF X-Y THEN J ELSE K
,如果 X-Y不等于 0,则进入状态 J,否则进入状态 K。
IF A THEN b*c
,如果 A为真(非零),则进入状态 b*c。
35
扩展形式:
语法,IF 表达式 THEN 状态表达式
ELSE IF 表达式 THEN 状态表达式
ELSE IF 表达式 THEN 状态表达式
ELSE 状态表达式;
一个 IF THEN ELSE 语句的 ELSE后面可与另一个 IF THEN ELSE语句联用,可联用的语句数目无限制,但最后一个语句必须用分号结尾,
36
例,
IF a THEN 1
ELSE
IF b THEN 2
ELSE
IF c THEN 3
ELSE 0;
37
3)复杂分支
00/0 case!X1&!X2,A;
X1X2/Z !X1&X2,B;
X1&!X2,C;
11/1 X1&X2,D;
01/0 endcase
10/0
A
B C D
38
语法,
CASE [表达式,状态表达式 ]
[表达式,状态表达式 ]
…,
END CASE;
说明,
a)状态表达式定义了下一状态,后面可跟 WITH END
WITH 转移态方程 ;
b)表达式必须满足互斥条件,即任何时刻,只有一个表达式条件为真,如果在一个 CASE语句中有两个或多个表达式为真,则结果方程无法定义。
39
c) 如果某一个表达式为真,则该表达式后的状态表达式定义的为下一状态。若无取值为真,则无法定义下一状态 。
因此,CASE语句中的表达式应包括所有可能的条件。
d) 如果表达式输出的是数据值而非逻辑值,则数据 0表示逻辑假,其它非 0值表示逻辑真。
例:
CASE a==0,1;
a==1,2;
a==2,3;
a==3,0;
END CASE;
40
4) WITH_END WITH 语句
语法,转移语句 状态表达式 WITH 方程
[方程 ]
…,
END WITH;
说明,WITH_END WITH语句在与
IF_THEN 或 CASE语句联用时,以此指定本次转移相应的输出方程,
41
例,
STATE 5,IF a==1 then 1;
WITH x:=1; y:=0;
END WITH;
ELSE 2
WITH x:=0; y:=1;
ENDWITH;
42
例题解释,
若 a等于 1,则状态 5转移到状态 1,同时输出
x:=1,y,=0( 时钟赋值);否则( a
等于 0)状态 5转移到状态 2,同时输出 x:
=0,y,=1。
43
5,TEST VECTORS 测试向量表
语法,TEST_VECTORS[IN 器件名 ][注释 ]
(输入向量 ->输出向量 )
[输入信号值 ->输出信号值 ;]
说明,
a)测试向量表用具体的输入向量表定义了一个逻辑器件应具备的逻辑功能,
b)测试向量用于对器件的内部模式进行仿真,并对编程后的器件进行功能测试,
44
c)各个测试向量都包含一个表头格式及向量本身,表头格式用来定义测试向量表的开始,并说明向量的排列,测试向量定义了输入输出信号的逻辑关系,
d) 测试向量表的组合形式可以只写出一部分,表中所有信号值必须用定义过的常量或数值常量及特殊常量等,表中每一行必须以分号结尾,
例如,TEST_VECTORS([A,B]->[C,D])
[0,0]->[1,1];
[0,1]->[1,0];
[1,0]->[0,1];
[1,1]->[0,0];
45
上面的例子与下面的向量表等价,因为数值集合可用各种数制的数值常量定义,
TEST_VECTORS([A,B]->[C,D])
0->3;
1->2;
2->1;
3->0;
46
6、补充特殊语句
1)EQUATIONS描述
可以采用条件分支语句:
When… then;
When… then… ;else When… then…
例,When(Select==0) then y=a;
47
2)逻辑方程的加点后缀
时序逻辑描述中,一个寄存器除了输出方程外,还有时钟方程、复位方程、预置方程等,须用以组方程才能描述。
表示方法:加点后缀
例,Q1.q (触发器输出 )
Q1.clk (边沿触发器的时钟输入 )
见书 P74 表 5.5
48
请同学们根据所学 ABEL语法知识,
阅读下列程序段,并说明程序功能
49
例 1
MODULE XX
Titles’
Y0,Y1,Y2,Y3 PIN;
S0,S1 PIN;
EN PIN;
Data PIN;

S=[S1,S0];
OUT=[Y3,Y2,Y1,Y0];
EQUATIONS
!Y0=(S==0)&!EN&Data;
!Y1=(S==1)&!EN&Data;
!Y2=(S==2)&!EN&Data;
!Y3=(S==3)&!EN&Data;
Test_Vectors([EN,S,Data]->out)
[0,0,1]->[1,1,1,0];
[0,1,1]->[1,1,0,1];
[0,2,1]->[1,0,1,1];
[0,3,1]->[0,1,1,1];
[0,0,0]->[1,1,1,1];
[0,0,0]->[1,1,1,0];
[1,.X.,.X.]->[1,1,1,1];
END
50
MODULE XX1
,
S1,S2 PIN ;
A3..A0 PIN;
B3..B0 PIN;
C3..C0 PIN;
D3..D0 PIN;
Y3..Y0 PIN
ISTYOE’COM’;
,
A=[A3..A0];
B=[B3..B0];
C=[C3..C0];
D=[D3..D0];
Y=[Y3..Y0];
S=[S1,S0];
,
例 2
51
EQUATIONS
WHEN(S==0)THEN Y=A;
WHEN(S==1)THEN Y=B;
WHEN(S==2)THEN Y=C;
WHEN(S==3)THEN Y=D;

TEST_VECTORS([S,A,B,C,D]->Y)
[0,1,2,4,8]->1;
[1,1,2,4,8]->2;
[2,1,2,4,8]->4;
[3,1,2,4,8]->8;
END
52
例 3
P90 程序 5.9
附录
53
本章结束