博文目录

  • 写在前面
  • 正文
    • 初学者数字设计
    • 什么是FPGA? 什么是ASIC?
    • 数字设计师如何使用布尔代数?
    • 使用查找表(LUT)在FPGA内部执行布尔代数
    • 触发器如何在FPGA中工作?
  • 参考资料
  • 交个朋友

写在前面

  • 个人博客首页
  • 注:学习交流使用!

从初学者对数字设计的疑问?到什么是FPGA?什么是ASIC?在到布尔代数如何在FPGA内部实现?最后到数字设计的核心元件触发器?
本文将从简洁的角度带你认识这些数字设计的必备基础知识!


正文



初学者数字设计

您应该问自己的第一个问题是什么是数字设计师?数字设计师通常是工程师,他们针对FPGA或ASIC编写代码,也称为硬件。 Digital Designer使用两种主要的编程语言:VHDL和Verilog。这种类型的代码与软件根本不同!主要区别在于软件代码以处理器为目标,而硬件代码则不是。

中央处理器(CPU)或仅仅是处理器,是软件设计人员需要了解的中央组件。 CPU一次处理一个指令以执行任务。例如,一条指令可能是将寄存器A的内容添加到寄存器B,然后将结果存储在寄存器C中。软件设计人员使用像C这样的语言编写代码,该代码由编译器进行编译。编译器的工作是获取软件设计人员编写的高级代码,并将其转换为处理器可以理解的低级代码。必须理解,在硬件设计中没有编译器!没有什么可以像使用软件编译器那样将代码带入指令中了。

这是因为Digital Designer没有要定位的处理器。相反,它们具有成千上万的离散数字组件,例如查找表,寄存器,RAM,数字信号处理组件等。我们将在以下文章中逐一介绍这些内容,因为它们非常重要。这些是您的基石!数字设计师所编写的代码比软件工程师要低得多。 Digital Designer面向FPGA的各个组件,并且可以控制一切!

您可能会问自己,为什么CPU如此之快,还要使用硬件设计?这是一个好问题。答案是,CPU适用于大量任务,但不是所有任务。没有数字设计师,将无法实现诸如视频处理,雷达数字信号处理,高速股票交易,高速电信等许多功能。学习数字设计很有趣,因为它是最低级别的编程。您的代码用于字面上在诸如和门和或门之类的组件之间布线!让我们开始您进入数字设计世界的美好旅程!


什么是FPGA? 什么是ASIC?

FPGA代表现场可编程门阵列。 FPGA是可以被认为是可以通过电线连接在一起的大量数字组件(门,查找表,触发器)的组件。您编写的代码与电线建立了真正的物理连接,以执行所需的功能。 FPGA和ASIC之所以与众不同,是因为它们擅长并行(同时)执行大量操作。它们用于高速,高性能任务,例如图像处理,电信,数字信号处理,高频股票市场交易等。
ASIC代表专用集成电路。 ASIC在理论上与FPGA相似,不同之处在于ASIC是作为定制电路制造的。 这意味着-与FPGA不同-它是不可重新编程的,因此您最好在第一时间正确! 由于ASIC是定制电路,因此与FPGA相比,它们的速度非常快且功耗更低。 对于手机,mp3播放器和其他电池供电的设备等对功耗敏感的应用,这可能至关重要。

ASIC的最大缺点是成本。 要让一家公司为您构建ASIC,初期投资将花费数十万美元!

FPGA和ASIC均采用硬件描述语言(HDL)设计。 两种最受欢迎的硬件描述语言是VHDL和Verilog。


数字设计师如何使用布尔代数?

布尔代数是FPGA操作的基础。 布尔代数描述了输入和输出取值为true或false(分别为1或0)的操作。 因此,如果您不擅长微积分,则不必担心,布尔代数是最基本的数学运算! 它是由数学家George Boole于1854年引入的。 利用布尔代数建立的规则,可以创建执行所有基本逻辑运算的基础。 下文将讨论的操作是:AND,OR,NOT,XOR(异或)和NAND。 有了这些数字逻辑的基本构建块,就有可能创建更复杂的操作,例如加法,减法,除法等。但是首先我们必须了解基础知识。

与门

需要理解的第一个概念称为真值表。 真值表是根据输入和输出描述功能的表。 通过查看“与”门的真值表可以最好地证明这一点。

