如何使用FPGA开发

news/2025/3/28 6:50:42/文章来源:https://www.cnblogs.com/linkstu/p/18784836

介绍

与传统的微控制器相比,FPGA(现场可编程门阵列)是独一无二的,因为它们不执行顺序指令。相反,它们由一组可配置的逻辑块组成,这些逻辑块可以被重新编程以执行自定义的数字逻辑功能。这使得FPGA可以并行执行多个操作,使其在信号处理、数据处理和实时控制等特定任务中非常高效。

为了定义FPGA的功能,我们使用硬件描述语言(HDL),它指定了逻辑元素应该如何配置和互连。在这个项目中,我将使用SystemVerilog,这是Verilog的高级版本,它引入了额外的特性,如增强的类型安全、断言和面向对象编程功能,使其更适合FPGA设计。

对于硬件,我使用的是Arty S7-25,这是一个基于Xilinx Spartan-7 FPGA的开发板。它在尺寸、性能和可负担性之间提供了一个很好的平衡,使其成为初学者的绝佳选择。该板具有双Arduino头,便于原型设计,以及PMOD头,允许扩展额外的外设。当我使用这个特定的板时,如果您遵循这个项目,任何来自Spartan-7家族或更高版本的Xilinx FPGA都应该兼容。

XADC (Xilinx模数转换器)

XADC是Xilinx FPGA中的集成模数转换器(ADC),使其能够处理模拟信号和数字逻辑。该功能对于电压监测、传感器数据采集和实时模拟信号处理等应用特别有用。通过将ADC直接集成到FPGA中,减少了对外部ADC组件的需求,简化了硬件设计并提高了系统集成度。

XADC的主要特性:

•双12位adc能够以高达1 MSPS(每秒百万采样)的速度采样,允许高速数据采集。

•支持多达16个外部模拟输入通道(根据FPGA封装不同而不同),支持多个传感器或信号连接。

•用于FPGA温度监测和电源电压跟踪的片上传感器,有助于系统可靠性和热管理。

•灵活的接口选项:支持AXI Lite,动态重新配置端口(DRP)或直接寄存器控制,允许与不同的FPGA设计集成。

•支持单极(0V至1V)和双极(-0.5V至0.5V)输入模式,适应各种模拟信号范围。

•可配置报警阈值,使自动警报电压或温度异常。

XADC通过弥合模拟和数字域之间的差距,增强了FPGA的多功能性,使其成为需要在基于FPGA的系统中进行实时模拟信号处理的应用的理想选择。

Vivado:赛灵思的FPGA设计软件

Vivado是Xilinx的综合FPGA设计套件,用于设计、模拟、合成和编程基于FPGA的系统。它为HDL开发提供了一个完整的工具链,包括逻辑分析仪、IP集成器和调试工具,使其成为FPGA开发必不可少的工具。无论您是实现简单的逻辑电路还是复杂的数字系统,Vivado都可以通过其高级合成(HLS),基于块的设计方法和硬件调试工具简化设计流程。

下载安装程序

访问AMD/Xilinx官方网站并导航到下载部分。

下载最新版本的统一安装程序,选择与您的操作系统(Windows或Linux)兼容的版本。

注意:您需要登录或创建一个免费的AMD/Xilinx帐户才能访问下载。

安装过程

运行安装程序并按照屏幕上的说明操作。

在安装过程中,您可以选择完全安装或自定义安装,这取决于您是否需要额外的工具,如Vitis(用于嵌入式开发)或仅用于FPGA设计的Vivado。

准备好大量下载(几gb),因此建议使用稳定且快速的互联网连接。

创建第一个项目

一旦安装了Vivado,下一步就是在AMD Vivado设计套件中创建一个新项目。本项目将作为工作空间,您将在其中编写,模拟和合成您的FPGA设计。

步骤1:创建项目

打开Vivado并从欢迎屏幕中选择Create New Project。

