在系统可编程技术
第 3讲
ABEL语音源文件基本格式
规则
ABEL语音是美国 DATA I/O公司开发的一种逻辑设计
软件,它是最早流行的硬件描述语言,简单易学,有多种
EDA开发软件支持。它能支持多种型号的 PLD器件(主要
是 Lattice公司的芯片)。
ABEL- HDL硬件描述语言
硬件描述语音与原理图逻辑设计相比有如下特点,
?以文本形式表示逻辑电路的结构和行为,可直接将逻辑方
程、真值表或状态图转换为硬件描述语言的形式
?设计精确简练,便于阅读和分析
?易于设计修改、调用、共享和更新
?与原理图混合设计,构成“自顶而下”的层次化设计方法
ABLE- HDL源文件基本格式




模块头
设计说明
设计描述
设计仿真
结束模块
4









ABEL



Module comp4
Title ‘4位二进制数值比较器’
Declaration
A3,A2,A1,A0 pin;
B3,B2,B1,B0 pin;
A_NE_B,A_EQ_B,A_GT_B,A_LT_B pin istype’com’;
No,Yes = 0,1;
A=[A3,A2,A!,A0]; B=[B3,B2,B1,B0];
Equations
A_EQ_B = (A==B);
A_GT_B = !(A==B);
A_GT_B = A>B;
A_LT_B = A<B;
Test_Vectors([A,B]->[A_EQ_B,A_GT_B,A_LT_B,A_NE_B])
[0,0]->[Yes,No,No,No];
[1,0]->[No,Yes,No,Yes];
[3,9]->[No,No,Yes,Yes];
END
模块头部分
设计说明部分
设计描述部分
设计仿真部

