数字逻辑
文章平均质量分 82
FPGA相关知识,各种驱动以及代码模块
今朝无言
这是宇宙中的一粒尘埃,亦是这世间的奇迹
展开
-
verilog实现STFT
短时傅里叶变换(STFT, Short Time Fourier Transform),是处理采样数据、获取信号时频特征的一种常用方法。然而其消耗的计算资源较为庞大,在数据采集设备全速运行时,若在上位机进行 STFT 的计算,则很难做到实时性。因此尝试将 STFT 步骤迁移到 FPGA 端进行,从而减轻上位机的计算压力。原创 2024-08-19 14:20:18 · 986 阅读 · 0 评论 -
vivado FFT IP Core
vivado FFT IP核详解,以及verilog控制代码示例原创 2024-07-18 17:58:10 · 1297 阅读 · 0 评论 -
VIO(Virtual_Input_Output) IP 使用笔记
VIO(Virtual Input/Output)IP 核,即虚拟输入输出 IP,可以通过调试界面模拟 IO 的变化,这可以在板子没有按键等外设、或外设不足的情况下,来模拟外部输入。原创 2024-07-04 11:44:30 · 438 阅读 · 0 评论 -
K7系列FPGA多重启动(Multiboot)
Xilinx 家的 FPGA 支持多重启动功能(Multiboot),即可以从多个 bin 文件中进行选择性加载,从而实现对系统的动态更新,或系统功能的动态调整。这一过程可以通过嵌入在 bit 文件里的 IPROG 命令实现上电后的自动加载。而同时 Xilinx 也提供了 ICAP 原语,给用户提供了访问配置功能的权限(对于 7 series 的芯片,需要使用 ICAPE2 原语),从而获得更加灵活的多重启动方式。本文即介绍 Multiboot 以及这两种启动方式,并对两种 Multiboot 进行实现。原创 2023-12-02 12:30:01 · 7259 阅读 · 67 评论 -
S25FL系列FLASH读写的FPGA实现
实现 S25FL-S 系列 FLASH 的读写控制,verilog 实现。实现了 SDR 时钟模式下,Quad 模式的主存读写,以及擦除、寄存器读写等功能。原创 2023-11-26 13:03:11 · 1385 阅读 · 17 评论 -
vivado调试核ILA使用技巧
ILA(Integrated Logic Analyzer)IP Core 是 vivado 的调试核,具体如何创建、调用不详说了。这里主要记录一个 ILA 的使用技巧,可以大大提高调试效率。原创 2023-11-22 14:20:28 · 1716 阅读 · 0 评论 -
S25FL256S介绍及FPGA实现思路
S25FL-S 系列 FLASH 介绍,以及 FPGA 实现思路原创 2023-11-16 12:03:02 · 2083 阅读 · 8 评论 -
K7系列FPGA进行FLASH读写1——CCLK控制(STARTUPE2原语)
要进行 FLASH 的读写控制,却发现CCLK_0管脚不可直接配置,这实际上是因为 CCLK_0 管脚在内部已经被占用,我们必须通过其他方式获取/设置它。本文即介绍如何使用STARTUPE2原语,自定义CCLK。原创 2023-11-03 14:17:13 · 5129 阅读 · 3 评论 -
PLL 的 verilog 实现
锁相环(PLL)是一种常用的频率、相位追踪算法,在信号解调、交流并网等领域有着广泛的应用。本文对全数字锁相环的原理进行介绍,随后给出 verilog 实现及仿真。原创 2023-08-06 15:44:07 · 4710 阅读 · 10 评论 -
通用FIR滤波器的verilog实现(内有Lowpass、Hilbert参数生成示例)
设计了通用的 FIR 滤波器(verilog),以及自动生成滤波器参数.v文件的 matlab 代码,示例包括一个 Lowpass Filter 和实现90度移相功能的 Hilbert Filter原创 2023-08-06 14:47:40 · 4726 阅读 · 28 评论 -
通用读写仲裁模块(FPGA实现)
当涉及多个模块向同一个模块进行读写操作、向一个半双工模块请求读写,甚至综合一下,多个模块向一个半双工模块发起读写请求,那就要涉及读写仲裁。因为最近做的项目中涉及的读写仲裁太多了,所以就想还是要写一个通用的读写仲裁模块,最好还是具备“凡请求,必执行”的功能的(因为一般简单实现的仲裁在发生冲突时,会选择执行一个,而直接忽视其他请求,这就对发起读写请求的模块的控制逻辑造成了不必要的麻烦),于是就有了这篇文章。由于每个人实现的模块控制信号不尽相同,因此本文档中的代码仅作为一种实现思路的参考。原创 2023-06-01 15:48:47 · 1833 阅读 · 3 评论 -
以太网——MDIO(SMI)接口的FPGA实现
在 MAC 与 PHY 之间,有一个配置接口,即 MDIO(也称 SMI,Serial Management Interface),可以配置 PHY 的工作模式、获取 PHY 芯片的工作状态等。本文以 PHY 芯片 B50610 为例,实现 MDIO 接口,以实现对传输速度、接口类型的自协商。原创 2023-06-01 14:13:40 · 4190 阅读 · 4 评论 -
线性插值提高DDS相位分辨率
DDS(Direct Digital Synthesizer)即技术,主要由正弦查找表与控制器组成,通过控制器给出的相位,在正弦查找表中查找对应的正余弦值并予以输出。通过多个 DDS 信号的组合,可以进一步构建出 AM、FM、PM 等信号发生器。关于 DDS 的知识不多赘述,本文主要介绍正弦波生成模块的 FPGA 实现,里面涉及一个在的方法(线性插值)。如果需要更高的精度,可以更进一步采用三次样条差值等技术。原创 2023-05-17 15:56:45 · 1116 阅读 · 0 评论 -
DDR3(MIG核配置&官方demo&FPGA代码实现及仿真)
由于直接对 DDR3 进行控制很复杂,因此一般使用 MIG IP 来实现,同时为了更简单地使用 MIG IP,我们采用 AXI4 总线协议进行控制。下面首先介绍 MIG IP 的配置,然后看看官方 demo (里面包含一个仿真要用到的 DDR3 模型)及其仿真结果,最后进行我们自己的控制代码实现。原创 2023-05-04 13:29:17 · 7698 阅读 · 15 评论 -
M序列(任意阶数)生成器——FPGA实现
直接上代码,此模块只需要指定本原多项式,就可以自动生成对应阶数的 M 序列,泛用性比较好。至于本原多项式,可以用 matlab 的 primpoly 函数生成,然后随便选一个,我这里默认的是 10 阶的第一个本原多项式 1033,读者可自行修改为其他值。M 序列是一种伪随机序列,常用于保密通信、信道抗干扰测试等,关于生成原理等可见我之前的文章,此处不表。仿真结果保存到 m_seq.txt 文件中,然后可以自行与 matlab 的生成结果比对。原创 2023-05-04 11:07:51 · 1001 阅读 · 0 评论 -
M序列测量幅频特性
M 序列是一种伪随机序列,具有很好的伪噪声特性,常用于信道噪声测试和保密通信。不过 M 序列还有一个用途,也就是本文所介绍的——通过 M 序列测量频率响应。在讨论这个问题之前,我们先介绍 M 序列的特征与生成方法。M 序列通过 N 阶线性反馈移存器生成,其周期为2N−1。原创 2023-04-28 12:38:05 · 1224 阅读 · 0 评论 -
AXI4总线学习笔记
AXI4 总线是 ARM 公司开发的一种总线,广泛应用于 Xilinx 的 IP 核中,比如笔者近期涉及 DDR 的读写控制,需要用到 MIG IP 核,这个 IP 核就通过 AXI4 总线进行控制。AXI4 共有 5 种通道:读地址通道 ARC,读数据通道 DRC,写数据通道 AWC,写数据通道 DWC,写回复通道 RC。以上 5 种通道都是单向通道,通过 Valid/Ready 握手机制实现读写控制。原创 2023-04-22 19:12:43 · 951 阅读 · 0 评论 -
USB3.0芯片FT601Q简介及FPGA实现
FT601Q 是 FTDI 推出的一款超高速 USB3.0 芯片,提供高达 5Gbps 的带宽。该芯片不需要额外的固件开发,共有 4 个写通道和 4 个读通道,每个通道的缓冲大小均为 4KB。FT601Q 具有多种工作模式,本文介绍并实现相对简单的同步 FIFO 模式——245 mode。FT601Q 工作模式在上电时检测 GPIO0/GPIO1 来确定,当 {GPIO1,GPIO0}=2‘b00 时,FT601Q 将进入 245 工作模式。首先对 FT601Q 的引脚功能进行介绍,QFN76 封装如下。原创 2023-04-06 16:13:50 · 9128 阅读 · 27 评论 -
温湿度传感器 SHT3x-DIS 详解 & FPGA驱动
SHT3x-DIS 是一款温湿度传感器,I2C 接口,通信速度最高可达 1MHz,测量精度±1.5%RH±0.1∘C。数字输出经过校准和线性化,并进行了温度补偿。原创 2023-03-21 23:28:49 · 3057 阅读 · 6 评论 -
I2C协议简介 & Verilog实现
IIC 协议是三种最常用的串行通信协议(I2C,SPI,UART)之一,接口包含 SDA(串行数据线)和 SCL(串行时钟线),均为双向端口。I2C 仅使用两根信号线,极大地减少了连接线的数量,支持多主多从,且具有应答机制,因此在片间通信有较多的应用。原创 2023-03-21 22:34:53 · 5689 阅读 · 8 评论 -
异步FIFO的原理及verilog实现(循环队列、读写域数据同步、Gray Code、空满标志、读写域元素计数)
在FPGA开发中,我们经常会遇到数据跨时钟域的情况,在不需要缓存的情况下,直接对clk1域下的数据,使用clk2打两拍以消除亚稳态,即可实现数据的跨时钟域,而如果遇到需要数据缓存的情况,一般会使用**异步FIFO**。本文首先对异步FIFO的跨时钟域同步原理进行介绍,然后给出异步FIFO的verilog实现。原创 2022-10-01 16:12:48 · 2724 阅读 · 0 评论 -
格雷码与二进制相互转换的verilog实现
格雷码是一种错误最小化的编码方式,其相邻两编码之间,因此有很强的抗干扰性。在 异步FIFO 中就使用到了 Gray Code。本博文给出自然二进制码(Binary Code)与格雷码(Gray Code)相互转换的 Verilog 实现。原创 2022-10-01 13:00:39 · 1718 阅读 · 0 评论 -
并行加法的Verilog实现 (二路归并)
并行加法运算的Verilog实现,实现思路:二路归并。原创 2022-09-30 10:42:04 · 1080 阅读 · 0 评论 -
卡尔曼(Kalman)滤波器的FPGA实现
关于kalman滤波器的原理我这里就不介绍了,直接贴出代码,代码注释中有简要的介绍。该模块适用于一维数据的滤波处理,通过设置Q、R两个参数可以改变其滤波特性。testbench使用matlab生成噪声数据的.hex文件时序仿真...原创 2022-06-24 15:32:29 · 3124 阅读 · 2 评论 -
三段式有限状态机
一段式、二段式、三段式状态机是按照书写FSM时使用的always块数目进行划分的,一般而言对于简单的状态机,可以使用一段式,其代码量以及使用资源都最少,但如果状态机较复杂,一段式状态机会对代码维护产生很大的不便,因此多使用便于维护的三段式状态机。下面对几种状态机进行介绍。一段式状态机 一段式FSM在一个时序always块中完成所有的状态转移以及输出工作,使用非阻塞赋值,如以下代码//一段式状态机module FSM1(input clk,input rst_n,inpu原创 2022-04-29 13:53:04 · 6164 阅读 · 9 评论 -
AD7961介绍及FPGA驱动
AD7961介绍AD7961是一款16位模数转换芯片,最高采样率可达5MSPS,串行LVDS接口,真差分输入。所谓真差分输入,指电压输入端口 IN+IN+IN+、IN−IN-IN− 均可参与信号传输,其中 IN+IN+IN+ 与信号相同, IN−IN-IN− 反相,注意,反相不是指电压为负,实际上 IN+IN+IN+、IN−IN-IN− 的电压范围均在 0∼5V0\sim 5V0∼5V ,ADC采样值为 IN+IN+IN+、IN−IN-IN− 的差值。真差分输入可以有效抑制共模噪声。与之相对应的伪差分原创 2022-04-26 16:17:18 · 2456 阅读 · 5 评论 -
UART串口协议详解及FPGA实现
UART协议详解UART(Universal Asynchronous Receiver/Transmitter)即通用异步收发器,是一种串行、异步、全双工的通信协议。一帧由起始位(1位)、数据位(5-9位)、校验位(0或1位)、停止位(1-2位)等四部分构成。数据传输线空闲的时候保持高电平,当开始传输时,拉低一个时钟周期,这就是起始位。之后传输数据位,一般从小端开始传输。然后紧随一个可选的奇偶校验位。然后电平拉高,指示一帧发送的终止,即停止位。采样时钟一般为波特率的数倍(常见的如8倍或16倍),并原创 2022-04-08 14:48:22 · 3710 阅读 · 0 评论 -
DAC8531驱动代码(FPGA)
DAC8531是16位低功耗数模转换芯片,使用SPI通信接口,最大转换频率30MHz(5V供电)/20MHz(3.3V供电)。其输出电压范围由参考电压 VrefV_{ref}Vref 决定,0<Vout<Vref0<V_{out}<V_{ref}0<Vout<Vref,通常情况下,VrefV_{ref}Vref 可直接拉到 VCCV_{CC}VCC ,即与供电电压相同。除输出电压数字量 D15∼\sim∼D0 外,控制字还包含两个配置位 PD1、PD0,用于原创 2022-04-06 17:53:30 · 1956 阅读 · 0 评论 -
NMEA(xxGGA)报文解析(FPGA实现)
最近接触GPS,需要使用FPGA进行NMEA报文的解析,以获得经纬度和时间信息,我选用的报文是xxGGA,包含GPGGA(GPS系统的)、GBGGA(北斗系统的)、GLGGA(GLONASS系统的)、GAGGA(伽利略系统的),GNGGA(任意GNSS系统组合)。他们的格式完全相同,不同之处仅在于报文头,xxGGA报文格式如下$xxGGA,time,lat,NS,lon,EW,quality,numSV,HDOP,alt,altUnit,sep,sepUnit,diffAge,diffStation*cs原创 2022-04-01 11:30:15 · 5498 阅读 · 55 评论 -
FPGA边缘检测(上升沿、下降沿、双边沿)的三种实现方案
边缘检测在数字电路设计中非常常见,通常包含上升沿检测(posedge)、下降沿检测(negedge)、以及双边沿检测(double edge)。边缘检测虽然实现非常简单,但有一些值得注意的地方,在设计中一不留神可能就会出现边沿漏检的情况。下面结合代码、电路图以及仿真时序,来扒一扒里面的坑。第一种先来看一种,这是最常见的一种边沿检测设计方案,但其中存在很大的隐患,非常容易漏检:module edge_detect1(input clk,input signal,output pe, //上升沿原创 2022-03-26 20:55:27 · 7851 阅读 · 2 评论 -
如何向FPGA模块传入批量数据
如何像c语言一样在FPGA中使用数组原创 2022-03-16 19:22:46 · 1833 阅读 · 0 评论 -
ADS8688驱动(FPGA)
16位模数转换芯片ADS8688驱动(FPGA)原创 2022-03-12 23:52:51 · 3543 阅读 · 15 评论