选择一个项目名称(例如,DisplayXADC)并选择一个方便的位置来保存项目文件。

单击Next继续。

步骤2:选择项目类型

当提示项目类型时,选择RTL项目(注册-传输级别),因为这允许您使用SystemVerilog编写设计。

启用“此时不指定源”复选框,除非您已经准备好了源文件。

单击Next继续。

步骤3:创建源文件和约束文件

进入项目后,创建一个新的源文件:选择create file→选择SystemVerilog作为文件类型。将其命名为任何您喜欢的名称(例如,xadc_display.sv)。

创建空约束文件:选择“创建文件”→确保文件类型为XDC (Xilinx Design Constraints)。将其命名为您喜欢的任何名称(例如,constraints.xdc)。稍后将使用该文件定义引脚映射、时钟约束和定时设置。

步骤4:选择FPGA板

将出现一个对话框,提示您在零件和电路板之间进行选择。

选择Boards选项卡并键入您的FPGA板型号(例如,Arty S7-25)。如果没有显示您的单板,请单击“刷新”或确保安装了单板文件。

单击Next,然后单击Finish以完成设置。

配置XADC

要在FPGA设计中使用XADC (Xilinx模数转换器),需要在Vivado中添加和配置XADC IP核。按照以下步骤正确设置:

步骤1:添加XADC IP核

在Vivado的左侧,找到并单击IP Catalog。

在搜索栏中,输入“XADC”。

选择“XADC向导”,然后双击打开其配置设置。

步骤2:自定义XADC IP

将出现一个对话框,允许您配置XADC核心。

选择接口类型:配置接口模式为DRP (Dynamic Reconfiguration Port)。这允许通过寄存器实时访问ADC转换。

选择转换模式:在模式选择下,选择“单通道”,设置为“连续模式”。这确保了ADC连续采样单个模拟输入,而不是通过多个通道循环。

禁用告警(本项目不需要):导航到“告警”页签。禁用所有警报,因为此应用程序不需要它们。这些告警通常用于监控电源电平和FPGA温度。

选择模拟输入引脚:在单通道选项卡下,找到外部模拟输入部分。为A0引脚(或FPGA上相应的ADC引脚)选择VAUXP0/VAUXN0。确切的引脚映射可能因FPGA板而异,因此请检查约束文件(.xdc)以验证正确的引脚。

步骤3:生成XADC IP核

保留所有其他设置为默认值,除非您的应用程序需要进一步定制。

单击OK关闭自定义窗口。

在下一个对话框中,选择“生成输出产品”,然后单击“生成”。

此时,将生成XADC IP核并准备将其集成到您的设计中。该模块将允许您的FPGA与模拟信号接口,例如从电位器或其他传感器读取电压电平。

代码

ConstrainFile

约束文件(.xdc)在FPGA设计中至关重要,因为它定义了项目的I/O引脚映射、时钟约束和时序要求。该文件告诉FPGA使用哪个物理引脚进行输入和输出,确保您的设计与外部硬件(如按钮,led,传感器或通信接口)正确交互。

每个FPGA板都有一个唯一的约束文件,因为不同的板有不同的引脚分配和硬件配置。

七段模块

该子模块设计用于一次控制单个七段LED显示屏。它需要一个输入时钟信号来同步显示更新和一个输入数字(十六进制0-F)。

高层模块

主模块被指定为源文件层次结构中的“顶层”模块。这个顶层模块作为设计的入口,类似于C语言编程中的主要功能。通过用清晰的层次结构构建设计,顶层模块确保所有组件有效地协同工作,使调试和扩展系统更容易。

顶层模块的角色

•它充当集成和连接设计中所有其他子模块的最高级模块。

•它定义了与FPGA外部引脚接口的I/O端口。

•它实例化其他模块的实例,在它们之间传递信号以确保正确的通信。

初始化模块实例

在顶部模块中,您将创建项目中定义的其他模块的实例。这些实例的行为类似于软件编程中的函数调用,但它们不是按顺序执行,而是并行操作。

