首页 > 其他分享 >《FPGA原理和结构》——读书笔记

《FPGA原理和结构》——读书笔记

时间:2023-12-28 20:23:44浏览次数:37  
标签:逻辑 FPGA 读书笔记 电路 布线 模块 原理 时钟

最近做了一个关于FPGA的项目后,读了《FPGA原理和结构》这本书。主要梗概内容和想法如下。

第一章:理解FPGA所需要的基础知识

理解FPGA我们需要数电的组合逻辑、时序逻辑等内容的知识。FPGA(20世纪70年度发展起来的,因为其具有通过组合使用器件内大量的逻辑块来实现所需的电路,比以往侠义的PLD设计自由度更高,并且有近似于门阵列的构造),其从“百家争鸣”到“合并‘最后趋于稳定的”巨头垄断和行业洗牌“阶段,现在主要由Xilinx,Altera,Lattice和Microsemi垄断,前二者占据了市场约90%的份额,。然后书中介绍了后面文中需要提及的FPGA专业术语的缩写和解释。比如:LUT(Look-up Table,查找表),通过将函数的真值表存放在少量内存单元中来实现组合逻辑电路功能的模块称为LUT。

第二章:FPGA概要

  1. 对于FPGA的构成要素,如图:

image-20230523222113213

除了上面的要素外,还有一些必要电路,如时钟树,配置链、测试电路等,商用的FPGA还有处理器,块存储器、乘法器等固定功能的硬核电路。

  1. 在可编程技术(FPGA通过可编程的开关来控制电路结构)中,目前有三种技术,如图:

image-20230523222429536

尽管静态存储器和其他编程技术相比有不少缺点,但仅”能够应用最先进的CMOS工艺“就能屏蔽其他所有的缺点,所有目前静态存储器的FPGA是先进CMOS制程的制程驱动产品。

  1. 接着以表决电路为例,我们可以看到FPGA的电路实现原理:

image-20230524141703051

image-20230524141856230

其中最重要的就是实现逻辑的可编程逻辑块,主要的方式为乘积项(利用可编程的AND阵列和OR阵列)、查找表(最为常用)、其他逻辑实现(比如数据选择方式)

image-20230524143540978

image-20230524143556946

第三章:FPGA的结构

  1. FPGA由三大要素构成:

1)提供外部接口的可编程输入/输出要素

2)实现逻辑电路需求的可编程逻辑要素

3)连接前两种要素的可编程布线要素(PS:从第二章的表决电路图也可以看出)

此外,为了提高运算性能,FPGA上还会嵌入其他硬件电路模块,比如DSP、嵌入式内存以及生成时钟用的PLL或DLL。

岛型FPGA如如下图所示:

image-20230524145042039

  1. 接下来介绍FPGA结构中的查找表、布线线段、开关块、IO块、PLL和DLL等不同的构造选择等。

比如:

  • 增加逻辑每个逻辑块的功能,就可以以更少的逻辑块实现电路,但是逻辑块面积和输入/输出会增大(需要考虑面积、速度和内部延迟等的平衡)
  • 在布线架构中,需要确定逻辑块和布线通道间的开关布置,以及布线的线段长度。比如电路延迟影响大的是因为最近的制程中,布线延迟比逻辑延迟占比更大,还需要考虑速度,功耗约束等等因素。
  • 开关块的拓扑有不相交型(赛灵思型)、通用型和威尔顿型
  • I/O块(近几年结构基本相同):

image-20230524151020495

  • 硬宏:随着半导体集成度的提升和FPGA规模的增大,需要将通用接口电路等硬件模块抽象出来,作为专用硬件嵌入FPGA芯片。

image-20230524151947629

上图为Zynq-7000的硬件架构,分为两部分:

1)处理器部

搭载两颗ARM Cortex A9核心的多核处理器,且外部存储器接口和各种输入/输出接口的控制器也都硬宏化,基于AMBA协议的片上连接标准和处理器相连。

2)可编程逻辑部

和普通的FPGA相同,由基于查找表的逻辑块、DSP块、嵌入式存储器等组成,只要用户遵从标准设计电路接口,就可以将编程逻辑上电 用户电路连接到AMBA交换模块上,然后再更硬核处理器相连。

  • JTAG(Joint Test Action Group)接口:在开发和调试FPGA电路的时候,需要从开发所使用的上位机频繁地重写FPGA,大多数商用FPGA都支持通过JTAG接口进行配置。值得一提的时,在工程中我们常用的电路调试模块,通常在运行时需要将观测信号引出到输出引脚,再在输出引脚处连接观测装置,整个过程比较繁琐。-------->FPGA厂商优化措施:先将需要观测的信号的变化写入嵌入式存储器,再通过JTAG读取上位机,然后就能直观地看到信号波形。这样就实现了虚拟的逻辑分析仪功能。

  • PLL(Phase Locked Loop)&DLL(Delay Locked Loop)

