FPGA芯片的配置方法


FPGA芯片的配置方法


文章目录

  • FPGA芯片的配置方法
    • 1. FPGA配置概述
    • 2. 主动配置模式
    • 3. 被动配置模式
    • 4. JTAG配置模式
    • 5. 总结

1. FPGA配置概述

当我们在PC机上的FPGA软件集成开发环境中完成我们的设计后,必须通过某种形式将其映射到FPGA芯片硬件中,这样FPGA芯片才能具有我们所期望的功能,而这一过程称为FPGA芯片的配置

对于基于Flash或者反熔丝工艺的FPGA,配置的方法其实比较单一,这里就不多讨论。而目前主流的FPGA芯片还都是基于SRAM工艺的,这种FPGA芯片一般都不能单独使用,这是因为基于SRAM工艺的FPGA芯片不具有配置保持功能,每当系统掉电后,SRAM中的配置数据就会全部丢失,因此下次上电后便重新变成一个没有任何功能的空白芯片。因此,基于SRAM工艺的FPGA芯片配置的方式和方法就比较多,这也是本节介绍的重点。注意,在本节的后续介绍中,如无特别说明,FPGA芯片都泛指这种基于SRAM工艺的芯片。针对这类FPGA芯片,配置的方法主要有三种:主动配置模式被动配置模式JTAG配置模式

2. 主动配置模式

主动配置模式通俗地讲就是FPGA芯片自己配置自己,这时候需要用到一个片外的存储芯片作为“道具”。该芯片一般是由Flash或者EPROM等掉电后可以继续保存数据的存储介质构成的,学名叫做配置芯片。由于FPGA芯片再次上电后就会把之前发生的一切忘得一干二净,所以我们找来一块Flash芯片作为它的“大脑”,并提前在该芯片中存储好FPGA芯片的配置信息。通过正确的布线连接和外围电路配合,那么等到FPGA芯片上电后,就会主动地从该配置芯片中将配置数据读出并存储于自己的SRAM中,于是FPGA芯片就重新具有了相应的逻辑功能。

也许你会疑惑,FPGA再次上电后不是什么都不记得了么,那它是怎么完成主动对配置芯片中的数据读取的呢?这是因为FPGA芯片中有一套专门用于主动配置模式的电路,该电路的一个主要功能元件就是一个晶振,该晶振的精度不高,但是用来产生频率要求并不高的主动配置工作时钟还是绰绰有余的。系统上电后,该晶振电路就会产生时钟信号,该时钟信号同时供给FPGA内部和外部的配置芯片,通过FPGA内部预置的读取逻辑从配置芯片中读取数据并同时完成FPGA内部的配置。当FPGA的配置完成后,关闭相应功能管脚和晶振电路,FPGA芯片将按照所配置的功能工作,直到系统掉电。

关于这种配置模式有几点需要注意:

  1. 保密性较差。通过这种方式配置的FPGA芯片,其破解软肋主要在其片外的配置芯片上。由于这些基于Flash或EPROM的配置芯片本身的读写逻辑早已众所周知,那么别人只需要将配置芯片中的数据复制到其他配置芯片上,然后再使用相同型号的FPGA产品,即可轻易地在任何地方完成重现。
  2. 配置文件的大小只与FPGA芯片的型号有关,跟设计本身的复杂度无关。例如,无论设计占用了90%的FPGA片内资源,还是占用了1%的FPGA片内资源,配置文件的大小都是一样的。这是因为同一个型号的FPGA芯片其内部的SRAM大小是一样的,而配置文件就是整个SRAM中存储的数据之和,因此无论数据是什么情况,文件大小都是一样的。
  3. 配置芯片的容量一定要大于配置文件的大小。根据FPGA芯片的规模不同,配置一个FPGA芯片所需的配置文件大小也会有所区别,那么在选择配置芯片时,一定要注意是否能够装得下所需的配置文件。一般来说,选择容量最大的配置芯片肯定是没错的,但是成本也会提高,因此最好还是根据FPGA芯片的具体型号来选择一款合适的。
  4. 不同配置芯片的配置文件的格式往往是不一样的,一般不能通用。例如基于Flash的配置芯片和基于EPROM芯片的配置文件的后缀名是不同的,需要根据实际情况在集成开发环境中生成。除此以外,主动配置模式使用的配置文件和被动配置模式以及JTAG配置模式使用的配置文件的格式也可能不同。

3. 被动配置模式

被动配置模式通俗地讲就是FPGA被其他设备配置,这里的设备可以是任意一款微处理器芯片甚至CPLD,只要能够产生满足FPGA配置要求的控制信号和数据的模块都行。虽然每次系统重新上电后,FPGA又变成一片空白,但由于微处理器芯片上电后会自动重新开始执行程序,因此,可以将对FPGA的配置信息保存在微处理器的存储器,并按照FPGA芯片被动配置的时序要求将配置行为代码加入到微处理器的启动程序中,再通过适当的线路连接和外围电路配合,即可完成对FPGA芯片的上电后配置。由于FPGA芯片在这一配置过程中完全处于被动地位,所以也叫被动配置模式。