我们首先定义它的输入和输出端口,这决定了FPGA如何与外部硬件组件交互。

时钟输入(用于同步)

模拟输入(用于从XADC读取数据)

输出控制七段显示

实例化XADC模块

接下来,我们实例化XADC模块,该模块连续采样模拟输入信号并将其转换为16位数字值。然后对这些数据进行处理,以提取相关信息进行显示。

实例化七段显示模块

由于我们正在使用两个七段显示,因此我们创建了sevenSegment模块的两个实例。这些实例接收处理过的数据并驱动相应的显示段。

数据处理和路由

来自XADC的原始数据是16位宽,但是一个7段的显示器通常一次只显示一个数字。

为了显示有意义的值,我们对16位数据进行切片,只提取高阶位,它们代表ADC转换结果的最高有效数字。

切片后的数据被发送到七段模块,在那里被转换成二进制编码格式(BCD)显示。

构建和编程

一旦编码阶段完成,我们就进入构建和编程过程,在此过程中,设计被合成、实现并转移到FPGA硬件。

步骤1:生成比特流

•在Vivado中,找到左侧面板中的“构建和调试”部分。

•点击“生成比特流”来启动这个过程。

•如果出现提示,单击“Yes”继续。

该过程包括三个主要步骤:综合:将SystemVerilog代码转换为门级表示。实现:将逻辑映射到FPGA的物理资源上。比特流生成:创建将加载到FPGA上的最终二进制文件。

此过程可能需要一些时间,具体取决于设计的复杂性和系统的性能。

步骤2:连接FPGA板

•一旦比特流成功生成,转到“打开硬件管理器”。

•现在,使用微型USB电缆将FPGA板连接到计算机。确保单板已上电。

•在硬件管理器中,点击“自动连接”。这将扫描连接的FPGA设备。将出现检测到的硬件设备列表。

步骤3:FPGA编程

•在列表中找到您的FPGA设备。

•右键单击设备,选择“程序设备”。

•将出现一个对话框,确认要使用的比特流文件(.bit)。

•点击“Program”将设计加载到FPGA上。

该程序在FPGA中是临时的,一旦电源被切断,它就会回到工厂或以前烧毁的程序。如果您想将程序刻录到FPGA中,则选择“程序eFUSE寄存器”,这将刻录程序,并且在电源周期后不会丢失。

布线

在这个项目中,我使用IO0到IO13引脚连接两个七段LED显示屏。这些引脚被分配来控制单个LED段。

连接七段显示器

•根据您的设计将7段LED段连接到IO0-IO13。

•应相应地连接公共地(用于公共阴极显示器)或公共电源(VCC)(用于公共阳极显示器)。

•确保显示模块的地与FPGA的地相连,完成电路。

自定义Pin分配

•可以根据项目需要更改这些pin分配。

•如果修改了pin分配,则必须相应地更新约束文件(.xdc)以反映新的连接。

•验证七段显示器与FPGA的I/O电压水平的电压兼容性(例如,3.3V逻辑用于Arty S7-25)。

连接XADC电位器

•您可以使用任何通用的10K电位器作为模拟输入设备。

•连接方式:一端接VCC (3.3V)。另一端到GND。中间(雨刷)引脚到XADC输入引脚(VAUXP0/VAUXN0,如约束文件中定义)。

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

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

相关文章

3月10号-3月16号笔记三合一+两篇面经

2025.3.10 学习 八股 blocked和waiting有啥区别 触发条件:线程进入BLOCKED状态通常是因为试图获取一个对象的锁(monitor lock),但该锁已经被另一个线程持有。这通常发生在尝试进入synchronized块或方法时,如果锁已被占用,则线程将被阻塞直到锁可用。线程进入WAITING状态是…

Dicom纯js的三维重建影像浏览器

