第七章 可编程逻辑器件
7.1概述
7.2可编程逻辑器件基础
PLD逻辑表示法逻辑阵列的 PLD表示法应用举例
7.3 通用阵列逻辑 GAL
7.1 概 述
可编程专用集成电路 ASIC(Application
Specific Integrated Circuit) 是面向用户特定用途或特定功能的大规模、超大规模集成电路。
分类:按功能分为数字的、模拟的、数字和模拟混和三种。按制造方式分为全定制、半定制 ASIC、可编程三种。
根据芯片的集成度和结构复杂度分类
简单可编程逻辑器件 SPLD:集成度小于
PALCE22V10或 GAL22V10的 PLD。
特点是都具有可编程的与阵列,不可编程的或阵列,输出逻辑宏单元 OLMC和输入输出逻辑单元 IOC。
复杂可编程逻辑器件 CPLD:集成度大于
PAL22V10或 GAL22V10的 PLD都可视为
CPLD。
CPLD在集成度和结构上呈现的特点是具有更大的与阵列和或阵列,增加了大量的宏单元和布线资源,触发器的数量明显增加 。
根据芯片的集成度和结构复杂度分类
现场可编程逻辑门阵列 FPGA:现场可编程门阵列 FPGA是集成度和结构复杂度最高的可编程 ASIC。
运算器,乘法器,数字滤波器,二维卷积器等具有复杂算法的逻辑单元和信号处理单元的逻辑设计可选用 FPGA实现 。
按制造技术和编程方式进行分类
双极熔丝制造技术的可编程 ASIC(Lattice
的 PAL系列 )
EECMOS制造技术的可编程 ASIC(Lattice
的 GAL和 ispLSI / pLSI)
SRAM制造技术的可编程 ASIC(Xilinx的
FPGA,Altera的 FPGA)
反熔丝制造技术的可编程 ASIC(Actel的
FPGA)
按制造技术和编程方式进行分类
双极熔丝和反熔丝 ASIC通常称为 OTP(one
time programming)器件而采用 EECMOS
和 SRAM制造技术的可编程 ASIC具有用户可重复编程的特性,可以实现电擦电写。
按制造技术和编程方式进行分类
用 SRAM技术制造的 FPGA则具有数据挥发性,
又称易失性。
具有挥发性的 FPGA,当系统断电或掉电后,写入 FPGA中的编程数据要丢失。因此,必须把要下载到 FPGA的数据借用编程器固化到与其联用的 EPROM或 EEPROM中,待重新上电时,芯片将编程数据再下载到 FPGA中。
FPGA的数据挥发性,决定有些环境不宜选用。
可编程 ASIC的编程方式
可编程 ASIC的编程方式有两种:
采用专用编程器进行编程在系统编程甩掉了专用编程器,而且也不用将芯片从电路系统取下,只利用计算机和一组下载电缆就可以在系统编程 。
Lattice和 Xilinx等几家大公司现在都有在系统可编程 ASIC产品 。 在系统编程方式方便了用户 。
可编程 ASIC的一般开发步骤
设计输入 (entry)
功能模拟 (function simulation)
逻辑分割 (partitioning)
布局和布线 (place and routing)
时间模拟 (timing simulation)
写入下载数据 (download)
ASIC开发步骤流程图状 态 机 输 入逻 辑 图 输 入波 形 输 入
H D L 输 入设 计 输 入功 能 模 拟逻 辑 分 割时 间 模 拟编 程 下 载设 计 输 入布 局 布 线器 件 验 证
Y
N
N
Y
图 7 - 1 A S I C 开 发 步 骤 流 程 图
TOP—DOWN设计思想
自顶向下 ( TOP—DOWN) 设计首先是从系统级开始入手 。 把系统分成若干基本单元模块,然后再把作为基本单元的这些模块分成下一层的子模块 。
顶 层 模 块模 块 A 模 块 B 模 块 C
模 块 A 1 模 块 A 2 模 块 B 1 模 块 B 2 模 块 C 1 模 块 C 2 模 块 C 3
图 7-2top-down设计图
TOP—DOWN设计思想
采用 TOP—DOWN层次结构化设计方法,设计者可在一个硬件系统的不同层次的模块下进行设计 。
总体设计师可以在上层模块级别上对其下层模块设计者所做的设计进行行为级模拟验证 。
在 TOP—DOWN的设计过程中,划分每一个层次模块时要对目标模块做优化,在实现模块时要进行模拟仿真 。 虽然 TOP—DOWN的设计过程是理想的,但它的缺点是得到的最小可实现的物理单元不标准,成本可能较高 。
BOTTOM—UP设计思想
BOTTOM—UP层次结构化设计是 TOP—
DOWN设计的逆过程。
它虽然也是从系统级开始的,即从图 7-2中设计树的树根开始,但在层次模块划分时,
首先考虑的是实现模块的基本物理单元是否存在,划分过程必须是从存在的基本单元出发。
BOTTOM—UP设计思想
设计树最末枝上的单元要么是已经制造出的单元,要么是已经开发成功的单元,或者是可以买得到的单元。
自底向上 (BOTTOM—UP)的设计过程采用的全是标准单元,通常比较经济。
但完全采用自底向上的设计有时不能完全达到指定的设计目标要求。
BOTTOM—UP设计思想
用可编程 ASIC实现一个好的电子系统设计通常采用 TOP—DOWN和 BOTTOM—UP
两种方法的结合,充分考虑设计过程中多个指标的平衡。
设计库及库元件
在层次设计中所用的模块有两种:
预先设计好的标准模块由用户设计的具有特定应用功能的模块
前者一般要存放在 EDA开发系统中各种类型的文件库之中,后者必须经过模型仿真和调试证明无误后,建立一个图形符号存放在用户的设计库中准备在更上层的设计中使用。
设计库及库元件
设计库中比较高级的模块一般由两个模型构成:
模块的图形符号模块的功能模型
图形符号在建立原理图时使用,功能模型在逻辑模拟仿真时使用。
设计库及库元件
模块的功能模型可以是逻辑图形式,也可以是 VHDL描述的,还可以是真值表或逻辑方程式描述的。
一个已知的图形符号可以用来代表一个或几个功能模型,这些模型的功能相同,参数可以不同。例如 2输入与非门 7400,74LS00,
74S00,功能相同,但是传输延时,功耗不相同。
画层次原理图
画层次原理图类似于用逻辑门符号画一个逻辑图,先将选用的模块符号和连结器符号放在画页上,然后用连线将它们连结起来,最后将选用的符号名放在相应的模块及其结点上。
选用符号名要注意遵循以下规则:一般把在一个层次原理图中所使用的模块的每一个拷贝叫做这个模块的例化。
画层次原理图
为了模拟仿真和建立设计文件,每个例化都要起一个名字。
A d d e r
M o d u l e,
F A 4
K e y p a d
i n p u t
S t o r a g e
r e g i s t e r
D i s p l a y
d i r v e r
4位全加器模块 FA4起名为 Adder。
画层次原理图
Adder的模块由 4个一位全加器子模块 FA1实现,
这四个子模块分别起名为 add0,add1,add2、
add3。
A d d e r
M o d u l e,
F A 4
K e y p a d
i n p u t
S t o r a g e
r e g i s t e r
D i s p l a y
d i r v e r
a d d 0
M o u d l e,F A 1
a d d 1
M o u d l e,F A 1
a d d 2
M o u d l e,F A 1
a d d 3
M o u d l e,
F A 1
a
0
b
0
a
1
a
2
a
3
b
1
b
2
b
3
s
0
s
1
s
2
s
3
G N D
N C
画层次原理图
构成一位全加器的各个逻辑门及其信号线也要起一个名,它们的名字分别是 X 1,X 2,A1,A2,A3、
R1。
A
1
X
1
X
2
R
1
A
2
A
3
a
b
c
i n
s
c
o u t
x
1
画层次原理图
为了调试或模拟仿真,常常要研究模块中的一个指定信号 。 例如,假设要研究图 7-3中1位全加器
FA1的工作情况,需要观察完整系统模拟时的信号
x1的值 。
因为有4个 FA1的例化,例化名称要被合并成如下的信号名,顶层模块名/次层模块名:信号名 。
因此,要监视全加器 add2这个例化中信号线 x1的时候,这个信号名应该写成 Adder/ add2,x1通过上述的书写规则,就可指定顶层模块中 adder中的模块 add2的信号 x1,这个起名规则可以扩展到任何一个层次 。
层次联接器符号和总线
为了建立层次原理图,一个抽象级别的模块输入和输出引脚的名称要与次层模块原理图相应信号的名称保持唯一性或者一致性,如图 7-4所示 。
A
1
X
1
X
2
R
1
A
2
A
3
a
b
c
i n
s
c
o u t
x
1
M o d u l e
:
F A
1
a
b
c
i n
s
c
o u t
输入连接器 输出连接器层次联接器符号和总线
当模块有多重输入和输出信号时,层次的相互连接器画成如图 7-5所示的总线形式 。
A(3:0)={A(3) A(2) A(1) A(0)}
B(3:0)={B(3) B(2) B(1) B(0)}
S(3:0)={S(3) S(2) S(1) S(0)}
F A 4
A
( 3,0 )
B
( 3,0
)
S
( 3,0
)
A ( 0 )
A ( 1 )
A ( 2 )
A ( 3 )
B ( 0 )
B ( 1 )
B ( 2 )
B ( 3 )
S ( 0 )
S ( 1 )
S ( 2 )
S ( 3 )
A
0
A
1
A
2
A
3
B
0
B
1
B
2
B
3
S
0
S
1
S
2
S
3
( a )
层次联接器符号和总线
为了进一步简化模块原理图画法,有时常常在模块上定义多重引脚,如图 7-5(b)所示 。
P i n A
(
3,0
)
P i n S
( 3,0
)
P i n B
( 3,0
)
A
( 3,0
)
B
( 3,0
)
S
( 3,0
)
F A 4
( b )
每个多重引脚代表一组相关信号的集合,允许把总线直接联接到模块的引脚上,但是必须清楚每条总线代表的是 4个信号的联接。
层次化设计的模拟
采用层次设计实现的系统必须进行设计模拟和验证 。 一个层次设计中最底层的元件或模块必须首先进行模拟仿真,当其工作正确之后,再进行高一抽象级别模块的模拟仿真 。
最后还要对最上层系统进行模拟仿真,最终完成系统设计 。
层次化设计的模拟
在模拟仿真时,首先要将模块用相应的电路来代替,称为展平,展平工作一直做到最底层模块都用基本的逻辑门实现为止 。
在展平过程中所有元件及所有的信号线都必须有指定过的名称 。
模拟仿真结果可以是给出正确的波形,也可以是给出一些时延参数 。 图6给出的是用总线表示的波形 。
层次化设计的模拟
图6给出的是用总线表示的波形 。
0111
1011
1011
0000
0000
S(3:0)
0110
0110
0110
0110
0000
A(3:0)
0001
0001
0101
0101
0000
B(3:0)
12
10
7
5
0
Time
A ( 3,0 )
B ( 3,0 )
S ( 3,0 )
0 0 0 0
0 0 0 0
0 0 0 0
0 1 1 0 0 1 1 0
0 1 0 1 0 0 0 1
1 0 1 1 0 1 1 1
0 5 1 0 1 5
T i m e
表格形式的模拟值 波形表示的模拟值
7.2 可编程逻辑器件基础
⒈ PLD的逻辑表示
⑴ PLD中阵列及其阵列交叉点的逻辑表示
⑵ PLD中基本逻辑单元的 PLD表示
⒉逻辑阵列的 PLD表示法应用举例
⒈ PLD的逻辑表示
⑴ PLD中阵列及其阵列交叉点的逻辑表示
① PLD中阵列交叉点的逻辑表示
② PLD中与阵列和或阵列的逻辑表示
① PLD中阵列交叉点的逻辑表示
PLD逻辑阵列中交叉点的连接方式采用图
7-7所示的几种逻辑表示。
( a ) ( b ) ( c )
(a)表示实体连结,就是行线和列线在这个交叉点处实在连接,这个交叉点是不可编程点,在交叉点处打上实心点。
① PLD中阵列交叉点的逻辑表示
PLD逻辑阵列中交叉点的连接方式采用图
7-7所示的几种逻辑表示。
( a ) ( b ) ( c )
(b)表示可编程连接。无论 × 或 表示该符号所在行线和列线交叉处是可编程点,具有一个可编程单元。
① PLD中阵列交叉点的逻辑表示
PLD逻辑阵列中交叉点的连接方式采用图
7-7所示的几种逻辑表示。
( a ) ( b ) ( c )
在采用熔丝工艺的 PLD器件中,器件出厂后用户编程之前,所有可编程点处的熔丝都处于接通状态,
习惯上都用 × 表示熔丝接通,因此可编程点上处处都打 × 或 。
① PLD中阵列交叉点的逻辑表示
PLD逻辑阵列中交叉点的连接方式采用图
7-7所示的几种逻辑表示。
( a ) ( b ) ( c )
PLD器件被用户编程后,可编程点上的熔丝有的烧断,有的接通。编 程后可在编程点上仍打有 ×,
这时的 × 表示可编程点被编程后熔丝接通。
① PLD中阵列交叉点的逻辑表示
PLD逻辑阵列中交叉点的连接方式采用图
7-7所示的几种逻辑表示。
( a ) ( b ) ( c )
熔丝烧断的可编程点上的 × 消失,行线和列线不相接,这种情况用图 (c)表示。
② PLD中与阵列和或阵列的逻辑表示
与阵列如图 (a)所示。
熔丝
+
V
C C
R
F

