【【深入浅出FPGA内部资源CLB的解析】】

深入浅出FPGA内部资源CLB的解析

FPGA的基本组成单元: CLB资源等

详细介绍一下CLB可分为CLBLL和CLBLM两类, 这是单纯的以Xilinx旗下的FPGA的某一款为例,单纯的只是介绍个概念性的东西。SliceL和SliceM内部都包含4个6输入查找表(LUT6)、3个数据选择器(MUX)、1个进位链(Carry Chain)和8个触发器(Flip-Flop)。
SLICEM(M:Memory):其内部的LUT可以读也可以写,可以实现移位寄存器和64bit的DRAM等存储功能,还可以实现基本的查找表逻辑。SLICEL(L:Logic): 其内部的LUT只可以读,只能实现基本的查找表逻辑。

一.LUT的介绍

对于LUT而言,LUT 可以看作是一个小型的、单口的 RAM,其中地址线是输入信号,存储单元的内容是输出信号。例如,一个 4 输入的 LUT,可以被看作是一个有 16 个地址的 RAM,每个地址存储一个输出值。
假设有一个 4 输入的 LUT 实现一个逻辑函数 𝑓(𝑎,𝑏,𝑐,𝑑)。这意味着 LUT 有 16 个地址,每个地址对应一个 4 位输入的组合(𝑎,𝑏,𝑐,𝑑 作为地址线),每个地址存储一个输出值(0 或 1)。配置 LUT 就是初始化这 16 个存储单元的内容。

输入: a b c d输出: f(a, b, c, d)
地址 0: 0 0 0 0存储值: 0
地址 1: 0 0 0 1存储值: 1
地址 2: 0 0 1 0存储值: 1
地址 3: 0 0 1 1存储值: 0
地址 15: 1 1 1 1存储值: 1
LUT的组成问题
xilinx公司的7系类FPGA中使用的是6-LUT,每个LUT有六个独立的输入(A1-A6),两个独立的输出(O5-O6)。一个Slice中的四个LUT分别以A,B,C,D编号。从组成结构来说,一个6-LUT由两个5-LUT组成和一个数据选择器组成。

二.MUX的介绍

使用 LUT 实现 MUX
4:1 MUX 实现:
一个 4:1 MUX 有 4 个数据输入(D0, D1, D2, D3),2 个选择信号(S0, S1),以及 1 个输出(Y)。
一个 LUT6 有 6 个输入,因此可以直接实现一个 4:1 MUX:
4 个数据输入连到 LUT 的前 4 个输入端。
2 个选择信号连到 LUT 的后 2 个输入端。
LUT 的内容根据选择信号的不同组合,输出相应的数据输入
当选择信号大于 4 时(例如 MUX8)
8:1 MUX 实现:

  • 一个 8:1 MUX 有 8 个数据输入(D0, D1, D2, D3, D4, D5, D6, D7),3 个选择信号(S0, S1, S2),以及 1 个输出(Y)。
  • 因为一个 LUT6 只有 6 个输入,无法直接实现 8:1 MUX,需要使用两个 4:1 MUX 和一个 2:1 MUX 进行实现。

假设我们要在一个 Slice 中实现一个 16:1 MUX:

  • 第一步:配置四个 LUT6 实现 4 个 4:1 MUX。
  • 第二步:使用 F7AMUX 和 F7BMUX 将这四个 4:1 MUX 组合成两个 8:1 MUX。
  • 第三步:使用 F8MUX 将两个 8:1 MUX 组合成一个 16:1 MUX。

三.进位逻辑链

只要记住是做运算的就行了

四.FF触发器

一个CLB由2个slice构成,其中每个slice就有8个存储单元。这8个存储单元还有所不同,其中的4个可以被配置成触发器(Flip-Flop,简写为 FF)或锁存器(Latch),其他4个则只能被配置成触发器(FF)。当配置为latch时,CLK为Low时latch是“透明”的,也就是我们之前提到的处于使能状态,相当于是缓冲器。值得注意的是,当那4个可以被配置成latch的存储单元被配置成latch时,剩下的4个(只能被配置成FF的)存储单元将不能被使用。

触发器(Flip-Flop)和寄存器(Register)在数字电路设计中是两个相关但不同的概念。虽然触发器和寄存器都用于存储数据,但它们的用途和结构有一些显著的区别。下面是对这两个概念的详细解释:

触发器(Flip-Flop)

特点:

  1. 基本存储单元:触发器是最基本的时序存储单元,每个触发器可以存储1位数据。
  2. 边沿触发:触发器通常是边沿触发的(上升沿或下降沿),这意味着它们在时钟信号的边沿变化时更新其状态。
  3. 类型:
    D 触发器(D Flip-Flop):存储数据输入的值。
    T 触发器(T Flip-Flop):在时钟边沿时翻转输出状态。
    JK 触发器(JK Flip-Flop):可以进行设置、清除和翻转操作。
    SR 触发器(SR Flip-Flop):可以进行设置和清除操作。