主要功能介绍 实现通过浏览器浏览Dicom影像阅片。主要功能:支持标准DIcom影像的2D浏览,预设窗位,伪彩,序列间,序列内多种布局方式。 影像处理,提供影像翻图、缩放、移动、透镜、反相、旋转、截图等操作 影像测量,提供箭头、直线、十字架、角度、Cobb、心胸比、椭圆、矩形…

电子签借贷真实吗?315报道引发的行业地震!电子签到底冤不冤?

看了315的相关报道后,曝光套路贷本来是正向的,却将电子签和高利贷混为一谈。这种无意识的混淆不仅会误导大众,也不利于新兴技术的健康发展。电子签作为一种替代纸质合同签署的新兴技术,有着独特的优势和重要的意义。在过去,不同主体之间签订合同往往需要面对面进行签署,这…

C#反编译

偶遇C#逆向题,IDA拼尽全力无法战胜,只给我一团乱码。 这时可以使用dnSpy来反编译: https://github.com/dnSpy/dnSpy/releases/tag/v6.1.8 1.dnSpy使用方法: 将你要反编译的程序的整个文件夹拖到那里,似乎只有.dll那里才能看到源码, 例题:https://www.nssctf.cn/problem/3…

Windows11跳过Microsoft账户登录方法

新版Win11默认必须联网并且使用Microsoft账户登录,不然不能进去系统,以下是不联网进入方法1、在开机出现登录界面时,按下Ctrl+Shift+F3快捷键,然后系统会自动重启,重启 后会出现一个不需要登录Microsoft账户的启动界面,直接进入Windows11系统,系统中会弹窗,点确定。 2、…

android studio 真机wifi调试经验汇总

--------------- 2025/03/11 真机连接连不上wifi调试可能的原因: 1.手机没有开启开发者模式 2.手机没有开启usb调试以及wifi调试 3.手机应该改为传输文件模式 4.手机和电脑应该连接同一个wifi 5.在电脑cmd窗口输入adb connect ip:port(前提电脑需要配好adb环境)adb连接手机教…

广度优先搜索(BFS)走迷宫:

广度优先搜索(BFS)走迷宫: 广度优先搜索(BFS)是一种经典的图遍历算法,在解决路径查找、迷宫问题、拓扑排序等问题 前置知识:队列: 队列与栈类似,但是先进先出,而不是栈的先进后出。 原理: 相当于爆破,将所有的位置都走一遍 通用迷宫代码实现: #include <iostre…

TEA与XTEA算法:

TEA算法使用64位的明文分组和128位的密钥,它使用Feistel分组加密框架,需要进行 64 轮迭代,尽管作者认为 32 轮已经足够了。该算法使用了一个神秘常数δ作为倍数,它来源于黄金比率,以保证每一轮加密都不相同。但δ的精确值似乎并不重要,这里 TEA 把它定义为 δ=「(√5 - 1…

ui中的控件stackwidget如何拖拽添加widget

QStackedWidget界面的操作步骤-百度经验

UPX加壳原理,加壳及去壳:

加壳: 先写一个简单的代码:生成text.exe文件,然后把这个文件放到与upx同一个文件夹里: 输入指令./upx text.exe 即可加壳 使用IDA打开,可以明显发现被upx加壳了,其大小也由原来的55kb压缩到42KB: 去壳: 工具去壳: 使用指令./upx -d text.exe即可脱壳大小也变回去了,用…

vscode remote ssh内存异常占用高问题

参考:https://blog.csdn.net/sigmarising/article/details/107615035 点开设置搜索search.follow。在用户/远程/工作区都取消勾选Follow Symlinks,如图所示。

Hook(钩子技术)

一.介绍 1.当代码执行到某行时,获取寄存器值和内存里的值,进行调试分析,例如hook明文包. 2.当代码执行到某行时,插入想执行的代码.例如迅雷拦截发包函数. 3.当代码执行到某行时,修改寄存器,达到某些篡改目的. 拿FishingKit这道题举例就是本来运行流程是: a--->b 而使用了H…