常见器件原理-续
加/减法器
加法器是构成计算机中算术运算电路的基本单元。按是否考虑低位进位可分为半加法器和全加法器。
半加法器只考虑本位的两个数相加;全加器还要考虑低位向本位的进位,相当于3个数相加。以最简单的1位加法器为例。
1位半加法器
将两个1位二进制数相加,不考虑低位的进位信号。
有两个输入端,两个输出端。S是本位,C0是本位向高位的进位。
输出逻辑表达式:
{
S
=
A
ˉ
B
+
A
B
ˉ
=
A
⊕
B
C
0
=
A
B
\begin{cases} S=\bar{A}B+A\bar{B}=A\oplus B\\ C_0=AB\end{cases}\,
{S=AˉB+ABˉ=A⊕BC0=AB
1位全加法器
考虑低位的进位信号。逻辑符号中有3个输入端,两个输出端。
输出表达式:
{
S
=
A
⊕
B
⊕
C
I
C
0
=
A
B
+
(
A
⊕
B
)
C
I
=
A
B
+
A
C
+
B
C
\begin{cases} S=A\oplus B\oplus C_I\\ C_0=AB+(A\oplus B)C_I=AB+AC+BC\end{cases}\,
{S=A⊕B⊕CIC0=AB+(A⊕B)CI=AB+AC+BC
加法器的级联
行波加法器又称串行进位加法器,是n个全加器的级联,缺点是延迟过高。最坏的情况下,进位会从最低位的全加器传递到最高的全加器。
verilog语言描述多位加法器如下:
//add module
module addn(CI,A,B,S,CO);
parameter n=8 ;
input CI;
input [n-1:0] A,B;
output [n-1:0] S;
output CO;
assign {CO,S}=A+B+CI;
endmodule
加法器的应用
加法器中使用最多的是74LS283,其内部是四个全加器,内部结构见上方加法器级联图。
例:采用四位加法器实现余3码到8421码的转换。
分析:首先找到余3码与BCD码的代数关系,然后利用加法器,将某个码型和常数作为输入端,另一个码型作为输出端。
- 余3码=BCD码+3;
- 减法可用补码作为加法实现;
- 3—》0011;反码:1100;补码:1101
利用四位加法器,标出输入输出,如下图:
数值比较器
数值比较器指对两个位数相同的二进制数进行数值比较,输出两个数的比较结果。根据比较顺序可分为从低位到高位,从高位到低位。
1位数值比较器
1位数值比较器结构简单,用于比较两个1位二进制数的大小并输出比较结果。
输出逻辑表达式为:
{
Y
A
<
B
=
A
ˉ
B
Y
A
>
B
=
A
B
ˉ
Y
A
=
B
=
A
B
+
A
ˉ
B
ˉ
\begin{cases} Y_{A<B}=\bar{A}B\\ Y_{A>B}=A\bar B\\ Y_{A=B}=AB+\bar{A}\bar{B}\end{cases}\,
⎩⎪⎨⎪⎧YA<B=AˉBYA>B=ABˉYA=B=AB+AˉBˉ
多位数值比较器
多位数值比较器又分为两类:以高位比较结果作为输入和以低位比较结果作为输入。对比二者的真值表来区别。
第一种比较器,高位比较结果优先级最高;只有当
S
A
=
B
=
1
S_{A=B}=1
SA=B=1时,才会进一步比较本位A和B的数值大小。
第二种比较器,本位比较结果优先级最高。只有当A=B时才会进一步看低位比较结果。
数值比较器的应用
例:某电路输入为4位二进制数x,输出也是4位二进制数y。已知x和y满足关系:
y
=
{
x
0
≤
x
<
5
5
5
≤
x
≤
10
15
−
x
10
<
x
≤
15
y=\begin{cases} x &{0\leq x<5}\\ 5 &{5\leq x\leq 10}\\ 15-x &{10< x\leq 15}\end{cases}\,
y=⎩⎪⎨⎪⎧x515−x0≤x<55≤x≤1010<x≤15
试设计一个组合逻辑电路实现其功能。
分析:
- y是关于x的分段函数,对应三种可能的输出: x , 5 , x ‾ x,5,\overline x x,5,x。
- 同时输入x需要分别和5,10比较大小,以确定输出。
- 要实现这个功能,我们要用到数值比较器、多路数据选择器。即设计一个电路,输入为两个比较器的输出,输出为两位二进制数,作为4选1MUX的选择端。
解答:
- 用真值表列出比较器的输入输出关系
其中 B 1 = 5 , B 2 = 10 B1=5,B2=10 B1=5,B2=10。观察真值表, F A < B 1 FA<B1 FA<B1和 F A > B 2 FA>B2 FA>B2可以唯一地确定其中一个条件,作为选择器的地址输入 A 1 A1 A1和 A 0 A0 A0的值。前面的分段函数与比较器输出的关系整理为下图:
- 逻辑电路
- verilog语言描述
//add module
module test(x,y);
input [3:0]x;
output [3:0] S;
reg [3:0]y;
always@(x)
if(x<4'd5)y<=x;
else if(x>4'd10) y<=~x;
else y<=5;
endmodule
竞争和冒险
前面分析组合逻辑电路的功能时,都假定输入信号处于稳定状态(静态),但实际电路传输信号时总是会有干扰或时延,不可能有如此理想的状态;若输入信号处于跳变状态(动态),且门电路的传输延迟时间 tpd 不能忽略时,组合逻辑电路就有可能产生竞争与冒险现象。
基本定义
当某一输入变量发生变化时,由于传输路径不同,到达电路某一各门的输入端有先后时间之分,这种时差现象即为竞争,由于竞争而使电路输出端产生尖峰脉冲的现象为冒险。竞争不一定产生冒险,但毛刺会影响下一级产生错误动作。
如上图(a),输出F理论上应恒为1,但实际波形图(b)有尖峰脉冲,即发生了冒险。
冒险可分为:逻辑冒险和功能冒险。
- 逻辑冒险:单个变量变化的情况下,电路在过渡过程中产生的冒险一般称为逻辑冒险。
- 功能冒险:两个或多个输入变量因变化时间不同步而引起的冒险称为功能冒险。
逻辑冒险的判别
- 代数法
0型冒险(负向毛刺),比如: F = A + A ‾ F=A+\overline A F=A+A
1型冒险(正向毛刺),比如: F = A ⋅ A ‾ F=A·\overline A F=A⋅A
判断过程:
- 列出表达式
- 检查变量,若原、反变量同时出现,可能存在冒险;
- 带入其余变量的取值组合,判断是0型冒险or1型冒险,或者没有冒险。
例如: F = A ‾ B + A C F=\overline AB+ AC F=AB+AC,当 B C = 11 BC=11 BC=11时,出现0型冒险。
- 卡诺图法
将函数填入卡诺图,以函数表达式的形式画圈。若有两个K圈相切处未被其他圈包围,就可能发生冒险现象。同样以表达式 F = A ‾ B + A C F=\overline AB+ AC F=AB+AC为例,画出卡诺图:
两个素项环相切处,并未被其他圈包围。在BC=11时,A由1变为0,将发生0型冒险。
冒险现象的消除
-
增加冗余项
两K圈相切处包围一K圈,虽然简化函数时可去掉冗余项,但为了电路工作可靠又加上它,最简化电路不一定是最佳电路; -
加滤波信号
尖脉冲含有丰富的高频分量,我们在电路设计时,可以增加一个低通滤波器滤掉高频分量。如使用电容滤波(平滑滤波)以减小尖脉冲。 -
加选通信号:
取样脉冲仅在输出门处于稳定值期间到来,以保证输出结果正确,避开冒险。这个方法有严格的时间要求。