A

B

C

( a )
A
A
B
B
C
C
在二极管与门的各支路与输出之间接入熔丝。
熔丝保留的各支路的输入为有效输入,输出 F
是熔丝保留各支路输入的与逻辑函数。图 (b)
是 PLD表示。
A
( b )
F
( A

B

C ) = 0
CCA
B
B
图 (a)和图 (b)是熔丝全部保留的与阵列表示情况。
F(A,B,C)=0。
② PLD中与阵列和或阵列的逻辑表示
图 (c)是烧断 3个熔丝的情况,图 (d)是图 (c)
的 PLD表示。
熔丝
+
V
C C
R
( c )
A
A
B
B
C
C
F ( A,B,C ) = A B C
A A B B C C
( d )
F ( A

B

C ) =
A B C
② PLD中与阵列和或阵列的逻辑表示
可编程或阵列,其构成原理与可编程的与阵列相同。
p
1
R
p
2
p
3
f ( p
1,
p
2,
p
3
) = p
1
+ p
2
+ p
3
( a )
f ( p
1,
p
2,
p
3
) = p
1
+ p
2
+ p
3
( b )
p
1
p
2
p
3
② PLD中与阵列和或阵列的逻辑表示
可编程或阵列,其构成原理与可编程的与阵列相同。
p
1
R
p
2
p
3
f ( p
1,
p
2,
p
3
) = p
1
+ p
3
( c )
f ( p
1,
p
2,
p
3
) = p
1
+ p
3
( d )
p
1
p
2
p
3
⒈ PLD的逻辑表示
⑵ PLD中基本逻辑单元的 PLD表示
①输入缓冲器和反馈缓冲器
②输出极性可编程的异或门
③地址选择可编程的数据选择器
④可编程数据分配器的逻辑表示
⑤激励方式可编程的时序记忆单元的 PLD表示
⑥ PLD中与阵列的缺省表示
⑦双向输入 /输出和反馈输入的逻辑表示
① 输入缓冲器和反馈缓冲器
在 PLD中有二种特殊的缓冲器,它们是输入缓冲器和反馈缓冲器,这二种缓冲器有相同的电路构成,图 7-10给出它们的 PLD
表示,它们是单输入、双输出的缓冲器单元,一个是高有效输出端,即同极性输出端。另一个是低有效输出端,即反极性输出端。
A
A
A
① 输入缓冲器和反馈缓冲器
与曾经学过的输出三态缓冲器不同,虽然输出三态缓冲器也有三个端,但只有一个输入和一个输出端,另一个是使能控制端。原则上说,输出三态缓冲器有二个输入端一个输出端。注意二者之间的区别。
输入缓冲器和反馈缓冲器输出只有 0,1两个逻辑状态。而输出三态缓冲器除了有 0,1两个逻辑状态外,还有一个称为高阻 (Z)的状态。
A
A
A
② 输出极性可编程的异或门
在 PLD中为了实现输出极性可编程,常采用图 (a)所示的异或门结构 。
PPQ 10
当熔丝烧断,异或门输出极性为低有效,即否则异或门输出高有效 Q0=P⊕ 0=P。
Q
0
P
R
V
D D
熔 丝
Q
0
P
( a )
② 输出极性可编程的异或门
图 (b)是编程后熔丝保留,输出极性编程为高有效。
图 (c)是编程熔丝烧断,输出极性编程为低有效。
P
Q
0
= P + 1 = P
( c )
Q
0
= P + 0 = P
P
( b )
③ 地址选择可编程的数据选择器
地址选择可编程的数据选择器如图 7-12所示。
M U X
M U X
(b )
(a )
M U X
M U X
图 7 -1 2 地 址 选 择 可 编 程 数 据 选 择 器 P L D 表 示地址选择端编程后,若列线与行线相接且接地,其输入为逻辑 0。否则,列线与行线断开其输入为逻辑 1。
二选一数据选择器 四选一数据选择器根据编程情况,地址选择端的输入有 00,01,10,11
四种情况。
④ 可编程数据分配器的逻辑表示
可编程逻辑分配器如图 7-13所示 。
乘 积 项 簇到 n - 1
到 n - 2
来 自 n - 1
到 n + 1
来 自 n + 1
来 自 n + 2
去 n 号 宏 单 元
R
R
熔 丝 1
熔 丝 2
V
D D
V
D D
S
1
S
0
图 7-13 可编程逻辑分配器图中的核心部分是可编程逻辑分配器可编程熔丝 S1S0的不同编程值,
使乘积项簇分别被分配到 n+1号、
n号,n-1号,n-2号宏单元。
FUSE1正常时 (默认状态 )不熔断,乘积项簇的信号传不到 n
号宏单元。
若编程后 FUSE1熔断,
乘积项簇信号可以传到 n号宏单元。
如果 FUSE2熔断,异或门反极性传输,否则异或门原极性传输,
n号宏单元接收信号与乘积项簇信号同相。
⑤ 激励方式可编程的时序记忆单元的 PLD表示
时序记忆单元有二种,即锁存器和触发器 。
输出的状态只受输入激励信号控制的时序记忆单元是锁存器 。
只有在时钟信号控制下才能得到受输入激励信号决定的相应输出状态的时序记忆单元是触发器 。
二种时序记忆单元的根本区别是输出状态的变化是否取决于时钟信号的控制 。
⑤ 激励方式可编程的时序记忆单元的 PLD表示
图 7-14是激励方式可编程的时序记忆单元的 PLD表示 。
通过编程,使 R/L端为 0,Q端的输出状态只与激励信号有关并受 D
决定,图所示电路为 D
锁存器。
D
Q
C L K
R / L
R e s e t
通过编程,若使 R/L
端为 1,电路只有在时钟脉冲信号 CLK的驱动下,Q端的状态变化受 D端的激励信号决定,
该电路具有 D触发器功能。
⑥ PLD中与阵列的缺省表示
在 PLD器件与阵列中常看到图 7-15中给出的几种表示。输出为 Z1的与门 4个输入变量全部被编程后输入,4个交叉点均画 × 。
因此,
01 BBAAZ
Z
1
= 0
Z
3
= 1
A
B
Z
2
= 0
图 7 - 1 5 P L D 中 与 阵 列 的 默 认 表 示
⑥ PLD中与阵列的缺省表示
02 BBAAZ
同理,Z2为 Z1的缺省表示。这时的阵列交叉点上均未画 ×,而在与门符号内却画有
×,。
Z
1
= 0
Z
3
= 1
A
B
Z
2
= 0
图 7 - 1 5 P L D 中 与 阵 列 的 默 认 表 示
⑥ PLD中与阵列的缺省表示
输出为 Z3的与门输入阵列交叉点上无 ×,与门符号内也无 ×,这是浮动状态的逻辑表示。浮动输入状态代表与阵列编程后熔丝全部熔断,4个输入全都不同与门相接,相当与门输入悬空,与门输出为高电平,即输出逻辑,1”
Z
1
=0
Z
3
=1
A
B
Z
2
=0
图 7-15 P L D 中 与 阵 列 的 默 认 表 示
⑦ 双向输入 /输出和反馈输入的逻辑表示
双向输入 /输出和反馈输入结构是 PLD结构的特点之一,乘积项 Pn+1为三态输出缓冲器的使能端控制信号 。 由于各阵列交叉点无一个 ×,
呈悬浮状态,n+1号与门输出为逻辑,1”。或阵列输出的 Sm信号加在 IOm引脚上,
作为输出信号。同时,Sm信号又通过反馈缓冲器被反馈到与阵列。
这个输出带反馈的组态方式采用图 7-16(b)所示的 PLD表示。
P
1
P
n
P
n + 1
1
n n + 1
I O
m
S
m
( a )
I
1
I
2
1
Sm
Sm
S
m
I O
m
( o u t p u t )
( b )
⑦ 双向输入 /输出和反馈输入的逻辑表示
由于各阵列交叉点全打有 ×,所以 n+1号与门输出为逻辑,0”,三态输出缓冲器禁止,其输出为高阻 。
P
1
P
n
P
n + 1
1
n n + 1
I O
m
S
m
( a )
I
1
I
2
×
×
×
×
×
×
S
m
I O
m
( i n p u t )
( b )
0
高阻
×
加到与阵列上
Feedback=Sm
⒉ 逻辑阵列的 PLD表示法应用举例
二位串行进位加法器的原理框图如图 7-18(a)
所示 。
C
1
( 7 )
F A
F A
A
1
B
1
( 3 )
( 4 )
A
0
B
0
( 1 )
( 2 )
C
- 1
( 5 )
S
1
C
0
S
0
( 9 )
( 6 ) ( 8 )
( a )
输入
1iii1iii1iii1iiii CBACBACBACBAS
输入输出
1ii1iiiii CBCABAC
其阵列表示如图 7-18(b)所示 。
⒉ 逻辑阵列的 PLD表示法应用举例
1iii1iii1iii1iiii CBACBACBACBAS
1ii1iiiii CBCABAC
A
0
( 1 )
B
0
( 2 )
A
1
( 3 )
B
1
( 4 )
C
- 1
C
0
C
1
S
0
S
1
1
2
3
4 5
6
7
8 9
1 0
1 1 1 2
1 3
1 4
1 5 1 6
( 5 )
( 6 )
( 7 )
( 8 )
( 9 )
( b )
1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6
×
7.3 通用阵列逻辑 GAL
⒈ GAL (Generic Array Logic)的结构及其工作原理
⑴ GAL的基本阵列结构
⑵ GAL的工作模式和逻辑组态
⑶ GAL16V8的编程
⒉ GAL应用举例
7.3 通用阵列逻辑 GAL
⒈ GAL的结构及其工作原理
⑴ GAL的基本阵列结构通用型 GAL16V8的电路结构
GAL16V8的结构控制字
GAL16V8的 OLMC
⑵ GAL的工作模式和逻辑组态
⑶ GAL16V8的编程
⑴ GAL的基本阵列结构
图 7-19给出 GAL的基本结构框图。
可 编 程 与 阵 列可编程宏单元固 定 或 阵 列
I
2
I
1
I
0
O
2
O
1
O
0
图 7 - 1 9 G A L 的 基 本 阵 列 结 构 框 图
I / C L K
G N D