相对于主动配置模式而言,被动配置模式的保密性较好,因为要想破解这种配置模式下的FPGA逻辑功能,要么去破解相应的微处理器代码,要么去实时监控、记录并分析微处理器和FPGA芯片之间的通信波形然后想办法模仿之,都比较费劲。除此以外,由于此时的配置是由微处理器控制的,那么微处理器完全可以保存多个不同功能对应的配置文件,然后根据一些选择信息来决定每次到底使用哪一个配置文件来对FPGA芯片进行程序加载。这样可以灵活地实现不同场合对FPGA功能的不同要求。

4. JTAG配置模式

JTAG,英文全称Joint Test Action Group,翻译成中文即联合测试行为组织。它有两大功能:电路的边界扫描测试和可编程芯片的在线系统编程。

边界扫描测试发展于上个世纪90年代,随着大规模集成电路的出现,印制电路板制造工艺向小、微、薄发展。由于芯片的引脚多,元器件体积小,板的密度特别大,根本没有办法进行传统的下探针测试。于是一种新的测试技术产生了,联合测试行为组织,即JTAG,定义这种新的测试方法,并命名为边界扫描测试。边界扫描测试是在20世纪80年代中期作为解决PCB物理访问问题的JTAG接口发展起来的,它在芯片级层次上嵌入测试电路,以形成全面的电路板级测试协议。因此FPGA芯片可以利用它上面的JTAG接口,来对芯片进行一些在线调试,例如Altera公司的SignalTap工具,或者Xilinx的ChipScope工具,都是利用JTAG接口对FPGA芯片进行在线调试查错的。

除了完成边界扫描测试外,FPGA芯片上的JTAG接口的另一个重要功能就是对FPGA芯片进行非常便捷的在线系统编程。相比于主动配置模式和被动配置模式,只要系统已经上电,JTAG配置模式可以在任意时刻对FPGA芯片进行重配置,而此时的配置主动方一般是PC机上的集成软件开发环境。开发环境通过PC机上的串口、并口、USB等接口与FPGA芯片上的JTAG接口相连,然后按照相应的配置时序完成对FPGA芯片的配置。

5. 总结

FPGA芯片的配置方法主要包括主动配置模式、被动配置模式和JTAG配置模式。主动配置模式通过片外的Flash或EPROM存储配置信息,由FPGA芯片主动读取配置数据,适合快速启动但保密性较差;被动配置模式由微处理器或其他设备控制配置过程,保密性较好且灵活度高;JTAG配置模式则利用JTAG接口实现在线调试和系统编程,适合动态配置和调试。选择合适的配置模式需要根据具体的应用需求和设计要求来决定。


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

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

相关文章

通过python+openCV实现对图片中箭头方向的判断

在项目中遇到一个需求,需要对图片中的箭头方向进行判断,本来是使用YOLOv8算法来实现的,但是发现YOLO的效果对箭头的识别效果很差,不管是分类算法还是检测算法,效果都不理想,因此试一试通过openCV对箭头方向进行判断,发现效果还可以。 下面附上完整的代码和原理。 文章目…

React 第六十六节Router中 StaticRouter使用详解及注意事项

前言 StaticRouter 是 React Router 为服务器端渲染(SSR)提供的专用路由组件。它允许在服务器环境中处理路由逻辑,确保服务器和客户端渲染结果一致。下面我将详细解释其用途、原理并提供完整的代码示例。 一、StaticRouter 的核心用途 服务…

嵌入模型与大语言模型的区别:从结构到应用的深度解析

嵌入模型与大语言模型的区别:从结构到应用的深度解析 在当今自然语言处理(NLP)技术蓬勃发展的背景下,嵌入模型(Embedding Model) 和 大语言模型(Large Language Model, LLM) 成为了…

el-date-picker赋值不成功

vue使用element 的时间组件el-date-picker赋值不成功,点击后才回显数据 解决: 组件未渲染完成之前赋值了,在onMounted函数内赋值,或者在确保组件已经渲染后赋值

深入浅出JavaScript中的私有变量与特权方法

深入浅出JavaScript中的私有变量与特权方法:封装的艺术 在JavaScript的开发实践中,私有变量和特权方法是实现数据封装和代码安全性的核心工具。它们不仅帮助我们隐藏敏感数据,还能通过闭包和作用域机制构建更健壮的代码结构。本文将从基础概…

ReactNative【实战系列教程】我的小红书 2 -- 快捷登录、手机号密码登录

