- 博客(108)
- 资源 (4)
- 收藏
- 关注
原创 FPGA教程系列-流水线思想初识
流水线设计是一种典型的面积换性能的设计。一方面通过对长功能路径的合理划分,在同一时间内同时并行多个该功能请求,大大提高了某个功能的吞吐率;另一方面由于长功能路径被切割成短路径,可以达到更高的工作频率,如果不需要提高工作频率,多出来的提频空间可以用于降压降功耗。流水线设计是完美的时间并行。因为流水线上每一级的处理都是一个时钟周期的延时,并且一动则全动,每一级的延时可以完美的掩盖起来,最高实现与流水级数相同数量的请求并行度。流水线不是免费的午餐,它用“等待”换来了“速度”。时刻:电路的前半部分正在处理。
2026-01-08 15:34:44
226
原创 FPGA教程系列-乒乓操作
摘抄了两段,品一品。乒乓操作是一个经常用于数据流控制的处理技术,具有节约缓冲空间、对数据流无缝处理等特点。乒乓操作(Ping-Pong Buffering)是一种常见的设计模式。它通过双缓冲技术,使得一个缓冲区在进行数据传输或处理时,另一个缓冲区可以同时接受或准备新的数据。这样就可以在多个时钟周期内实现数据的无缝交替,最大化利用FPGA资源和提高数据处理效率。
2026-01-07 08:39:55
328
原创 FPGA教程系列-Vivado AXI串口仿真测试
串口作为常用的三大低速总线(UART、SPI、IIC)之一,在设计众多通信接口和调试时占有重要地位。串口(UART)全称通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),主要用于数据间的串行传递,是一种全双工传输模式。它在发送数据时将并行数据转换成串行数据来传输,在接收数据时将接收到的串行数据转换成并行数据。“异步”两个字即意味着在数据传递的两个模块之间使用的不是同步时钟。
2026-01-06 09:08:30
974
原创 FPGA教程系列-Vivado AXI串口程序解析
该模块的作用是将异步串行数据(UART RXD)接收并转换为 FPGA 内部通用的 AXI4-Stream 总线流数据。输入:UART 串行线rxd,配置分频值prescale。输出:AXI-Stream 接口 (tdata,tvalid,tready),以及状态标志(忙、溢出错误、帧错误)。参数DATA_WIDTH(默认8位),支持非标准位宽。该模块的作用是将 FPGA 内部的并行数据(通过 AXI-Stream 接口)转换为 UART 串行数据流发送出去。输入:AXI-Stream 数据 (
2026-01-05 11:16:55
738
原创 日拱一卒之隐式神经表示 (Implicit Neural Representations, INR)
连续性与无限分辨率:因为它是一个数学函数,你可以无限放大图像/物体而不出现马赛克(锯齿)。就像矢量图一样,但它可以表示照片级的细节。存储效率:对于复杂的3D形状,存储神经网络的权重可能比存储巨大的体素网格(Voxel Grid)要小得多。可微性:整个表示是可微分的。这意味着你可以通过反向传播,直接利用2D图片来优化3D形状(这是 NeRF 成功的根本原因)。拓扑无关:它不需要像 Mesh 那样处理顶点连接关系,更适合处理拓扑结构变化的物体(比如水流、云雾)。隐式神经表示 (INR)就是。
2026-01-04 09:55:29
835
原创 FPGA教程系列-Vivado Aurora 8B/10B 例程修改
数据进入模块后,先在寄存器里存一拍。这样做可以切断 Aurora IP 接收逻辑与校验逻辑之间的长组合逻辑路径,有助于在高频时钟下满足时序要求。之前的Aurora 8b/10b的例程,是通过LL接口转换成AXI接口的,既然AXI接口也了解的差不多了,可以尝试把这个接口转换的功能去掉了。:这意味着发送端(FRAME_GEN)发送的第一个数据。 有效时(即收到一个数据),LFSR 计算。可以发现,只有3个模块了,与预期相符。,否则校验一开始就会报错。:这是 AXI 协议的关键。周期应该收到的数据。
2025-12-30 15:35:14
537
原创 日拱一卒之FPGA学习计划
Alex Forencich 的代码库(主要是,,等)是 FPGA 开源界的一座宝库。,因为他的以太网和 PCIe 库非常庞大。反之,如果,你虽然能完成项目,但错失了提升自己 Verilog 编码水平和架构设计能力的绝佳机会。有道理的东西,那么就有价值,不论如何,可以先进行尝试。下面就总体框架进行一个梳理看看效果。
2025-12-28 10:53:40
876
原创 日拱一卒之quartus芯片移植查看
点选show migration differences 就可以查看了,如下图这样的就不要轻易的更换了,容易烧掉或功能不正常。altera的芯片用的比较少了,但是还是有一定的价值,那么,在使用过程中,如果遇到了想升级芯片的想法该如何呢?更进一步的话,可以自行看看编译完成后,会不会有个移植报告,不过我没找到-。据说会有个报告,但是并没有发现,于是曲线救国吧,打开Pin Planner。首先得看看封装是否一致,如果封装都不一致了,就直接重新画板子吧。其次,quartus软件内可以查看是否可以移植。
2025-12-27 19:08:10
257
原创 FPGA教程系列-Vivado AXI4-Full接口
再说个题外话,看到突发,总是不太理解,为什么要用这个词,再理解一下什么是突发(Burst)?用一句话概括:“突发”就是“给一个首地址,连续传一堆数据”。发送地址 A -> 传输数据 D1发送地址 A+1 -> 传输数据 D2发送地址 A+2 -> 传输数据 D3...(发 1 个数据就要喊 1 次地址,非常啰嗦)而在 AXI 等现代总线的突发模式(Burst mode)发送首地址 A,并告诉对方:“我要从这里开始,连续拿 4 个数据”。传输数据 D1传输数据 D2传输数据 D3。
2025-12-25 15:31:02
1159
原创 FPGA教程系列-Vivado AXI4-Lite master 测试
写操作是地址和数据几乎同时发出的(为了快),而读操作是严格的“先发地址 -> 再等数据”的串行流程。:负责宏观流程(闲置 -> 写全套 -> 读全套 -> 比较 -> 结束)。输入信号的上升沿生成的。这意味着给一个高电平开关,内部只会触发一次启动脉冲。Master 内部自己算一个“应该读到的数据”。定义了整个模块的控制逻辑。:负责 AXI 写通道的具体握手细节。:负责 AXI 读通道的具体握手细节。精髓还是一句话,握手成功再进行数据通信。将内部寄存器连接到输出端口。定义了模块的可配置参数。
2025-12-24 20:20:07
803
原创 FPGA教程系列-Vivado AXI4-Lite slave 测试
在 32 位系统中,数据是 4 字节对齐的(地址 0x0, 0x4, 0x8...)。因此地址的最低 2 位(bit 0 和 bit 1)不用于选择寄存器,我们从 bit 2 开始看。观察波形,对比状态机的图,应该是先进入了WADDR状态将地址写入,然后,由于WVALID为0,进入了WDATA状态,之后写数据。定义了 AXI4-Lite 协议所需的 5 个通道(写地址、写数据、写响应、读地址、读数据)的所有信号。处理写操作的握手协议。将内部逻辑信号输出,并定义读写状态机的状态(空闲、地址阶段、数据阶段)。
2025-12-23 20:40:20
960
原创 日拱一卒之Python与matlab的内存读取区别
计算机内存是线性的(像一条长纸带),多维数组在内存中必须“拉直”存放。 是 NumPy 库中一个非常高效的函数,专门用于从文件中读取数据并将其转换为 NumPy 数组。当对某个维度使用整数索引时,NumPy 会认为:“你想要这个确切位置的数据,这个维度本身对你来说已经没用了。如果文件有一个文件头(Header),比如前 1024 字节是描述信息,真正的数据在后面,你可以设置。是 NumPy(以及 Python 列表)中最基础但也最重要的概念之一。在实际的使用中要多注意,这个是非常容易出错的地方。
2025-12-21 19:34:14
997
原创 FPGA教程系列-Vivado AXI4-Stream Data FIFO核解读测试
这强迫上游的 FIFO 必须将数据存入内部 RAM,从而验证 FIFO 的缓存功能和满标志逻辑是否正常工作。它定义了用于同步信号的寄存器级数,通常用于防止亚稳态。设为 No,意味着这个 FIFO 认为数据是无限连续的流,没有“包”的概念。如果是同步 FIFO,这两个值通常是一样的。,TKEEP (Keep) 用于指示数据流中的哪些字节是有效的(通常用于处理非对齐的数据包尾部)。它是一个紧急警告信号,告诉前级电路“再写一个我就满了”,通常比标准的。,TLAST 用于指示一个数据包(Packet)的结束。
2025-12-19 10:46:54
750
原创 FPGA教程系列-Vivado AXI4-Stream接口解读
AXI 表示Advanced eXtensibleInterface(高级可扩展接口),它是由 Arm 定义的接口协议,包含在“高级微控制器总线架构 AMBA”标准中。AXI4 (AXI4-Full):用于满足高性能存储器映射需求。AXI4-Lite:用于简单的低吞吐量存储器映射通信(例如,往来于状态寄存器的通信)。AXI4-Stream:用于高速流传输数据。
2025-12-16 21:47:38
846
原创 FPGA教程系列-Vivado AXI4-Stream自定义IP核
下一步将你当前正在 Vivado 中打开的整个 RTL(Verilog/VHDL)工程打包成一个 IP 核。将当前工程中已经画好的 Block Design(.bd 文件,即由多个 IP 连接而成的子系统)封装成一个新的、单一的 IP 核。选择硬盘上的一个特定文件夹,Vivado 会扫描该文件夹内的源文件(代码、约束等),并将其封装为 IP。这不是封装现有的代码,而是生成代码模板。
2025-12-15 21:50:48
722
原创 日拱一卒之最小二乘法
二乘”:在古汉语和数学术语中,“二乘”就是平方的意思。“最小”:指的是我们要让某个数值达到最小。最小二乘法是一种数学优化技术,它通过最小化误差的平方和,来寻找数据的最佳函数匹配。假设你在纸上画了很多个散点,现在你想画一条直线穿过它们,要求这条直线能最能代表这些点的趋势。你怎么确定哪条线是“最好”的?那条让所有点到直线的垂直距离的平方加起来最小的线,就是最好的线。假设有一组真实数据 $y$ 和模型的预测数据 $\hat{y}$。我们希望它们越接近越好。(人工智能方向的理解)
2025-12-14 16:42:04
963
原创 日拱一卒之Wirtinger 导数
假设 $z = x + iy$,且 $f(z) = u(x, y) + i v(x, y)$。对$z$对$\bar{z}$可以假设$z$和$\bar{z}$是两个完全无关的变量。当求 $\frac{\partial f}{\partial z}$ 时,把 $\bar{z}$ 看作常数。当求 $\frac{\partial f}{\partial \bar{z}}$ 时,把 $z$ 看作常数。
2025-12-13 18:03:06
543
原创 FPGA教程系列-Vivado Aurora 8B/10B 例程解读
它在接收端(RX)运行与发送端(TX)完全相同的伪随机数生成算法(LFSR),将计算出的“期望数据”与实际接收到的数据进行比对。:只要不在复位状态,它就被拉低(有效),意味着这个模块是一个“始终有数据要发”的贪婪发生器 (greedy generator),只要对方敢收,我就敢发。例子的仿真与解读就先到这里,其实有个小问题,gen和check的随机种子并不一致,暂时不清楚为什么这样,猜测可能是时序上的原因。它在收到数据后,用同样的算法算一遍,看收到的数对不对。为低),数据生成逻辑就一直处于复位状态。
2025-12-12 20:13:54
680
原创 FPGA教程系列-Vivado Aurora 8B/10B IP核设置
时钟计算按照图中的配置:3.125 Gbps / 2 Bytes (16 bits) / 10 (8B/10B编码效率) =156.25 MHz。user_clk是 156.25 MHz。所有 AXI 接口逻辑(读写 FIFO、状态机)都必须在这个时钟频率下工作。两端一致性FPGA A 和 FPGA B 通信,它们的 Line Rate、Lane Width、Scrambler、Interface (Framing/Streaming)必须一模一样,否则channel_up永远起不来。
2025-12-11 19:30:14
1254
原创 FPGA教程系列-Vivado Aurora 8B/10B IP核接口解析
代码组是8B / 10B编码字节对,所有数据都作为代码对发送,因此具有奇数个字节的用户帧具有称为PAD的控制字符,附加到帧的末尾以填写最终的代码组。也就是说,使用的GT高速收发器的通道越多、且其支持的线速率越高,则整个Aurora 8B/10B IP核的吞吐率越高,但是要注意乘以80%,因为8B/10B编码存在20%的开销。这些数据用户是看不见的,属于协议层的开销。,这很重要,因为 Aurora 8B/10B 协议要求帧的字节数如果是奇数,必须在末尾补一个 Pad 字符来凑成偶数(为了符号对齐)。
2025-12-10 18:53:37
760
原创 FPGA教程系列-Vivado Aurora 8B/10B 协议解析
Aurora 8B/10B 协议是一种可扩展的轻量级链路层协议,可用于在一条或多条高速串行通道上进行点对点数据传输。该协议本身独立于上层协议,既能承载以太网、TCP/IP 等标准协议,也能承载专有协议,从而让下一代通信与计算系统的设计者在保留现有软件投入的同时,获得更高的互连性能。虽然主要面向芯片间和板间应用,但只要增加标准的光接口组件,Aurora 8B/10B 协议也可用于机箱间的互连。Aurora 8B/10B 协议描述了用户数据在 Aurora 8B/10B 通道上的传输方式。
2025-12-09 20:42:16
926
原创 FPGA教程系列-8B10B编码
看了几篇文章,其实目的很简单,为了防止连续的0或者1,造成不必要的损耗,所以采用这种编码的形式,来达到一个直流平衡。以下是一些原文:8b/10b编码可以实现直流平衡,有助于减少信号传输过程中的电磁干扰(EMI)和信号失真,提高数据传输的稳定性和准确性。由于串行链路中存在交流耦合电容,理想电容的阻抗公式为Zc=1/2πf*C。因此,随着信号频率的增加,阻抗逐渐降低;反之,频率降低时阻抗增加。在这种情况下,当信号频率较高时,传输基本上可以实现零损耗。
2025-12-08 19:36:01
760
原创 日拱一卒之格林函数/共轭转置
主要回答了一个标准问题:“如果在位置 A 发生了一个单位强度(强度=1)的脉冲,位置 B 会收到什么样的信号?它只跟位置和频率有关,跟实际有没有源、源有多强无关。哪怕没有源,格林函数依然客观存在。数学本质:它是“传播算子”
2025-12-07 15:25:06
646
原创 日拱一卒之pytorch中的矩阵乘法
$\begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \end{bmatrix}$ (看起来像截断的单位矩阵)新建一个栏目,主要的点在于每天都要有点进步,每天进步千分之一,总归会有强大的一天。,不动它,然后对剩下的两个维度进行标准的 2D 矩阵乘法。(它仅仅是改变了看待数据的方式,因此叫 "view")。 用于将一个张量(Tensor)重塑为不同的形状,但。是两个非常核心的张量(Tensor)操作函数。的缩写,执行的是标准的线性代数中的。)时,执行的操作被称为。
2025-12-06 18:18:23
845
原创 FPGA教程系列-CRC硬件加速原理深度解析
换一句话说,如果以前8位一个字节来输入的话,进行8次“长除法”的运算结果,只跟这8位有关,那么,根据这8位做出一个查找表,包含了所有的情况,也就是256个结果,可以根据这8位是什么快速的查找结果,然后进行异或,相当于速度提升了8倍。现在的算法是“人还在最后排队,但我把他的票直接传送到门口,和正在出门的人的票混在一起查”。位到字节的转换,简单的想就是把一位看成一个字节,虽然是个类比的办法,还是不太容易理解,需要反复的琢磨。文章里说两个表,应该是在时间维度上的不一样,真实物理世界上应该是一个表。
2025-12-05 19:33:42
507
原创 FPGA教程系列-CRC校验初识
1、加法=减法=异或操作,传统的十进制的思维下,很难去理解,加法=减法,因为即使是无进位,9+1=0,9-1=8,也不能说明加法与减法是一致的,但是在二进制内却不一样,0-1=1,0+1=1,应该算是二进制的一个比较独特的性质,正好与计算机的二极管性质一致,也算是大自然的牛逼之处吧?在学习CRC的时候,不得不感慨二进制的特殊之处,传统的十进制的思维在这里受到了限制,同时又联想到了小谢尔顿的梦境,梦到了真神,0和1,万事万物都可以简单的用0和1来表示,希望能够把思维拓展开来。
2025-12-04 19:42:13
1213
原创 FPGA教程系列-Vivado实现低延时除法器与generate用法
2、generate简单用法,生成三个乘法器,分别将除法器的结果乘以1、2、3然后相加输出结果,其实就相当于将除法器的结果乘以6.还涉及到一些截断等,想了解的可以自行百度一下。其实就是用乘法器代替除法器,在matlab中编写一个1/x的查找表,然后通过值来查找对应的结果,y*1/x就相当于y/x了。1、第一个乘法器用来y与1/x相乘,也就是用来模拟除法器,输出o_P,可以用来查看延时。这些IP核在前面都讲过,就不再赘述了,不懂的可以翻一翻。结果放大看,是一个1/x的函数。可以看到,一共用了4个乘法器。
2025-12-03 20:39:16
246
原创 FPGA教程系列-番外篇Model Composer之滤波器优化设计仿真
;;在 设计中,双击 HDL_filter 子系统,然后双击 Gateway In 块打开属性编辑器。更换变量:在 Vitis Model Composer Hub 中,将采样频率更新为 120 MHz (6 * 20 MHz):单击 "分析 "将设计编译成硬件描述。现在,硬件设计只使用了一个 DSP48 资源(一个乘法器),与配置 HDL 块部分末尾的结果相比,使用的资源明显减少。。
2025-12-02 20:13:40
272
原创 FPGA教程系列-番外篇Model Composer之滤波器仿真
在vivado中仿真了濾波器,現在看看怎么用simulink进行仿真,算是一种互相的印证与学习。
2025-11-28 18:49:26
691
原创 FPGA教程系列-番外篇Model Composer初探
某些原因,接触到这个东西,感觉还挺有用的,就本着记录下的原则,进行一个学习的记录。早期应该是叫System Generator ,后来应该是改名成Model Composer,其实名字不重要,重要的是功能。System Generator是Xilinx公司进行数字信号处理开发的一种设计工具,它通过将Xilinx开发的一些模块嵌入到Simulink的库中,可以在Simulink中进行定点仿真,可以设置定点信号的类型,这样就可以比较定点仿真与浮点仿真的区别。
2025-11-27 19:13:17
451
原创 FPGA教程系列-滤波器的仿真分析(CIC+FIR)
需要生成一个FIR的IP核,调用如下,可以在一个工程里,可以看到这个滤波器valid信号一直为1,没有抽取。可以看到时域与频率的信号如图,并且生成了一个signal_data.coe文件,用于存储到ROM内。本实验的目的是生成一个带有噪声的信号,通过ROM存储,最终经过滤波器检查滤波器的效果,并验证。配置ROM的IP核:matlab生成的是12位的信号,这里对应的输入。生成IP核以后,输入是16位的,应该是跟AXI协议有关。Ps:TB可以直接写入文件,把滤波的数据直接进行存储。
2025-11-26 19:39:50
440
原创 FPGA教程系列-通过FIFO实现延时与跨时钟域
跨时钟域的话要考虑读和写的时钟,在这里简单的用读快写慢来进行实验,FIFO核中,有data count 的功能,其实原理很简单,当数据大于一个值后开始读,小于一个值后停止读就可以实现,当然,都是一些基本的操作,用于加深下FIFO的应用,并没有太多的实际用途,以后还是要具体情况具体分析,这里仅作为一个熟悉FIFO核的过程。简单的描述下逻辑,延时的话,是在同一个时钟域下,设置一个计数器,当写数据的时候开始计数,计数到需要的延时后读信号开始读取数据,这样就可以进行延时的操作。2、不同时钟下的读取。
2025-11-24 21:03:20
302
原创 FPGA教程系列-Vivado复数乘法的实现(IP核与非IP核)
在Vivado中,复数乘法的实现方式有很多种,可以用乘法器IP核,甚至可以直接用操作符*,还有复数乘法器的IP核,直接输出结果。需要注意的是位宽的不一致,应该是与AXI通信协议有关,所以只要满足例化需求就可以了。这个的优点是相对于4个乘法器,用了三个,资源占用少了一些。:非阻塞式流控制(持续发送数据,忽略接收端状态)。:设置希望IP核实现的最小延迟(时钟周期数)。使用FPGA的专用乘法器(DSP48E)实现。仿真,观察输出,与diy的结果应该保持一致。使用FPGA的查找表(LUT)实现乘法器。
2025-11-21 20:27:03
1389
原创 FPGA教程系列-Vivado IP核Clock Wizard核解析及测试
锁相环作为一种反馈控制电路,其特点是利用外部输入的参考信号来控制环路内部震荡信号的频率和相位。因为锁相环可以实现输出信号频率对输入信号频率的自动跟踪,所以锁相环通常用于闭环跟踪电路。锁相环在工作的过程中,当输出信号的频率与输入信号的频率相等时,输出电压与输入电压保持固定的相位差值,即输出电压与输入电压的相位被锁住,这就是锁相环名称的由来。Vivado中的生成锁相环的IP核为Clocking Wizard:用来监控时钟是否停止、故障和频率变化。一般不用。选项用于选择是使用MMCM还是PLL来完成时钟需求。
2025-11-20 23:09:14
1219
原创 FPGA教程系列-Vivado IP核Divider核解析及测试
除法器的IP核比较简单,所以把除法器的IP核跟仿真放到一起进行分析。可以看到,延时复位以后,大概延时了200ns,才得到输出结果。:与被除数通道中的对应选项完全相同,但作用于除数数据流。:被除数和除数都是有符号整数(使用二进制补码表示)。这个选项决定了除法器如何输出“除不尽”的部分。:设置完成一次除法运算所需的时钟周期数。时,此选项用于设置小数部分的精度。:输出传统的整数除法余数。需要注意的是除数与被除数的关系。:输出商的小数部分。:设置被除数输入的位宽。:显示或设置IP核的延迟。:设置除数输入的位宽。
2025-11-19 20:28:22
1012
Zynq7045-2FFG900开发板PDF原理图+Cadence16.3 PCB16层文件
2024-09-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