1 0
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
2 0
V c c
I / O E
O
C
/ O
R
/ I
I
( b )
( a )
1 9
1 8
1 7
1 6
1 5
1 4
1 3
1 2
1 1
1
0
0 3
2
7
8
3
1 5
1 6
4
2 3
2 4
5
3 1
3 2
6
4 0
3 9
7
4 7
4 8
8
5 6
5 5
9
6 3
C K
O L M C
( 1 9 )
O L M C
( 1 8 )
O L M C
( 1 7 )
O L M C
( 1 6 )
O L M C
( 1 5 )
O L M C
( 1 4 )
O L M C
( 1 3 )
O L M C
( 1 2 )
m
m
m
m
m
m
m
m
O E
4
7 8
1 1
1 2
1 5
1 6
1 9 2 0 2 3
2 4 2 7 2 8 3 1
3 12 82 72 42 32 01 9
1 61 5
0 3 4 7
8
1 1 1 2
图 7 - 2 0 G A L 1 6 V 8 的 逻 辑 图逻辑宏单元输入 /输出口输入口 时钟信号输入使能控制可编程与阵列固定或阵列
2,3,4,5,
6,7,8,9是专用输入引脚
1,11,12,13,14,
17,18,19各引脚可通过编程组态设为输入引脚
12,13,14,17,
18,19各引脚可通过编程组态设为输出引脚,15,16专用输出引脚
GAL16V8的结构控制字
GAL和 PAL不同之处是 GAL的输出电路增加了输出逻辑宏单元 OLMC (Output Logic
MacroCell)。 GAL的输出电路可编程。
GAL的结构控制字有 5种,82位:
SYN:同步控制字 1位,对 8个宏单元是公共的;
AC0:结构控制字 1位,对 8个宏单元是公共的;
AC1(n):结构控制字 8位,每个宏单元一个;
XOR(n):极性控制字 8位,每个宏单元一个;
PTD:乘积项禁止控制字 64位,每个与门一个。
GAL16V8的 OLMC的内部电路构成
OLMC的内部电路构成如图 7-21所示 。
0
1
P
T
M
U
X
1 1
1 0
0 1
0 0
T
S
M
U
X
D
Q
Q
F
M
U
X
1 0 -
1 1 -
0 - 1
0 - 0
1
0
O
M
U
X
来 自,与,
阵 列反 馈
C K
C K
G
1
G
2
V
C C
A C 0
A C 1 ( n )
O R 8
X O R ( n )
A C 0
A C 1 ( m )
A C 1 ( n )
O E
O E
来 自 邻 级 输 出 ( m )
I / O ’ ( n )
乘积项多路开关输出多路开关三态多路开关反馈多路开关来自 1
号引脚
AC0和 AC1(n)对 TSMUX的全部控制作用见表 7-1。
导 通高 阻
OE=1,导通
OE=0,高阻用户编程决定输出三态缓冲器状态
VCC
地电平
OE
第一与项
0 0
0 1
1 0
1 1
TSMUX
输入信号AC0AC1(n)
表 7-1 AC0AC1(n)对 TSMUX控制表
FMUX的全部控制功能如表 7-2所示 。
Q端信号本级输出端邻级输出地电平反馈缓冲器输入端信号来源寄存器 Q端本级输出邻级输出地电平
1 0 —
1 1 —
0 — 1
0 — 0
FMUX
输入信号AC0 AC1(n) AC1(m)
表 7-2 AC0AC1对 FMUX控制表
⑵ GAL的工作模式和逻辑组态
GAL16V8,GAL20V8系列器件的 OLMC
有寄存器模式,复杂模式,简单模式三种工作模式 。
用户通过输出引脚定义方程确定 OLMC的工作模式 。 输出引脚定义方程有 A型,B
型,C型三种 。
它们与工作模式的关系如表 7-3所示 。
表 7-3 OLMC的工作模式同引脚定义方程的关系输出引脚方程类型输出引脚定义方程式 工作模式
A型
B型
C型引脚名,=逻辑方程式引脚名 =逻辑方程式引脚名,OE=逻辑方程式引脚名 =<逻辑方程式 >
SYN=0,AC0=1
寄存器模式
SYN=1,AC0=1复杂模式
SYN=1,AC0=0简单模式
⑵ GAL的工作模式和逻辑组态
输出逻辑宏单元三种模式又分为七种逻辑组态,其隶属关系如表 7-4所示 。
⑵ GAL的工作模式和逻辑组态表 7-4 三种模式和七种组态的关系工作模式 逻辑组态寄存器模式复杂模式简单模式
⑴ 寄存器输出组态 ⑵ 组合输出组态
⑶ 有反馈组合输出 ⑷ 无反馈组合输出
⑸ 无反馈组合输出组态 ⑹ 本级输出邻级输入组态 ⑺ 相邻输入组态
C K
O E
X O R
D
Q
Q
-