image-20230524155410826

鉴相器:比较时钟的相位差

VCO(voltage-controlled oscillator,压控振荡器):如果时钟相同,则维持VCO电电压;如果不一致就需要通过控制电路对VCO电压进行调整:VCO主频过高则降低电压,反之则提升电压。

image-20230524160155349

DLL与PLL最大的不同就是没有VCO,通过调整基准时钟到受控时钟的延迟来实现。前者可以消除时钟偏移,稳定性好,不容易积累相位误差。然而PLL时钟合成的自由度更高,所以目前采用PLL的FPGA架构为主流。

第四章:设计流程和工具

image-20230524162145229

image-20230524162155342

大致和平时利用FPGA工具链开发时的流程差不多。其中值得一提的有:

  1. HSL(High Level Synthesis,高层次综合)设计:最近传统的数字电路设计方式是绘制基于AND、OR等逻辑门的电路图,而近些年使用RTL描述成为主流。这些方式虽可以让开发者掌握电路的实现细节并有针对地实施优化,但设计时间长,且容易引入人为的设计错误。因此更高抽象的行为(也成为高层次综合)描述的开发电路技术历经多年发展,现在已经进入实用化阶段。

image-20230524163853945

行为综合把变量映射为寄存器实例、把数组映射为内存实例、把函数映射为电路模块,然后顺序、分支、循环、函数调用等流程控制用状态机实现。

image-20230524164438326

  1. 基于IP的设计方法

随着数字电路的系统规模不断增大,开发周期、开发成本高成为了不可忽视的问题。实际系统中像接口、外围设备控制、通信、加密、压缩、图像处理等各式各样的设计开发都是通用的,通过高效地重复利用成品模块就可以减轻开发周期、成本上的问题。这种可以通用和重复使用的设计资产被称为IP(也可以叫做IP模块、IP核、IP宏)。

例如FPGA内部集成的内存、运算块、PLL、高速收发器等模块。在电路代码中将IP作为模块实例化后,再和其他模块连接就可以了。

image-20230524184128334

  1. 硬核处理器和软核处理器

image-20230524184350336

第五章:设计原理

EDA(Electronic Design Automation,电子设计自动化)是充分发挥LSI性能的关键技术理论上,一款FPGA所能达到的性能上限很大程度上取决于器件的架构和EDA工具。就如汽车,无论引擎(制程)多么强劲,都需要配合适当的车体(框架)和驾驶技术(EDA工具)才能发挥出极限速度。

image-20230524190643715

器件上查找表的输入数是既定的(查找表能实现输入数不大于自己的任意逻辑),而FPGA的设计就是要从目标电路的逻辑函数中不断分离出既定输入数之内的逻辑,并将其映射到查找表上。然后将这些查找表通过布线连接,就可以在FPGA上实现目标电路。

FPGA和ASIC的区别在于,ASIC通过组合使用标准单元库中的逻辑电路,而FPGA则使用统一构造的查找表。

  1. 工艺映射:指不依赖于任何工艺的门级网表转换为由特定FPGA逻辑单元(由查找表或MUX等逻辑电路实现的FPGA上的最小逻辑单位)所表示的网表的过程。

  2. 逻辑打包:主流的FPGA逻辑块都具有多个查找表,因此将查找表高效地打包到逻辑块的过程是不可或缺的。要点:

  • 逻辑块内部布线(布局布线)和逻辑块外部布线(布线通道的布线)延迟相差很大。
  • 如果逻辑块中有查找表空闲,资源使用率就会降低(增加逻辑块的使用量),因此要尽量在每个逻辑块内填装更多的逻辑。

但是按照上述优化时,无法对延迟进行优化。书中又介绍了一些其他的 方法。

  1. 布局布线:FPGA设计流程的最后一个步骤---在物理上确定逻辑块的位置和信号连接路径。一般来说首先会确定逻辑块的布局,然后再对逻辑块的连线进行布线。

比如多伦多大学开发的、在学术界被广泛应用的布局布线工具(VPR,versatile place and route)

image-20230524192919485

  1. 低功耗设计工具

在FPGA技术面临的众多挑战中,功耗过高是影响嵌入式SoC等器件的重要因素,因此在工艺映射、逻辑打包到布局布线的过程中,都进行了降低功耗的设计方法和相关研究。

image-20230524193353274

本章对FPGA设计工具的原理和发展过程进行简单的介绍。每个研究都以最优化的延迟、面积和功耗为目的,然而每个设计步骤达到最优化不意味着最终电路为最优化,各个设计过程之间还需要配合。

