在系统可编程技术
第 5讲
ABEL语言常用语句、真值
表设计法
一,ABEL语言常用语句
格式,
MODULE 模块名
模块名由用户自定义
例,MODULE 4comp
1,Module(模块语句)
说明,
此语句是必须的,它是一个模块的头,而
且必须有一个 END语句与之相配合,模块名相
当于元件符号。
ABEL语言常用语句
2,TITLE 标题语句,
格式,TITLE ‘字符串’
例,Title ‘4位二进制数值比较器’
说明,
此语句是可选的,主要说明模块的内容、用途、
作者、设计时间和地点,单引号内为说明内容。
ABEL语言常用语句
3,Device 器件定义语句,
器件名 DEVICE 实际器件;
例,U09 DEVICE ‘P16V8S’
器件名即设计模块中所用的标识符,实际器件为实际
器件的工业型号,用字符串表示。
说明,
在 ispLever 软件中,实际器件是在菜单下选择的,
故器件定义语句可以省去。
ABEL语言常用语句
4,Pin 管脚定义语句,
[!]信号名 … PIN[ 管脚号 …]ISTYPE[,属性 ];
例,!Clock,Reset,S1 PIN 12,15,3;
说明,
管脚定义语句说明信号标识符与真实器件管脚之
间的关系,并给出可编程管脚的属性。
, !”表示低电平有效。
5,NODE 节点定义语句,
[!]节点名 … NODE[ 节点号 …]ISTYPE[,属性 ];
例,A NODE 12=‘pos,com’;
表示节点 12名为 A,为正极性且信号为组合型。
说明,
节点定义语句和管脚定义语句类似,代表器件内部
的中间信号,称为“伪管脚”。
ABEL语言常用语句
6、常量定义语句,
常量名 [,常量名 ]…= 表达式 [,表达式 ]…;
例,
X=.X.;
C=.C.;
Y = ‘cd' ; " Y = ^h4364 ;
ADDR = [1,0,15]; " ADDR is a set with 3 elements
A,B,C = 5,[1,0],6; " 3 constants declared here
A = B & C; " operations on identifiers are valid
A = [!B,C]; " set and identifiers on right
说明,简化程序设计。
ABEL语言常用语句
7,宏定义语句及扩展,
宏名 MACRO([哑变量,[哑变量 ]…]){ 块 };
? 宏定义中的块可以用逻辑表达式描述,也可以用真值
表来描述。
例:用宏定义一个三输入与非门。
① 用逻辑表达式描述,
NAND3 MACRO(A,B,C){!(?A&?B&?C)};
调用,D=NAND3(CLK,GA,GB);
则,D=!(Clk&GA&GB);
ABEL语言常用语句
8,ISTYPE 属性定义语句,
信号名 [,信号名 ]… ISTYPE ‘ 属性 [,属性 ]…’;
?属性定义语句用于对管脚或节点具有可编程特性的器件
进行属性定义,使具体的器件形成正确的逻辑并使设计优
化。
? ISTYPE属性定义语句必须放在 DEVICE器件定义语句、
PIN管脚定义语句,NODE节点定义语句之后。
例,
OUT0,OUT1,OUT2 PIN 3,4,5 ISTYPE ‘COM’ ;
OUT3,OUT4 PIN 6,7 ISTYPE ‘REG’ ;
ABEL语言常用语句
管脚、节点常用属性,
关键字 说 明
Pos 正极性
Neg 负极性
Com 组合逻辑输出
Reg 寄存器输出
Buffer 寄存器缓冲输出
Invert 寄存器反相缓冲输出
Latch 锁存输入
Reg_d D触发器输出
Reg_rs RS触发器输出
Reg_jk JK触发器输出
Reg_T T触发器输出
9,逻辑方程语句,
关键字 EQUATIONS 表示一组逻辑方程的开始。
例,
EQUATIONS
A=d0&d1#d2;
!F=(B==C);
F= !(B==C);
WHEN (select==0) THEN y=a;
Q.CLK=CP;
Output.D = In1 # In2;
Q:=Q+1;
ABEL语言常用语句
[ WHEN 条件 THEN ] [ ! ] 标识符 = 表达式 ; [ ELSE 方程 ];
[ WHEN 条件 THEN ] [ ! ] 标识符,= 表达式 ; [ ELSE 方程 ];
例,
WHEN A==B THEN Y=D0; ELSE Y=D1;
WHEN (Mode == 0) THEN
{ Out:= D0; S,= 1; }
ELSE WHEN (Mode == 1) THEN
{ Out:=D1; T,= 1; }
10,WHEN-THEN-ELSE语句,
ABEL语言常用语句
关键字 ENABLE 用于三态输出缓冲器的使
能。 ENABLE 后的标识符必须是三态型的输出,
表达式的值仅用于使能三态缓冲器,而不赋值
给信号。
例,
ENABLE Y=C#D;
Y=A&B;
如果( C#D)为真,则输出 Y 被使能(但
Y 的输出信号不是 C#D,是 A&B)。
ABEL语言常用语句
11,真值表语句,
TRUTH_TABLE ( 输入向量 -> 输出向量 )
TRUTH_TABLE ( 输入向量,> 输出向量 )
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 ;
ABEL语言常用语句
TRUTH_TABLE ( [ en,A,B ] - > Y )
[ 0,.X.,.X.] - > 0;
[ 1,0,0 ] - > 0 ;
[ 1,0,1 ] - > 1 ;
[ 1,1,0 ] - > 1 ;
[ 1,1,1 ] - > 0 ;
en A B Y
0 X X 0
1 0 0 0
1 0 1 1
1 1 0 1
1 1 1 0



例,
truth_table ( [a,b,c],> q)
0,> 1;
1,> 0;
2,> 1;
3,> 0;
4,> 0;
5,> 0;
6,> 0;
7,> 1;
例,TRUTH_TABLE ([ A,B ],> [ Q1,Q0 ] -> Y )
[ 0,0 ],> [ 0,1 ] -> 1;
[ 0,1 ],> [ 1,0 ] -> 0;
[ 1,0 ],> [ 1,1 ] -> 1;
[ 1,1 ],> [ 0,0 ] -> 1;
等同于,
TRUTH_TABLE ([ A,B ],> [ Q1,Q0 ] -> Y )
0,> 1 -> 1;
1,> 2 -> 0;
2,> 3 -> 1;
3,> 0 -> 1;
STATE_DIAGRAM 状态寄存器
STATE 状态表达式, [ 方程 ];
[ 方程 ];

转移语句 ;
? 转移语句可以为 IF, CASE,GOTO 语句。
? 状态表达式值为当前状态;方程则给出当前状态输出;转
移语句指出下一状态,时钟信号到来,状态才发生变化。
10,状态图语句,
ABEL语言常用语句
module statema
clock,reset pin;
P1,P0 pin istype 'reg,buffer';
statema = [P1,P0];
stateA =[0,0]; stateB =[1,0];
stateC =[1,1]; stateD = [0,1];
equations
[P1,P0].clk = clock;
[P1,P0].ar = reset;
state_diagram statema
state stateA:goto stateB;
state stateB:goto stateC;
state stateC:goto stateD;
state stateD:goto stateA;
end
12,IF THEN ELSE 语句,
IF 表达式 THEN 状态表达式 1 [ ELSE 状态表达式 2 ];
ABEL语言常用语句
STATE_DIAGRAM[Q3,Q1,Q0]
STATE S0,IF UP==0 THEN S1 ELSE S5;
STATE S1,IF UP==0 THEN S2 ELSE S0;
STATE S2,IF UP==0 THEN S1 ELSE S1;
仅用于状态机设计
13,IF THEN …… ELSE IF 语句,
ABEL语言常用语句
STATE_DIAGRAM[Q3,Q1,Q0]
STATE S0,IF CONTROL==0 THEN S0
ELSE IF CONTROL==1 THEN S1
ELSE IF CONTROL==2 THEN S5
ELSE S0
STATE S1,……
……
仅用于状态机设计
14,CASE 选择语句,
CASE [ 表达式, 状态表达式 ]
[ 表达式, 状态表达式 ]
……
END CASE ;
例,
STATE_DIAGRAM[Q2,Q1,Q0]
STATE S0,CASE A==0, S1 ;
A==1, S2 ;
A==2, S3 ;
A==3 ; S0 ;
ENDCASE ;
ABEL语言常用语句








15,GOTO 语句,
GOTO 状态表达式 ;
ABEL语言常用语句
STATE_DIAGRAM[Q3,Q1,Q0]
STATE S0,GOTO S1
STATE S1,GOTO S2
STATE S2,GOTO S3
仅用于状态机设计
16,WITH…… ENDWITH 语句,
转移语句 状态表达式 WITH
方程 ;
[ 方程 ] ;
……
ENDWITH ;
ABEL语言常用语句








STATE_DIAGRAM[Q3,Q1,Q0]
STATE S0,IF UP==0 THEN S1 ELSE S5
WITH C_UP=1;
ENDWITH;
STATE S1,IF UP==0 THEN S2 ELSE S0 ;





MODULE JTD
CP PIN;
R,G,Y PIN ISTYPE’COM’;
S1,S0 NODE ISTYPE’REG’;
S=[S1,S0];
S0=^B00; S1=^B01; S2=^B10;
EQUATIONS
S.CLK=CP;
STATE_DIAGRAM S
STATE S0, R=1 ; G=0 ;Y=0 GOTO S1 ;
STATE S1, R=0 ; G=1 ;Y=0 GOTO S2 ;
STATE S2, R=0 ; G=0 ;Y=1 GOTO S0 ;
END
R Y G
17,TEST_VECTORS 测试向量语句,
TEST_VECTORS ( 输入向量 -> 输出向量 )
[ 输入信号值 -> 输出信号值 ; ]
……
例,
TEST_VECTORS ( [ A,B ] - > [ Y0,Y1 ] )
0 - >,X,;
1 - >,X,;
[1,0] - >,X,;
[1,1] - >,X,;
ABEL语言常用语句
二、真值表设计法
1、纯组合逻辑电路型
输入信号的值便可决定输出信号的逻辑值
格式,
MODULE 模块名
(输入引脚定义)
(输出引脚定义)
( ?? )
TRUTH_TABLE ( 输入向量 -> 输出向量 )
( ?? )
END
-> 表示输入输出关系为组合型。
例:设计一个 BCD七段译码器
MODULE BCD_DECODER
D3,D2,D1,D0 PIN;
A,B,C,D,E,F,G PIN ISTYPE’COM’;
DATA=[D3,D2,D1,D0];
LED=[A,B,C,D,E,F,G];
TRUTH_TABLE(DATA->LED)
0->^B1111110; 1->^B0110000;
2->^B1101101; 3->^B1111001;
4->^B0110011; 5->^B1011011;
6->^B1011111; 7->^B1110000;
8->^B1111111; 9->^B1111011;
END
真值表设计法
2、寄存器逻辑电路型
输出信号与时钟信号有关
格式,
MODULE 模块名
(输入引脚定义)
(输出引脚定义)
( ?? )
TRUTH_TABLE ( 输入向量,> 输出向量 )
( ?? )
END
,> 表示输出信号必须寄存后由时钟同步输出 。
真值表设计法
例:设计一个同步六进制计数器
MODULE COUNTER6
CP PIN;
Q2,Q1,Q0 PIN ISTYPE’REG’;
EQUATIONS
Q2.CLK=CP;
Q1.CLK=CP;
Q0.CLK=CP;
TRUTH_TABLE([Q2,Q1,Q0]:>[Q2,Q1,Q0])
0:>1;1:>2; //[0,0,0]:[0,0,1];
2:>3;3:>4;
4:>5;5:>0;
END
真值表设计法
3、时序逻辑电路型
既有组合型又有寄存器型的输出信号
格式,
MODULE 模块名
(输入引脚定义)
(输出引脚定义)
( ?? )
TRUTH_TABLE ( 输入向量,> 输出向量 ->输出向量 )
( ?? )
END
,> 表示寄存器的次态
- >表示现态时的组合输出
真值表设计法
例:设计一个带进位输出的同步八进制计数器
MODULE COUNTER8
CP PIN;
Q2,Q1,Q0 PIN ISTYPE’REG’;
Z PIN ISTYPE’COM’;
Q=[Q2,Q1,Q0];
EQUATIONS
Q.CLK=CP;
TRUTH_TABLE(Q:>Q->Z])
0:>1->0; 1:>2->0;
2:>3->0; 3:>4->0;
4:>5->0; 5:>6->0;
6:>7->0; 7:>0->1;
END






小 结
? ABEL语言常用语句是其编程基础,应熟练掌
握其语法;
? 属性定义语句用来指定器件内部结构,寄存
器必须指明其属性;
? 真值表是一种简便设计方法,重点注意组合
电路和寄存器电路的描述区别;
作业,5.9 5.10 5.16 5.18