组合逻辑电路Part2(含verilog代码)

常见器件原理-续

加/减法器

加法器是构成计算机中算术运算电路的基本单元。按是否考虑低位进位可分为半加法器和全加法器。
半加法器只考虑本位的两个数相加;全加器还要考虑低位向本位的进位,相当于3个数相加。以最简单的1位加法器为例。

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ˉ=ABC0=AB

1位全加法器

考虑低位的进位信号。逻辑符号中有3个输入端,两个输出端。
1位全加法器
输出表达式:
{ 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=ABCIC0=AB+(AB)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码的代数关系,然后利用加法器,将某个码型和常数作为输入端,另一个码型作为输出端。

  1. 余3码=BCD码+3;
  2. 减法可用补码作为加法实现;
  3. 3—》0011;反码:1100;补码:1101

利用四位加法器,标出输入输出,如下图:
余3码与8421码的转换

数值比较器

数值比较器指对两个位数相同的二进制数进行数值比较,输出两个数的比较结果。根据比较顺序可分为从低位到高位,从高位到低位。

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=x515x0x<55x1010<x15
试设计一个组合逻辑电路实现其功能。
分析

  • y是关于x的分段函数,对应三种可能的输出: x , 5 , x ‾ x,5,\overline x x,5,x
  • 同时输入x需要分别和5,10比较大小,以确定输出。
  • 要实现这个功能,我们要用到数值比较器、多路数据选择器。即设计一个电路,输入为两个比较器的输出,输出为两位二进制数,作为4选1MUX的选择端。

解答

  1. 用真值表列出比较器的输入输出关系
    真值表
    其中 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的值。前面的分段函数与比较器输出的关系整理为下图:
    条件与输出关系
  2. 逻辑电路
    在这里插入图片描述
  3. 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)有尖峰脉冲,即发生了冒险。

冒险可分为:逻辑冒险和功能冒险。

  • 逻辑冒险:单个变量变化的情况下,电路在过渡过程中产生的冒险一般称为逻辑冒险。
  • 功能冒险:两个或多个输入变量因变化时间不同步而引起的冒险称为功能冒险。

逻辑冒险的判别

  1. 代数法
    逻辑冒险
    0型冒险(负向毛刺),比如: F = A + A ‾ F=A+\overline A F=A+A
    1型冒险(正向毛刺),比如: F = A ⋅ A ‾ F=A·\overline A F=AA
    判断过程
  • 列出表达式
  • 检查变量,若原、反变量同时出现,可能存在冒险;
  • 带入其余变量的取值组合,判断是0型冒险or1型冒险,或者没有冒险。

例如: F = A ‾ B + A C F=\overline AB+ AC F=AB+AC,当 B C = 11 BC=11 BC=11时,出现0型冒险。

  1. 卡诺图法
    将函数填入卡诺图,以函数表达式的形式画圈。若有两个K圈相切处未被其他圈包围,就可能发生冒险现象。同样以表达式 F = A ‾ B + A C F=\overline AB+ AC F=AB+AC为例,画出卡诺图:
    卡诺图法
    两个素项环相切处,并未被其他圈包围。在BC=11时,A由1变为0,将发生0型冒险。

冒险现象的消除

  • 增加冗余项
    两K圈相切处包围一K圈,虽然简化函数时可去掉冗余项,但为了电路工作可靠又加上它,最简化电路不一定是最佳电路;

  • 加滤波信号
    尖脉冲含有丰富的高频分量,我们在电路设计时,可以增加一个低通滤波器滤掉高频分量。如使用电容滤波(平滑滤波)以减小尖脉冲。

  • 加选通信号:
    取样脉冲仅在输出门处于稳定值期间到来,以保证输出结果正确,避开冒险。这个方法有严格的时间要求。

上一篇: 组合逻辑电路Part1(含verilog代码实现)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值