UG474
为了对工程的资源利用率进行优化,我们首先需要知道当前工程对资源的利用率情况。在Vivado下,我们可以查看工程的资源利用率情况,在下面这张图中,其罗列出了整个工程所使用的资源情况。首先,下面我们需要一一对LUT/LUTRAM/FF/DSP/IO/BUFG/MMCM这些英文所代表的含义作出解释:
LUT:Look-Up-Table,即查找表。
LUTRAM:
-资源利用率中的LUT是指设计中消耗的所有LUT,包括用做逻辑函数发生器的LUT(SLICEL中的LUT),也包括用做存储单元的LUT(SLICEM中的LUT)
-资源利用率报告中的LUTRAM是指设计中消耗的SLICEM中的LUT(用做分布式RAM/ROM或移位寄存器)
FF:Flip-Flops,触发器
BRAM:Block RAM,储存单元
DSP:运算单元(DSP48E1)
IO:输入输出管脚
BUFG: BUFG是把局部时钟转为全局时钟,减少时钟延迟。.它可以驱动所有的IO和逻辑,
MMCM:(Mixed-Mode Clock Manager)混合模式时钟管理器
IBUFDS:
IBUFDS原语用于将差分输入信号转化成标准单端信号,且可加入可选延迟。在IBUFDS原语中,输入信号为I、IB,一个为主,一个为从,二者相位相反。
MUX:F7AMUX, F7BMUX和 F8MUX三种复用器
为了更好的理解以上英文概念,我们先要知道FPGA中其内部结构。参考:xilinx官方文档UG474《7 Series FPGAs Configurable Logic Block》和White Paper《Xilinx 7 Series FPGAs:The Logical Advantage》。下表是一张Artix-7 FPGA CLB资源表:
在Xilinx 7系列的FPGA芯片中,其组成的基本单元为CLB(Configurable Logic Block)。CLB是实现时序逻辑组合逻辑电路的主要逻辑单元。一个CLB由两个Slice组成,每个Slice由4个6输入LUT、8个FF、复用器和算术进位单元组成。
同时SLICE有区分为二:SLICEL和SLICEM(没有看到缩写L/M全程,个人认为是Logic和Multiple缩写,从下面定义可以看出)。大约2/3的是SLICEL(只能用于logic),剩下的是SLICEM(还可以用于distributed RAMs/SRLs32/SRLs16)。
通过以上的分析,每个CLBs具体的资源配置如下:
好了,有了以上对Xilinx 7系列的FPGA芯片内部结构的基础认识。我们再来看看Vivado下那张资源利用率的图:
LUT:Look-Up-Table,即查找表。
LUT的作用是实现所有的逻辑函数,也就是类似于计算Y=A&B+C+D之类的算式结果! 下图是一个查找表功能表:
LUT的一个重要功能是逻辑函数发生器。本质上,逻辑函数发生器存储的是真值表(Truth Table)的内容,而真值表则是通过布尔表达式获得。在vivado中,打开网表文件,选择相应的LUT,在property窗口中可以看到真值表。
下图是一个6输入查找表内部结构:
6输入查找表内部结构
例子:对于4输入的LUT而言,实际上就是4位地址位,一位数据位的存储器,能够存储16位数据,所以我们在FPGA设计中可以用LUT组建分布式的RAM。
LUTRAM:
-资源利用率中的LUT是指设计中消耗的所有LUT,包括用做逻辑函数发生器的LUT(SLICEL中的LUT),也包括用做存储单元的LUT(SLICEM中的LUT)
-资源利用率报告中的LUTRAM是指设计中消耗的SLICEM中的LUT(用做分布式RAM/ROM或移位寄存器)
FF:Flip-Flops,触发器
BRAM:Block RAM,储存单元
每个BRAM大小为36KB(RAMB36E1),由两个独立的18KB BRAM(RAMB18E1)构成。BRAM与查找表构成的分布式RAM的差异如表1.3所示。尽管BRAM可支持更多的功能,但这并不表明BRAM在任何场合都具有优势。对于一些小规模的数据存储,分布式RAM可获得与BRAM相媲美甚至比BRAM更好的性能(从功耗和速度两方面比较)。
DSP:运算单元(DSP48E1),7系列FPGA中运算单元为DSP48E1,它不仅可以实现逻辑运算,如与、或、异或,也可以实现算术运算,如加法、乘法、乘累加等。
IBUFDS:
IBUFDS原语用于将差分输入信号转化成标准单端信号,且可加入可选延迟。在IBUFDS原语中,输入信号为I、IB,一个为主,一个为从,二者相位相反。
如iserdes.v模块中
IBUFDS #(
.DIFF_TERM("TRUE"), // Differential Termination
.IBUF_LOW_PWR("FALSE"), // Low power="TRUE", Highest performance="FALSE"
.IOSTANDARD("LVDS_25") // Specify the input I/O standard
) Dclk_IBUFDS_inst (
.O(Adc_DCLK_p), // Buffer output
.I(Adc_DCLK_0_p_pin), // Diff_p buffer input (connect directly to top-level port)
.IB(Adc_DCLK_0_n_pin) // Diff_n buffer input (connect directly to top-level port)
);
参考文献:https://www.cnblogs.com/xiaoxuesheng993/p/9187499.html
全局时钟网络(BUFG、BUFH)、区域时钟网络(BUFR、BUFMR)和IO时钟网络(BUFIO)
BUFG:全局时钟缓存器
BUFH:水平时钟缓存器
BUFIO:IO时钟缓存器
BUFR:区域时钟缓存器
BUFMR:多区域时钟缓存器
MMCM:混合模式时钟管理器
PLL:锁相环
参考文献:
https://blog.csdn.net/weixin_46062412/article/details/114992793?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-14.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-14.no_search_link
UG474的更多相关文章
- 基础002_V7-CLB
一.综述 参考ug474.pdf: 7系列中,一个CLB包含两个slice: 每个CLB的资源: CLB可配置的主要功能: 二.主要功能 LUT是基本单元,例如选择器assign muxout = ...
- FPGA基础学习(7) -- 内部结构之CLB
目录 1. 总览 2. 可配置逻辑单元 2.1 6输入查找表(LUT6) 2.2 选择器(MUX) 2.3 进位链(Carry Chain) 2.4 触发器(Flip-Flop) 参考文献: 一直以来 ...
随机推荐
- 如何在proto3中用上golang对应的interface{}类型
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 首先,我希望所有golang中用于http请求响应的结构, ...
- ABP-VNext 用户权限管理系统实战----问题与解决方案
1.swagger请求总是报:400 Bad Request,但是postman请求是没有问题 查看日志报表: 解决方案: 在 ConfigureServices 中增加如下的内容 Configure ...
- 常用排序方法——python写法【冒泡、快速排序、TOP-K问题】
1.冒泡排序 相信冒泡排序是很多小伙伴第一个知道的排序算法.它就是每趟排序冒出一个最大(最小)值,相邻两个元素比较,前一个比后一个大,则交换. def bubbleSort(arr): n = len ...
- Spring一套全通5—SSM整合
百知教育 - Spring系列课程 - MVC框架整合 第一章.MVC框架整合思想 1. 搭建Web运行环境 <dependency> <groupId>javax.servl ...
- WebAssembly核心编程[1]:wasm模块实例化的N种方式
当我们在一个Web应用中使用WebAssembly,最终的目的要么是执行wasm模块的入口程序(通过start指令指定的函数),要么是调用其导出的函数,这一切的前提需要创建一个通过WebAssembl ...
- 深入浅出Java多线程(九):synchronized与锁
引言 大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第九篇内容:synchronized与锁.大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!! 在现代软件开发中,多 ...
- 监听yaml配置
接下来我们试试从yaml文件中读取配置,当然这不是动态配置分发的好方式 别急,一口吃不成大胖子 这里其实会为大家介绍不少东西: 如何引入第三方库以及配置openresty lua 文件读取 yaml ...
- Pandas处理股票数据
import tushare as ts import pandas as pd # 下载茅台所有股票交易数据 # df = ts.get_k_data(code="600519" ...
- JS Leetcode 26. 删除有序数组中的重复项 题解分析,字典与快慢双指针
壹 ❀ 引 本题来自LeetCode26. 删除有序数组中的重复项,是一道简单题,题目描述如下: 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组 ...
- NC208250 牛牛的最美味和最不美味的零食
题目链接 题目 题目描述 牛牛为了减(吃)肥(好),希望对他的零食序列有更深刻的了解,所以他把他的零食排成一列,然后对每一个零食的美味程度都打了分,现在他有可能执行两种操作: eat k:吃掉当前的第 ...