在系统可编程技术
第 6讲
ABEL语言逻辑方程、状态
图设计法
一,ABEL语言逻辑方程设计法
逻辑方程是 ABEL源文件描述逻辑设计
的一种方法。它既可进行组合逻辑设计,
也可进行时序逻辑设计,但有时不如真值
表和状态图逻辑设计简单、易懂。
但任何一种逻辑描述方式,经 EDA软件
编译后,都会变成逻辑方程的形式。
1、逻辑方程设计类型 1
已知逻辑方程表达式进行逻辑设计
例:已知八进制同步计数器的状态转移方程如下,用 ABEL语言
设计之。
???? CP]Q[Q n11n1
??????? CP]QQQQ[Q n2n1n2n11n2
????????? CP]QQQQQQ[Q n3n2n1n3n2n11n3
n3n2n1 QQQZ ???
MODULE counter8fc
CP PIN;
Q3,Q2,Q1 PIN ISTYPE'REG';
Z PIN ISTYPE'COM';
EQUATIONS
Q3.CLK=CP;
Q2.CLK=CP;
Q1.CLK=CP;
Q1:=!Q1;
Q2:=(!Q1&!Q2)#(Q1&Q2);
Q3:=(!Q1&!Q2&!Q3)#(!(!Q1&!Q2)&Q3);
Z=Q1&Q2&Q3;
END
2、逻辑方程设计类型 2
已知逻辑电路进行逻辑设计
例:已知带异步清零的八进制异步计数器的电路图如下,用
ABEL语言设计之。
0 1 2
MODULE COUNTER8DL
CP PIN;
RESET PIN;
Q2,Q1,Q0 PIN ISTYPE'BUFFER REG';
EQUATIONS
Q2.CLK=Q1.Q;
Q1.CLK=Q0.Q;
Q0.CLK=CP;
Q2.ACLR=!RESET;
Q1.ACLR=!RESET;
Q0.ACLR=!RESET;
Q2.D=!Q2.D;
Q1.D=!Q1.Q;
Q0.D=!Q0.Q;
END
3、逻辑方程设计类型 3
已知逻辑功能文字描述进行逻辑设计
例:已知 4位二进制比较器的输入、输出关系如下,用 ABEL语
言设计之。
条件
输出
A_NE_B A_EQ_B A_GT_B A_LT_B
A3A2A1A0=B3B2B1B0
A3A2A1A0≠B3B2B1B0
A3A2A1A0>B3B2B1B0
A3A2A1A0<B3B2B1B0
0
1
1
1
1
0
0
0
0
X
1
0
0
X
0
1
MODULE COMP4FC
A3..A0 PIN;
B3..B0 PIN;
A_NE_B,A_EQ_B PIN istype’com’;
A_GT_B,A_LT_B PIN istype’com’;
A=[A3..A0];
B=[B3..B0];
EQUATIONS
A_EQ_B = A==B;
A_NE_B = !(A==B);
A_GT_B = A>B;
A_LT_B = A<B;
END
4、逻辑方程设计类型 4
已知逻辑真值表或功能表进行逻辑设计
例:用 ABEL语言设计一个 2线- 4线译码器,已知其真值表如下,
I1 I0 Y3 Y2 Y1 Y0
0 0
0 1
1 0
1 1
1 1 1 0
1 1 0 1
1 0 1 1
0 1 1 1
MODULE DECODER24FC
I1,I0 PIN;
Y3,Y2,Y1,Y0 PIN
ISTYPE'COM';
I=[I1,I0];
Y=[Y3,Y2,Y1,Y0];
EQUATIONS
WHEN(I==^B00)THEN Y=^B1110;
WHEN(I==^B01)THEN Y=^B1101;
WHEN(I==^B10)THEN Y=^B1011;
WHEN(I==^B11)THEN Y=^B0111;
END
5、逻辑方程设计类型 5
与其它设计法混合使用
例:用 ABEL语言设计一个六进制计数器,要求时钟下降沿触发
MODULE counter6d
CP PIN;
Q2,Q1,Q0 PIN ISTYPE'REG';
Q=[Q2,Q1,Q0];
EQUATIONS
Q.CLK=!CP;
TRUTH_TABLE(Q:>Q)
0:>1; 1:>2; 2:>3;
3:>4; 4:>5; 5:>0;
END
二,ABEL语言状态图设计法
状态图是 ABEL源文件描述逻辑设计的
一种方法,类似于数字电路状态状态转移
图的描述方式,它只适用于描述时序逻辑
设计,不能描述纯组合逻辑电路。
状态图的设计关键字是,STATE_DIAGRAM




状态机定义
状态定义
寄存器时钟方程
状态描述
1、状态图逻辑设计类型 1
利用 IF……THEN……ELSE 语句进行设计
格式,MODULE 模块名
(输入引脚定义)
(输出引脚定义) //状态机定义
( …… )
( 状态定义语句 )
EQUATIONS
(寄存器时钟语句 )
( …… )
STATE_DIAGRAM[状态寄存器 ]
STATE S0:IF 逻辑表达式 THEN 状态表达式 1
ELSE 状态表达式 2
( …… )
END
例:用 ABEL语言设计一个同步六进制可逆计数器。
MODULE counter6kn
CP,UP_DOWN PIN;
Q2..Q0 PIN ISTYPE'REG';
Q=[Q2..Q0];
S0=^B000; S1=^B001; S2=^B010; S3=^B011;
S4=^B100; S5=^B101; S6=^B110; S7=^B111;
EQUATIONS
Q.CLK=CP;
STATE_DIAGRAM Q
STATE S0:IF UP_DOWN==0 THEN S1 ELSE S5;
STATE S1:IF UP_DOWN==0 THEN S2 ELSE S0;
STATE S2:IF UP_DOWN==0 THEN S3 ELSE S1;
STATE S3:IF UP_DOWN==0 THEN S4 ELSE S2;
STATE S4:IF UP_DOWN==0 THEN S5 ELSE S3;
STATE S5:IF UP_DOWN==0 THEN S0 ELSE S4;
STATE S6:GOTO S0;
STATE S7:GOTO S0;
END
2、状态图逻辑设计类型 2
利用链接式 IF……THEN……ELSE IF…… 语句设计
格式, MODULE 模块名
(输入引脚定义)
(输出引脚定义) //状态机定义
(状态定义语句)
EQUATIONS
(寄存器时钟语句 )
( …… )
STATE_DIAGRAM[状态寄存器 ]
STATE S0:IF 逻辑表达式 THEN 状态表达式
ELSE IF逻辑表达式 THEN 状态表达式
( …… )
ELSE 状态表达式
( …… )
END
MODULE counter8kk
CP PIN;
C1,C0 PIN;
Q2..Q0 PIN ISTYPE'REG';
Q=[Q2..Q0]; CONTROL=[C1,C0];
EQUATIONS
Q.CLK=CP;
STATE_DIAGRAM Q
STATE 0,IF CONTROL==0 THEN 0
ELSE IF CONTROL==1 THEN 0
ELSE IF CONTROL==2 THEN 1
ELSE 7;
STATE 1,IF CONTROL==0 THEN 0
ELSE IF CONTROL==1 THEN 1
ELSE IF CONTROL==2 THEN 2
ELSE 0;
例:用 ABEL语言设计一个可控八进制计数器。要求,
( 1) CONTROL=0 时,计数器清零
( 2) CONTROL=0 时,计数器保持
( 3) CONTROL=0 时,计数器加 1
( 4) CONTROL=0 时,计数器减 1
STATE 2,IF CONTROL==0 THEN 0
ELSE IF CONTROL==1 THEN 2
ELSE IF CONTROL==2 THEN 3
ELSE 1;
STATE 3,IF CONTROL==0 THEN 0
ELSE IF CONTROL==1 THEN 3
ELSE IF CONTROL==2 THEN 4
ELSE 2;
STATE 4,IF CONTROL==0 THEN 0
ELSE IF CONTROL==1 THEN 4
ELSE IF CONTROL==2 THEN 5
ELSE 3;
STATE 5,IF CONTROL==0 THEN 0
ELSE IF CONTROL==1 THEN 5
ELSE IF CONTROL==2 THEN 6
ELSE 4;
STATE 6,IF CONTROL==0 THEN 0
ELSE IF CONTROL==1 THEN 6
ELSE IF CONTROL==2 THEN 7
ELSE 5;
STATE 7,IF CONTROL==0 THEN 0
ELSE IF CONTROL==1 THEN 7
ELSE IF CONTROL==2 THEN 0
ELSE 6;
END
3、状态图逻辑设计类型 3
利用 CASE……ENDCASE 语句设计
格式,MODULE 模块名
(输入引脚定义)
(输出引脚定义) //状态机定义
( …… )
(状态定义语句)
EQUATIONS
(寄存器时钟语句 )
( …… )
STATE_DIAGRAM[状态寄存器 ]
STATE S0,CASE 逻辑表达式,状态表达式
( …… )
ENDCASE;
( …… )
END
例:用 ABEL语言设计一个可控八进制计数器。要求,
( 1) CONTROL=0 时,计数器清零
( 2) CONTROL=0 时,计数器保持
( 3) CONTROL=0 时,计数器加 1
( 4) CONTROL=0 时,计数器减 1
MODULE counter8kk
CP PIN;
C1,C0 PIN;
Q2..Q0 PIN ISTYPE'REG';
Q=[Q2..Q0]; CONTROL=[C1,C0];
EQUATIONS
Q.CLK=CP;
STATE_DIAGRAM Q
STATE 0,CASE CONTROL==0, 0
CONTROL==1, 0
CONTROL==2, 1
CONTROL==3, 7;
ENDCASE;
STATE 1,……
CASE和 ENDCASE之间
的表达式必须满足互斥
条件,任何时候,只有
一个表达式为真
CASE语句中
表达式应包
含所有可能
的条件
4、状态图逻辑设计类型 4
利用 GOTO语句设计
格式,MODULE 模块名
(输入引脚定义)
(输出引脚定义) //状态机定义
( …… )
(状态定义语句)
EQUATIONS
(寄存器时钟语句 )
( …… )
STATE_DIAGRAM[状态寄存器 ]
STATE S0,GOTO 状态表达式
( …… )
END
MODULE COUNTER6GOTO
CP PIN;
Q2..Q0 PIN ISTYPE'REG';
Q=[Q2..Q0];
EQUATIONS
Q.CLK=CP;
STATE_DIAGRAM Q
STATE 0,GOTO 1;
STATE 1,GOTO 2;
STATE 2,GOTO 3;
STATE 3,GOTO 4;
STATE 4,GOTO 5;
STATE 5,GOTO 0;
STATE 6,GOTO 0;
STATE 7,GOTO 0;
END
例:用 ABEL语言设计一个同步六进制计数器。
5、状态图逻辑设计类型 5
利用 WITH……ENDWITH 语句设计
格式,MODULE 模块名
(输入引脚定义)
(输出引脚定义) //状态机定义
(状态定义语句)
EQUATIONS
(寄存器时钟语句 )
STATE_DIAGRAM[状态寄存器 ]
STATE S0:IF 逻辑表达式 THEN 状态表达式
WITH 输出方程
( …… )
ENDWITH;
ELSE 状态表达
( …… )
END
例:用 ABEL语言设计一个带溢出指示的同步六进制可
逆计数器。
MODULE counter6with
CP PIN;
UP_DOWN PIN;
Q2..Q0 PIN ISTYPE'REG';
C_UP,C_DOWN PIN ISTYPE'COM';
S0=0;S1=1;S2=2;S3=3;
S4=4;S5=5;S6=6;S7=7;
EQUATIONS
Q2.CLK=CP;Q1.CLK=CP;Q0.CLK=CP;
STATE_DIAGRAM[Q2,Q1,Q0]
STATE S0,IF UP_DOWN==0 THEN S1
ELSE S5
WITH C_DOWN=1;
ENDWITH;
STATE S1,IF UP_DOWN==0 THEN S2 ELSE S0;
STATE S2,IF UP_DOWN==0 THEN S3 ELSE S1;
STATE S3,IF UP_DOWN==0 THEN S4 ELSE S2;
STATE S4,IF UP_DOWN==0 THEN S5 ELSE S3;
STATE S5,IF UP_DOWN==0 THEN S0
WITH C_UP=1;
ENDWITH
ELSE S4;
STATE S6,GOTO S0;
STATE S7,GOTO S0;
END
小 结
? 逻辑方程是 ABEL语言的一种重要描述方法,
应灵活掌握其描述方法;
? 时序电路的描述方式有两种:描述输入方程
时用=,描述状态方程时用,=;
? 状态机可以用来描述复杂的时序电路,应注
意不能缺少时钟方程。
作业,5.20 5.22 5.28 5.30