- 博客(29)
- 收藏
- 关注
原创 《PCIe四种架构总结:同一条 Gen2 ×8 链路,1926 MB/s 与 133 MB/s 的差距从哪来》
本文基于同一XC7K325T板卡与XDMA通路,对比四种PCIe数据搬运架构。核心结论:AXI4-MM与AXI4-Stream接口吞吐差距达14.5倍(1926.3 vs 133 MB/s),主因在于后者无地址标识,受限于4 KB片上缓冲,需等待读请求往返(约30 µs),理论极限为136.5 MB/s;而前者支持连续地址读取,可实现高吞吐。变量影响明确:缓冲区从8 MB降至256 KB,吞吐下降;C2H通道从1增至2条,聚合速率翻倍。高吞吐代价是单次交付延迟显著增加。
2026-11-08 10:03:52
81
原创 《PCIe + BRAM架构(一):直接把DDR换成BRAM,只有读带宽没变》
本系列用同一块 XC7K325T 板卡、同一条 XDMA 通路,对比四种 PCIe 数据搬运架构:DDR 大缓存、Streaming、BRAM 轻缓存、多通道。本篇讲第三种:BRAM 架构。上一篇《PCIe + DDR架构(二):实测——更改上位机数据处理方式,带宽从1051.4 MB/s 涨到 1926.3 MB/s》
2026-11-07 18:04:20
327
原创 PCIe学习之《XDMA IP核配置选项理解》(非常详细)
本文详解在XC7K325T平台使用Vivado 2020.2配置XDMA IP核(v4.1)的流程与关键参数设置,涵盖基本模式选择(DMA/AXI Bridge)、链路配置(速率、Lane数、时钟)、AXI接口位宽与时钟频率匹配、数据通路选型(Memory Mapped vs Stream),以及PCIe ID和调试选项配置。重点强调参数需与硬件原理图一致,尤其参考时钟、链路宽度与地址位宽,确保链路训练成功并实现带宽优化。建议初学者使用Basic模式快速搭建,性能瓶颈时再进入Advanced调优。
2026-11-03 09:43:14
257
原创 《PCIe + DDR架构(二):实测——更改上位机数据处理方式,带宽从1051.4 MB/s 涨到 1926.3 MB/s》
本篇通过实测对比上位机数据处理方式,发现初始方案因每批申请新缓冲并清零、拷贝数据,导致软件开销高达52.4%,带宽仅1051.4 MB/s。优化为“缓冲池+零拷贝”后,软件占比降至约27%,墙钟吞吐提升至1926.3 MB/s(1.83倍)。虽低于单向读的2496.5 MB/s,但已逼近DMA极限,验证了上位机优化上限即为持续读速率。
2026-10-25 19:33:48
403
原创 PCIe + DDR架构(一):实测——块长从4 KiB 换 1 MiB,带宽从133 MB/s 涨到 3179 MB/s
本文实测基于PCIe + DDR3架构一(XDMA AXI内存映射模式),验证块长从4 KiB增至1 MiB对吞吐的影响。结果表明:写带宽从204.8 MB/s飙升至3387 MB/s(提升15.5倍),读带宽达2517 MB/s(提升12.4倍),且每笔固定开销恒为19 µs,占总耗时94%。读性能在256 KiB后封顶,仅达链路理论值的62%,并发读写合计2476 MB/s,非简单叠加。结论:限制吞吐主因是每笔固定开销,而非带宽瓶颈,大幅扩容单次传输可显著突破传统133 MB/s通道上限。
2026-10-24 08:49:22
386
原创 《PCIe 多通道架构(二):实测——两条通道带宽达到272 MB/s》
实测表明,PCIe多通道架构中每条通道吞吐上限约135 MB/s,非整机限制。双通道并行读取(2核)达272.1 MB/s,为单通道的2.06倍,链路利用率仅6.8%,瓶颈在核处理能力而非通道或链路。纯多核增益达2.07倍,通道增益可忽略;单源轮询亦可实现2.015倍增益,代价8%源于下游耦合。结论:提升吞吐需增加通道与核数,数据源数量无关。
2026-10-19 06:43:30
239
原创 《 PCIe 多通道架构(零):架构搭建——基于单通道架构把 C2H 通道从 1 条加到 2 条》
架构二收口时留了一个数:主机侧 C2H 取数 133 MB/s,FPGA 侧产数 3942 MB/s,差 30 倍。原因是 C2H 是非 posted 读,每批数据都要等一次往返,而 XDMA 片上缓冲只有约 4 KiB。但"133 是整条链路的上限还是每条通道的上限",决定了该换器件还是加一条通道。这一篇讲工程怎么搭起来:先查清 XDMA 的参数空间(通道数参数是 xdma_wnum_chnl,本器件每方向上限 2 条),再用最小改动搭出两源两通道——chan0 原样等于架构二、chan1 只加一个只产数
2026-10-18 17:43:31
318
原创 《PCIe 多通道架构(一):时序违例 −2.247 ns 怎么修——从 2355 个失败端点收到 198 个》
工程里新加了一个 AXI4-Stream 分发器,功能上完全正确,位流却报 WNS −2.247 ns、2355 个失败端点。这一篇讲这堆违例是怎么一个一个被定位和归位的:先分域(把范围从 69505 个端点缩到一个时钟域),再分型(是"逻辑级数太深"还是"布线占比太高"),然后把报告只打印的 20 条扩成全量 300 条、用脚本做三维统计。插完两片寄存器切片后 TNS 改善 97.9 %、失败端点从 2355 收到 198;但中间也踩了一次「插了不等于插对了」——最差的那 10 条根本没走新插的那条路。最
2026-10-18 09:25:31
173
原创 《PCIe AXI-Stream 架构(四):你测到的可能不是 PCIe,是 Windows——主机侧测量的四个陷阱》
同一条命令两跑,快慢方向居然相反。四个主机侧测量的陷阱:吞吐不是 RTT 的函数、采样窗不等于统计窗、ctypes 切片把延迟测高一倍、两个档位其实是 CPU 频率档。附「发现离散档位 → 找独立物证 → 控制变量钉死」三步法。
2026-10-09 06:37:32
305
原创 《PCIe AXI-Stream 架构(三):直通延迟到底是 8 ns 还是 60 µs?》
FPGA 内部回环延迟是 8 ns(2 拍),但端到端 RTT 是 60 µs——差 7500 倍,两个数都是真的。用 ILA 逐拍 + 双时间戳把延迟分层拆开,最后拆成 20 µs 固定往返 + 33 µs 主机 CPU。
2026-10-08 06:25:40
311
原创 《PCIe AXI-Stream 架构(二):XDMA 吞吐只有 133 MB/s?一次完整的瓶颈定位》
FPGA 侧 98.6% 线速(3942.7 MB/s),主机 read 只有 133 MB/s,差 30 倍。按「帧长 → read 边界 → 工具 → 链路 → RTL → C2H 语义」逐个排查,最后定位到 C2H 的非 posted 读。
2026-10-08 06:22:39
260
原创 《 PCIe AXI-Stream 架构(一):从零搭一个 XDMA 直通工程——逐模块讲清数据流与控制流》
直通(Streaming / Bypass)= 数据不在 FPGA 里停下来。数据从 A 点进来,直接走到 B 点出去,中间没有任何一块存储器。架构数据路径代价① DDR 大缓存ADC → 写入 DDR3 → 再读出 → PCIe多了 DDR 读写两趟;但能吸收突发、能重传② Streaming 直通(本篇)数据 → 一拍一个 128 bit 拍 → PCIe省了存储,也省掉了"吸收突发"的能力③ BRAM 轻缓存数据 → 写 BRAM(256 KB)→ 再读出缓存小,但延迟比 DDR 低。
2026-10-07 14:47:10
403
原创 《PCIe 四架构实测(零):为什么要做这个实验——硬件平台、数据帧格式与测量口径》
"吞吐多少"这句话在没有口径的情况下毫无意义。下面四个词在本系列里各只有一个意思,请以此为准。
2026-10-07 14:34:57
444
原创 Vivado 综合指南:为什么“我写了 `(* ram_style = “block“ *)` 还是没推断出来
✅BRAM 推断五条铁律一个数组一个写块。永远不要在多处写同一个数组。读要同步。数组不复位。需要初始化用initial,不要用rst_n清零。RAM 块里不许出现state。状态机只产出使能和地址。属性贴在数组声明前。位置错了等于没写。⚠️排查顺序(别一上来就改属性)结构对不对?RAM 有没有被业务逻辑包裹 ——90% 的问题在这资源选得对不对?BRAM / LUTRAM / 寄存器 —— 9%属性写对位置了吗 —— 1%
2026-09-24 09:16:24
353
原创 PCIe学习之《理解差分信号和高速信号》
答:因为这个终端匹配电阻被集成到了PCIe PHY(物理层)芯片的内部。数据通道采用交流耦合(AC Coupling) 方式,在发送端(TX)串联电容(如100nF)来隔离直流分量,而接收端(RX)内部则集成了终端电阻。你找不到这个电阻,正是因为它在芯片内部,而不是原理图遗漏了。PCIe要求85Ω或100Ω差分阻抗,根本目的是为了保证信号完整性,通过阻抗匹配来最大限度地减少高速信号在传输过程中的反射和损耗。这个数值并非随意指定,而是PCI-SIG组织在信号完整性、功耗和行业兼容性之间权衡的结果。
2026-07-31 15:21:37
187
原创 PCIe学习之《了解PCle的拓扑结构》
它是PCIe层次结构的根节点,连接着CPU、内存和所有PCIe设备。核心职责:1)系统启动时,由它负责“点名”整个拓扑中的设备,为每个Endpoint分配唯一的BDF(总线/设备/功能号),并为设备配置BAR(基地址寄存器),相当于分配内存“仓库”的存储区域;2)CPU与外部设备之间唯一的入口和出口。所有的内存读写、I/O请求都需要经过它进行地址转换和路由;3)负责接收设备发送的中断(MSI/MSI-X),并转交给CPU处理。Switch(交换机)它是一个扩展器,用于增加可连接的PCIe设备数量。
2026-07-30 15:36:03
179
原创 DDR学习之《MIG IP核配置选项理解》(非常详细)
俗话说,既要知其然,还要知其所以然!本文主要讲解在配置mig ip核遇到的疑问,详细讲解每个配置选项的应用场景及方案。对于像我这类什么都要搞懂底层逻辑的人来讲,非常友好!
2026-07-18 18:35:36
437
原创 PCIe学习之《PCIe体系结构三层模型》
事务层:使用从设备核心和应用程序获取的信息生成数据包,并将数据包存储在缓冲区,准备传输到数据链路层。数据链路层:将接收设备进行错误检查所需的附加信息拼接到数据包上,传输给物理层。物理层:对数据包进行编码,然后在该层的模拟链路上进行差分传输,最终发送给接收设备。
2026-07-15 13:32:50
246
原创 PCIe学习之《PCIe不同事务的区别》
Memory 事务 (存储器事务):用于访问系统主存或FPGA的BAR空间,是最主要、最高频的数据搬运方式,目标是实现高吞吐量。I/O 事务 (I/O事务):用于访问传统的I/O地址空间,主要是为了兼容老旧设备,在现代FPGA设计中已极少使用。Configuration 事务 (配置事务):由主机(Root Complex) 在系统启动枚举时发起,用于发现和配置PCIe设备。Message 事务 (消息事务):用于传输中断、错误、电源管理等系统级事件信息,取代了传统PCI的边带信号。
2026-07-13 13:13:01
218
原创 PCIe学习之《PCIe出现的背景和解决的问题》
并行总线PCI/PCI-X的传输带宽已经达到物理极限,无法再通过提高时钟频率来提高传输带宽。而且频率越高,数据线之间的串扰也就越严重。为了解决这些问题,PCIe总线应运而生。它通过差分串行的无时钟的数据传输方式,使数据能够大大地提高数据传输的带宽,并且能够稳定地传输。
2026-07-09 15:52:28
171
原创 DDR学习之基于AXI4接口的MIG核读写控制逻辑简单实现
本文介绍了使用AXI4接口实现DDR内存读写的方法。首先概述了AXI4总线协议的关键信号,包括写地址通道、写数据通道、写响应通道、读地址通道和读数据通道的主要信号功能。重点讲解了VALID和READY握手信号的交互机制,并通过餐馆与食客的类比帮助理解。随后详细说明了实验步骤:1)生成配置MIG IP核;2)创建example design用于仿真学习;3)编写AXI4读写代码替换原有设计;4)进行波形仿真验证。文章提供了MIG IP核配置的完整截图流程,为读者实现AXI4接口控制DDR读写提供了实用指导。
2026-05-19 08:57:55
454
原创 DDR学习之基于native接口的MIG核读写控制逻辑简单实现
此文章,简单讲述了MIG IP核的native接口的关键信号及其读写控制原来,并写了一个简单的读写控制逻辑,先写入256个数据,再从对应的地址读取数据。从而了解MIG IP核的控制原理,为后续实现AXI4接口控制MIG IP核打下基础。##参考文献。
2026-04-25 17:13:46
385
原创 DDR学习之《芯片存储结构》
以美光的MT41J256M16芯片为例,它有8个BANK,一个BANK包含16个整阵列,”16“刚好对应俺们芯片的数据位宽。这并不是巧合,而是每个阵列存储这着16位数据中的1bit.。每个阵列又分为若干行和若干列,行和列组合成为我们的存储地址。地址个数总和等于总行数乘以总列数,再乘以BANK总数,也就是256M.。当我们需要对某一个地址进行写入/读出时,要先找到它的位置,它属于哪个BANK,哪个行,哪个列。确定之后,16位数据会并行写入16个阵列,或者从16个阵列读出来。
2026-04-25 13:28:56
35
原创 tensorflow安装CUDA和cuDNN详细步骤(亲测有效)
@ # tensorflow安装CUDA和cuDNN详细步骤(亲测有效)CUDA和cuDNN对应版本查询https://www.tensorflow.org/install/source_windows#gpuCUDA下载链接https://developer.nvidia.com/cuda-toolkit-archivecuDNN不同版本下载https://developer.nvidia.com/rdp/cudnn-downloadCUDA及cUDNN安装详细步骤步骤链接点这里
2021-08-02 22:10:11
248
原创 基于Photoshop的logo样机使用
打开PSD格式样机素材文件点击扩展图标找到智能对象缩略图,并双击点击确定这时会打开图片上的LOGO图像导入新的LOGO,并删除原始LOGO图层Ctrl+S保存,点击样机文件,可以看到新的LOGO已经置入其中完毕。...
2021-01-02 23:05:20
1190
原创 Python图片保存之去除空白区域
Python图片保存之去除空白区域bbox_inches的使用使用pyplot.savefig中bbox_inches可以去除空白区域。实例from matplotlib import pyplot as plt不使用bbox_inches参数:可以看出图片中有大片的空白区域不使用bbox_inches参数:成功的去除了空白区域!...
2020-07-09 17:27:01
7111
4
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