结束部分
一、模块头部分
格式,
MODULE 模块名
模块名由用户自定义
例,MODULE 4comp
表明 ABEL硬件描述的开始
说明,
此语句是必须的,它是一个模块的头,而
且必须有一个 END语句与之相配合,模块名相
当于元件符号。
二、设计说明部分
1,TITLE 标题语句,
TITLE ?字符串’
例,Title ?4位二进制数值比较器’
提供设计的说明信息,
设计题目、设计者单位和姓名、设计时间、输入信
号、输出信号、内部信号、引脚属性、常量定义
说明,
此语句是可选的,主要说明模块的内容、用途、
作者、设计时间和地点,单引号内为说明内容。
2,Device 器件定义语句,
器件名 DEVICE 实际器件;
例,U09 DEVICE ?P16V8S?
器件名即设计模块中所用的标识符,实际器件为实际
器件的工业型号,用字符串表示。
说明,
在 ispLever 软件中,实际器件是在菜单下选择的,
故器件定义语句可以省去。
二、设计说明部分
3,Pin 管脚定义语句,
[!]信号名 … PIN[ 管脚号 …]ISTYPE[,属性 ];
例,!Clock,Reset,S1 PIN 12,15,3;
说明,
管脚定义语句说明信号标识符与真实器件管脚之
间的关系,并给出可编程管脚的属性。
, !”表示低电平有效。
二、设计说明部分
4,NODE 节点定义语句:,
[!]节点名 … NODE[ 节点号 …]ISTYPE[,属性 ];
例,A NODE 12=?pos,com?;
表示节点 12名为 A,为正极性且信号为组合型。
说明,
节点定义语句和管脚定义语句类似,代表器件内部
的中间信号,称为“伪管脚”。
二、设计说明部分
5、常量定义语句,
常量名 [,常量名 ]…= 表达式 [,表达式 ]…;
例,
X=.X.;
C=.C.;
A=[!B,D];
说明,
简化程序设计。
二、设计说明部分
6,宏定义语句及扩展,
宏名 MACRO([哑变量,[哑变量 ]…]){ 块 };
? 宏定义中的块可以用逻辑表达式描述,也可以用真值
表来描述。
例:用宏定义一个三输入与非门。
① 用逻辑表达式描述,
NAND3 MACRO(A,B,C){!(?A&?B&?C)};
调用,D=NAND3(Clock,Hello,Busy);
则,D=!(Clock&Hello&Busy);
二、设计说明部分
例:用宏定义一个三输入与非门。
② 用真值表描述,
NAND3 MACRO(A,B,C)
{TRUTH_TABLE( [?A,?B,?C ] ->?Y )
[ 0,.X.,.X.] -> 1;
[,X.,0,.X.] -> 1;
[,X.,.X.,0 ] -> 1;
[ 1,1,1 ] -> 0;};
调用,D=NAND3(Clock,Hello,Busy);
则,TRUTH_TABLE( [ Clock,Hello,Busy ] -> D )
[ 0,.X.,.X,] -> 1;
[,X.,0,.X,] -> 1;
[,X.,.X.,0 ] -> 1;
[ 1,1,1 ] -> 0;};
7,ISTYPE 属性定义语句,
信号名 [,信号名 ]… ISTYPE ? 属性 [,属性 ]…?;
?属性定义语句用于对管脚或节点具有可编程特性的器件
进行属性定义,使具体的器件形成正确的逻辑并使设计优
化。
? ISTYPE属性定义语句必须放在 DEVICE器件定义语句、
PIN管脚定义语句,NODE节点定义语句之后。
例,
OUT0,OUT1,OUT2 PIN 3,4,5 ISTYPE ?COM? ;
OUT3,OUT4 PIN 6,7 ISTYPE ?REG? ;
二、设计说明部分
管脚、节点常用属性,
关键字 说 明
Pos 正极性
Neg 负极性
Com 组合逻辑输出
Reg 寄存器输出
Buffer 寄存器缓冲输出
Invert 寄存器反相缓冲输出
Latch 锁存输入
Reg_d D触发器输出
Reg_rs RS触发器输出
Reg_jk JK触发器输出
Reg_T T触发器输出
ABEL语言描述逻辑功能的方法有三
种,
☆ 逻辑方程
☆ 真值表
☆ 状态机
三、设计描述部分
1,逻辑方程,
关键字 EQUATIONS 表示一组逻辑方程的开始。
例,
EQUATIONS
A=B&C#D;
[ W,Y ]=3;
!F=(B==C);
WHEN (select==0) THEN y=a;
2,真值表,
关键字 TRUTH_TABLE 表示一组逻辑方程的开始。
例,
TRUTH_TABLE ( [ en,A,B ] - > Y )
[ 0,.X.,.X.] - >,Z.;
[ 1,0,0 ] - > 0 ;
[ 1,0,1 ] - > 1 ;
[ 1,1,0 ] - > 1 ;
[ 1,1,1 ] - > 0 ;
3,状态机,
关键字 STATE_DIAGRAM 表示一组逻辑方程的开始。
例,
STATE_DIAGRAM[ A,B ]
STATE 3, Y=3; GOTO 1;
STATE 1, Y=1; GOTO 2;
STATE 2, Y=2; GOTO 3;
四、设计仿真部分
测试向量表,
TEST_VECTORS ( 输入向量 - > 输出向量 )
[ 输入信号值 - > 输出信号值 ; ]
[ 输入信号值 - > 输出信号值 ; ]
??
例,
TEST_VECTORS ( [ A,B ] - > [ C,D ] )
0 - > 1 ;
1 - > 2 ;
2 - > 3 ;
3 - > 0 ;
五、设计结束部分
END
表示设计模块结束
ABLE硬件描述语音规则
一、基本语法
1、关键字、标识符及数字之间必须用一个或一个以上的空
格分开,以下情况除外,
( 1)一系列标识符可以用逗号分开。
例 A,B,C pin;
( 2)表达式中的数字与标识符之间可以用运算符分开。
例 Y=!A&B&!C;
( 3)园括号可起分隔符的作用
例 Test _Vectors(cp->Q)
2、关键字、标识符、运算符及数字中间不能嵌入空格,
错误 正确
例 MODU LE MODULE
例 Y 1=!A&B&!C; Y1=!A&B&!C;
例 > = >=
例 12 34 1234
空格可以出现在字符串、注释行、程序块及实变量中
例:‘ This is ……?
例,// this is
3、关键字不区分大小写,
例 MODULE Module module
4、标识符区分大小写,
例 A_EQ_B
a_eq_b
A_eq_b
二、合法的 ASCII码
所有大写、小写字母及一般键盘使用的大部分字
符均为合法字符
标识符代表器件、器件管脚、节点、集合、输入
信号、输出信号、宏、常量及变量等。用户自定义
?标识符不能超过 31个字符
?标识符必须以字母或下划线开头
?除首字符外,标识符可由大小写字母、数字、波
浪号~和下划线组成
?标识符中不能有空格
?标识符中不能有句号,.”
?标识符不能和关键字(即保留字)重名
例,A B1 This_is_input
1A $B hel.lo This is input
见名知意
三、标识符,
又叫保留标识符,ABEL语言本身使用,已有明确的特
殊含义。不能给器件、器件管脚、节点、集合、输入信号、
输出信号、宏、常量及变量等命名为标识符。
常用的关键字如下,
Truth_table Declaration
s
Device End
Equations Goto Istype Macro
Module Node Pin State
State_diagra
m
Test_vecto
rs
Title With…
Endwith
Case…
Endcase
When…
then… else
If… then

else
四、关键字,
五、注释
用于说明源文件中某些需要强调或说明的
地方,可以改善 ABEL源文件的可读性。
?方法一:以双引号开始,以行的末尾或另一双引号结束
?方法二:以两个反斜杠( //)开始,以行的末尾结束
例,
Module example
A,B pin; //输入信号引脚定义
AND_OUT pin;,输出信号引脚定义
六、块
块是括在, {}”内的 ASCII码文本段。用
于方程语句、状态图语句和指示字等语句中,
可以改善 ABEL源文件的易读性。
例,
WHEN(up_down==0)THEN
{ q1:=!q1;
q2:=(q1&!q2)#(!q1&q2);
}
ELSE
{ q1:=!q1;
q2:=(!q1&!q2)#(q1&q2);
}
MOULE count10
Q3,Q2,Q1,Q0PIN ISTYPE?com?;
clk,cd PIN;
count=[Q3..Q0];
EQUATIONS
count.clk=CLK;
count.ar=cd;
WHEN(count==9)THEN co unt:=0;
ELSE count:=(count.fb+1)
END
请指出下面设计错误
MODULE
REG
clk
count
Q0 PIN;
小 结
? ABEL语言编写时必须严格遵循其语法规则和
格式;
? 标识符是区分大小写的;
? 关键字不能作为自定义标识符;
? 语句结束应有, ;, 号。
作业,P177 5.1