示例(D 触发器的 Verilog 代码):

module D_flip_flop (input wire clk,    // 时钟信号input wire d,      // 数据输入output reg q       // 数据输出
);always @(posedge clk) beginq <= d;        // 在时钟上升沿采样输入并更新输出end
endmodule

寄存器(Register)

特点:

  1. 多位存储单元:寄存器是由多个触发器组成的,可以存储多位数据(例如8位、16位、32位等)。
  2. 同步存储:寄存器中的所有触发器共享同一个时钟信号,因此寄存器在时钟边沿时同步更新其所有位的数据。
  3. 用途广泛:寄存器广泛用于存储数据、地址、控制信号等,可以作为缓存、计数器、移位寄存器等。

示例(8位寄存器的 Verilog 代码):

module Register (input wire clk,    // 时钟信号input wire [7:0] d, // 8位数据输入output reg [7:0] q  // 8位数据输出
);always @(posedge clk) beginq <= d;        // 在时钟上升沿同步更新所有位的数据end
endmodule

主要区别:

  1. 存储位数:
    触发器:单个触发器存储1位数据。
    寄存器:寄存器可以存储多位数据,由多个触发器组成。

  2. 结构复杂度:
    触发器:简单的存储单元。
    寄存器:复杂的存储单元,由多个触发器组成,常用于处理多位数据。

  3. 用途:
    触发器:用于实现基本的时序逻辑和单个位的存储。
    寄存器:用于实现多位数据存储、数据缓存、计数器、移位寄存器等功能。

触发器和缓冲器(Buffer)

缓冲器(Buffer)在数字电路中是一个简单的电路元件,用于隔离或驱动信号。缓冲器不具有存储功能,只是简单地传输信号,并可以增强信号强度。缓冲器和触发器是不同的概念。

缓冲器的示例(Verilog 代码):

module Buffer (input wire in,     // 输入信号output wire out    // 输出信号
);assign out = in;   // 直接传输输入信号到输出
endmodule

总结:

触发器(Flip-Flop) :基本的时序存储单元,用于存储1位数据。
寄存器(Register) :由多个触发器组成的多位存储单元,用于存储多位数据。
缓冲器(Buffer) :用于隔离或驱动信号,不具有存储功能。

理解这些基本概念和区别,有助于在数字电路设计中选择合适的元件,从而实现所需的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/49247.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Spring] Spring日志

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

AI在候选人评估中的作用:精准筛选与HR决策的助力

一、引言 随着科技的迅猛发展&#xff0c;人工智能&#xff08;AI&#xff09;技术已逐渐渗透到各个行业和领域&#xff0c;人力资源管理&#xff08;HRM&#xff09;亦不例外。在候选人评估的环节中&#xff0c;AI技术以其高效、精准的特性&#xff0c;正在逐步改变着传统的招…

深度学习 —— 个人学习笔记6(权重衰减)

声明 本文章为个人学习使用&#xff0c;版面观感若有不适请谅解&#xff0c;文中知识仅代表个人观点&#xff0c;若出现错误&#xff0c;欢迎各位批评指正。 十三、权重衰减 使用以下公式为例做演示&#xff1a; y 0.05 ∑ i 1 d 0.01 x i ε w h e r e ε &#xff5e; N…

从PyTorch官方的一篇教程说开去(4 - Q-table来源及解决问题实例)

偷个懒&#xff0c;代码来自比很久之前看的书&#xff0c;当时还在用gym&#xff0c;我做了微调以升级到gymnasium当前版本&#xff0c;确保可以正常演示。如果小伙伴或者原作者看到了麻烦提一下&#xff0c;我好备注一下出处。 您的进步和反馈是我最大的动力&#xff0c;小伙…

外贸客户类型,到底怎么区分?

更多外贸干货及开发客户的方法&#xff0c;尽在微信【千千外贸干货】 在问外贸主要客户是谁&#xff1f;是不是觉得得一个个联系国外的商店啊&#xff1f;别急&#xff0c;今天就让我这个有12年外贸经验的老司机来给你们深度解析一下&#xff0c;外贸最主流的5大客户类型&#…

语音识别 语音识别项目相关笔记内容

语音识别 语音识别项目相关笔记内容 语音识别应用范畴语音识别框架语音基本操作使用scipy.io.wavfile读取wav音频文件获取采样率、长度、通道数使用numpy读取pcm格式音频文件读取wav音频文件,并绘制图像读取双声道的wav音频文件,分别绘制不同声道的波形图读取一个采样率为16k…

【Docker】Docker Desktop - WSL update failed

问题描述 Windows上安装完成docker desktop之后&#xff0c;第一次启动失败&#xff0c;提示&#xff1a;WSL update failed 解决方案 打开Windows PowerShell 手动执行&#xff1a; wsl --set-default-version 2 wsl --update

使用 vue-element-plus-admin 框架遇到的问题记录

