FPGA的人工智能之路:基于Intel FPGA开发的入门到实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.4 早期的逻辑功能实现

我们再来看FPGA是如何从最早期的逻辑器件发展而来的。早期的数字逻辑设计要求设计人员在电路板或面包板上使用多个芯片连接在一起,类似于此处所示。每个芯片包括一个或多个逻辑门(如NAND、AND、OR或反相器)或简单的逻辑结构(如触发器或多路复用器)。20世纪60年代、70年代的许多设计都是使用流行的德州仪器7400系列TTL器件或晶体管-晶体管逻辑器件构建的。如图1-7所示的是通过7400系列的TTL器件设计的LED灯显示电路,该设计使用了11个TTL芯片才实现了一个简单的功能。

图1-7 早期的数字逻辑电路

在使用TTL器件进行设计时,我们的目标通常是尽可能少地使用芯片,以降低成本并最大限度地缩小电路板空间,还必须考虑当前的设备库存。例如,如果没有可用的OR门,是否可以调整设计以使用NAND门,这可能会减少器件容量,并提高性能吗?这些类型的“优化”有时需要对逻辑函数方程进行复杂的操作并对其进行验证,以确保更改不会影响设计的基本功能。

1.4.1 数字设计与TTL逻辑

看一下逻辑设计创建的基本流程,就可以看到它是如何完成相应功能的。逻辑函数从创建真值表(如图1-8所示)开始,真值表列出了逻辑的所有可能输入,以及相关输出应该与某些输入组合的内容。对于n个输入,有2n种可能的输入组合,必须将它们考虑在内。

图1-8 真值表

通过真值表,我们可以创建卡诺图,如图1-8(右图)所示。卡诺图根据行和列组织的输入将可能的输出组织成网格。当输入组合产生1的输出时,它被称为最小项。将最小项放置在网格中的适当位置,以匹配真值表中定义的输出。

一旦在卡诺图中输入所有的最小项,就可以在最小项周围绘制方框,以简化所需的输入组合。利用这些方框可以轻松创建更加简化的逻辑表达式,即所谓的卡诺图化简。

卡诺图上的每个框都包含1个或多个最小项。采用每个框的公共输入,我们可以为函数创建一个逻辑表达式作为“乘积之和”。每个乘积对应一个AND门,它使用相应的输入创建正确的输出。例如,当A和B均为1时,输出始终为1,因此表达项包含在表达式中。

要在硬件中直接实现图1-9这个功能,我们需要6个双输入AND门、一个六输入OR门,如果想要同步输出,还需要一个输出寄存器或触发器。在TTL器件中,一般不提供六输入OR门,因此需要级联更小的OR门,但这会增加延迟和组件数。

图1-9 逻辑实现

1.4.2 从TTL到可编程逻辑

逻辑实现的一般特征:

(1)乘积和AND-OR门(组合逻辑);

(2)存储结果(寄存器输出);

(3)连线资源。

设想一下:

(1)将逻辑功能固定(如TTL器件),但是它们组合到一个设备里将会怎样?

(2)布线(路由)连接通过某种方式控制(编程)将怎么样?

通常,大多数逻辑函数可以使用上节示例中的方法简化为乘积和。这些功能可以使用两级组合逻辑来实现:AND门用于创建乘积,OR门用于将乘积相加。同时,在一些应用中,也需要在输入端加入反相器以实现特定的逻辑功能。

要存储输出或将输出同步到其他输出,需要使用寄存器。如果不需要存储或同步,则可以绕过寄存器。

使用TTL逻辑器件,可以将这些独立的组件连接在一起,组件可以放在实验室面包板上,也可以通过印刷电路板上铜质走线来进行连接。

考虑到逻辑函数实现的通用化实现,如果可以将这些门和寄存器组合到一个器件中会怎样?如果从AND门到OR门和从OR门到寄存器有固定连接,又会怎样呢?更进一步,如果有一种方法可以对输入与AND门之间的连接进行编程,从而决定应该使用哪些输入以及在哪里使用这些输入,又会怎样呢?