10.1 简述与或阵列型可编逻辑器件的原理、结构特点。
答:原理: 由逻辑代数知,任何逻辑函数都可表示为输入变量的与或表达式。因此,与或阵列型PLD 以可编程的与门阵列和或门阵列为核心组成逻辑功能块,实现任意逻辑函数。
结构特点:PLD 采用先进的集成电路技术制造,内部结构复杂。包含许多逻辑门、缓冲器、存储器、编程元件等,缓冲器通常提供输入变量和反馈变量的原和反;由与阵列产生这些变量的乘积项;由或阵列求乘积项的逻辑和;为了满足不同应用的要求,输出电路可包含OC 输出、三态输出、寄存器输出等。
10.2 利用PROM 器件实现下列逻辑函数,并画出编程阵列图。
(1))14,12,7,6,4,3(1m F ∑= (2))12,8,7,4,3,2,0(2m F ∑= (3))15,11,9,7,3,1(3m F ∑= 解:画出编程阵列图:
10.3 用PROM 实现下列逻辑函数:
BC A C A C AB F ++=1 ;BD ABC BCD AC BC A F ++++=2
解:通过化简得: ∑=)15,14,13,12,11,10,9,8,7,6,3,2(1m F ∑=
)15,14,12,11,10,9,8,7,6,4,3,2,1,0(m F 2
1
F A 2F B 3
F C D
A
B C D 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
全部最小项
F(A,B,C,D)
10.4 试用PROM 器件设计一个4位二进制同步加法计数器。 解:1. 状态转换图:
2. 卡诺图:
1
F A 2
F B C D
A
B C D 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
全部最小项
F(A,B,C,D)
1000100110101011110011011110111101110110010101000011001000010000←←←←←←←↓↑→→→→→→→0
123Q Q Q Q 1011
110010101001
10
11110000111011011101111000011001010100110100001000010010
1101002
3011
0111213n
n n
n n n n n Q Q Q Q Q Q Q Q ++++
3. 状态方程:
n n n
n n n n n n n
n Q Q Q Q Q Q Q Q Q Q Q 012__3
__23
__1
3__0
313+++=+ n n n n n n n n Q Q Q Q Q Q Q Q 01__2
__12
__02
12
++=+ __0
1
__1
11n n n n n Q Q Q Q Q +=+ __010
n n Q Q
=+
4. 驱动方程:(采用D 触发器和PLOM 器件实现)
∑
=
+++=m
n n n n n n n n n n Q Q Q Q Q Q Q Q Q Q D )14,13,12,11,10,9,8,7(012__3
__2
3
__1
3
__0
3
3
∑=++=m n
n n n n n n
Q Q Q Q Q Q Q D )14,13,12,11,6,5,4,3(01__2
__1
2__022
∑=+=m n n
n n Q Q Q Q D )14,13,10,9,6,5,2,1(__0
1
__11
∑==m n Q D )14,12,10,8,6,4,2,0(__0
5. 电路图:
1
1
1
1
10
101111010001000000101101002
3011
3n
n n
n n Q Q Q Q Q +n n n n n n n n n n n Q
Q Q Q Q Q Q Q Q Q Q
1
2
__3
__2
3
__1
3
__0
3
13
+++=+0
1
10101111101101010000101101002
30112
n
n n
n n Q Q Q Q Q +n
n n n n n n n Q Q Q Q Q Q Q Q
01__2
__1
2
__0
2
12
++=+1
1
10101011101001101000101101002
3011
1n
n n
n n Q Q Q Q Q +__0
1
__1
11
n n n n n Q
Q Q Q Q
+=+1
1
10100111100101100100101101002
3011
0n
n n
n n Q Q Q Q Q +__0
10
n n Q
Q
=+
10.5 用PLA(与、或阵列均可编程的可编程逻辑器件)实现的组合逻辑电路如图P10.5所示,分析电路的逻辑功能 。
解:从中可得到:
AC B A C B Y 1++=, AB BC AC Y 2++=
10.6 用PLA(与、或阵列均可编程的可编程逻辑器件)实现的显示译码电路如图P10.6所示。(1)根据PLA 结构写出函数a ,b ,c ,d ,e ,f ,g 的逻辑表达式。
(2)分析电路功能,说明当输入变量ABCD 从0000变化到1111时,abcdefg 后接的七段LED 数码管显示的相应字形。
3
D 3Q 2
D 2Q 1D 1Q 0
Q 3
Q 1Q 0Q 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1D FF0 C1 Q Q
1D FF1 C1 Q Q
1D FF2 C1 Q Q 1D FF3 C1 Q Q
D 2
Q CP
1
1
1
A
B C
Y 1 Y 2
图P10.5
解: 可以得出函数表达式: (1)
D C B CD A D B A C B A a +++= C B B A D C CD A b +++= D B B A C B c ++= C B D C D B D C B d +++= D C D B e +=
D BC D C D C B C B A f +++= C B C B D BC C B A g +++=
(2) ABCD 从0000~1111变化时七段LED 数码管相应显示0,1,…,9和如下 六种图形:
6
5
10.7 试说明GAL 和PROM 在电路结构上有何不同。
答: PROM 是采用固定的与阵列和可编程的或阵列组成的PLD,由于输入变量的增加,会引起存储容量的急剧上升,只能用于简单组合电路的编程。
GAL 沿用了PAL 或阵列固定与阵列可编程结构,而对PAL 的输出I/O 结构进行了改进,
1
1
1
1
a b c d A
B
C
D
e f g
c a
b d
e
f g 图P10.6
增加了输出逻辑宏单元OLMC(outputLogicMacroCell),OLMC 设有多种组态,使得每个I/O 引脚可配置成专用组合输出,组合输出双向口,寄存器输出,寄存器输出双向口,专用输入等多种功能,为电路设计提供了极大的灵活性。
10.8 试配置GAL OLMC (12)的五种工作模式,画出电路图。 答:可以得出如下:
其
电路
图如下:
10.9 试用GAL16V8器件实现一个3线-8线译码器。
解:3线-8线译码器有3个输入A 、B 、C ,8个低电平有效的输出Y 0~Y 7,3个使能输入端:高电平有效的EN 1和低电平有效的EN 2A 、EN 2B ,1个低电平有效的输出使能端OE 。当OE=0时,有
SYN AC0 AC1(n) 工作模式 备 注 1 0 1 专用输入 实现组合逻辑电路。
第1和11管脚作为数据输入端。
1 0 0 专用组合输出 1 1 1 反馈组合输出 0 1 1 时序组合输出 实现时序逻辑电路。 第1和11管脚分别是CK 和OE 0 1 0 寄存器输出 图10.1.7 OLMC 的5种工作模式
XOR (n)
Q
C1 Q 1D
CK
OE
XOR (n)
CK
OE XOR (n)
XOR (n) V CC
I/O(n)
I/O(n)
I/O(n)
I/O(n)
I/O(n)
I/O(m)
OLMC
OLMC
OLMC
OLMC
OLMC
(a) 专用输入
(b) 专用组合输出
(c) 反馈组合输出
(d) 时序组合输出 (e) 寄存器输出
C B A EN EN EN Y 2B 2A 10=,C B A EN EN EN Y 2B 2A 11=,C B A EN EN EN Y 2B 2A 12=,
BC A EN EN EN Y 2B 2A 13=,C B A EN EN EN Y 2B 2A 14=,C B A EN EN EN Y 2B 2A 15=, C AB EN EN EN Y 2B 2A 16=,ABC EN EN EN Y 2B 2A 17=
由上面8个表达式可知每个输出都是一个乘积项,就此编程可得一个三态的三线-八线译码器。编程后GAL16V8內部结构如下图所示:
10.10 试用GAL16V8器件设计一个十进制同步加法计数器。
解: 计数器应具有清零端 CLR ,设CLR 为高电平清零、为低电平计数器使能。设计数脉冲的输入端为CLK 。具有加计数功能,且能自启动。当 OE=0 时,计数器输出计数结果;OE=1 时,计数器的输出呈高阻态。
用GAL16V8实现十进制加法计数器的参考框图如下:
(1)
(19)Y 0
(18)Y 1
(17)Y 2
(16)Y 3
(15)Y 4
(14)Y 5
(13)Y 6
(12)Y 7
(11)
OE(2)
A(3)
B(4)
C(5)
EN 1(6)
EN 2A (7)
EN 2B (8)
(7)
1 14
2 15 11 16 17 GAL16V8
CLK CLR OE
Q 3 Q 2 Q 1 Q 0
用GAL16V8实现十进制加法计数器的VHDL源程序如下:
module GAL16V8 10P
title 'decimal counter
cnt 10p device 'GAL16v8';
Clk,Clr,OE pin 1, 2, 11;
Q3,Q2,Q1,Q0 pin 14, 15, 16, 17 istype 'reg_D, invert';
Ck, X, Z, P= .C. , .X., .Z., .P.;
" Counter States
S0 = ^b0000; S4 = ^b0100; S8 = ^b1000; S12= ^b1100;
S1 = ^b0001; S5 = ^b0101; S9 = ^b1001; S13= ^b1101;
S2 = ^b0010; S6 = ^b0110; S10= ^b1010; S14= ^b1110;
S3 = ^b0011; S7 = ^b0111; S11= ^b1011; S15= ^b1111;
equations
[Q3,Q2,Q1,Q0].c : = Clk;
[Q3,Q2,Q1,Q0].oe : = !OE;
state_diagram [Q3,Q2,Q1,Q0]
State S0: IF !Clr THEN S1 ELSE S0;
State S1: IF !Clr THEN S2 ELSE S0;
State S2: IF !Clr THEN S3 ELSE S0;
State S3: IF !Clr THEN S4 ELSE S0;
State S4: IF !Clr THEN S5 ELSE S0;
State S5: IF !Clr THEN S6 ELSE S0;
State S6: IF !Clr THEN S7 ELSE S0;
State S7: IF !Clr THEN S8 ELSE S0;
State S8: IF !Clr THEN S9 ELSE S0;
State S9: GOTO S0;
"Ensure return from illegal state
State S10: GOTO S0;
State S11: GOTO S0;
State S12: GOTO S0;
State S13: GOTO S0;
State S14: GOTO S0;
State S15: GOTO S0;
end
10.11 简述ispLSI 1016的组成,各部分的功能。
答:
器件主要包含32个I/O单元、16个GLB、互连布线区和时钟分配网络。8个GLB A0~A7与16个I/O单元I/O0~I/O15组成一个宏模块。余下的组成另一个宏模块。通过输入布线区将I/O单元的输入信号引到全局布线区,任何一个GLB可从全局布线区选择输入信号作为其输入。输出布线区可将GLB的输出灵活地与宏模块内的任何4个I/O单元相联。I/O单元则是内部逻辑和器件引脚的互连电路,可设置为输入、输出和双向模式。
10.12 解释在系统编程的含义。为什么ispLSI 1016 可以在系统编程?
答:ISP(In-System Programming)在系统可编程,指电路板上的空白器件可以编程
写入最终用户代码, 而不需要从电路板上取下器件,已经编程的器件也可以用ISP 方式擦除或再编程。ISP 技术是未来发展方向。
ispLSI 1016器件的编程接口信号如图10.11所示。当ispEN=0时,器件处于编程状态。除编程接口引脚外,PLD 的其余引脚全部为高阻态,对外部元件无影响,故可实现在系统编程。
10.13 PROM 、PLA 、PAL 、GAL 、CPLD 、FPGA 中,哪些是高密度PLD ?哪些是低密度PLD ? 答: PLD 按集成度(以700门/片为界)可以分为低密度PLD 和高密度PLD 。低密度PLD 主要有PROM 、PLA 、可编程阵列逻辑PAL 和通用阵列逻辑GAL ,高密度PLD 主要有CPLD 和现场可编程门阵列FPGA 等几种类型。 10.14 简述FPGA 的工作原理。
答: 目前FPGA 中多使用4输入的LUT ,所以每一个LUT 可以看成一个有4位地址线的16x1的RAM 。 当用户通过原理图或HDL 语言描述了一个逻辑电路以后,PLD/FPGA 开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,这样,每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。 10.15 比较快速互连FPGA 和分段互连FPGA 的特点。
答: 分段互连FPGA 由可配置的逻辑块CLB 、输入/输出块IOB 和可编程的互连资源组成。CLB 实现基本逻辑功能,大量CLB 通过可编成的互连导线互连,实现复杂的逻辑功能,IOB 则是引脚与芯片内部逻辑的接口电路。
快速互连FPGA 将位置邻近的8个逻辑单元LE 局部互连形成较强功能的逻辑阵列块LAB ,然后用贯穿整个芯片的行、列导线编程连接LAB 和输入/输出单元IOE ,实现复杂的逻辑功能。
分段互连的优点是连线灵活,缺点是连线的信号传输延时不易估计。因为即使是同一设计的2次布线也不会相同。故信号的传输路径不同,传输延时也不同。如果希望估计信号的传输延时,可采用快速互连的FPGA 。
10.16 分别说明可编程逻辑器件PROM ,PLA ,PAL ,GAL ,CPLD 及FPGA 各自的特点。 答:PROM 用户可以用专用的编程器将自己的资料写入,但是这种机会只有一次,一旦写入后也无法修改,若是出了错误,已写入的芯片只能报废。
可编程逻辑器件(PLD),它能够完成各种数字逻辑功能。典型的PLD 由一个“与”门和一个“或”门阵列组成,而任意一个组合逻辑都可以用“与一或”表达式来描述. 可编程逻辑阵列(PLA),它也由一个“与”平面和一个“或”平面构成,但是这两个平面的连接关系是可编程的。 PLA 器件既有现场可编程的,也有掩膜可编程的。 PAL 由一个可编程的“与”平面和一个固定的“或”平面构成,或门的输.出可以通过触发器有选择地被置为寄存状态。
图10.11 ispLSI 的编程接口信号
IspLSI
IspEN
SCLK MODE SDI
SDO
通用阵列逻辑GAL采用了EEPROM工艺,实现了电可按除、电可改写,其输出结构是可编程的逻辑宏单元。
CPLD和FPGA都具有体系结构和逻辑单元灵活、集成度高以及适用范围宽等特点。这两种器件兼容了PLD和通用门阵列的优点,可实现较大规模的电路,编程也很灵活。10.17 在下列应用场合,选用哪类PLD最为适合。
(1)小批量定型的产品中的中小规模逻辑电路。
(2)产品研制过程中需要不断修改的中小规模逻辑电路。
(3)要求能以遥控方式改变其逻辑功能的逻辑电路。
答:
(1)选用PAL比较合适
(2)选用GAL比较合适
(3)选用ISP-PLD比较合适
10.18 常用的在系统可编程逻辑器件有哪些?各有什么特点?其与RAM有什么区别?
答:
常用的在系统可编程逻辑器件有:PAL ,GAL,CPLD及FPGA。
PAL由一个可编程的“与”平面和一个固定的“或”平面构成,或门的输.出可以通过触发器有选择地被置为寄存状态。
通用阵列逻辑GAL采用了EEPROM工艺,实现了电可按除、电可改写,其输出结构是可编程的逻辑宏单元。
CPLD和FPGA都具有体系结构和逻辑单元灵活、集成度高以及适用范围宽等特点。这两种器件兼容了PLD和通用门阵列的优点,可实现较大规模的电路,编程也很灵活。
区别:RAM指的都是半导体存储器,而RAM通常都是在掉电之后就丢失数据。
可编程逻辑器件(PLD),它能够完成各种数字逻辑功能,能以乘积和的形式完成大量的组合逻辑功能。
10.19 用MUX+PLUS 错误!未找到引用源。(或其替代软件QUARTUS 错误!未找到引用源。)设计一个一位全加器电路,并进行仿真分析。解:设计一位全加器电路如下:
(1) 在MAX+plusⅡ管理器的File \ New内,新建一个图形文件;
(2) 半加器的基础之上,组成1位全加器,如图19.1所示;
图19.1 1位全加器组器件:OR2、INPUT、OUTPUT
(3) 选择器件型号,单击Assign \ Device菜单,屏幕如图
(4) 保存文件,文件名不可与半加器器件的文件名相同;
(5) 归属工程文件File \ Project \ Set Project to Current File;
(6) 系统进行编译;
图19.2 选择待编程芯片的屏幕
(7) 程序下载实验箱,必须做手动接口的引脚分配,Assign \ Pin / Location / Chip;如图19.3;
图19.3 引脚分配图
( 8) 单击按钮,屏幕显示如图19.2所示。
(9) 在图19.3中点击“Configure”或者选择“Program”即可进行下载;
(10) 如有问题,点击(1 Programming File),选择相应的下载文件;
(11) 在实验箱上验证实验结果;
(12) 绘制全加器真值表;
10.20 简述VHDL的功能和基本结构。
答:硬件描述语言HDL用文本形式描述硬件电路的逻辑功能及连接关系,它能比电原理图更有效、更方便和简洁地表达硬件电路的特征。
一个数字系统的VHDL设计通常由若干个VHDL文件组成,每个文件主要包含以下部分中的一个或全部:实体说明,结构体,配置,程序包,VHDL语言的基本设计单元就是一个设计实体,对应于一个数字电路。实体说明规定设计实体(数字电路)的输入、输出端口,是设计实体与外界的一个通信界面。而结构体则用于描述设计实体输入、输出端口间的逻辑关系。
10.21 用VHDL语言描述一个2输入同或门电路。
解:VHDL的源代码如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY tor2 IS
PORT( a,b : IN STD_LOGIC;
y: OUT STD_LOGIC);
END tor2;
ARCHITECTURE tor2_arc1 OF tor2 IS
BEGIN
Y<=NOT(a XOR b);
END tor2_arc1;
10.22 用VHDL语言描述8线-3线优先编码器。
解:VHDL的源代码如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY encoder IS
PORT(d : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
q : OUT STD_LOGIC_VECTOR(2 DOWNTO 0));
END encoder;
ARCHITECTURE rtl OF encoder IS
BEGIN
PROCESS(d)
BEGIN
CASE d IS
WHEN"01111111"=>q<="111";
WHEN"10111111"=>q<="110";
WHEN"11011111"=>q<="101";
WHEN"11101111"=>q<="100";
WHEN"11110111"=>q<="011";
WHEN"11111011"=>q<="010";
WHEN"11111101"=>q<="001";
WHEN"11111110"=>q<="000";
END CASE;
END PROCESS;
END rel;
10.23 用VHDL语言描述具有异步复位/置位功能的D触发器
解:VHDL的源代码如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY async _rdff IS
PORT( d,clk : IN STD_LOGIC;
reset : IN STD_LOGIC;
q , qb : OUT STD_LOGIC);
END async_rd f;
ARCHITETURE rtl1 OF async_rd ff IS
BEGIN
PROCESS (clk, reset)
BEGIN
IF( reset = '0' ) THEN
q <= '0';
qb <='1';
ELSIF ( clk ' EVENT AND clk = '1' ) THEN
q <=d;
qb <= NOT d;
END IF;
END PROCESS;
END rtl1;
10.24 用VHDL语言描述一个5进制加法计数器。
解:引脚定义:
reset 复位信号,低电平有效
en 计数控制
clk 时钟
qa,qb,qc, 计数器输出
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY count5 IS
PORT(clk,reset,en: in STD_LOGIC;
qa,qb,qc: out STD_LOGIC);
END count5;
ARCHITECTURE behave OF count5 IS
SIGNAL count_3: STD_LOGIC_VECTOR(2 downto 0);
BEGIN
qa<=count_3(0);
qb<=count_3(1);
qc<=count_3(2);
PROCESS(clk,reset)
BEGIN
IF (reset='0') THEN
count_3<="000";
ELSIF(clk'event AND clk='1') THEN
IF(en='1') THEN
IF(count_3="100") THEN
count_3<="000";
ELSE
count_3<=count_3+'1';
END IF;
END IF;
END IF;
END PROCESS;
END behave;
10.25分析下面的VHDL语言程序,说明该程序描述的是什么逻辑功能的电路。
程序引脚定义: Reset--复位
en --计数控制
clk --时钟
qa,qb,qc,qd --计数器输出
LIBRARY ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity count12 is
port(clk,reset,en: in std_logic;
qa,qb,qc,qd: out std_logic);
end count12;
architecture behave of count12 is
signal count_4: std_logic_vector(3 downto 0);
begin
qa<=count_4(0);
qb<=count_4(1);
qc<=count_4(2);
qd<=count_4(3);
process(clk,reset)
begin
if (reset='0') then
count_4<="0000";
elsif(clk'event and clk='1') then
if(en='1') then
if(count_4="1011") then
count_4<="0000";
else
count_4<=count_4+'1';
end if;
end if;
end if;
end process;
end behave;
解:该程序描述的是一个同步十二进制加法计数器。