学习笔记——FPGA芯片主要资源介绍

FPGA (Field Programmable Gate Array,即现场可编程门阵列),简化的 FPGA基本结构由 6部分组成,分别为可编程输入 /输出单元、基本可编程逻辑单元、嵌入式块 RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核等,如下图所示:
FPGA基本结构

1.逻辑阵列块(LAB)/可配置逻辑块(CLB)

1.1Altera的逻辑阵列块(Logic Array Block,LAB)介绍

  Altera逻辑阵列块(Logic Array Block,LAB)由多个可编程逻辑单元(Logic Element,LE)组成,LE由一个寄存器( Register)加一个查找表( LUT)构成,还包含 LE之间的进位链,LAB控制信号,局部互联线资源,LUT级联链,寄存器级联链等连线与控制资源。查找表和多路选择器完成组合逻辑功能,寄存器完成时序逻辑功能。4输入查找表类似于一个容量为16 bits 的 ROM(2^4 = 16)(工艺上是珍贵的 SRAM 资源),4表示地址输入位宽为4 bits,存储的内容作为输入对应的输出结果的逻辑运算,并在 FPGA 配置时载入。LAB示意图如下图所示。
LAB示意图

  ①:查找表,目前主流 FPGA 都采用了基于 SRAM 工艺的查找表结构。查找表本质上就是一个 RAM。当用户通过原理图或 HDL 语言描述了一个逻辑电路以后,FPGA 开发软件会自动计算逻辑电路的所有可能结果,列成一个真值表的形式,并把真值表(即输入对应的输出逻辑)事先写入RAM,这样每输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。目前FPGA中多使用4输入的查找表,所以每一个查找表可以看成一个有4位地址线的RAM。

  ②:寄存器,可以配置成多种工作方式,比如触发器或锁存器,同步复位或异步复位、复位高有效或低有效。

  ③:进位链:超前进位加法器,方便加法器的实现,加快复杂加法的运算。

  ④:数据选择器:数据选择器一般在 FPGA 配置后固定下来。

1.2Xilinx 的可配置逻辑块(Configurable Logic Block,CLB)介绍

  Xilinx 7系列FPGA中的可编程逻辑单元叫可配置逻辑块(Configurable Logic Block,CLB),它是最小的可编辑逻辑单元,每个CLB 里包含两个逻辑片( Slice),每个 Slice由 4 个查找表( LUT)、8个触发器(FF)和其他一些逻辑所组成的。CLB示意图如下图所示。
CLB示意图
  查芯片手册可知,查找表(Look Up Table,LUT)可以配置为一个6输入 LUT(64位 rom)和一个输出,也可以配置为两个5输入LUT(32位 rom),它们有单独的输出,但有公共地址或逻辑输入。查找表一般完成纯组合逻辑功能。

2.可编程输入/输出单元

  输入/输出(Input/Ouput)单元简称I/O单元,有时也被简称为IOE,它们是芯片与外界电路的接口部分,完成不同电气特性下对输入/输出信号的驱动与匹配需求。为了使FPGA具有更灵活的应用,目前大多数FPGA的I/O单元被设计为可编程模式,即通过软件的灵活配置,可以适配不同的电气标准与I/O物理特性,可以调整匹配阻抗特性、上下拉电阻、以及调整驱动电流的大小等。

  单元支持的电气标准因工艺而异,不同芯片商、不同器件的 FPGA支持的 I/O标准不同,一般来说,常见的电气标准有 LVTTL 、 LVCMOS、 SSTL、 HSTL、 LVDS、 LVPECL和 PCI等。目前可编程 I/O支持的最高频率越来越高,一些高端 FPGA通过 DDR寄存器技术,甚至可以支持高达 2Gbit/s的数据速率。

  以Xilinx公司的Artix7系列的xc7a35tfgg484-2芯片为例,它的用户可用的IO为250个,可以满足大多数设计需求。单端输出采用传统的CMOS推/拉输出结构,可以输出高低电平或者高阻态,并且可以指定转换速率和输出强度。芯片输入IO是一直有效的,但是当它在输出有效时输入是被忽略的。每个引脚可以选择有一个弱上拉或一个弱下拉电阻,并且大多数信号引脚对可以配置为差分输入对或输出对。每个 I/O引脚拥有一个 8位 IOSERDES (ISERDES和 OSERDES),能够执行串行到并行或并行到串行转换其可编程宽度为 2、3、4、5、6、7或 8位。通过从两个相邻的引脚级联两个 IOSERDES(默认来自差分 I/O),10和14位的位宽转换也可以被支持,ISERDES具有特殊的过采样模式,能够实现异步数据读取。

