完整设备仿真定制固件开发指南 -- 基础概念
原项目:JPShag/PCILEECH-DMA-FW-Guide-2.0
前言
对于那些想要学习的人,你们选择了真正启迪的道路。你们用本指南所构建的东西将超越这些人能想象的一切。你们正在走向卓越,我们将一起超越他们所建立的失败。
第1部分:基础概念
1. 介绍
1.1 本指南的目的
本指南的主要目的是提供一种分步方法,开发用于基于FPGA设备的自定义直接内存访问(DMA)固件,以准确仿真PCIe硬件。这使得能够实现硬件测试、系统调试、安全研究和硬件仿真等应用。
通过遵循本指南,您将学习如何:
- 从捐赠设备收集必要信息
- 定制固件以仿真特定的硬件设备
- 使用Vivado和Visual Studio Code等工具设置开发环境
- 了解与PCIe和DMA操作相关的关键概念
1.2 目标受众
本指南适用于:
- 固件开发人员:对创建用于硬件仿真、测试或绕过硬件限制的自定义固件感兴趣的工程师。
- 硬件工程师:需要仿真特定设备进行硬件测试和开发的专业人员。
- 安全研究人员:进行漏洞评估、恶意软件分析或需要硬件仿真的安全测试的个人。
- FPGA爱好者:对FPGA定制和低级硬件仿真感兴趣的爱好者和学习者。
1.3 如何使用本指南
本指南分为三个部分:
- 第1部分:基础概念:涵盖开始设备仿真所需的基本概念、设置和初始步骤的固件开发。
- 第2部分:中级概念与实现:深入讨论更复杂的主题,如高级固件定制、TLP仿真和初始调试技术。
- 第3部分:高级技术与优化:探索高级调试、故障排除、优化策略和最佳实践。
建议按照指南的顺序进行,以建立牢固的理解,然后再处理高级主题。
2. 关键定义
理解术语对于有效地遵循本指南至关重要。以下是与PCIe、DMA和设备仿真相关的关键定义:
- DMA(直接内存访问):一种允许硬件设备直接从系统内存读取或写入数据的功能,无需CPU干预,实现高速数据传输。
- TLP(事务层数据包):PCIe架构中的基本通信单位,封装控制和数据信息。
- BAR(基地址寄存器):PCIe设备中的寄存器,定义内存和I/O地址区域,将设备内存映射到系统内存空间。
- FPGA(现场可编程门阵列):一种可重配置的集成电路,可编程以执行特定的硬件功能。
- MSI/MSI-X(消息信号中断):PCIe设备用于向CPU发送中断的机制,无需使用传统的中断线。
- 设备序列号(DSN):与特定设备关联的唯一标识符,通常用于高级设备识别。
- PCIe配置空间:标准化的内存区域,PCIe设备在其中提供关于自身的信息并配置操作参数。
- 捐赠设备:用于提取配置和识别详细信息以在FPGA上仿真其行为的PCIe硬件设备。
3. 设备兼容性
3.1 支持的基于FPGA的硬件
虽然本指南主要关注 Squirrel DMA (35T) 卡,因为它易于获取,但这些方法也可适用于其他基于FPGA的DMA硬件:
- Squirrel (35T)
- 描述:经济实惠的基于FPGA的DMA设备,适用于标准内存获取和设备仿真。
- Enigma-X1 (75T)
- 描述:中端FPGA,提供增强的资源,适合更高要求的内存操作。
- ZDMA (100T)
- 描述:高性能FPGA,针对快速内存交互进行了优化,适用于广泛的内存读/写。
- Kintex-7
- 描述:高级FPGA,具有强大的功能,适用于复杂项目和大规模DMA解决方案。
3.2 PCIe硬件注意事项
为了确保平滑的仿真,必须解决多个PCIe特定功能:
- IOMMU/VT-d设置
- 建议:禁用IOMMU(Intel的VT-d)或AMD的等效功能,以允许不受限制的DMA访问。
- 理由:IOMMU可能会限制DMA操作,可能会干扰内存获取和仿真。
- 内核DMA保护
- 建议:在现代系统中禁用内核DMA保护功能。
- 步骤:
- Windows:在BIOS/UEFI设置中禁用安全启动或基于虚拟化的安全性(VBS)等功能。
- 注意:禁用这些功能可能会使系统暴露于安全风险中;确保您在安全的环境中操作。
- PCIe插槽要求
- 建议:使用与FPGA设备要求匹配的兼容PCIe插槽(例如,x1、x4)。
- 理由:确保与主机系统的最佳性能和兼容性。
3.3 系统要求
- 主机系统
- 处理器:多核CPU(Intel i5/i7或AMD等效)
- 内存:至少16 GB RAM
- 存储:至少有100 GB可用空间的SSD
- 操作系统:Windows 10/11(64位)或兼容的Linux发行版
- 外围设备
- JTAG编程器:用于将固件烧录到FPGA
- PCIe插槽:确保主机系统有一个兼容DMA卡的可用PCIe插槽
4. 要求
4.1 硬件
- 捐赠PCIe设备
- 目的:用于仿真提取设备ID和配置数据的来源。
- 示例:网络适配器、存储控制器或任何未使用的通用PCIe卡。
- DMA FPGA卡
- 描述:能够执行DMA操作的基于FPGA的设备。
- 示例:Squirrel (35T)、Enigma-X1 (75T)、ZDMA (100T)、Kintex-7
- JTAG编程器
- 目的:用于将固件烧录到FPGA上。
- 示例:Xilinx Platform Cable USB II、Digilent JTAG-HS3
4.2 软件
- Xilinx Vivado设计套件
- 描述:用于综合和构建固件项目的FPGA开发软件。
- 下载:Xilinx Vivado
- Visual Studio Code
- 描述:用于编辑Verilog或VHDL代码的代码编辑器。
- 下载:Visual Studio Code
- PCILeech-FPGA
- 描述:用于DMA固件开发的代码库和基础代码。
- 代码库:PCILeech-FPGA在GitHub上
- Arbor
- 描述:用于收集设备信息的PCIe设备扫描工具。
- 下载:Arbor by MindShare
- 注意:需要创建账户;提供14天试用。
- 替代工具
- Telescan PE
- 描述:作为Arbor替代的PCIe流量分析工具。
- 下载:Teledyne LeCroy Telescan PE
- 注意:免费但需要手动注册批准。
- Telescan PE
4.3 环境设置
4.3.1 安装Xilinx Vivado设计套件
- 步骤:
- 访问 Xilinx Vivado下载页面
- 下载与您的FPGA设备兼容的适当版本
- 运行安装程序并按照屏幕指示进行操作
- 在安装过程中选择必要的组件
- 启动Vivado以确保正确安装
4.3.2 安装Visual Studio Code
- 步骤:
- 访问 Visual Studio Code下载页面
- 下载并安装适用于您的操作系统的版本
- 安装支持Verilog或VHDL的扩展(例如,Verilog-HDL/SystemVerilog)
4.3.3 克隆PCILeech-FPGA代码库
- 步骤:
- 打开终端或命令提示符
- 导航到您想要的目录:
cd ~/Projects/
- 克隆代码库:
git clone https://github.com/ufrisk/pcileech-fpga.git
- 进入克隆的目录:
cd pcileech-fpga
4.3.4 设置干净的开发环境
- 建议:在隔离的环境中工作,以防止意外的交互
- 步骤:
- 使用专用的开发机器或虚拟机
- 确保没有其他应用程序干扰PCIe操作或FPGA编程
5. 收集捐赠设备信息
准确的设备仿真依赖于仔细提取并复制捐赠设备的关键信息。全面的数据收集使您的FPGA能够忠实地模仿目标硬件的PCIe配置和行为,确保与主机系统的兼容性和功能。
5.1 使用Arbor进行PCIe设备扫描
Arbor 是一款功能强大且用户友好的工具,专为深入扫描PCIe设备而设计。它提供了连接硬件的配置空间的详细见解,使其成为提取设备仿真所需信息的宝贵资源。
5.1.1 安装Arbor
要开始使用Arbor进行设备扫描,您必须首先在系统上安装该软件。
- 步骤:
- 访问Arbor下载页面:
- 使用您的首选浏览器,导航到官方 Arbor下载页面
- 确保您直接访问该网站,以避免任何恶意重定向
- 创建账户(如果需要):
- Arbor可能需要您创建用户账户以访问下载链接
- 提供必要的信息,例如您的姓名、电子邮件地址和组织
- 如果提示,请验证您的电子邮件以激活账户
- 下载Arbor:
- 登录后,找到Arbor的下载部分
- 选择与您的操作系统兼容的版本(例如,Windows 10/11 64位)
- 点击下载按钮,将安装程序保存到计算机上的已知位置
- 安装Arbor:
- 找到下载的安装程序文件(例如,
ArborSetup.exe
) - 右键单击安装程序,选择以管理员身份运行,以确保其具有必要的权限
- 按照屏幕上的指示完成安装过程:
- 接受许可协议
- 选择安装目录
- 如果需要,可选择创建桌面快捷方式
- 找到下载的安装程序文件(例如,
- 验证安装:
- 完成后,确保Arbor列在您的开始菜单或桌面上
- 启动Arbor,确认其无错误打开
- 访问Arbor下载页面:
5.1.2 扫描PCIe设备
安装Arbor后,您可以继续扫描系统中连接的PCIe设备。
- 步骤:
- 启动Arbor:
- 双击桌面上的Arbor图标,或通过开始菜单找到它
- 如果用户帐户控制(UAC)提示,请允许应用程序对您的设备进行更改
- 导航到本地系统选项卡:
- 在Arbor界面中,找到导航窗格或选项卡
- 点击Local System以访问扫描本地计算机的工具
- 扫描PCIe设备:
- 找到通常位于界面顶部或底部的Scan或Rescan按钮
- 点击Scan/Rescan以启动检测过程
- 等待扫描过程完成;根据连接的设备数量,这可能需要一些时间
- 查看检测到的设备:
- 扫描完成后,Arbor将显示所有检测到的PCIe设备列表
- 设备通常以其名称、设备ID和其他识别信息列出
- 启动Arbor:
5.1.3 识别捐赠设备
正确识别捐赠设备对于准确的仿真至关重要。
- 步骤:
- 在列表中找到您的捐赠设备:
- 滚动浏览Arbor检测到的设备列表
- 查找与您的捐赠硬件型号匹配的设备
- 设备可能按供应商名称、设备类型或功能列出
- 验证设备详细信息:
- 点击设备以选择它
- 确认设备ID和供应商ID与您的捐赠设备匹配
- 提示:这些ID通常可以在设备的文档或制造商的网站上找到
- 查看详细配置:
- 选择设备后,找到并点击查看详细信息或属性等选项
- 这将打开一个详细视图,显示设备的配置空间和功能
- 与物理硬件进行交叉引用:
- 如果列出了多个类似的设备,请将插槽编号或总线地址与安装捐赠设备的物理插槽进行比较
- 在列表中找到您的捐赠设备:
5.1.4 捕获设备数据
从捐赠设备中提取详细信息对于准确的仿真至关重要。
要提取的信息:
设备ID (
0xXXXX
):- 一个唯一的16位设备型号标识符
供应商ID (
0xYYYY
):- 分配给制造商的16位标识符
子系统ID (
0xZZZZ
):- 标识特定的子系统或变体
子系统供应商ID (
0xWWWW
):- 标识子系统的供应商
修订ID (
0xRR
):- 指示设备的修订级别
类代码 (
0xCCCCCC
):- 定义设备类型的24位代码(例如,网络控制器、存储设备)
基地址寄存器 (BARs):
- 定义设备使用的内存或I/O空间的寄存器
- 包括BAR0到BAR5,每个可能为32位或64位
功能:
- 列出支持的功能,如MSI/MSI-X、电源管理、PCIe链路速度和宽度
设备序列号 (DSN):
- 如果设备支持,则为64位唯一标识符
步骤:
- 导航到PCI配置选项卡:
- 在设备的详细视图中,找到并选择PCI Config或Configuration Space选项卡
- 记录相关细节:
- 仔细记录每个所需的字段
- 为了准确性,可以使用截图或将值复制到文本文件或电子表格中
- 确保十六进制值记录正确,包括
0x
前缀(如果使用)
- 展开功能列表:
- 查找标记为Capabilities或Advanced Features的部分
- 记录每个功能及其参数(例如,MSI数量、支持的电源状态)
- 详细检查BARs:
- 对于每个BAR,注意:
- BAR编号(例如,BAR0)
- 类型(内存或I/O)
- 位宽(32位或64位)
- 大小(例如,256 MB)
- 可预取状态(是/否)
- 对于每个BAR,注意:
- 保存数据以供参考:
- 将所有信息编入组织良好的文档中
- 清晰地标记每个部分,便于在固件定制期间参考
- 仔细检查条目:
- 重新检查所有记录的数据以确保准确性
- 通过重新访问Arbor界面,纠正任何差异
- 导航到PCI配置选项卡:
6. 初始固件定制
在详细记录了捐赠设备的信息后,下一步是定制您的FPGA固件,以准确仿真捐赠设备。这涉及修改PCIe配置空间,并确保内存映射正确对齐。
6.1 修改配置空间
PCIe配置空间是定义设备如何被识别和与主机系统交互的关键组件。将此空间定制为匹配捐赠设备对于成功的仿真至关重要。
6.1.1 导航到配置文件
配置空间在您的项目中定义在特定的SystemVerilog(.sv)文件中。
路径:
标准路径:
pcileech-fpga/pcileech-wifi-main/src/pcileech_pcie_cfg_a7.sv
备用路径(取决于目录结构):
pcileech-fpga/src/pcileech_pcie_cfg_a7.sv
注意:
- 确保您位于正确的项目目录中
- 文件名可能会根据FPGA型号略有变化(例如,_a7表示Artix-7系列)
6.1.2 在Visual Studio Code中打开文件
编辑配置文件需要一个支持SystemVerilog语法高亮的合适代码编辑器。
步骤:
- 启动Visual Studio Code:
- 点击VS Code图标,或通过开始菜单找到它
- 打开文件:
- 使用文件 > 打开文件,或按Ctrl + O
- 导航到上述的配置文件路径
- 选择pcileech_pcie_cfg_a7.sv,然后点击打开
- 验证语法高亮:
- 确保编辑器识别.sv文件扩展名
- 如果需要,安装支持SystemVerilog的扩展
- 熟悉文件结构:
- 滚动浏览文件,了解现有的赋值和注释
- 查找定义配置寄存器的部分
6.1.3 修改设备ID和供应商ID
更新这些标识符对于主机系统将仿真设备识别为捐赠设备至关重要。
步骤:
搜索cfg_deviceid:
- 使用搜索功能(Ctrl + F)
- 找到定义cfg_deviceid的行
更新设备ID:
cfg_deviceid <= 16'hXXXX; // 用捐赠设备的设备ID替换XXXX
示例:
cfg_deviceid <= 16'h1234; // 如果捐赠设备的设备ID是0x1234
搜索cfg_vendorid:
- 找到定义cfg_vendorid的行
更新供应商ID:
cfg_vendorid <= 16'hYYYY; // 用捐赠设备的供应商ID替换YYYY
示例:
cfg_vendorid <= 16'hABCD; // 如果捐赠设备的供应商ID是0xABCD
确保正确的格式:
- 确认十六进制值以16'h为前缀
- 保持一致的缩进和注释风格
6.1.4 修改子系统ID和修订ID
这些标识符提供有关设备变体和硬件修订的其他详细信息。
步骤:
搜索cfg_subsysid:
- 找到定义cfg_subsysid的行
更新子系统ID:
cfg_subsysid <= 16'hZZZZ; // 用捐赠设备的子系统ID替换ZZZZ
示例:
cfg_subsysid <= 16'h5678; // 如果捐赠设备的子系统ID是0x5678
搜索cfg_subsysvendorid:
- 找到定义cfg_subsysvendorid的行
更新子系统供应商ID(如果适用):
cfg_subsysvendorid <= 16'hWWWW; // 用捐赠设备的子系统供应商ID替换WWWW
示例:
cfg_subsysvendorid <= 16'h9ABC; // 如果捐赠设备的子系统供应商ID是0x9ABC
搜索cfg_revisionid:
- 找到定义cfg_revisionid的行
更新修订ID:
cfg_revisionid <= 8'hRR; // 用捐赠设备的修订ID替换RR
示例:
cfg_revisionid <= 8'h01; // 如果捐赠设备的修订ID是0x01
6.1.5 更新类代码
类代码告知主机设备的类型和功能。
步骤:
搜索cfg_classcode:
- 找到定义cfg_classcode的行
更新类代码:
cfg_classcode <= 24'hCCCCCC; // 用捐赠设备的类代码替换CCCCCC
示例:
cfg_classcode <= 24'h020000; // 如果捐赠设备的类代码是0x020000(以太网控制器)
验证正确的位宽:
- 确保类代码是24位值
- 十六进制值应以24'h为前缀
6.1.6 保存更改
在进行所有修改后,保存并查看更改非常重要。
步骤:
保存文件:
- 点击文件 > 保存,或按Ctrl + S
查看更改:
- 重新阅读修改的行以确认准确性
- 检查是否有任何语法错误或拼写错误
可选 - 使用版本控制:
- 如果使用Git或其他版本控制系统,用有意义的消息提交您的更改
git add pcileech_pcie_cfg_a7.sv git commit -m "更新PCIe配置,包含捐赠设备标识符"
6.2 插入设备序列号(DSN)
设备序列号(DSN)是某些设备用于高级功能的唯一标识符。包括它可增强仿真的真实性。
6.2.1 找到DSN字段
DSN通常在同一配置文件中定义。
步骤:
搜索cfg_dsn:
- 在pcileech_pcie_cfg_a7.sv中,使用搜索功能(Ctrl + F)查找cfg_dsn
了解现有赋值:
- DSN可能设置为默认值或清零
cfg_dsn <= 64'h0000000000000000; // 默认DSN
6.2.2 插入DSN
更新DSN涉及将其设置为捐赠设备的确切值。
步骤:
更新cfg_dsn:
cfg_dsn <= 64'hXXXXXXXX_YYYYYYYY; // 用捐赠设备的DSN替换
示例:
cfg_dsn <= 64'h0011223344556677; // 如果捐赠设备的DSN是0x0011223344556677
处理DSN不可用的情况:
- 如果捐赠设备没有DSN或不需要DSN,将其设置为零:
cfg_dsn <= 64'h0000000000000000; // 无DSN
确保正确的格式:
- DSN是一个64位值;确保其格式正确
- 对十六进制值使用64'h前缀
添加注释以增加清晰度:
- 包括一条注释,指明DSN的来源
cfg_dsn <= 64'h0011223344556677; // 捐赠设备的DSN
6.2.3 保存更改
通过保存和查看,完成修改。
步骤:
- 保存文件:
- 点击文件 > 保存,或按Ctrl + S
- 验证语法:
- 查找编辑器中的任何红色下划线或错误指示
- 在继续之前,纠正任何问题
- 记录更改:
- 如果使用版本控制,请用适当的消息提交更新
git commit -am "在配置中插入捐赠设备的序列号(DSN)"
7. Vivado项目设置和定制
在将固件文件更新为反映捐赠设备的配置后,下一步是将这些更改集成到Vivado项目中。这涉及生成项目文件、定制IP核,并为综合和实现准备设计。
7.1 生成Vivado项目文件
Vivado使用Tcl脚本自动创建和配置项目。通过运行这些脚本,您可以确保所有设置都根据您的FPGA设备正确应用。
7.1.1 打开Vivado
从一个新的Vivado会话开始,确保先前的设置或项目不会干扰您当前的工作。
步骤:
- 启动Vivado:
- 在开始菜单或桌面上找到Vivado应用程序
- 点击打开它
- 选择正确的版本:
- 如果安装了多个版本,确保您使用的版本与您的FPGA兼容(例如,Vivado 2020.1)
- 等待启动屏幕:
- 允许Vivado完全初始化,然后再继续
7.1.2 访问Tcl控制台
Tcl控制台允许您直接执行脚本和命令。
步骤:
- 打开Tcl控制台:
- 在Vivado界面中,转到菜单栏
- 点击窗口 > Tcl控制台
- Tcl控制台将出现在窗口底部
- 调整控制台大小(可选):
- 拖动控制台的顶部边框,以调整其大小,便于查看
- 清除先前的命令:
- 如果存在任何命令,您可以清除它们,以便干净地开始
7.1.3 导航到项目目录
确保Tcl控制台指向您的项目脚本所在的正确目录。
对于Squirrel DMA(35T):
路径:
- 您的项目目录,通常是:
C:/Users/YourUsername/Documents/pcileech-fpga/pcileech-wifi-main/
步骤:
- 设置工作目录:
- 在Tcl控制台中输入:
cd C:/Users/YourUsername/Documents/pcileech-fpga/pcileech-wifi-main/
- 用您系统上的实际位置替换路径
- 在Tcl控制台中输入:
- 验证目录更改:
- 在Tcl控制台中输入pwd
- 控制台应显示当前目录,确认更改
7.1.4 生成Vivado项目
运行适当的Tcl脚本将设置项目,包含所有必要的配置。
步骤:
- 运行Tcl脚本:
- 对于Squirrel(35T):
source vivado_generate_project_squirrel.tcl -notrace
- 对于Enigma-X1(75T):
source vivado_generate_project_enigma_x1.tcl -notrace
- 对于ZDMA(100T):
source vivado_generate_project_100t.tcl -notrace
- 对于Squirrel(35T):
- 等待脚本完成:
- 该脚本将执行多个命令:
- 创建项目
- 添加源文件
- 配置项目设置
- 监视Tcl控制台的进度消息
- 解决可能出现的任何错误,例如缺少文件或路径不正确
- 该脚本将执行多个命令:
- 确认项目生成:
- 完成后,控制台将指示项目已创建
- 项目文件(.xpr和相关目录)将出现在项目目录中
7.1.5 打开生成的项目
现在项目已生成,您可以在Vivado中打开它以进行进一步的定制。
步骤:
- 打开项目:
- 在Vivado中,点击文件 > 打开项目
- 导航到您的项目目录
- 选择项目文件:
- 对于Squirrel:
pcileech_squirrel_top.xpr
- 点击.xpr文件以选择它
- 对于Squirrel:
- 点击打开:
- Vivado将加载项目,显示设计层次结构和源文件
- 验证项目内容:
- 在项目管理器窗口中,确保所有源文件都列出
- 检查打开时是否有任何警告或错误
7.2 修改IP模块
PCIe IP核是一个关键组件,必须配置以匹配捐赠设备的规格。定制IP核可确保FPGA在PCIe协议级别与捐赠硬件的行为相同。
7.2.1 访问PCIe IP核
PCIe IP核是在您的Vivado项目中实例化的IP模块。
步骤:
- 找到PCIe IP核:
- 在源文件窗格中,确保选择了层次结构选项卡
- 展开设计层次结构,找到PCIe IP核
- 通常命名为pcie_7x_0.xci或类似名称
- 打开IP定制窗口:
- 右键点击pcie_7x_0.xci
- 从上下文菜单中选择定制IP
- IP配置窗口将打开
- 等待IP设置加载:
- IP定制界面可能需要一些时间初始化
- 在继续之前,确保所有选项和选项卡都已完全加载
7.2.2 定制设备ID和BARs
在IP核中配置设备标识符对于主机系统正确枚举设备至关重要。
步骤:
- 导航到设备和供应商标识符:
- 在IP定制窗口中,选择设备和供应商标识符选项卡或部分
- 输入设备ID:
- 找到标记为Device ID的字段
- 输入捐赠设备的设备ID(例如,0x1234)
- 输入供应商ID:
- 找到Vendor ID字段
- 输入捐赠设备的供应商ID(例如,0xABCD)
- 输入子系统ID和子系统供应商ID:
- 输入Subsystem ID(例如,0x5678)
- 输入Subsystem Vendor ID(例如,0x9ABC)
- 设置修订ID:
- 输入Revision ID(例如,0x01)
- 设置类代码:
- 输入Class Code(例如,0x020000用于以太网控制器)
- 配置其他标识符(如果可用):
- 一些IP核允许设置编程接口、设备功能等
- 根据需要将其与捐赠设备匹配
7.2.3 配置BAR大小
BAR定义了设备如何将其内部内存和寄存器映射到主机系统。
步骤:
- 导航到基地址寄存器(BARs):
- 在IP定制窗口中,选择BARs选项卡或部分
- 配置每个BAR:
- 对于BAR0到BAR5,根据捐赠设备设置以下参数:
- 启用BAR:选中或取消选中以匹配捐赠设备
- BAR大小:从下拉列表中选择大小(例如,256 MB、64 KB)
- BAR类型:
- 内存(32位寻址)
- 内存(64位寻址)
- I/O
- 可预取:如果捐赠设备的BAR可预取,则选中
- 对于BAR0到BAR5,根据捐赠设备设置以下参数:
- 示例配置:
- BAR0:
- 已启用
- 大小:256 MB
- 类型:内存(64位)
- 可预取:是
- BAR1:
- 已禁用(如果捐赠设备不使用BAR1)
- BAR0:
- 确保对齐和不重叠空间:
- 确认映射的总内存不超过FPGA的能力
- 确保BAR大小符合PCIe规范要求
- 高级设置(如果适用):
- 某些设备可能有特殊要求,如扩展ROM BAR
- 如果必要,配置这些设置
7.2.4 完成IP定制
在配置所有必要的设置后,您需要应用更改。
步骤:
- 审查所有设置:
- 浏览IP定制窗口中的每个选项卡
- 确认所有条目与捐赠设备的规格相匹配
- 应用更改:
- 点击OK或Generate以应用设置
- 如果提示,确认您希望继续更改
- 重新生成IP核:
- Vivado将重新生成IP核以反映新配置
- 监视消息窗格以获取任何错误或警告
- 更新项目中的IP:
- 确保更新的IP核已正确集成到您的项目中
- Vivado可能会提示更新IP依赖项;允许其执行此操作
7.2.5 锁定IP核
锁定IP核可防止在综合和实现期间的意外更改。
目的:
- 防止覆盖:确保您的手动配置被保留
- 保持一致性:在整个构建过程中保持IP核处于已知状态
步骤:
- 打开Tcl控制台:
- 在Vivado中,如果尚未打开,转到窗口 > Tcl控制台
- 执行锁定命令:
- 输入以下命令:
set_property -name {IP_LOCKED} -value true -objects [get_ips pcie_7x_0]
- 按Enter执行
- 输入以下命令:
- 验证锁定:
- 检查消息窗格以确认
- IP核现在应标记为已锁定
- 解锁(如有必要):
- 要在将来进行进一步更改,可以解锁IP核:
set_property -name {IP_LOCKED} -value false -objects [get_ips pcie_7x_0]
- 记得在进行更改后重新锁定它
- 要在将来进行进一步更改,可以解锁IP核:
- 记录操作:
- 在您的项目文档中注明IP核已被锁定
- 这有助于团队成员了解项目的配置状态