0-1学习FPGA之底层资源——LUT

目录

碎碎念!

1. 什么是LUT?

2.  LUT 与传统逻辑门的对比

3. LUT可以怎么用?

3.1 实现组合逻辑

3.2 搭建LUT_RAM(分布式RAM)

3.3 移位寄存器

碎碎念!

开这个专栏是为了重新巩固基础,温故而知新,顺便查漏补缺弥补之前的知识漏洞~内容会尽量写的清晰,0基础的小伙伴也能看懂,欢迎交流~如有问题请艾特我^ w ^

1. 什么是LUT?

LUT(look-up table)就是查找表,是FPGA中实现组合逻辑功能的基本单元。可以看做一个小SRAM,存储逻辑真值表,输入看做地址线,读取出对应的逻辑输出结果。(后面有举例)

LUT有LUT1、LUT2、LUT3、LUT4、LUT5、LUT6。分别指代的输入口的数量,输入口可以作为地址去读写"RAM"内的数据。譬如LUT4,代表4个输入地址Bit,可以读写总共0000~1111,也就是0~15个地址的bit数据。

图1.1 LUT4真值表

不同的LUT之间可以级联,LUT1可以和LUT1~6级联,一般来说LUT层级不要超过6,否则可能有时序问题,若LUT层级超过6就需要中间插入寄存器、降低频率的方式改善时序。

通过设置LUT的初始值来实现逻辑,譬如实现2bit的A,B是否相等,可以这样安排输入:I3=A[1]、I2=A[0]、I1=B[1]、I0=B[0],若输入出现有A=B的情况,就在该输入地址对应的位置上写入1。

A=B有以下情况:0000、1111也就是在0地址和15地址上写入1,其余为0,初始值应该设置为16'b1000_0001代码例化:

LUT4 #(
.INIT(16'b1000001) // Logic function
)
LUT4_inst (
.O(O), // 1-bit output: LUT
.I0(B[0]), // 1-bit input: LUT
.I1(B[1]), // 1-bit input: LUT
.I2(A[0]), // 1-bit input: LUT
.I3(A[1]) // 1-bit input: LUT
);

当输入为0000/1111时输出为1,A=B。

2.  LUT 与传统逻辑门的对比

传统逻辑门为与或非等逻辑门,EDA工具首先将逻辑综合为门级电路,也就是RTL级通过与或非逻辑门搭建的电路,最后综合为LUT,为什么FPGA选择使用LUT查找表而不是直接选择通过门电路实现逻辑呢?这是一个很有意思的问题~我也去网上搜寻了这个问题,找到两个觉得很不错的回答,能满足我现在的疑问~以下是链接:

用大白话从底层理解FPGA——LUT(干货) - 知乎

为什么FPGA使用LUT而不是传统的逻辑门?-腾讯云开发者社区-腾讯云

我总结一下,第一个是从性能的角度解释:倘若使用门电路,每个逻辑门都有不同的时延,那么在一段组合逻辑中门逻辑越多,时延越长,为满足时序要求,不得不延长周期,整个系统的速度很容易有瓶颈。

而使用LUT则可以很好解决延时,无论多少逻辑门,只要输入位宽确定,就能确定组合逻辑中LUT的层级(级联的数量),LUT可以看成SRAM,内部早已写好逻辑输出结果,所以只要逻辑运行时给到输入,就能越过门电路的延时直接读取到输出结果。


第二个从FPGA的底层原理入手:FPGA(Field Programmable Gate Array)为现场可编程门阵列,是一种半定制电路,解决了定制电路的不足,又克服了原有可编程器件门电路有限的缺点。 FPGA可以反复烧写,它实现组合逻辑的基本结构不可能像ASIC那样通过固定的与非门来完成,而只能采用一种易于反复配置的结构,也就是LUT查找表。LUT本质是SRAM,里面的初始值可以包含各种与或非门级电路的逻辑,因此FPGA可以做到不需要改变电路就可以重复改变逻辑。很神奇

~

3. LUT可以怎么用?

LUT一般来说有两种SLICEL、SLICEM。SLICEL的LUT只能用于实现组合逻辑,SLICEM的LUT有时钟输入口,可以实现数据存储、组合逻辑,内部结构比SLICEL的LUT更复杂。

3.1 实现组合逻辑

如第1点中的例子所示,通过改变初始值实现组合逻辑;

3.2 搭建LUT_RAM(分布式RAM)

FPGA中最多的就是LUT,在数据量不是很大的时候可以直接使用LUT搭建分布式RAM,节省BRAM。1个BRAM至少为18Kbit,倘若一些少量的存储需求就要花费一个BRAM实在浪费,BRAM在FPGA中资源有限。并且LUT搭建的分布式RAM读写为0周期,也能节省时间。

