第六章习题答案
1现有D触发器组成的三个n位寄存器,需要连接起来传送数据。当控制信号Sa有效时,执行(Ra)→Rc的操作;当控制信号Sb有效时,执行(Rb)→RC的操作。试写出连接电路的逻辑表达式,并画出逻辑电路图。 解:
RcLDCSaSbRa
Rc = Ra·Sa·LDC + Rb·Sb·LDC
Rb
2 现有D触发器组成的四个8位寄存器,要求它们之间实现数据传送,试设计连接电路。 解:
BUSA BUSB BUSC BUSD BUSABCDLDALDBLDCLDD
3 ALU的输出端一般带有一个移位器,其功能为:①ALU输出正常传送;②ALU输出左移1位(ALUi+1)传送;③ALU输出右移一位(ALUi-1)传送。试设计移位器的逻辑电路。 解:
4 一个系统有A,B两条总线,为了接收来自任何一条总线上的数据并驱动任何一条总线,需要一个总线缓冲寄存器。请用D触发器和三态门设计一个总线缓冲寄存器。 解:
ABUSBBUSR ABUSR BBUSR ( 缓冲寄存器 )LDRABUS RBBUS RABUSBBUS
5 试构造能完成下列程序操作的ASM图:
(a) if X = N, then … 。
(b) if X≠N, then …, else …。
解:
(c) for X from A to B, step C, do… 。 解:
(d) while X = Y, do …。 解:
Rx? XRy? YRx- Ry0A=B1 (e) if X > N OR X < O, then …, else …。 解:
6 有一个数字比较系统,它能对两个8位二进制进行比较。其操作过程如下:先将两个8位二进制数存入寄存器A和B, 然后进行比较,最后将大数移入寄存器A中。要求:
⑴画出此系统方框图,并构造ASM流程图。
⑵设计一个计数器型控制器。 解:(1)
②状态转移真值表
aLDRb00PSNS转移条件 CB AB( D ) A( D )b01LDRac10LDRbd11CAP0A > B1
③ 电路图
0 00 1无条件转移0 11 0无条件转移1 01 1无条件转移1 11 0( A > B ) = 10 1 A > B = 0根据 NS = PS·C 公式,激励方程表达式为:B ( D ) = BA + BA + BA·( A > B )A ( D ) = BA + BA + BA·( A > B ) = A + BA ·( A > B )
LDRbLDRaCAPT2控 制 信 号 译 码 逻 辑BB0 1B D请 OAA0 1A DT1B A B ABA(A>B)ABA(A>B)
④ 控制信号表达式:
LDRb = ( 状态 a + 状态 c ) T2 = ( BA + BA ) T2 = AT2LDRa = 状态 b·T2 = BAT2 CAP = 状态 d = BA
LDRbLDRaCAPA T2
BAT2B A
7. 根据题6的条件,设计一个MUX型控制器。
① ASM流程图
aLDRB00bLDRA01cLDRB10dCAP110A>B1 ②状态转移表
十进制编码PSBA0101B(D)01110NSA(D)10101转移条件C0 (00)1 (01)2 (10)3 (11)0011CB=0 , CA=1CB=1, CA=0CB=1, CA=1CB=(A>B), CA=0CB=0, CA=A?B
③电路图
MU×B011A>B0123BAT2MU×A101A?BFBD>10BB0123BAD>FA10A控制信号译码电路LDRALDRBCAPAT1清0
④控制信号表达式为:
LDRB=(状态a+状态c)?T2=(BA+BA)?T2
LDRA=状态b?T2=BA?T2 CAP=状态d=BA
8. 根据题6的条件,设计一个定序型控制器。
① ASM流程图
②状态转移表
(3)写出激励方程 NS=Σ PS·C
控制信号表达式
(4)逻辑电路图
9. 某控制器的状态表如下表所示,其中X和Y为输入变量,试设计一个计数器型控制器。
PSABCDNS输出FXY=00 01 10 11XY=00 01 10 11AAAABABBCCBCDDDD1001010100110001
① ASM流程图与编码(Q1,Q2为两个触发器)
令状态A=00, B=01, C=10, D=11
A 00F=10001B XY10011100F=101C XY10101100XY011011F=1D F=10001XY1011 11 ②状态转移表
PSQ2Q10 0 NSQ1Q20 0 0 11 01 10 0 0 01 01 10 0 0 10 11 10 0 0 11 01 1转移条件xyxyxy xyxyxyxy xyxyxyxy xyxyxyxy xy0 1 1 0 1 1
③ 激励方程表达式
利用NS=∑PS?C公式,使用D触发器。
Q2(D)=Q2Q1?XY + Q2Q1?XY + Q2Q1?XY + Q2Q1?XY + Q2Q1?XY + Q2 Q1?XY + Q2 Q1?XY
= Q2Q1?X + Q1?XY + Q1?X
Q1(D) = Q2Q1?Y + Q2Q1?XY + Q2Q1(X+Y) + Q2Q1?Y = Q2?Y + Q2Q1?X + Q2?Y ④电路图
Q20Q21Q10Q11清0T1ΛQ2ΛQ1Q2Q1XQ1XYQ1XQ2YQ2Q1XQ2Y ⑤ 控制信号表达式(假设为电位控制信号)
F=状态A?XY + 状态B?XY + 状态C?XY + 状态D =Q2Q1?XY + Q2Q1?XY + Q2Q1?XY + Q2Q1
FQ2Q1XYQ2Q1XYQ2Q1XYQ2Q1
11. .根据题10的条件,设计一个MUX型控制器 解答:
1) ASM流程图与编码同计数器型控制器(见第10题答案) 2) 按MUX方式列出状态转移真值表
3) 画出电路图
12.根据题10的条件,设计一个定序型控制器 解答:
1) ASM流程图与计数器法相同
2) 使用Qa、Qb、Qc、Qd四个触发器,编码分别为Qa=1000,Qb=0100,Qc=0010,Qd=0001 3) 状态转移真值表
4) 写出激励方程 NS=Σ PS·C
5)画出电路图
13.设计一个累加运算系统定序型控制器 解答:
1) 算法流程图
2) 状态转移真值表及激励函数表达式
NS=∑PS·C(C=1,无条件转移)
3) 控制信号表达式
4) 电路图
14.设计一个累加运算系统MUX型控制器 解答:
1) ASM流程图
2)状态转移真值表及激励表达式
NS=∑PS·C
3)电路图
4)控制信号表达式
15. 图P6.1所示ASM流程图,设计计数器型控制器 解:(1)ASM流程图与编码(Q1,Q2为两个触发器) 令状态a=00, b=01, c=11, d=10 ②状态转移表
PSQ2Q1Q20 0 0 1 NSQ1转移条件0 1 0 1 1 01 10 0 1 01 10 0 xyxyzx x?wxwxw 1 1 1 0
(3)次态方程
Q=QQxyz?QQxw?QQxwn2212121Q=QQ?QQxy?QQx?QQxw
n121212121(4)控制信号
F=QQxy
2116.根据图P6.1所示ASM流程图,设计一个MUX型控制器 解:(1)ASM流程图、编码、状态转移真值表同计数器型控制器(见第15题答案)
(2) MUXA的输出接触发器D2,MUXB的输出接触发器D1,则
MUXA(0)=0MUXA(1)=xyz?x=yz?xMUXA(2)=0MUXA(3)=xw?xwMUXB(0)=1MUXB(1)=xy?x=y?xMUXB(2)=0MUXB(3)=xw
(3)控制信号
F=QQxy
21
17. 根据图P6.1所示ASM流程图,设计一个定序型控制器
解: 1)使用Qa、Qb、Qc、Qd四个触发器对应四个状态a,b,c,d
2)状态转移真值表及激励方程表达式
PSQaQbQcQd1 0 0 0 0 1 0 0 NSQaQbQcQd0 1 0 0 0 1 0 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 0 0 1 0 1 0 0 0 转移条件xyxyzx x?wxwxw 0 0 1 0 0 0 0 1
Q(D)=Qx?w?QacdQ(D)=Q?QxybabQ(D)=Qx?QxwcbcQ(D)=Qxyz?Qxw
dbc(3)控制信号
F=Qxy
b18.根据图P6.1所示ASM流程图,设计一个微程序控制器。
解:步骤如下
? 将ASM流程图转化为微程序流程图 ? 确定微指令地址 ? 确定微命令
? 确定微指令格式和字长 ? 确定控制存储器容量
? 写出微地址转移逻辑表达式 ? 将微指令编译成二进制代码。
19. 设计十字路口交通灯控制器 解:交通灯控制系统结构框图
主干道AgAyAr乡间道BgByBr显示电路控制器Q0 Q1 Q2 Q3B0B1B2B3CP定时电路
控制系统ASM图如下
Ag, BrNOT=60sYESAy, BrNOT=4sYESAr, BgNOT=20sYESAr, ByNOT=4sYES
21.设计一个彩灯控制器。 解:彩灯电路框图如下
12路彩灯A0……A5B0……B5控制电路CP
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity light is port(clk1: in std_logic; light: buffer std_logic_vector(11 downto 0)); end light;
architecture behv of light is constant len: integer:=11;
---时钟信号--输出
signal banner: std_logic:='0'; ----定义信号banner为两种节拍转换信号;
signal clk,clk2: std_logic; ----信号CLK,CLK2作为辅助时钟
begin
clk<=(clk1 and banner) or (clk2 and not banner); process(clk1) begin if clk1'event and clk1='1' then ---CLK1二分频得CLK2 clk2<=not clk2; end if; end process;
process(clk) ---- variable flag: bit_vector(3 downto 0):=\ begin if clk'event and clk='1' then if flag=\ light<='1' &light(len downto 1); ----顺序向右循环移位 if light(1)='1' then ----依次点亮 flag:=\ end if; elsif flag=\ ———依次熄灭 light<=light(len-1 downto 0) & '0'; if light(10)='0' then flag:=\ end if;
elsif flag=\ light<= light(len-1 downto 0) & '1'; ----顺序向左循环移位 if light(10)='1' then ----依次点亮 flag:=\ end if; elsif flag=\ ———依次熄灭 light<= '0' & light(len downto 1); if light(1)='0' then flag:=\ end if; elsif flag=\ light(len downto 6)<=light(len-1 downto 6)&'1'; ---从中间向两边点 light(len-6 downto 0)<='1'&light(len-6 downto 1); if light(1)='1' then flag:=\ end if; elsif flag=\ light(len downto 6)<='0'&light(len downto 7); ----从两边向中间熄
light(len-6 downto 0)<=light(len-7 downto 0)&'0'; if light(2)='0' then flag:=\ end if;
elsif flag=\ light(len downto 6)<='1'&light(len downto 7); ----奇偶位循环点亮 light(len-6 downto 0)<='1'&light(len-6 downto 1); if light(1)='1' then flag:=\ end if;
elsif flag=\ light<=\ flag:=\
elsif flag=\ banner<=not banner; 拍 flag:=\ end if; end if; end process; end behv;
----从新开始 ---banner信号转换,实现第二种节