3.嵌入式存储单元(Memory Bits)

  嵌入式存储单元也被称为Block RAM或简称为BRAM,该部分资源主要用于生成RAM、ROM、FIFO以及移位寄存器等常用的存储模块,在存储较多数据或作跨时钟域处理时常用,BRAM由一定数量固定大小的存储块构成的,使用BRAM 资源不占用额外的逻辑资源,不过使用的时候消耗的BRAM资源只能是其块大小的整数倍,就算你只存了1 bit也要占用一个BRAM。
  相对于LUT构成的分布式RAM(Distribute RAM,简称为DRAM),这种专门的存储单元速度更快,容量更大,从而避免LUT资源的浪费,一般是BRAM资源不够用的情况下才使用分布式 RAM。

  Artix 7系列FPGA有20到135个双端口块RAM,每个RAM有36Kb容量并且每个块RAM有两个完全独立的端口,它们共享存储的数据。每次对存储器进行访问(读取或写入)均受时钟控制,并且所有输入数据、地址、时钟使能和写使能都已寄存,所以当没有时钟时,什么也不会发生输入地址始终不变保留数据直到下一次操作。RAM的两个端口可以具有不同的长宽比,没有任何限制, 而且每个块RAM还可以分为两个完全独立的18 Kb块RAM,可以配置为16K×1至 512×36的任何长宽比。需要补充的一点是,除了块RAM,还可以灵活地将LUT配置成RAM、 ROM、 FIFO等存储结构,这种技术被称为分布式RAM。根据设计需求,块 RAM的数量和配置方式也是器件选型的一个重要标准。

4.丰富的布线资源

  布线资源连通FPGA内部的所有单元,而连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。FPGA芯片内部有着丰富的布线资源,根据工艺、长度、宽度和分布位置的不同而划分为4类不同的类别:
  第一类是全局布线资源,用于芯片内部全局时钟和全局复位/置位的布线;
  第二类是长线资源,用于完成芯片Bank间的高速信号和第二全局时钟信号的布线;
  第三类是短线资源,用于完成基本逻辑单元之间的逻辑互连和布线;
  第四类是分布式的布线资源,用于专有时钟、复位等控制信号线。

  在实际中设计者不需要直接选择布线资源,布局布线器可自动地根据输入逻辑网表的拓扑结构和约束条件选择布线资源来连通各个模块单元。从本质上讲,布线资源的使用方法和设计的结果有直接的关系。

5.底层嵌入功能单元

锁相环(Phase Locked Loop,PLL)、延迟锁相环( Delay Locked Loop,DLL )、DSP、CPU等。目前大多数FPGA厂商都在 FPGA内部集成了 DLL或者 PLL硬件电路,PLL的参考时钟输入都是由专用时钟管脚上的晶振进来的,用以完成时钟的高精度、低抖动的倍频、分频、占空比调整、相移等功能。PLL出来的时钟都会连接到全局时钟网络上,通过全局时钟网络扇出到每个寄存器上的时钟线,全局时钟网络保证时钟的质量,减小时钟偏斜(Skew)和抖动(Jitter)。DSP、CPU等主要用于各种复杂的数学运算,乘法、除法以及常用的功能函数如:有限冲激响应滤波器(FIR),无限冲击响应滤波器(IIR),快速傅里叶变换(FFT),离散余弦变换(DCT)等,这些功能函数在运算时会消耗很多逻辑资源,而FPGA中的LUT和寄存器资源有限,这时候使用嵌入式乘法单元这部分资源就不会造成逻辑资源的浪费。

参考:【公众号“达尔闻说”】
参考:https://www.cnblogs.com/rouwawa/p/10031833.html#1-%E6%80%BB%E8%A7%88

  • 7
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于 jQuery 的事件,我可以和你分享一些学习笔记。 1. 绑定事件 在 jQuery 中,我们可以通过以下方式来绑定事件: ``` $(selector).event(function(){ // 事件处理程序 }) ``` 其中,`selector` 表示要绑定事件的元素,`event` 表示要绑定的事件类型,比如 `click`、`mouseover` 等等。事件处理程序则是在事件触发时要执行的代码块。 2. 多个事件绑定 我们可以通过 `on()` 方法来同时绑定多个事件: ``` $(selector).on({ event1: function(){ // 事件处理程序1 }, event2: function(){ // 事件处理程序2 } }) ``` 这样,当 `event1` 或 `event2` 中任意一个事件触发时,对应的处理程序都会被执行。 3. 解除事件 如果需要解除某个元素的事件处理程序,可以使用 `off()` 方法: ``` $(selector).off(event); ``` 其中,`event` 表示要解除的事件类型。如果不指定事件类型,则会解除该元素上所有的事件处理程序。 4. 事件委托 在 jQuery 中,我们可以使用事件委托来提高性能。事件委托是指将事件绑定到父元素上,而不是绑定到子元素上,然后通过事件冒泡来判断是哪个子元素触发了该事件。这样,当子元素数量较多时,只需要绑定一次事件,就可以监听到所有子元素的事件。 ``` $(selector).on(event, childSelector, function(){ // 事件处理程序 }) ``` 其中,`selector` 表示父元素,`event` 表示要绑定的事件类型,`childSelector` 表示要委托的子元素的选择器,事件处理程序则是在子元素触发事件时要执行的代码块。 以上是 jQuery 中事件的一些基本操作,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值