LUT_RAM都有IP可以直接用,具体使用看对应板卡的IP手册。

3.3 移位寄存器

除了寄存器外,通过级联多个LUT(SLICEM)可以实现多位宽的移位寄存器。SLICEM里的LUT带CLK时钟输入口,一个LUT6可以作为32位的移位寄存器。时间有点晚了,后续我再具体写这个如何实现,并补充SLICEL、SLICEM的LUT的区别~~^ w ^

Read more

AI时代人人都是产品经理:能力边界:AI 能做什么、不能做什么?产品经理必须摸清的技术边界

AI时代人人都是产品经理:能力边界:AI 能做什么、不能做什么?产品经理必须摸清的技术边界

为什么要先搞懂AI的能力边界? 在AI工具遍地开花的今天,很多产品经理陷入了两个极端:要么过度迷信AI,认为它能解决所有问题;要么对AI充满恐惧,担心自己的岗位被替代。但现实是:AI不是产品经理的竞争对手,而是需要你掌握的核心工具。 搞懂AI的能力边界,本质是帮你: 1. 避免在需求评审会上提出技术上不可能实现的需求 2. 精准判断哪些工作可以交给AI提效,哪些必须自己亲力亲为 3. 利用AI的能力边界,设计出更有竞争力的产品方案 4. 建立和技术团队平等对话的技术认知基础 AI能做什么?6类产品经理必用的AI能力 1. 结构化信息处理:批量处理重复工作 AI最擅长处理有明确规则、结构化、重复性的任务,这些工作往往占据了产品经理30%以上的时间: * 自动整理用户调研数据,提炼高频需求关键词 * 批量生成产品文档的初始版本,如需求说明、接口文档 * 分析用户行为日志,输出标准化的行为路径报告 实战示例:用AI批量生成PRD需求条目 from openai import OpenAI client = OpenAI(api_key="

By Ne0inhk

用 OpenClaw 搭建企业微信 AI Agent:从零到自动化客服只需 30 分钟

本教程将指导您使用 OpenClaw 搭建一个企业微信 AI 客服,实现 7×24 小时自动回复。以阿里云为例,其他云服务商(如腾讯云)的流程也基本一致。 🎯 整体流程概览 1. 准备账号:注册企业微信,并获取阿里云百炼大模型 API Key。 2. 部署 OpenClaw:在云服务器上部署 OpenClaw 并接入大模型。 3. 配置企业微信:创建应用或机器人,获取 CorpID、AgentID、Secret 等凭证。 4. 打通连接:将企业微信的回调地址指向 OpenClaw 服务。 5. 测试优化:在微信中测试对话,并通过优化知识库提升准确率。 🛠️ 一、准备工作 (约 5 分钟) 1. 企业微信

By Ne0inhk

koboldcpp完全指南:从安装到精通的AI模型部署新范式

koboldcpp完全指南:从安装到精通的AI模型部署新范式 【免费下载链接】koboldcppA simple one-file way to run various GGML and GGUF models with KoboldAI's UI 项目地址: https://gitcode.com/gh_mirrors/ko/koboldcpp 你是否还在为本地部署AI模型的复杂流程而困扰?是否想要一个无需繁琐配置就能运行多种GGML和GGUF模型的解决方案?本文将带你全面掌握koboldcpp——这款源自KoboldAI的轻量级AI部署工具,从基础安装到高级优化,让你轻松实现本地化AI文本生成、图像创建和语音处理。 什么是koboldcpp koboldcpp是一款基于llama.cpp开发的一站式AI部署工具,它将强大的功能集成到单个可执行文件中,无需复杂安装即可运行多种AI模型。作为GitHub加速计划的一部分,该项目提供了高效的本地化AI解决方案,支持文本生成、图像创建、语音识别与合成等多种功能。 主要特点包括: * 单文件可执行程序,无需安装和外部依赖

By Ne0inhk
用Claude Code构建AI内容创作工作流:从灵感到发布的自动化实践

用Claude Code构建AI内容创作工作流:从灵感到发布的自动化实践

✨道路是曲折的,前途是光明的! 📝 专注C/C++、Linux编程与人工智能领域,分享学习笔记! 🌟 感谢各位小伙伴的长期陪伴与支持,欢迎文末添加好友一起交流! * 前言 * 一、为什么选择Claude Code? * 二、核心工作流设计 * 2.1 整体流程图 * 2.2 核心模块架构 * 三、实战代码实现 * 3.1 灵感捕捉器 * 3.2 与Claude Code集成 * 3.3 内容生成工作流 * 3.4 质量审查自动化 * 四、完整工作流示例 * 五、让AI工作起来还不够,需要让它"为你工作" * 六、创作不是终点,分享才是 * 七、总结 * 参考资源 前言

By Ne0inhk