FPGA学习
练习
爱吃汽的小橘
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
二探DDS直接数字频率合成器
设置DDS,采样时钟50Mhz,产生4Mhz和5Mhz正弦波频率信号。然后进行混频,使用modelsim仿真,观察三个正弦波信号。例如:255, 20*log(255) = 48db。动态范围:20*log(动态最大值)原创 2025-10-23 16:09:28 · 233 阅读 · 0 评论 -
利用FFT检测FIR输出频率
本文介绍了FFT频谱分析的基本原理和应用。通过2048点FFT处理50MHz采样率的4MHz和5MHz混频信号,观察到频谱的对称性,前1024点为正频谱。计算得出频率分辨率为24.414kHz,并验证了1MHz和9MHz的混频结果。同时给出了Verilog HDL实现的32位数据分路模块(mux)的代码示例,展示了FPGA设计中数据处理的简单实现方法。原创 2025-10-24 16:44:32 · 188 阅读 · 0 评论 -
重探FIR滤波器
混频之后的信号是1Mhz和9Mhz我们滤除9Mhz保留1Mhz,因为我们信号动态范围是48db,那么1Mhz和9Mhz的动态范围各自是24b,我们要想把9Mhz抑制掉需要至少滤波器要抑制信号24db。所以我们设计的滤波器,在9Mhz位置需要是有至少-24db的衰减,在1Mhz位置通带尽量平滑,并接近于0db,也就是没有增益没有衰减。通过数字信号处理学习,就会知道其实FIRFilter的核心思想就是卷积运算,然后再稍微了解一下卷积的时域卷积定理,你就可以轻易的想象出FIR滤波器的原理。原创 2025-10-24 14:15:20 · 473 阅读 · 0 评论 -
DDS的IP核使用
DDS(Direct Digital Synthesis,直接数字频率合成),作为信号发生器使用。使用vivado调用DDS的ip核进行仿真。设计单通道信号发生器(固定频率)、Verilog查表法实现DDS、AM调制解调、DSB调制解调、可编程控制的信号发生器(调频调相)。DDS的基本结构主要由相位累加器、相位调制器、波形数据表ROM、D/A转换器等四大结构组成,其中较多设计还会在数模转换器之后增加一个低通滤波器。系统时钟CLK为整个系统的工作时钟,频率为fCLK;原创 2025-10-17 21:40:51 · 986 阅读 · 0 评论 -
基于ads1256的ADC控制实现
本文描述了一个ADC控制器模块adc_ctrl_ads1256的Verilog实现。该模块通过SPI接口控制ADS1256模数转换器,包含状态机控制逻辑、时钟生成、寄存器配置等功能。主要特点包括:定义了10种状态(IDLE、WREG等),使用移位寄存器发送配置命令(如WREG、SYNC等),支持复位控制和DRDY信号检测。测试模块tb_adc_ctrl_ads1256验证了基本功能,包括时钟生成、复位控制和DRDY信号模拟。该设计实现了ADC芯片的初始化配置和数据采集控制功能。原创 2025-10-18 17:10:24 · 230 阅读 · 0 评论 -
ADC串口控制(3)
该Verilog模块实现了一个ADS1256 ADC控制器的SPI接口通信逻辑。摘要如下: 主要功能: 通过状态机控制ADC的初始化流程(IDLE、WREG、SYNC_S等10个状态) 生成SPI时钟(sclk)和MOSI数据信号 处理ADC的DRDY(drdy)同步信号 关键特性: 支持多种ADC命令:WREG(写寄存器)、SYNC(同步)、RDATAC(连续读取)等 包含复位控制逻辑(500周期复位序列) 通过移位寄存器实现命令发送 提供MISO数据接收处理 接口: 时钟/复位信号:clk, rst_n原创 2025-10-21 20:45:31 · 155 阅读 · 0 评论 -
用串口控制DAC
摘要:本文介绍了一个通过串口控制DAC模块(AD5324)输出指定电压的方案。系统采用四字节指令格式:首字节AA为起始标志,次字节选择通道(A1A0),后两字节组合成12位数据。电压输出公式为VOUT=VREF*D/2^12,其中VREF=2.5V。通过Verilog实现的状态机控制模块(uart_cmd.v)解析串口数据,DAC控制模块(dac_ctrl_ad5324.v)将16位数据转换成SPI信号驱动DAC。示例展示了如何产生1.6V电压(对应数据2621,二进制101000111101)。系统包含U原创 2025-10-16 16:02:52 · 429 阅读 · 0 评论 -
采用ADS1256的SPI接口ADC控制
本文介绍了基于TI公司ADS1256芯片实现数据采集与传输的系统设计。该系统通过串口指令控制ADC采集振动/音频信号,经DAC转换后通过Matlab实时显示。重点阐述了SPI通信时序参数设置(SCLK周期1μs)、寄存器配置方法(如WREG指令格式)以及连续读取模式的状态机设计(包含IDLE到SDATAC共8个状态)。系统采用921600波特率,利用RDATAC命令实现连续数据读取,并详细说明了各状态转换条件及数据读取时序要求(如t6=10μs等待时间)。该设计为高精度数据采集系统提供了完整的硬件控制和通信原创 2025-10-16 20:10:01 · 716 阅读 · 0 评论 -
SPI接口数模转换DAC手册学习
DAC称为数模转换器。DAC的作用是将输入的二进制数字信号转换成模拟信号,以电压或电流的形式输出。此型号DAC芯片可以将输入的二进制数字信号转换成对应的电压值,将电压输入到其中一个寄存器中(一共四个寄存器)。原创 2025-10-11 16:45:06 · 289 阅读 · 0 评论 -
SPI数模转换实现
本文介绍了一个基于AD5324 DAC芯片的SPI控制器设计。该设计包含三个主要模块:dac_ctrl_ad5324(主控制模块)、tb_dac_5324(测试平台)和top_dac_ctrl(顶层模块)。主控制模块采用有限状态机实现SPI协议,包含IDLE、SYNC和SYNC_SHIFT三个状态,通过分频计数控制SCLK信号,实现16位数据移位输出。测试平台验证了模块功能,顶层模块整合了控制器、复位模块和调试接口(ILA和VIO IP核)。设计最终映射到FPGA引脚,实现了完整的DAC控制方案。原创 2025-10-15 11:25:31 · 200 阅读 · 0 评论 -
PLL(锁相环)IP核时钟分频
D:分频器PFD:鉴相,鉴频器,主要作用CLKIN(输入)时钟和CLKBF(反馈)时钟的相位频率是否一致CP:电荷泵,充放电,控制频率,控制VCO电压,有阻尼效应LF:模拟电路,过滤噪声VCO:压控振荡器,依靠电压控制,电压高,频率高,电压低,频率低MMCM\PLL参数计算:MMCM\PLL作为频率合成器示例:clk50m = 0;reset = 0;endendmodule相位变化90(1/4周期)原创 2025-10-07 11:40:48 · 339 阅读 · 0 评论 -
RAM的IP核——读写乒乓操作
说到FPGA,不得不提的是存储器,当我们做相关项目时,经常会遇到存储数据的问题,数据量过大时,我们可以将其存储在FPGA芯片的外设存储器上,比如sdram、ddr sdram、ddr3 sdram等,然而访问外设存储器相对比较麻烦,因此当数据量较小时,我们可以直接使用FPGA芯片内部自带的ram的IP核。Ram是random access memory的简称,即随机存储器的意思,ram可以按照所需进行随机读/写。读取会慢一拍,在上升沿之后读取。易失性存储器,掉电消失。原创 2025-10-07 20:40:12 · 263 阅读 · 0 评论 -
异步串口通信和逻辑分析仪
x_data信号是参与移位的数据,在移位的过程中数据是变动的,不可以被后级模块所使用,而可以肯定的是在移位完成标志信号rx_flag为高时,rx_data信号一定是移位完成的稳定的8bit有用数据。由于在PC机中波特率和rx信号是同步的,而rx信号和FPGA的系统时钟sys_clk是异步的关系,我们此时要做的是将慢速时钟域(PC机中的波特率)系统中的rx信号同步到快速时钟域(FPGA中的sys_clk)系统中,所使用的方法叫电平同步,俗称。有两根线,分别是rx和tx,这两根线都是1比特位宽的。原创 2025-10-09 20:26:50 · 991 阅读 · 0 评论 -
使用乒乓ram去直流分量
【代码】使用乒乓ram去直流分量。原创 2025-10-08 14:14:30 · 286 阅读 · 0 评论 -
按键消抖处理
我们知道按键被按下时key值为低电平(O),在抖动期间key既有高电平也有低电平,我们可以使用clk的上升沿计算key连续为低电平的时间,期间当检测到key为高电平时,则从头开始计数,当计数超过5~10ms时,我们可以认定按键有被按下的时候,此时我们可以产生一个clk周期为高电平的标志,当该标志位高电平认为有一次按键即可,具体波形如图所示。由图3可知,当用clk的上升沿检测到key等于1的同时key_reg等于o,此时则为key的上升沿,若key等于o的同时key_reg等于1则为key的下降沿。原创 2025-10-06 14:44:30 · 323 阅读 · 0 评论 -
FPGA_时钟分频灯
本文展示了一个FPGA实现的LED闪烁控制模块。主要包含两个部分:1)flash_led模块实现LED周期性闪烁,通过50MHz时钟分频产生1Hz控制信号;2)div_clk_5模块实现5分频奇数分频功能,采用双计数器(上升沿和下降沿)通过或运算产生。测试文件tb_flash_led和tb_div_clk验证了模块功能。此外还包含约束文件设置引脚位置和电平标准,以及一个PWM呼吸灯练习的简要说明。原创 2025-09-29 09:25:08 · 247 阅读 · 0 评论 -
状态机练习
练习:使用状态机描述一个自动售货机,该售货机中的商品2.5元一件,每次投币既能投入1元,也能投入0.5元,当投入3元时,需要设定找零。要求画出状态转移图,写出状态转移及输出数据模块,使用do文件运行仿真。原创 2025-09-30 20:32:07 · 216 阅读 · 0 评论 -
TOP-DOWN设计
本文介绍了FPGA自顶向下的设计方法,通过Verilog代码实现了一个模块化设计示例。设计包含三个主要模块:顶层模块top_down、分频计数器div_cnt和逻辑运算模块a_and_b。源代码展示了模块化设计、参数化配置和时序控制等技术特点,同时提供了测试平台tb_top_down用于验证功能。相比传统原理图输入方式,这种基于HDL的自顶向下设计方法具有更好的灵活性和可维护性,便于模块复用和大规模复杂电路设计。代码注释规范,包含版权声明和版本信息,体现了良好的工程实践。原创 2025-09-29 14:21:21 · 236 阅读 · 0 评论 -
有限状态机
状态机分为mealy型和moore型,其中mealy型指的是输出不仅与当前状态有关,还与输入有关,moore型指的是输出只与当前状态有关。三段式指使用三个always块,一个always模块采用时序逻辑描述状态转移,一个always块采用组合逻辑判断状态转移条件,描述状态转移规律,另个always块描述状态输出(可以用组合电路输出,也可以时序电路输出)。Mealy型状态机产生次态的组合逻辑和状态寄存器与Moore型状态机是一致的,而不同的是,Mealy型状态机的输出不仅与现态有关,原创 2025-09-30 11:08:48 · 343 阅读 · 0 评论 -
按键控制售货机
【代码】按键控制售货机。原创 2025-10-07 10:18:56 · 228 阅读 · 0 评论 -
FPGA时钟分频
不建议直接使用自分频的时钟用到always 的posedge clk 中,因为fpga的布线线工具无法保证布线到全局时钟网络,Clock skew(时钟偏斜)影响时序违例的严重度。不用组合逻辑,使用reg可以有效避免延时不统一,保证采集窗正常,取消BUS SKEW。clk_4:进行分频,周期4倍,频率1/4。分频的基础上,再进行了一次分频。clk:50M晶振,20ns。用产生的时钟进行分频。原创 2025-09-27 10:13:09 · 133 阅读 · 0 评论 -
条件判断语句
电路模型输出相当于一个D触发器,clk为时钟,b为二位选择器,a的判断为电压比较器if-else 不能过多,一旦过多,就会造成延时过久,时序不正确case:多路选择器注意锁存器。原创 2025-09-26 21:15:14 · 197 阅读 · 0 评论 -
verilog运算符
关系运算符(> < >= <= ==!一般不用,调用IP核运算,数字IC设计可以综合乘法。有符号乘法和无符号乘法不一样。逻辑运算符:&&、||、!在tenchband中。按位逻辑运算:&、|原创 2025-09-25 21:14:08 · 174 阅读 · 0 评论 -
赋值语句注意
注意时钟上升沿时候的数据变化。原创 2025-09-25 10:34:45 · 130 阅读 · 0 评论 -
Verilog中数值表示
原码,反码,补码(1)原码:最高位表示符号位,次高位到最低位表示十进制的二级制0表示正数,1表示复数。数据表示范围(127~-127)原码不能正确表示负数之间的计算。例如--8-1原码不适合做加减法运算2.反码正数的反码和原码相同,负数的原码则是最高位不变,此高位到最低位取反-8:反码:11110111, 1:00000001保持符号位不变,剩余位取反,得到10001001,为--9但是反码的负数计算也会出问题,例如--7+9当反码跨0时,会出现错误,也不适合运算。原创 2025-09-25 15:07:26 · 347 阅读 · 0 评论 -
模块练习题
8位0~255激励方法{¥random}%255(%为求模运算,返回是除以256的余数 )1.完成模块名称编写功能模块代码,c是a和b的‘按位与’的结果。3.时钟用阻塞,数据用阻塞和非阻塞,数据变化时刻和上升沿同步。2.编写激励代码,a和b激励为随机的8位0~255数据。ctrl +alt +方向键可以一起编辑。时钟非阻塞,数据阻塞。原创 2025-09-23 17:22:27 · 176 阅读 · 0 评论 -
组合和时序逻辑电路变式
当上升沿和波形上升沿重叠时,看上升沿前一点点,因为reg具有储存功能,需要把上升沿前部分,由上升沿改变而输出。组合电路立刻改变,时序电路等待时钟再改变。得出reg和wire的组合逻辑是一样的。1.reg组合逻辑与时序逻辑的区别。parameter常量。原创 2025-09-23 15:51:24 · 173 阅读 · 0 评论 -
Verilog可综合变量
内部由两个锁存器构成,利用时钟边缘进行所存。时钟源:方波,50%占空比。wire(线):传输。reg(寄存器):存储。原创 2025-09-23 14:09:59 · 213 阅读 · 0 评论 -
Verilog入门格式与硬件
四位按键:上拉电阻式: 下拉电阻:ctrl +f :查找ctrl +d :同时编辑ctrl + G 分组快捷键F键:缩放全屏快速注释:ctrl+?原创 2025-09-22 15:20:17 · 211 阅读 · 0 评论 -
与门练习1
wire变量未写入tb_led。呈现什么状态.led()原创 2025-09-23 09:07:21 · 158 阅读 · 1 评论
分享