当前位置: 首页 > news >正文

FPGA基础知识

目录

  • Xilinx FPGA结构
    • 可编程逻辑模块
      • 查找表
    • 输入/输出模块
    • 布线资源
    • 嵌入式块RAM
    • 底层嵌入功能单元
    • 内嵌专用硬核
  • FPGA开发流程
    • 设计输入
    • 功能仿真
    • 综合
    • 布局布线
    • 时序仿真
    • 板级验证

Xilinx FPGA结构

FPGA的基本结构:可编程逻辑模块(CLB)、输入/输出模块(IOB)、互联(布线)资源(IR)、嵌入式块RAM、底层嵌入功能单元、内嵌专用硬核。

在这里插入图片描述

可编程逻辑模块

每个CLB里包含2个slice,每个slice由4个查找表、8个触发器、3个数据选择器、1个进位链组成。

查找表

查找表(LUT):FPGA内部多使用4输入LUT,LUT本质上是个RAM,可看作一个有4位地址线的RAM。

主流的FPGA芯片是基于SRAM的查找表结构,LUT可以很好地实现可重复配置的需求。

查找表的使用:使用硬件描述语音设计一个逻辑电路后,开发软件会计算该电路的所有可能结果,并将其真值表写入RAM中。这样每输入1个信号进行逻辑运算,就相当于输入1个RAM的地址来查找RAM中存储的数据。

可以将LUT配置为RAM、ROM、FIFO等存储器结构,这种被称为分布式RAM

每个4输入LUT可作为1个16x1RAM;
每个4输入LUT可作为1个16位的移位寄存器;

输入/输出模块

输入/输出模块是芯片与外界电路的接口,完成不同电气特性下对输入/输出信号的驱动与匹配需求,大多数FPGA的IOB是可编程的。

布线资源

布线资源连通 FPGA 内部的所有单元,而连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。

布线资源的分类:

  1. 全局布线资源:用于芯片内部全局时钟和全局复位/置位的布线;
  2. 长线资源:用以完成芯片 Bank 间的高速信号和第二全局时钟信号的布线;
  3. 短线资源:用于完成基本逻辑单元之间的逻辑互连和布线;
  4. 分布式布线资源:用于专有时钟、复位等控制信号线。

嵌入式块RAM

FPGA的BRAM可被配置为RAM、ROM、FIFO等存储器

每个BRAM容量为36KB,默认位宽18位,深度是2048。

RAM可以被重配置为更小或更长的单元,也可以把多个RAM组合起来形成更大的存储容量。

底层嵌入功能单元

一般指通用程度较高的嵌入式功能模块,如PLL、DLL、DSP、CPU等软核。

内嵌专用硬核

一般指通用性较低的硬件模块,如XADC、专用乘法器等。

FPGA开发流程

设计输入

使用硬件描述语言或原理图描绘要设计的数字电路。

功能仿真

使用仿真软件验证设计电路的逻辑功能,不考虑电路延迟等因素,仅对功能进行验证

综合

综合:将高级抽象层次的语言描述转化为低级层次的电路结构,也就是将硬件描述语言描述的逻辑转化成逻辑门、触发器等基本单元组成的逻辑连接网表,即门级网表

布局布线

布局布线:将综合生成的门级网表配置到具体的FPGA芯片上,决定最佳布局并进行连线。

布局布线根据时序约束条件,以及芯片内部各个逻辑单元的布局结构,通过连线资源,将逻辑网表中的硬件原语和底层单元合理地配置到芯片内部的固有硬件结构上。

时序仿真

将布局布线的延时信息反标注到设计网表中来检测有无时序违规。

时序仿真和功能仿真的区别:
时序仿真加载到仿真器的设计包括基于实际布局布线设计的最坏情况的布局布线延时,并且在仿真结果波形图中,时序仿真后的信号加载了时延,而功能仿真没有。

板级验证

将开发工具最终产生的数据文件加载到FPGA芯片中,进行实际的测试。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 分库分表:应对大数据量挑战的数据库扩展策略
  • Apache Ignite 在处理大规模数据时有哪些优势和局限性?
  • 【第0006页 · 数组】寻找重复数
  • CRIO与Windows下LabVIEW开发对比
  • 数据库的介绍:关系型数据库和非关系型数据库究竟是什么?
  • cmd 常用命令总结
  • 个人网银、手机银行
  • nvidia-smi 随机掉卡,error,禁用GSP功能
  • Day22_K8S
  • 被低估的SQL
  • 〖open-mmlab: MMDetection〗解析文件:configs/_base_/schedules
  • @Value读取properties中文乱码解决方案
  • CTK框架(三): 插件的安装
  • 记录|单例模式小记
  • Spring表达式语言(SPEL)(05)
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【node学习】协程
  • co模块的前端实现
  • es6(二):字符串的扩展
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Js基础知识(四) - js运行原理与机制
  • mac修复ab及siege安装
  • node学习系列之简单文件上传
  • PAT A1050
  • React+TypeScript入门
  • 关于extract.autodesk.io的一些说明
  • 开发基于以太坊智能合约的DApp
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 带你开发类似Pokemon Go的AR游戏
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​Java基础复习笔记 第16章:网络编程
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $(function(){})与(function($){....})(jQuery)的区别
  • (¥1011)-(一千零一拾一元整)输出
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (七)glDrawArry绘制
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • ... 是什么 ?... 有什么用处?
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET 8.0 发布到 IIS
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .net6使用Sejil可视化日志
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .NET连接MongoDB数据库实例教程
  • .NET中使用Redis (二)
  • ??myeclipse+tomcat
  • ??Nginx实现会话保持_Nginx会话保持与Redis的结合_Nginx实现四层负载均衡
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • [Android]创建TabBar
  • [BZOJ4016][FJOI2014]最短路径树问题