a

(a)寄存器模式寄存器输出组态:
寄存器输出010
功能AC1(n)AC0SYN
低有效高有效
0
1
输出极性XOR
1脚作为寄存器输出级的公共时钟 CK端; 11
脚作为寄存器输出级的公共使能 OE端。
X O R
( b )
(b)寄存器模式组合输出组态:
在一个带寄存器
GAL中的组合输出110
功能AC1(n)AC0SYN
低有效高有效
0
1
输出极性XOR
1和 11号总是分别作为时钟 CK端和使能端 OE。
引脚 1和 11为输入,所有输出为组合逻辑输出。
13~18号宏单元可构成这种组态
X O R
( c )
(c)复杂模式有反馈组合输出组态:
低有效高有效
0
1
输出极性XOR
所有输出为组合逻辑
111
功能AC1(n)AC0SYN
12,19号宏单元可构成这种组态
X O R
( d )
(d)复杂模式无反馈组合输出组态:
低有效高有效
0
1
输出极性XOR
所有输出为组合逻辑
101
功能AC1(n)
失效
AC0=
SYN
SYN AC1(m)=
SYN
1
15,16号宏单元可构成这种组态
X O R
(e)
V
C C
(e)简单模式无反馈组合输出组态:
所有输出为组合逻辑
001
功能AC1(n)AC0SYN
低有效高有效
0
1
输出极性XOR
15和 16号宏单元也能构成这种组态
X O R
( f)
V cc
m
(f)简单模式本级组合输出邻级输入组态:
所有输出为组合逻辑
001
功能AC1(n)AC0SYN
低有效高有效
0
1
输出极性XOR
输出缓冲器失效
除 15和 16号宏单元外都可构成这种组态
( g)
G N D
(g)简单模式邻级输入组态:
所有输出为组合逻辑
101
功能AC1(n)AC0SYN
无效无效
0
1
输出极性XOR
⑶ GAL的开发流程 (开发步骤 )
① 建立用户源文件用户源文件就是设计者书写的描述所要实现逻辑电路功能的软件程序的集合。其软件程序必须符合某一可编程逻辑设计语言的语法规范。现在广泛使用的有 ABEL-
HDL,VHDL,Verilog-VHDL等硬件描述语言。
②编译用户源文件要想使建立起来的用户源文件变成要下载的数据文件
(JEDEC),必须经过若干步的语言处理程序。如语法检查、逻辑化简、功能模拟、时间模拟等。经过专用软件处理后,证明用户建立的源文件正确无误,最后将其转换成要下载的编程数据文件 (JEDEC)。把上述的一系列处理过程称为编译。
③ 器件编程在专用的软件系统环境下,启动编程器,使计算机和编程器进行通信。将 JEDEC数据文件下载到编程器上。
选择目标器件的制造厂家、型号进行器件匹配。
将 GAL器件插入插座并锁紧。这一步必须注意芯片引脚序号与插座引脚号要对应。否则器件可能被毁坏。
下载编程。即将下载到编程器上的 JEDEC数据文件写入到 GAL芯片中。
⑶ GAL的开发流程 (开发步骤 )
④ 实际功能验证将芯片从编程器取下,放到实验电路中或实际工作的系统中进行实际功能验证,如果功能正确,说明开发工作结束。如果功能验证不正确,
则还要返回到第一步重新修改设计。
⑶ GAL的开发流程 (开发步骤 )
ABEL硬件描述语言
ABEL(Advanced Boolean Equation
Language)是 Data I/O公司的注册商标 。
ABEL程序是包含一些元素的文本文件:
包括程序名和注释;
标识逻辑函数输入,输出的声明;
用来指定要实现逻辑函数的语句;
实现逻辑函数的功能的 PLD或其它目标器件的类型声明;
用来指定在一定输入条件下逻辑函数期望输出的测试向量 。
ABEL硬件描述语言
ABEL程序的典型结构
module module name
title string
deviceID device devicetype;,器件声明
pin declarations,引脚声明
other declarations
equations
equations
test_vectors
test vectors
end module name
ABEL硬件描述语言
module example1
title?basic logic gates?
name device?p16v8s?;,器件声明
a,b,c,d,e pin19,1,2,3,4;,引脚声明
m,n,p,q,h pin 5,6,7,8,9;
i,j pin 11,12;
u,v,w,x,y,z pin 18,17,16,15,14,13;
X=.X.;,常数声明,任意态
equations
u=!a;,非门 INV
v=b&c;,二输入与门 AND2
w=d#e;,二输入或门 OR2
x=!(m#n);,二输入或非门 NOR2
y=!(p$q);,二输入异或非门 NXOR2
z=!(h&i&j);,三输入与非门 NAND3
Test_vector
(…… )
end example1
ABEL硬件描述语言
⒈ 标识符与关键字
⑴ 标识符 (Identifier)
标识符用来标识器件,器件管脚或节点,集合,
输入 /输出信号,常量,宏及变量 。
所有这些标识符都遵从同样的命名规则,具体规则如下,
标识符最多 31个字符长,必须以字母或下划线打头,
区分大小写 。
ABEL硬件描述语言
⑵ 关键字
关键字是一种特殊的标识符,被 ABEL视为保留字,不能用来给器件,管脚,节点,常量,集合,
宏定义及信号命名 。 在源文件中使用关键字时,
仅表明这个关键字的作用 。 一旦关键字被用于错误场合,语言处理程序将标出错误 。
硬件描述语言中的关键字不区分大小写,可以用大写,小写或混合字体输入 。
ABEL硬件描述语言
下面按字母顺序列出 ABEL-HDL的关键字 。
async_reset 异步复位状态描述语句
case-endcase 条件选择语句
declarations 定义段关键字
device 器件定义语句 *
end 结束语句 *
equations 逻辑方程关键字 *
functional_block 功能模块定义语句
ABEL硬件描述语言
fuses 熔丝状态定义语句
goto 无条件转移语句
if-then-else 条件转移语句 (只能用在状态图中 )
interface 功能模块接口定义语句
istype 属性定义语句 *
library 库引用语句
macro 宏定义语句
module 模块语句 *
node 节点定义语句
ABEL硬件描述语言
options 控制选项定义语句
pin 引脚定义语句 *
property 特征定义语句
state 状态描述语句
state_diagram 状态图关键字
state_register 状态寄存器说明语句
sync_reset 同步复位状态描述语句
test_vectors 测试向量 *
title 标题语句 *
ABEL硬件描述语言规则概要
truth_table 真值表表头关键字 *
when-then-else 条件转移语句 (只能用在方程中 )
with-endwith 转移方程语句
ABEL硬件描述语言
⒉ 常量与数值
常量,定值可用于 ABEL-HDL的逻辑设计 。
常量值可用在赋值语句,真值表与测试向量中,有时还可赋给标识符以表示该标识符在整个模块中都有定值 。 常量值可为数值或非数值型 特殊常量 。
在 ABEL-HDL中的特殊常量输入时必须在字母两边加圆点以表示其为特殊常量,否则特殊常量,C.将被认为是标识符名 C。 特殊常量可用大写或小写字母 。
ABEL硬件描述语言
ABEL-HDL中所有数值运算的精度都是 128
位,因此,有效数值范围是 0~2128-1。
数值可用五种形式中的任一种表示,其中四种是用不同的数制来表示数值,第五种是用字母符号表示数值 。
ABEL硬件描述语言
.C,时钟输入电平 ( 按低 -高 -低变化 )
.K,时钟输入电平 ( 按高 -低 -高变化 )
.U,时钟上升沿 ( 电平按低 -高变化 )
.D,时钟下降沿 ( 电平按高 -低变化 )
.F,浮动输入或输出信号
.P,寄存器预装载
.X,任意态
.Z,高阻态
ABEL硬件描述语言
当选用四种数制中的一种非默认数制来表示数据时,须在该数据前标明所用数制的符号 。
表 2-5列出了 ABEL-HDL支持的四种数制及它们相应的符号,数制符号可用大写或小写输入 。
ABEL硬件描述语言表 7-5 ABEL-HDL中数值的不同进制表示数制名 基数 数制符号二进制 2 ^B
八进制 8 ^O
十进制 10 ^D
十六进制 16 ^H
ABEL硬件描述语言
⒊ 字符串和注释
字符串是用单引号 (撇号 )括起的一串 ASCII码字符 。 字符串用于模块语句,标题语句,控制选项语句和引脚,节点,属性的定义中 。
若要在字符串中使用单引号,要在它前面加一个反斜线,\”。
注释是使源文件易读的另一种方式 。 它常被用来说明源文件本身不易理解之处,注释不影响源文件的内容 。
ABEL硬件描述语言
可以有两种方式插入注释:
① 注释以双引号 (“)开始,以另一双引号或行结束标志结束 。
② 注释以双斜线 (//)开始,以行结束标志结束 。
ABEL硬件描述语言规则概要
⒋ 运算符,表达式和方程
ABEL-HDL表达式中可包含常量,信号名等对象 。 表达式将这些对象进行组合,
比较或进行运算,以产生输出信号 。 这些运算 (如加法,逻辑与 )在表达式中用运算符来表示 。
ABEL-HDL的运算符可分为四种基本类型,逻辑运算符,算术运算符,关系运算符与赋值运算符 。
⒈ 逻辑运算符表 7-6 ABEL-HDL中的逻辑运算符运算符 说明
! 非
& 与
# 或
$ 异或
!$ 异或非
⑵ 算术运算符运算符 举例 说 明
- - A 求补码 (负数 )
- A- B 减法
+ A+B 加法
* A*B 乘法
/ A/B 无符号整数除法
% A%B 取模,A/B的余数
<< A<<B A左移 B位,零补缺位
>> A>>B A右移 B位,零补缺位
⑶ 关系运算符运算符 说 明
= = 等 于
!= 不等于
< 小于
<= 小于或等于
> 大于
>= 大于或等于
所有关系运算都是无符号运算 。
⑷ 赋值运算符运算符 说 明
= 组合型赋值 (确定态 )
:= 寄存器型赋值 (确定态 )
= 组合型赋值 (任意态 )
:= 寄存器型赋值 (任意态 )
注意:赋值运算符,=和?:=只能用在引脚到引脚的寄存器方程中 。
在使用详细点后缀的寄存器方程中要使用赋值运算符 =和?=。
⑸ 运算符的运算优先级优先级 运算符 说 明
1 - 取二进制补码 (负数 )
1 ! 非
2 & 与
2 << 左移
2 >> 右移
2 * 乘法
2 / 无符号整数除法
2 % 取模
3 + 加法
3 - 减法
3 # 或
3 $ 异或
3 !$ 异或非
4 == 等于
4 != 不等于
4 < 小于
4 <= 小于或等于
4 > 大于
4 >= 大于或等于
若同一表达式中有优先级相同的运算符,
则按从左到右的顺序进行运算,圆括号可改变运算次序,
圆括号内运算优先进行。
⒉ GAL的应用举例
用 GAL实现基本逻辑门的设计
用 GAL实现组合及时序混合的逻辑电路用 GAL实现基本逻辑门的设计
设计说明及构思图 7-30给出了用一片
GAL16V8实现基本逻辑门的要求。
所要实现的电路是简单的组合逻辑电路,选择
GAL16V8的简单模式就可以实现。由图可见全部电路共有 12个输入端,6个输出端。
2 0
1 9
1 8
1 6
1 7
1 5
1 4
1 3
1 2
1 1
1
2
4
5
6
7
8
9
1 0
G N D

7 - 3 0 用 G A L 1 6 V 8 代 替基 本 逻 辑 门 引 脚 配 置 图
b
c
d
e
m
n
p
q
h
V
C C
a
u
v
w
x
y
j
i
3
z
module example1
title?basic logic gates?
name device?p16v8s?;,器件声明
a,b,c,d,e pin19,1,2,3,4;,引脚声明
m,n,p,q,h pin 5,6,7,8,9;
i,j pin 11,12
u,v,w,x,y,z pin 18,17,16,15,14,13
X=.X.;,常数声明,任意态
equations
u=!a;,非门 INV
v=b&c;,二输入与门 AND2
w=d#e;,二输入或门 OR2
x=!(m#n);,二输入或非门 NOR2
y=!(p$q);,二输入异或非门 NXOR2
z=!(h&i&j);,三输入与非门 NAND3
2 0
1 9
1 8
1 6
1 7
1 5
1 4
1 3
1 2
1 1
1
2
4
5
6
7
8
9
1 0
G N D

7 - 3 0 用 G A L 1 6 V 8 代 替基 本 逻 辑 门 引 脚 配 置 图
b
c
d
e
m
n
p
q
h
V
C C
a
u
v
w
x
y
j
i
3
z
test_vector
([a,b,c,d,e]->[u,v,w])
[0,x,x,x,x]->[1,x,x];
[1,x,x,x,x]->[0,x,x];
[x,0,0,0,0]->[x,0,0];
[x,0,1,0,1]->[x,0,1];
[x,1,1,1,1]->[x,1,1];
……
end example1
2 0
1 9
1 8
1 6
1 7
1 5
1 4
1 3
1 2
1 1
1
2
4
5
6
7
8
9
1 0
G N D

7 - 3 0 用 G A L 1 6 V 8 代 替基 本 逻 辑 门 引 脚 配 置 图
b
c
d
e
m
n
p
q
h
V
C C
a
u
v
w
x
y
j
i
3
z
module example2
title 'basic flip'
flip device 'p16v8r';
s,r,qs1,qs0 pin 2,3,19,18;
t,qt1,qt0 pin 5,17,16;
d,qd1,qd0 pin 6,15,14;
j,k,qj1,qj0 pin 7,8,13,12;
clk,pr,clr,oe pin 1,4,9,11;
x=.x.;
c,z=.c.,.z.;
equations
qs1=!s#r&qs1;
qs0=!r#s&qs0;
qt1:=pr#!clr&!t&qt1#!clr&t&qt0;
qt0:=clr#!pr&!t&qt0#!pr&t&qt1;
qd1:=pr&#d&!clr;
qd0:=clr#!d&!pr;
qj1:=pr#!clr&j&qj0#!k&qj1&!clr;
qj0:=clr#!j&qj0&!pr#k&qj1&pr;
end example2
2 0
T
Q
Q
C L R
P R
D
Q
Q
C L R
P R
J
Q
Q
C L R
P R
K
1
2
3
4
5
6
7
8
9
1 0
V
C C
1 9
1 8
1 7
1 6
1 5
1 4
1 3
1 2
1 1
c l k
s
r
q s 1
q s 0
t
p r
q t 1
q t 0
d
q d 1
q d 0
j
k
c l r
o e
q j 0
q j 1
用 GAL实现组合及时序混合电路
⒈ 设计说明及构思
组合和时序混合的逻辑电路如图 7-31所示。
2 0
V c c

C L K
1 9
1 8 1 7
1 6
1 5
1 4
1 3 1 2 1 1
N C
X
1
Q
D
Q
A
Q
B
Y
N C
O EN C
Q
D
        4 进 位 的 记 数 器
2
3 4
5
6
7
8
9 1 0
A S B D
N C
I
E
G N D
N C
图 7 - 3 1 用 G A L 构 成 逻 辑 电 路 实 例建立用户源文件
module example3
title?composite logic?
name device?P16V8R?
CLK,A,S,B pin 1,2,3,4;
D,I,E,OE pin 5,8,9,11;
X1,QD,QA,QB,Y pin 18,16,15,14,13;
X1 istype?com?;
Y istype?com?;
C,X,Z,H,L=.C.,.X.,.Z.,1,0;
equations
X1=A&S#B&!S;
Y=!I;
Y·OE=E;,enable Y=E
QD:=D;
QA:=!QA;
QB:=QA&!QB#!QA&QB;
end example3
Q
B
( d ) 四 进 制 计 数 器 的 等 效 电 路
Q
A
F D
D Q
C
Q
F D
D Q
C
Q
Q
B
Q
A
1
1
Q
B
Q
A
O E
A S&
B & S
A S
+
B S
1
X 1
0
( a ) X 1 输 出 的 等 效 阵 列 图
A S
B
A S B
A S
+
B S
A S
+
B S
1
( b ) Y 输 出 的 等 效 阵 列 图
( c ) D 触 发 器 的 等 效 电 路 图
II
E E
I
I
Y
1
D D
F D
C L K
O E
D
Q
C
1
( b ) Y 输 出 的 等 效 阵 列 图
( c ) D 触 发 器 的 等 效 电 路 图
II
E E
I
I
Y
1
D D
F D
C L K
O E
D
Q
C
1
例题
用一片 GAL16V8实现图 10所示的 4个逻辑电路 。 要求写出 1个符合 ABEL语言规范的用户源文件 。 GAL16V8的引脚图如图所示 。
F1
Ai
Bi
Ci
Si
Ci+1
FA
D Q
Q
FF1
D Q
Q
FF2
CP
Q1 Q2
=1
A
B
C
&
E
D F
2=1
例题
如图所示逻辑图的逻辑方程式为:
iiii CBAS iiiiiiiiiiiii CBACBACBACBAC 1
ABCF?1
EDF2
nn QQ 11
1?
nnn QQQ 2112
F1
Ai
Bi
Ci
Si
Ci+1
FA
D Q
Q
FF1
D Q
Q
FF2
CP
Q1 Q2
=1
A
B
C
&
E
D F
2=1
ABEL语言的源文件如下:
module complex
title
exam device?p16v8r?;
CP,OE pin 1,11;
Ai,Bi,Ci,A,B,C pin 2,3,4,5,6,7;
D,E pin 8,9;
Si,Ci+1,F1,F2,Q1,Q2 pin 12,13,14,15,16,18;
equations
Si=Ai$Bi$Ci;
Ci+1=!Ai&Bi&Ci#Ai&!Bi&Ci#Ai&Bi&!Ci#Ai&Bi&Ci;
F1=!A&B&C;
F2=D$E;
Q1:=!Q1;
Q2:=Q1$Q2;
end complex
N位任意进制计数器设计
用 GAL实现 5位二进制计数器的设计
图 7-33所示是用可编程 ASIC器件设计二进制计数器的模块化设计框图 。
+ 1
A d d e r
N 位
D F
d
N
d
0
Q
N
Q
1
Q
N
Q
N - 1
Q
1
图 7 - 3 3 N 位 二 进 制 计 数 器 设 计 框 图已经存在任务:
设计增 1
加法器
N位任意进制计数器设计
根据 5位二进制计数器的计数规律写出如表 7-4所示用 T表示输出变量的 PLA模型 。
H L L L L
H L L L H
H L L H L
H L L H H
H L H L L
H L H L H
H L H H L
H L H H H
H H L L L
H H L L H
H H L H L
H H L H H
H H H L L
H H H L H
H H H H L
H H H H H
N4 N3 N2 N1 N0N4 N3 N2 N1 N0
L L L L L
L L L L H
L L L H L
L L L H H
L L H L L
L L H L H
L L H H L
L L H H H
L H L L L
L H L L H
L H L H L
L H L H H
L H H L L
L H H L H
L H H H L
L H H H H
T
T T
T
T T T
T
T T
T
T T T T
T
T T
T
T T T
T
T T
T
T T T T T
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
T
T T
T
T T T
T
T T
T
T T T T
T
T T
T
T T T
T
T T
T
T T T T
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
S4 S3 S2 S1 S0项目S4 S3 S2 S1 S0项目表 7-4 5位增 1加法器的 PLD模型
N位任意进制计数器设计
采用 PLA模型压缩技术,得简化的 增 1加法器的 PLA模型 。
)( 012344 NNNNNS
T
T
T
T
T
H
H H
H H H
H H H H
S4 S3 S2 S1 S0N4 N3 N2 N1 N0
表 7-5 简化的 增 1加法器的 PLA模型
)( 0122 NNNS
)( 01233 NNNNS
1000 NNS
011 NNS
N位任意进制计数器设计
得 增 1加法器的逻辑图 7-34。
)( 012344 NNNNNS
)( 0122 NNNS
)( 01233 NNNNS
1000 NNS
011 NNS
图 7-34  5位 增 1加 法 器 逻 辑 图
S
1
S
2
S
3
S
4
S
0
N
0
N
2
N
1
N
4
N
3
D
Q
C
Q
C
D Q
C
D
C
D
Q
C
D
Q
C L K
Q
0
Q
1
Q
2
Q
3
Q
4
图 7-35 5位 二 进 制 逻 辑 图
N位任意进制计数器设计
将增 1加法器与 D触发器连接起来得逻辑图 7-35。 C L RENNNNNS ))((
012344
C L RENNNS ))(( 0122
C L RENNNNS ))(( 01233
CLRENS )( 00
C L RENNS ))(( 011
图 7-34  5位 增 1加 法 器 逻 辑 图
S
1
S
2
S
3
S
4
S
0
N
0
N
2
N
1
N
4
N
3
D
Q
C
Q
C
D Q
C
D
C
D
Q
C
D
Q
C L K
Q
0
Q
1
Q
2
Q
3
Q
4
图 7-35 5位 二 进 制 计 数 器 逻 辑 图
Q
C
D
Q
C
D
C
C
D
C
D
Q
C
D
Q
Q
Q
图 7 - 3 6 实 用 的 5 位 二 进 制 计 数 器 逻 辑 图
C L K
C R
E
Q
0
Q
1
Q
2
Q
3
Q
4
Q
C
N位任意进制计数器设计
module count32
title?5-bitcounter?
counter32 device?p16v8r?;
ck,cr,e pin 1,2,3;
q4,q3,q2,q1,q0 pin 13,14,15,16,17;
oe,qc pin 11,12;
x,z,h,l,c=.x.,.z.,1,0,.c.;
count=[q4,q3,q2,q1,q0];
equations
qc=q4&q3&q2&q1&q0;
count:=(count+1)&cr&e#count&cr&!e;
test_vectors
( )
end count32
N位任意进制计数器设计
module count32
title?5-bitcounter?
counter32 device?p16v8r?;
ck,cr,e pin 1,2,3;
q4,q3,q2,q1,q0 pin 13,14,15,16,17;
oe,qc pin 11,12;
x,z,h,l,c=.x.,.z.,1,0,.c.;
equations
q0:=cr&(e$q0);
q1:=cr&(e$q0$q1);
q2:=cr&(e$q0$q1$q2);
q3:=cr&(e$q0$q1$q2$q3);
q4:=cr&(e$q0$q1$q2$q3$q4);
qc=q4&q3&q2&q1&q0;
count:=(count+1)&cr&e#count&cr&!e;
test_vectors
( [oe,e,cr,ck,count]->[count,qc])
[1,x,x,x,x] -> [ x,x];
[0,1,0,c,x] -> [ x,x];
[0,1,1,c,0] -> [ 1,0];
[0,1,1,c,1] -> [ 2,0];
[0,1,1,c,9] -> [ 10,0];
[0,1,1,c,10] -> [ 11,0];
[0,1,1,c,29] -> [ 30,0];
[0,1,1,c,30] -> [ 31,0];
[0,1,1,c,31] -> [ 0,1];
end count32