最终效果 技术要点 用户协议 – 打开本地浏览器 点击后,直接打开本地浏览器浏览网页 // 最终需修改为 《用户协议》 的网址Linking.openURL("https://www.baidu.com");手机号输入框的 344 展示 onChangeText{(text: string) > {setPhone(formatPhone(…

【赵渝强老师】OceanBase数据库从零开始:Oracle模式

这里我们来介绍一下新上线的课程《OceanBase数据库从零开始:Oracle模式》,本门课程共11章。 视频讲解如下 【赵渝强老师】OceanBase从零开始(Oracle模式) 下面详细介绍一下每一章的主要内容: 第01章-OceanBase的体系…

Flink核心功能与运行流程详解

目录 一、背景 二、图构建 三、任务执行流程(yarn per-job模式) 3.1 Flink组件 3.2 执行流程 四、分布式调度 4.1 TM的slot 4.2 TM的slot的CPU与内存 4.3 节点的部署 4.4 节点的状态 4.5 节点部署流程 五、数据传输 5.1 内存分配 5.2 传输…

linux 操作docker的基本命令docker仓库

基本操作命令 docker run --nametest-host -itd centos7.6 /bin/bash 通过镜像创建容器 登录容器 [rootdocker101 ~]# docker exec -it test-host /bin/bash (exec是执行,i是交互式。t叫tty) 或者container id [rootdocker101 ~]# doc…

Netty学习路线图 - 第四阶段:Netty基础应用

Netty学习路线图 - 第四阶段:Netty基础应用 📚 Netty学习系列之四 本文是Netty学习路线的第四篇,我们将用大白话讲解Netty的基础应用,带你从理论走向实践。 写在前面 大家好!在前面三篇文章中,我们学习了J…

开源项目推荐:MCP Registry——管理MCP服务器的利器

探索MCP Registry:未来模型上下文协议的核心注册服务 随着人工智能技术的迅速发展,机器学习模型的管理和配置变得愈发重要。今天,我们将探索一个颇具潜力的开源项目——MCP Registry。这是一个由社区驱动的注册服务,专为模型上下文协议(Model Context Protocol,简称MCP)…

Spring Boot 统一功能处理:拦截器详解

一、拦截器核心概念 作用:拦截器是 Spring 框架提供的核心功能,用于在请求处理前后执行预定义逻辑,实现统一处理(如登录校验、日志记录等)。 核心方法: public class LoginInterceptor implements Handl…

在docker容器中安装docker服务,基于fuse-overlayfs进行overlay挂载,而不是vfs

1、docker 安装 正常安装docker软件,运行docker时,会提示:No docker socket 服务 2、启动docker服务(包含守护进程) systemctl start docker #dockerd &if ! ps aux | grep -v grep | grep -q "dockerd&qu…

虚拟机配置注意事项

一.VM大部分产品免费,遇到付费的要斟酌一下 在小编之前的文章中有简单下载VM的教程VMwareWorkstPro安装-CSDN博客 二.配置过程中的设置大部分都可以在配置完成后更改 例如下图设备所涉及到的,都是可以更改设置的 三.电脑关机时,要注意先把…

openGL+QT快速学习和入门案列

openGLQT快速学习和入门案列

深度学习03 人工神经网络ANN

什么是神经网络 人工神经网络( Artificial Neural Network, 简写为ANN)也简称为神经网络(NN),是一种模仿生物神经网络结构和功能的计算模型,人脑可以看做是一个生物神经网络,由众多的神经元连接而成.各个神经元传递复…

Linux中部署Jenkins保姆间教程

本文将以docker的方式,讲述如何部署Jenkins 一、拉取Jenkins镜像 1.1 最新版Jenkins介绍 最新版Jenkins地址:Download and deploy 当前最新版的如下图所示: 1.2 各版本支持的JDK版本 地址如下:Java Support Policy 如果你安装…

【软考中级·软件评测师】下午题·面向对象测试之架构考点全析:分层、分布式、微内核与事件驱动

一、分层架构:分层独立与质量特性的双向约束 分层架构通过“垂直分层(表示层→服务层→业务逻辑层→数据层)”实现职责隔离,是Web应用、企业级系统的主流架构模式。 1. 父类成员函数重测场景 子类继承父类时,若父类…

C++ 快速回顾(五)

C 快速回顾(五) 前言一、Dll和Lib的区别区别在开发中使用 二、封装并使用C库1.封装库2.使用库 三、封装并使用C库1.封装库2.使用库 前言 用于快速回顾之前遗漏或者补充C知识 一、Dll和Lib的区别 静态库(LIB)在编译时链接&#…

【ARM】解决ArmDS的工程没有生成Map文件的问题

1、 文档目标 在嵌入式开发过程中,使用Arm Development Studio(简称ArmDS)进行项目构建时,Map文件的生成是调试和分析代码的重要环节。Map文件不仅记录了程序中各个段(sections)的内存分布情况&#xff0c…