项目打包遇到的问题&#xff1a; 打包语句&#xff1a;pnpm run build:pro 报错信息&#xff1a; Error: [vite]: Rollup failed to resolve import "E:/workplace_gitee/xxx/node_modules/.pnpm/element-plus2.5.5_vue3.4.15/node_modules/element-plus/es/components…

Matlab-FPGA 小数转换为定点二进制小数脚本和转coe文件格式脚本

Matlab-FPGA 小数转换为定点二进制小数脚本&#xff1a; % 更新于2023年6月17日&#xff0c;修改旋转因子文件&#xff0c;不修改fpga %首先明确我们的二维FFT的数组维数,此为1024*8的二维矩阵&#xff0c;1024行&#xff0c;8列 column 1024; row 8; nk[]; Ncolumn*row; fo…

【精品资料】数据安全治理解决方案(27页PPT)

引言&#xff1a;数据安全治理解决方案是一个综合性的体系&#xff0c;旨在通过策略、技术、流程和人力的有机结合&#xff0c;全面提升组织的数据安全防护能力&#xff0c;保障数据资产的安全与合规。 方案介绍&#xff1a;数据安全治理解决方案是组织为确保其数据资产的安全性…

Spark内核的设计原理

导读&#xff1a; 本期是DataFun深入浅出Apache Spark第一期的分享&#xff0c;主讲老师耿嘉安开场介绍了自己的从业经历&#xff0c;当前就职的数新网络与Spark相关的两款产品赛博数智引擎CyberEngine和赛博数据智能平台CyberData。 本次分享题目为《Spark内核的设计原理》&…

智能化一体闸门:助力行业发展

随着科技的飞速发展&#xff0c;智能化技术已经渗透到各个行业和领域&#xff0c;其中水利行业也不例外。智能化一体闸门以其高效、智能、便捷的特点&#xff0c;正助力着行业发展。 一、智能化一体闸门的定义与特点 智能化一体闸门&#xff0c;是集成了先进传感技术、自动控制…

Transformer之Swin-Transformer结构解读

写在最前面之如何只用nn.Linear实现nn.Conv2d的功能 很多人说&#xff0c;Swin-Transformer就是另一种Convolution&#xff0c;但是解释得真就是一坨shit&#xff0c;这里我郑重解释一下&#xff0c;这是为什么&#xff1f; 首先&#xff0c;Convolution是什么&#xff1f; Co…

java网络编程TCP和UDP协议

一、TCP 1、服务器端 package udpTest;import javax.management.MBeanRegistrationException; import java.io.*; import java.net.ServerSocket; import java.net.Socket;public class TCPService {public static void main(String[] args) {try {byte[] bufnew byte[512];Se…

什么是离线语音识别芯片?与在线语音识别的区别

离线语音识别芯片是一种不需要联网和其他外部设备支持&#xff0c;‌上电即可使用的语音识别系统。‌它的应用场合相对单一&#xff0c;‌主要适用于智能家电、‌语音遥控器、‌智能玩具等&#xff0c;‌以及车载声控和一部分智能家居。‌离线语音识别芯片的特点包括小词汇量、…

Python文件写入读取,文件复制以及一维,二维,多维数据存储

基础解释 在 Python 中&#xff0c;文件操作的模式除了 w &#xff08;只写&#xff09;、 a &#xff08;追加写&#xff09;、 r &#xff08;只读&#xff09;外&#xff0c;还有以下几种常见模式&#xff1a;- r &#xff1a;可读可写。该文件必须已存在&#xff0c;写操…

生成 HTTPS 证书并配置到 Nginx 的完整步骤

步骤 1: 安装 acme.sh 如果你还没有安装 acme.sh&#xff0c;可以通过以下命令进行安装&#xff1a; curl https://get.acme.sh | sh步骤 2: 生成 HTTPS 证书 使用 acme.sh 生成 forum.selectious.fun 的证书。你可以使用 standalone 模式&#xff0c;这意味着 acme.sh 会在…

视觉SLAM--回环检测

文章目录 创建字典相似度计算增加字典规模 回环检测的意义&#xff1a;可以使 后端位姿图得到一个 全局一致估计。 视觉SLAM的主流做法&#xff1a; 基于外观的回环检测方法&#xff0c;仅 根据两幅图像的相似性确定回环检测关系。这种方法&#xff0c;摆脱了累计误差&…

分类损失函数 (一) torch.nn.CrossEntropyLoss()

1、交叉熵 是一种用于衡量两个概率分布之间的距离或相似性的度量方法。机器学习中&#xff0c;交叉熵常用于损失函数&#xff0c;用于评估模型的预测结果和实际标签的差异。公式&#xff1a; y&#xff1a;真是标签的概率分布&#xff0c;y&#xff1a;模型预测的概率分布 …

数据库中的内、外、左、右连接

常用的数据库连表形式&#xff1a; 内连接 &#xff1a;inner join 外连接 &#xff1a;outer join 左外连接 &#xff1a;left outer join 左连接 &#xff1a;left join 右外连接 right outer join 右连接&#xff1a; right join 全连接 full join 、union 一、内连接 内…