差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
programming_fpga_w_verilog [2021/09/09 13:28] gongyusu [1. 逻辑] |
programming_fpga_w_verilog [2021/09/11 18:53] (当前版本) gongyusu |
||
---|---|---|---|
行 9: | 行 9: | ||
#### 逻辑门 | #### 逻辑门 | ||
逻辑门有输入和输出,这些数字输入和输出可以是“高”或者“低”, 无论是输入端还是输出端,所谓的“低”指的是接近于0V(地)的电压,而“高”一般是超过提供给该逻辑器件的供电电压一半以上的电压,给FPGA提供的电压一般为1.8V、3.3V或着5V中的一个,多数的FPGA的工作电压范围有一定的冗余度,有些FPGA允许在一个器件中存在多个逻辑电压. | 逻辑门有输入和输出,这些数字输入和输出可以是“高”或者“低”, 无论是输入端还是输出端,所谓的“低”指的是接近于0V(地)的电压,而“高”一般是超过提供给该逻辑器件的供电电压一半以上的电压,给FPGA提供的电压一般为1.8V、3.3V或着5V中的一个,多数的FPGA的工作电压范围有一定的冗余度,有些FPGA允许在一个器件中存在多个逻辑电压. | ||
+ | - [[https://www.electronicshub.org/introduction-to-logic-gates/|数字门介绍]] | ||
- | ##### 非门(NOT Gate) | ||
- | 最简单的门就是非门(有时又被成为反相门),它有一个输入和一个输出,如果输入为高电平,输出则为低电平,反之亦然。图1.1 为一个非门的原理图符号,表1.1 为其真值表(列出针对各种输入类型得到的输出结果) | ||
- | {{drawio>notgatesymbol.png}} <WRAP centeralign>图1.1 一个非门</WRAP> | ||
- | \\ | + | - [[not_gate|非门 - NOT Gate]] |
- | 为描述逻辑门或一组逻辑门如何工作,我们一般使用“真值表”,它指定了针对不同的输入信号以及输出信号的组合,经过该逻辑以后的输出值。对于一个非门,表1.1即为其真值表。H(或1)和L(或0)用以表示“高”电平和“低”电平。 | + | - [[and_gate|与门 - AND Gate]] |
+ | - [[or_gate|或门 - OR Gate]] | ||
+ | - [[nand_gate|与非门 - NAND Gate]] | ||
+ | - [[nor_gate|或非门 - NOR Gate]] | ||
- | {{drawio>notgatetruetable.png}}<WRAP centeralign>表1.1 一个非门的真值表</WRAP> | ||
- | 如果你将一个非门的输出连接到另一个非门的输入端,输出的结果将为输入的信号。 | ||
- | {{drawio>notnotgate.png}}<WRAP centeralign> 图1.2 两个非门串联 </WRAP> | ||
- | |||
- | ##### 与门(AND Gate) | ||
- | |||
- | 顾名思义,一个与门如果其所有的输入端都为高电平的时候,其输出为高电平。图1.3 为2输入与门的符号,表1.2为与门的真值表。 | ||
- | |||
- | |||
- | ##### 或门(OR Gate) | ||
- | 或门的任何一个输入端为高电平,其输出端都会变为高。图1.4为一个双输入或门的符号,表1.3为其真值表。 | ||
- | {{drawio>orgatesymbol.png}}<WRAP centeralign>图1.4 一个或门</WRAP> | ||
- | {{drawio>orgatetruetable.png}}<WRAP centeralign>表1.3 一个或门的真值表</WRAP> | ||
- | |||
- | |||
- | {{drawio>andgatesymbol.png}}<WRAP centeralign>图1.3 一个与门</WRAP> | ||
- | {{drawio>andgatetruetable.png}}<WRAP centeralign>表1.2 一个与门的真值表</WRAP> | ||
- | |||
- | ##### 与非门(NAND Gate)和或非门(NOR Gate) | ||
- | 图1.1中非门符号的输出端一个小圆圈表示门的反相功能,一个与非门(与后非)就是一个与门再加一个输出端的反相器构成;或非门为一个或门再加一个输出端的反相器构成。图1.5显示了这两种门的符号,表1.4和表1.5分别为这两种门的真值表。 | ||
- | {{drawio>nandgatesymbol.png}} <WRAP centeralign>图1.5 一个“与非门”和“或非门”</WRAP> | ||
- | {{drawio>nandgatetruetables.png}} <WRAP centeralign>表1.4 一个“与非门”的真值表</WRAP> | ||
- | {{drawio>norgatetruetables.png}}<WRAP centeralign>表1.5 一个“或非门”的真值表</WRAP> | ||
与非门和或非门都是非常通用的门,因为只需要反相它们的输入端或输出端就可以构成其它任何一种门,另外你可以用与非门或着或非门构成非门,只需要将两个输入信号连接在一起就可以。例如图1.6中你可以用3个或非门构成一个与门。 | 与非门和或非门都是非常通用的门,因为只需要反相它们的输入端或输出端就可以构成其它任何一种门,另外你可以用与非门或着或非门构成非门,只需要将两个输入信号连接在一起就可以。例如图1.6中你可以用3个或非门构成一个与门。 | ||
{{drawio>3norgate2nand.png}} <WRAP centeralign>图1.6 用3个“或非门”构成一个“与门”</WRAP> | {{drawio>3norgate2nand.png}} <WRAP centeralign>图1.6 用3个“或非门”构成一个“与门”</WRAP> | ||
+ | De Morgan定律 | ||
- | De Morgan定律 | ||
图1.6的设计利用了逻辑定律中的De Morgan定律 - 将两个输入端“与”后的结果进行取反,和先将两个输入端进行取反以后再“或”得到的结果是一样的。在图1.6中,两个输入端信号先被由“或非门”构成的“非门”取反以后进行“或”操作,再对输出的结果取反。 | 图1.6的设计利用了逻辑定律中的De Morgan定律 - 将两个输入端“与”后的结果进行取反,和先将两个输入端进行取反以后再“或”得到的结果是一样的。在图1.6中,两个输入端信号先被由“或非门”构成的“非门”取反以后进行“或”操作,再对输出的结果取反。 | ||
{{drawio>usenortomakeandtruetable.png}}<WRAP centeralign>表1.6 用多个异或门构成一个与门的真值表</WRAP> | {{drawio>usenortomakeandtruetable.png}}<WRAP centeralign>表1.6 用多个异或门构成一个与门的真值表</WRAP> | ||
- | * 异或门(XOR Gate) | + | - [[xor_gate|异或门 - XOR Gate]] |
- | 前面讲到的“或门”是一种包容性的或,两个输入端A、B只要任何一个为高电平或者两个都为高电平,其输出端就为高电平。但也存在这样一种排斥性的“或”,称之为异或,只有其输入端的电平不同(无论哪个信号是高还是低),其输出端才为高电平。异或门非常有用,可以用来比较输入信号。 | + | |
- | 图1.7 展示了如何使用4个与非门构成一个异或门。 | + | |
- | {{drawio>xorgatesymbol.png}}<WRAP centeralign>图1.7 用4个与非门构成一个异或门</WRAP> | + | |
- | {{drawio>xorgatetruetable.png}}<WRAP centeralign>表1.7 异或门的真值表</WRAP> | + | |
#### 二进制 | #### 二进制 | ||
行 60: | 行 34: | ||
#### 用逻辑实现的“加法” | #### 用逻辑实现的“加法” | ||
你可以用逻辑门来对二进制数进行运算,因为二进制数只是用“位”(bit)表示的数值,你可以用逻辑针对任何数值进行运算。图1.8展示了如何用逻辑门进行一个二进制加。 | 你可以用逻辑门来对二进制数进行运算,因为二进制数只是用“位”(bit)表示的数值,你可以用逻辑针对任何数值进行运算。图1.8展示了如何用逻辑门进行一个二进制加。 | ||
- | {{drawio>asinglebitadder.png}}<WRAP centeralign>图1.8 一个一位加法器</WRAP> | + | {{drawio>asinglebitadder.png}}<WRAP centeralign>图1.8 一个1位加法器</WRAP> |
+ | {{drawio>asinglebitaddertruetable.png}}<WRAP centeralign>表1.9 一个1位加法器的真值表</WRAP> | ||
+ | 从表中可以看出,如果输入端A和B都是0,加法的结果位0, 如果其中一个输入为1,加法的结果为1,然后如果两个输入端都为1,加法的位本身就变成了0,但我们希望将进位输出的1放到下一位,在二进制中,1+1位0,并一个进位(或十进制的2) | ||
+ | 这就意味着,如果我们同时加多于一位的数值,下一个加法的部分将有3个输入(A、B和进位输入),这就需要三个位的加法,图1.9展示了计入进位以后的加法。 | ||
+ | {{drawio>asinglebitadderwithcarryin.png}}<WRAP centeralign>图1.9 一个带有进位输入端的1位加法器</WRAP> | ||
+ | 你也许永远不会用这种方式通过多个门来构建一个加法器,因为有现成的加法器芯片可以用于你的设计,在这里你能够看到加法器是如何通过门电路构成的。 | ||
+ | 如果我们有8级这样的电路,就可以实现2个字节的加法操作,每一个计算机的中央处理器(CPU)都有这种用逻辑门搭建的硬件加法器,一个32位的处理器可以同时处理32位的数值,一个64位的机器能够通过64个图1.9的方式同时将64位数字加起来。 | ||
#### 触发器 - Set-Reset触发器 | #### 触发器 - Set-Reset触发器 |