2输入与门表示与门具有2个输入和1个输出。 这些值中的每一个都可以具有值0或1,并且输出值取决于2个输入值。 当两个输入值均为1时,输出仅为1。下面是与门的真值表。

Input A Input B Output Q
0 0 0
0 1 0
1 0 0
1 1 1

或门

或门具有2个输入和1个输出。 当两个输入值中的任意一个为1时,输出均为1。以下是“或”门的真值表。

Input A Input B Output Q
0 0 0
0 1 1
1 0 1
1 1 1

非门

非门表示非门有1个输入和1个输出。 输出与输入值相反。 以下是非门的真值表。

Input A Output Q
0 1
1 0

异或门

XOR(异或)门表示XOR(异或)门具有2个输入和1个输出。 当两个输入值不同时,输出为1。 以下是XOR门的真值表。

Input A Input B Output Q
0 0 0
0 1 1
1 0 1
1 1 0

与非门

真值表输出与与门的输出相反。 当两个输入都设置为1时,它仅为0,否则为1。以下是“与非”门的真值表。

Input A Input B Output Q
0 0 1
0 1 1
1 0 1
1 1 0

使用查找表(LUT)在FPGA内部执行布尔代数

上节讨论了布尔代数的基础,即AND,OR,NOT,XOR和NAND门的工作方式。 讨论了真值表的概念。 在此页面中,我们将扩展有关真值表如何工作的主题,并讨论更复杂的布尔代数方程。

首先应该注意,我们前面讨论的所有那些离散逻辑门(AND,OR等)实际上实际上并不存在于FPGA内部! 但是可以执行那些功能。 FPGA能够执行布尔代数的方法是使用查找表(LUT)。 查找表是可以由Digital Designer编程的离散功能块。 LUT使用相同的真值表概念将输出与输入相关联。 让我们尝试一个例子。

为以下布尔方程式创建一个真值表:Q = A * B + A’。 也许我们应该定义这些符号的含义。

* = AND
+ = OR
' = NOT
^ = NAND

因此,从语言上讲,布尔方程Q = A * B + A’可以读为“输出Q等于A与B或A非”。 让我们看一下真值表和该方程式创建的电路。 从下图可以看出,制作此电路总共需要三个门。

Truth Table - A*B + A’

Input A Input B Output Q
0 0 1
0 1 1
1 0 0
1 1 1

上例中的真值表有两个输入(A和B),这意味着有四种可能的输出可能性。 每个输入将可能的输出数量增加2倍。因此,对于一个输入,有2个输出可能性,对于2个输入,有4个输出可能性,对于3个输入,有8个输出可能性,等等。在数学上,这可以表示为2 ^ (输入的数量)。 现在让我们再看一个具有三个输入的示例。 这是我们要为以下项创建真值表的方程:Q = A +(C * B’)。 注意,圆括号表示操作C AND NOT B发生在OR操作之前。

Truth Table - A + (C*B’)

Input A Input B Input C Output Q
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 0
1 0 0 1
1 0 1 1
1 1 0 1
1 1 1 1


如本文开头所述,FPGA内部实际上并不存在离散逻辑门。相反,FPGA使用查找表或LUT。 LUT由数字设计师编程以执行布尔代数方程,就像我们上面看到的两个一样。如您所料,布尔表达式的所有可能组合都需要能够被编程到查找表中。我将再次以不同的方式说:一个3输入LUT可以使您想到使用3个输入信号的任何布尔代数方程。惊人!

根据所使用的FPGA,LUT的大小可能不同,但它们的行为方式相同。 3输入LUT不久前就已成为标准,但今天4输入甚至5输入LUT都很普遍。如果您需要做出更复杂的表达式,则可以使用更多的查找表。 LUT是FPGA中两个最基本的组件之一。单个FPGA具有数千个这些组件。既然您已经更加熟悉了这些功能强大的通用组件,那么现在该讨论FPGA内部另一个最重要的元素了:


触发器如何在FPGA中工作?

在上一节中,我们讨论了查找表(LUT)组件。 这是FPGA内部两个最重要的组件之一,另一个最重要的组件是触发器。 触发器有几种不同的类型(JK,T,D),但最常用的是D触发器。


请注意,在上图中,设备顶部有一个标记为S的引脚。这被称为置位引脚。 在设备底部,有一个标记为R的引脚。这称为复位引脚。 此外,在设备的右侧,有一个标记为Qbar的引脚。 该引脚将始终包含与引脚Q上的值相反的值。既然您知道这些引脚是什么,那就让我们忽略它们! 它们很重要,但不是本文重点。 触发器上最重要的三个引脚是:

D    数据输入到触发器
Q    触发器的Q数据输出
>    时钟输入到触发器

您可能会问自己的第一个问题是,时钟是什么?

注意,不是这种类型的时钟!

而是这种类型的时钟!

数字时钟是使几乎所有数字电路都可以运行的原因。 考虑系统时钟的一种方法是考虑齿轮组。 为了使系统中的任何齿轮都能转动,必须有一些主齿轮来驱动所有其他齿轮。 这实际上是数字逻辑中时钟的目的。 它提供了电压从低到高到低的稳定过渡流,使您的FPGA能够顺畅运行。 此外,类比很有趣,因为齿轮看上去有点像数字时钟的方波。

时钟是允许触发器用作数据存储元件的时钟。 任何数据存储元素都称为寄存逻辑。 寄存逻辑在时钟的跃迁上运行。 99.9%的时间将是上升沿(时钟从0变为1时)。 当触发器看到时钟的上升沿时,它将数据从输入D寄存到输出Q。触发器使复杂的FPGA成为可能! 让我们看一些事件的波形。

上面的波形显示了三个时钟周期事件,由时钟上升沿上的红色箭头表示。 在时钟的第一和第二上升沿之间,D输入从低到高。 输出Q看到D在第二个时钟周期的上升沿从低变高。 上升沿是当触发器采样输入数据的时刻。 此时,Q变为与输入D相同的值。在第三个上升沿,Q再次采样D的值并将其寄存(这就是为什么触发器通常被称为寄存器)的原因。 由于它没有变化,因此Q保持较高。 我们来看另一个波形。

上图显示了D触发器的输入波形和输出的波形。 D触发器对时钟的上升沿敏感,因此当上升沿出现时,输入D会传递到输出Q。这仅发生在上升沿。在第一个时钟周期,Q看到D已变为1,因此它从0切换到1。在第二个时钟沿,Q再次检查D的值并发现它再次为低,因此变为低。

现在您了解了它们是如何工作的,让我们讨论它们为什么对数字设计如此重要。同样,我提到 触发器 和LUT是FPGA内部两个最重要的组件。触发器(寄存器)如何工作的概念对于成为一名优秀的数字设计师至关重要。这些小家伙无处不在!触发器是FPGA中的主要组件,用于将状态保持在芯片内部。

如果一切都是由LUT组成的,则无法在FPGA中保持状态。这意味着FPGA将不知道以前发生了什么。输入上的所有更改都将立即被评估,并通过一个很长的与门、或门等链发送给输出。但是,为了完成绝大多数任务,FPGA需要了解一些过去的知识。这样,它可以跟踪计数器,状态机和事物的状态。触发器使这成为可能。如果您仍然不太了解这个概念,好吧,这是一种抽象的思维方式。使用硬件描述语言(HDL)的工作越多,触发器在FPGA设计中的重要性就越明显。


参考资料

  • 参考资料1
  • 参考资料2
  • 参考资料3

交个朋友

  • 个人微信公众号:FPGA LAB,左下角二维码;

  • 知乎:李锐博恩,右下角二维码。

  • FPGA/IC技术交流2020