第六章:硬件算法

这章主要介绍适合硬件实现的处理方法,以及将这些方法具象化的硬件模型。比如流水线结构、并行计算、数据流机、细胞自动机、模式匹配等,这部分我大概浏览了下,比较考验数学功底

标签:逻辑,FPGA,读书笔记,电路,布线,模块,原理,时钟
From: https://www.cnblogs.com/lgziyan/p/17933478.html

相关文章

  • FPGA处理编码信号进行毛刺滤波
    目录一、前言二、滤波算法三、代码设计一、前言在利用处理编码信号时,一般在较为理想的环境下可以很方便进行计算,判断等。但是由于有时候受到电磁干扰等环境因素,会导致编码信号产生毛刺等,这时候如果不对编码信号进行预处理而是直接进行边缘判断等操作则极容易导致错误,所以需要提......
  • DAC转化——FPGA驱动LTC1446
    目录一、前言二、结合LTC1446芯片手册分析三、Verilog代码与仿真四、总结一、前言最近在学习利用FPGA结合DAC芯片实现数模转换,在实验中选择的LTC1446这款芯片。接下来自己将结合芯片手册进行分析,并编写Verilog代码并进行仿真验证。二、结合LTC1446芯片手册分析首先从上述第......
  • FPGA驱动AD9240实现AD转换
    目录一、前言二、时序原理三、代码设计四、结果验证一、前言在做项目中,经常会用到AD转换模块。前段时间做毕业设计的时候需要用到FPGA驱动AD9240模块实现模拟数据的采集和转换,尽管相对来说AD9240算比较简单的驱动模块,但是也想记录下分析和设计过程。二、时序原理首先通过芯片......
  • Diffie-Hellman Key Agreement Protocol 安全漏洞 (CVE-2002-20001)【原理扫描】
    Diffie-HellmanKeyAgreementProtocol是一种密钥协商协议。它最初在Diffie和Hellman关于公钥密码学的开创性论文中有所描述。该密钥协商协议允许Alice和Bob交换公钥值,并根据这些值和他们自己对应的私钥的知识,安全地计算共享密钥K,从而实现进一步的安全通信。仅知道交换......
  • Web自动化测试原理
    Web自动化测试原理:通过控制浏览器进行一系列的自动化操作浏览器驱动:用来控制浏览器:是浏览器厂商开发提供一系列的HTTP的接口脚本--->HTTP接口--->浏览器驱动----内部API--->浏览器为什么使用Selenium?通过面向对象的方式,封装了这些内部接口,方便调用Selenium主要有两大对......
  • Socket和Http的通讯原理,遇到攻击会受到哪些影响以及如何解决攻击问题。
    Socket通信原理:Socket是一种应用程序编程接口(API),用于在单个进程或多个进程之间进行通信。它提供了一种灵活的、异步的通信方式,使应用程序可以方便地建立连接、发送数据和接收数据。Socket通信基于TCP/IP协议,它是一种面向连接、可靠的通信方式。Socket通信过程如下:a.创建Socket:创......
  • 21 mysql 一致性的底层原理
    一致性的原理:个人理解,一致性就是事务执行前后,数据在逻辑上都符合正常情况。想要保持一致性,一般有下面3种手段:第一,就是前面提到的原子性、持久性和隔离性。第二,就是数据自身带的一些参数校验,比如数据长度校验、数据类型校验。第三,就是从应用层面保持一致了。比如在银行账目系统中,保......
  • 读书笔记+画图
    print("0217向悦")importnumpyasnp#创建两个矩阵a=np.array([[1,2,3],[4,5,6]])b=np.array([[7,8],[9,10],[11,12]])#计算矩阵乘积c=np.dot(a,b)#打印结果print(c)importscipy.optimizeasopt#定义方程组的函数deff(x):return[x[0]**2+x[1]**2-1,x[0......
  • es 索引生命周期管理的原理
    es的索引生命周期管理indexlifecyclemanagement即ILM,控制着索引的创建、滚动、删除、归档,属实好用,那么它是如何实现的呢?可以想象得到,es的master执行一个定时任务,定期检查关联了ilm的索引,判断索引的状态,执行状态的流转。ILM相关代码在x-pack的plugin目录中,主类是......
  • NetCore高级系列文章04---async、await原理揭秘
    async、await本质上是C#提供的语法糖,编译器编译后是状态机的调用。先看如下的一段代码,要main方法中调用了三个await方法 将此dll进行反编译为4.0的代码如下: 可见到两个Main方法,也就是说我们在程序中Main方法上加了async关键词,编译器会编译成一个是异步的一个是非异步方法,程......