EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 FPGA技术江湖 于 2023-2-21 15:40 编辑
$ v3 q' R( T9 i4 u8 r; b
: ?: ?8 K0 {) T+ x' ?1 M& q9 l% G1 q# y2 ]
) w" M+ Q. O6 l
. h) O5 E$ b0 k( m 大侠好,欢迎来到FPGA技术江湖。本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的“傻瓜式”讲解,让电子、信息、通信类专业学生、初入职场小白及打算进阶提升的职业开发者都可以有系统性学习的机会。
) ]. ~1 L& l3 F( A 2 _ g& V7 J H; {2 X7 Y
系统性的掌握技术开发以及相关要求,对个人就业以及职业发展都有着潜在的帮助,希望对大家有所帮助。后续会陆续更新 Xilinx 的 Vivado、ISE 及相关操作软件的开发的相关内容,学习FPGA设计方法及设计思想的同时,实操结合各类操作软件,会让你在技术学习道路上无比的顺畅,告别技术学习小BUG卡破脑壳,告别目前忽悠性的培训诱导,真正的去学习去实战应用,这种快乐试试你就会懂的。话不多说,上货。
3 J$ e; W: A9 z( t% p; |4 `
* i7 o$ s+ B; O7 N# L6 A# e7 o A! Z+ h! t2 z& h( W! d8 m
数字电路中的组合逻辑
* \) C, b( H' p4 `3 X; \& B
' e+ f9 B7 H0 [3 R$ T 根据逻辑功能的不同特点,可以将数字电路分为两大类,一类称为组合逻辑电路(简称组合电路),另一类称为时序逻辑电路(简称时序电路)。
" }% C: {, E$ O! F- f . X6 e* h( ]2 k
在组合逻辑电路中,任何时刻的输出仅仅取决于该时刻的输入,与电路原来的状态无关。这就是组合逻辑电路在逻辑功能上的共同特点。在上一节中,设计的三人表决器就是组合逻辑电路,输出与输入一一对应,和其他无关,输入发生改变,输出立刻跟着改变。
6 Q2 ~: c# ]+ r2 W2 x组合逻辑的设计方法在逻辑代数基础中有一定的简单的叙述。
$ g3 Q6 @5 s: {; q* z
' a3 F8 Q6 d& Z) v& G1 h* W· 根据现有的资源做出合理的假设(通过为1、还是为0,不同的硬件可能会是不同的结构)。
7 m; f' ]% y9 S$ L& }
· 根据设计要求和假设,列出真值表。 8 D! p3 `. h& Y0 K, E) I' F% I
· 根据真值表得出表达式,并化简(公式化,卡诺图)。有时需要化简为与非的形式或者其他形式。
, |$ G1 X# V; B
· 根据化简后的布尔表达式做出电路结构,并且验证。 8 c, t* K, m" h j" F4 i
· 如果最后结果出现错误,上述所有步骤都要检查,如果上述步骤都没有问题,可以考虑电路结构中的连接问题或者器件的损坏。 / G) D' f1 u/ ~" f, |
下面利用一个三人表决器的电路设计来说明一些问题。此电路有三个输入(A、B、C),一个输出(Y),只有当两个及两个以上输入赞成时,Y输出赞成。
- [7 a o0 `' M! A& v
设赞成为1,不赞成为0。根据设计要求得出如下真值表: . B) D0 T( e+ w( `5 C0 |3 W" f: W
! |+ E, x& {, C5 ?8 ]/ t
* K5 G6 u# V4 K6 e8 y6 N/ x
1 c/ |5 L+ j# `& B8 G5 ~
7 ^( }7 n" v+ M N' A/ K; j& Q4 d
T2 o# ]8 ?) b
图1 :三人表决器真值表
2 |' k$ b6 F# y- g& i
; Y* Y- N) c9 E
$ f x! L+ G% k
根据真值表中Y为1的项列出来,对应的A、B、C为1,则留下变量,为0,则留下反变量。
0 |1 ~+ m2 ]: s5 i; B# B3 G3 o- w6 A & N2 Y! Q# }) C# b
Y = A'BC + AB’C + ABC’ + ABC;
$ w8 g% W1 V7 f, ?" e% e5 B! h( \
根据上述布尔表达式,我们得出逻辑电路图: , Z* v# |! k+ U' R8 Q) _3 b0 R/ [* e
( W1 }+ `3 z' e; K# ~. s6 H* N7 [
, N( j# p3 B+ u: _, s, n+ [9 o+ U! P
4 C- g' `7 }4 e& b" Q % @7 u/ B" Y3 ~' F, _; J' _
2 n3 {+ M- Z. P% i图2 :三人表决器的逻辑电路图
3 f3 }- q+ q' F, Y+ Z* f8 D
7 Z( L% r2 U& A: g
7 A0 W, T8 F3 ?! x6 k2 y- p
. w9 C# A8 y% M; r7 f- G 如果所有的逻辑都按照这种写法的话,那么很多的逻辑就会变的很复杂,并且会浪费很多的资源。我们考虑一下,电路既然是按照布尔表达式做出来的,那么布尔表达式能不能化简一下呢? / C, G0 ^2 b1 B& g) E. r
# ]0 ~# g4 F* \! l% `
$ t( k3 b0 E" ?6 L# P' [# ? Y = A'BC + AB’C + ABC’ + ABC; = A'BC + ABC + AB’C + ABC + ABC’+ABC; = BC(A' + A) + AC(B+B') + AB(C+C') = BC+AC+AB
7 q+ H9 P4 T4 d, `/ N1 `# l
上述布尔表达式所对应的逻辑电路图如下: & k2 A+ v$ n1 ]) b; h
, _' I- @5 K# T
4 T8 @1 B+ j4 x/ q% b
+ E% d2 k- q; G! q8 f
! s. t: P9 r* L, @
+ z' l3 n% r, ~7 t+ e图3 :化简后的布尔表达式所对应的电路图
- c) j6 q5 k' T: k6 g5 Z
% \, H9 I9 A1 R6 E, d0 ?
: y& h$ t2 V4 w: l$ N s5 O
) g6 n, F3 b A% C4 p0 Q
思考 :半加器、全加器、多路选择器、乘法器、除法器等常用组合逻辑电路的设计与实现? 6 r: ~9 P6 s+ J, E, z. Q0 ~' Z
A0 h; e- l; o7 c4 O P+ T0 V
在设计组合逻辑时,分析和设计都是在输入、输出处于稳定的逻辑电平下进行的。为了保证系统工作的可靠性,有必要再观察一下当输入信号逻辑电平发生变化的瞬间电路的工作情况。
, S+ T# {+ B9 t ; C6 r' O8 _" ^0 g/ }
在图1-28所示的与门电路中,稳态下无论A=1、B=0还是A=0、B=1,输出都应该是Y=0;但是输入信号A从1变为0时,如果B从0变为1,由于某些原因(布线的宽度、厚度、温度等),B先从0变为1了,这样在极短的时间内出现了A和B都是1的情况,与门电路就会输出一个极窄的Y=1的尖峰脉冲,或称为电压毛刺。这个尖峰脉冲不符合门电路稳态下的逻辑功能,因而它是系统内部的一种噪声。 $ S5 u9 p- ~& J3 p8 o' `1 }7 \
% Y: U! f0 [+ r) P1 _) W: o! b# c ; D) X9 N) [% ]$ H. L9 o
7 A, k" j( N9 g% t2 M
2 v5 V' h6 s1 G
6 G# \' U' J- Z$ O# k* n
& O4 S2 E" `) s" m" H2 T' ~& T! |3 L$ n' `) J; z
图4 :与门由于竞争而产生的尖峰脉冲
7 C* l# S! T2 X' _$ }% l% i# v5 F
4 s. T/ n( J$ @6 B9 f6 u
# ~4 |3 Y2 k6 c4 s9 V1 l3 n5 _
将门电路两个输入信号同时向相反的逻辑电平跳变(一个从1变为0,另一个从0变为1)的现象称为竞争。
$ c `) d5 d7 `8 ]3 a0 A+ X
) N3 `7 z9 ^1 w* O" y- A3 H 在有竞争时,不一定都会产生尖峰脉冲。例:在上述的与门中,如果A先于B发生了改变,此时就不会产生尖峰脉冲。 ! }1 A* x' k3 O4 X; O7 \& l! u
" I( j% x0 T, e 思考:可以尝试分析一下或门,分析或门是否有可能会产生尖峰脉冲? 3 K' ^8 B( g# l5 |2 U4 `
) g6 J3 \& L! a 与门和或门在竞争时,都有可能产生尖峰脉冲。与门和或门是复杂数字逻辑电路中的两个基本门电路,A、B经过不同的传输途径达到,那么在设计时往往难于准确知道A、B到达次序的先后,以及它们在上升时间和下降时间上的细微差异。因此,我们只能说只要存在竞争现象,输出就有可能出现违背稳态下逻辑关系的尖峰脉冲。 0 x9 ^& I% F9 [* A
% K1 z: i6 K- t) ` 由于竞争而在电路输出端可能产生尖峰脉冲的现象称为竞争-冒险。 1 V* X; G6 J& E [
0 H+ W4 h' B ^! N$ k3 \' t 如果后续电路是一个对尖峰脉冲敏感的电路,那么这种尖峰脉冲将可能使后续电路发生误动作。
+ W4 m2 r/ i& D4 @ \5 k& L" A1 F3 Z , z# y; M- a9 h9 \$ ] m
思考:如果存在竞争冒险现象的话,应该怎么避免?
7 P) |' Q+ t Y% l, A4 h, [; }2 m
% f7 k t3 e/ V# x! T, P+ b$ n. H; l · 可以在输出端接入滤波电容;由于竞争-冒险而产生的尖峰脉冲一般都很窄,所以在输出端并接一个很小的滤波电容就足以把尖峰脉冲的幅度削弱至门电路的阈值电压一下。这种方法简单易行,而缺点是增加了输出电压波形的上升时间和下降时间,使波形变坏。
% v) |: G" \% l c
· 引入选通脉冲;由于电路的延迟产生的尖峰脉冲是极窄的,如果在输入(输出)信号稳定后,我们再去选取结果作为输出,此时的结果就是正确的。那么此时的选通脉冲就必须要要在稳定后再能出现,否则也无济于事。 ) X" H8 d0 X- D( m* s
修改逻辑设计;此方法的局限性比较大,不再做过多介绍。 ! p/ e5 u: O7 z$ B6 B* k
" o# f6 m8 J1 X# `$ F/ m/ V4 m( l
通过对组合逻辑的认识,感觉自己已经可以设计任何电路。只要按照标准的设计流程,我们都可以很快的做出电路。 4 _% E+ D" g- a
" I; f+ y8 u* e5 Y# L1 w 思考 :目前需设计一个自动售货机,贩卖售价为三元的饮料,要求每次只能投入一个一元的硬币。可想而知,我们投入第一个硬币没有反应;投入第二个硬币没有反应;当我们投入第三个硬币时,售货机会给我们一瓶饮料。如果内部是组合逻辑的话,三次投硬币的输入并没有任何改变,但是产生了不同的结果,显然内部结构不是单纯的组合逻辑。内部的功能有一定的记忆性功能,能够清楚的记得之前我们投入的硬币的数量。此时我们应该如何去设计电路。
7 @' K9 W- m) Q8 e/ N/ e ( n4 A2 X! a8 N8 o( g
组合逻辑电路中,任一时刻的输出信号仅取决于当时的输入信号。 5 u. Q' K% l" h2 C$ u1 i% e3 N
* B* _1 [( J9 K' z% D6 E
+ U+ T7 \/ S9 F% y |