FPGA基础知识极简教程(1)从布尔代数到触发器相关推荐

  1. FPGA基础知识极简教程(10)二进制到BCD转换算法

    文章目录 写在前面 正文 快速认识 实现方式一 实现方式二 写在最后 写在前面 FPGA基础知识极简教程(9)讲到了七段数码管的显示Verilog设计,我们都知道,要在数码管上显示的数字,使用BCD编 ...

  2. FPGA基础知识极简教程(7)详解亚稳态与跨时钟域传输

    博文目录 写在前面 正文 FPGA或ASIC中的传播延迟 建立和保持时间是什么? 建立和保持时间与传播延迟和时钟频率有何关系? 如果违反建立和保持时间会发生什么? FPGA中的亚稳定是什么? 亚稳态何 ...

  3. FPGA基础知识极简教程(4)从FIFO设计讲起之异步FIFO篇

    博文目录 写在前面 正文 同步FIFO回顾 $clog2()系统函数使用 综合属性控制资源使用 异步FIFO设计 FIFO用途回顾 异步FIFO原理回顾 异步FIFO设计 异步FIFO仿真 参考资料 ...

  4. FPGA基础知识极简教程(9)七段数码管显示的Verilog简单设计

    博文目录 写在前面 正文 七段数码管原理 七段数码管译码表 单个七段数码管显示verilog设计 多个数码管动态扫描显示 参考资料 交个朋友 写在前面 作为FPGA的基础知识教程怎么能少得了这个简单的 ...

  5. FPGA基础知识极简教程(6)UART通信与移位寄存器的应用

    博文目录 写在前面 正文 关于UART的介绍 UART通信过程 UART.RS232以及TTL之间的关系 UART的使用场合 有关UART的总结 调试UART的技巧 UART的Verilog实现 波特 ...

  6. FPGA基础知识极简教程(3)从FIFO设计讲起之同步FIFO篇

    博文目录 写在前面 正文 FPGA/ASIC中的FIFO 同步FIFO的设计 参考资料 交个朋友 写在前面 个人博客首页 注:学习交流使用! 正文 FPGA/ASIC中的FIFO FIFO缓冲区如何用 ...

  7. FPGA基础知识极简教程(8)详解三态缓冲器

    博文目录 写在前面 正文 全双工与半双工 FPGA和ASIC中的三态缓冲器 如何在VHDL和Verilog中推断出三态缓冲区 参考资料 交个朋友 写在前面 下面用举例子的方式引出三态门,内容过长,大家 ...

  8. FPGA基础知识极简教程(5)什么是锁存器以及如何在FPGA开发中避免生成锁存器?

    博文目录 写在前面 正文 什么是D锁存器? 锁存器是如何生成的? 如何避免生成锁存器? 参考资料 交个朋友 写在前面 个人微信公众号: FPGA LAB 个人博客首页 注:学习交流使用! 本文我们将讨 ...

  9. FPGA基础知识极简教程(2)抛却软件思维去设计硬件电路

    博文目录 写在前面 正文 可综合以及不可综合的代码 每个软件程序员需要了解的有关硬件设计的内容 参考资料 交个朋友 写在前面 相关博文 个人博客首页 注:学习交流使用! 学过一门或多门软件语言的数字设 ...

最新文章

  1. OpenCV最基本的测试代码-图像的读取与显示
  2. 【Python-ML】SKlearn库感知器(perceptron) 使用
  3. PyTorch : torch.nn.xxx 和 torch.nn.functional.xxx
  4. 正负相关 最大信息系数mic_求二项展开式中二项式系数最大项、系数最大项的问题...
  5. 软件管理定律系列之布鲁克斯定律
  6. 旅行商问题的n种解法
  7. 电脑主板跳线_DIY电脑主板的跳线安装及排序规则
  8. 【SQL】血缘解析 SQL parser 工具介绍
  9. 【笔记】UL/DL(上行/下行)方向上每个符号IQ的时序关系(U平面和C平面)
  10. redis应用场景java实例_redis使用场景和java测试案例
  11. python抓取网页电话号码_利用正则表达式编写python 爬虫,抓取网页电话号码!...
  12. sql语句 isnull(列名,'')='' /STUFF的意思
  13. 检查某个网段存活的主机_shell脚本
  14. java ee图书管理系统_基于jsp的图书管理系统-JavaEE实现图书管理系统 - java项目源码...
  15. 小程序源码:首席省钱赚钱专家微信小程序源码下载,淘宝客 外卖侠 外卖cps 首席多多客 八合一小程序源码
  16. HFSS远场辐射设置与辐射方向图设置
  17. 系统无忧 Ghost XP SP3 快速装机版V2011.07
  18. python-ip端口扫描器
  19. c语言表示静态存储类别的关键字是,在C语言中,表示静态存储类别的关键字是:...
  20. java中Date计算时间差

热门文章

  1. ODPS数据迁移指南
  2. CAD的如何实现批量打印?
  3. gitcafe for Eclipse的环境配置
  4. 源码版本管理gitcafe(已经迁移到coding)
  5. el-table表格数据按数字、字母及汉字,分页排序
  6. 【数学分析】闭区间套定理及其证明
  7. visio反向生成mysql数据库模型图_Visio对MySQL数据库反向工程生成ER数据库模型图...
  8. 谈一谈最近关闭的Kindle人论坛
  9. 用limma包进行多组差异表达分析
  10. 32、STM8 无源蜂鸣器实验