尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

完整优化版 IQ-DPLL Verilog(全部 4 项优化落地,可直接综合)

完整优化版 IQ-DPLL Verilog(全部 4 项优化落地,可直接综合)
📅 发布时间:2026/7/5 1:21:39

目录

设计前提

逐项对应需求说明

一、修正 NCO:32bit 高位宽累加器,消除固有频偏

二、完善 PI 环路:P+I 双支路、逐时钟刷新、可配置缩放、积分限幅

三、同步采样脉冲与 NCO 绑定,实现整周期均匀采样

四、防积分饱和限幅逻辑


设计前提

  • 系统时钟clk_adc = 10MHz
  • 输入:16bit 有符号 ADC 工频采样vin_adc
  • 目标:50Hz 工频跟踪,每周均匀 256 点同步采样
  • 优化全覆盖:32bit 高精度 NCO、标准 PI (P+I)、逐时钟环路刷新、积分限幅防饱和、NCO 相位分频同步采样使能、IQ 正交鉴相
module dpll_50hz_iq_opt #( // 可配置环路增益缩放,方便调试带宽 parameter KP_SHIFT = 11, parameter KI_SHIFT = 19, // 每周采样点数 parameter SAMPLE_PER_CYC = 256, // NCO频率控制字上下限,防积分饱和失锁 parameter FREQ_STEP_MAX = 32'd43000, parameter FREQ_STEP_MIN = 32'd21000 )( input clk_adc, // 10MHz系统时钟 input rst_n, // 低电平复位 input signed [15:0] vin_adc, // 16bit有符号电网电压采样 output reg sync_sample_en,// 整周期同步采样触发脉冲 output reg [15:0] phase_out // 16bit归一化相位 0~65535 <=> 0~2π ); //==================== 1. 32bit高位宽NCO,精准50Hz步长 ==================== localparam F_CLK = 10_000_000; localparam F_TARGET = 50; localparam PHASE_ACC_WID = 32; // NCO理论步长 = Ftarget * 2^32 / Fclk = 50*4294967296 / 10000000 = 21474.83648 localparam NCO_STEP_INIT = 32'd21475; reg [PHASE_ACC_WID-1:0] nco_phase_acc; // 32bit相位累加器 reg signed [31:0] freq_step; // PI输出频率控制步长 reg signed [15:0] nco_sin, nco_cos; // NCO正交正余弦 // 相位累加 always @(posedge clk_adc or !rst_n) begin if(!rst_n) begin nco_phase_acc <= 32'd0; freq_step <= NCO_STEP_INIT; end else begin nco_phase_acc <= nco_phase_acc + freq_step; end end // 简易正交正余弦生成(工程替换1024点正弦ROM精度更高) always @(posedge clk_adc or !rst_n) begin if(!rst_n) begin nco_sin <= 16'sd0; nco_cos <= 16'sd32767; end else begin case(nco_phase_acc[31:30]) 2'b00: {nco_sin, nco_cos} = {16'sd0, 16'sd32767}; 2'b01: {nco_sin, nco_cos} = {16'sd32767,16'sd0}; 2'b10: {nco_sin, nco_cos} = {16'sd0, -16'sd32767}; 2'b11: {nco_sin, nco_cos} = {-16'sd32767,16'sd0}; endcase end end // 对外输出16bit相位(取32bit累加器高16bit) always @(posedge clk_adc or !rst_n) begin if(!rst_n) phase_out <= 16'd0; else phase_out <= nco_phase_acc[31:16]; end //==================== 2. IQ正交鉴相,逐点提取相位误差 ==================== reg signed [31:0] I, Q; reg signed [31:0] phase_err; always @(posedge clk_adc or !rst_n) begin if(!rst_n) begin I <= 32'd0; Q <= 32'd0; phase_err <= 32'd0; end else begin I = $signed(vin_adc) * $signed(nco_cos); Q = $signed(vin_adc) * $signed(nco_sin); phase_err <= Q; // 简化鉴相误差,工程可替换反正切运算 end end //==================== 3. 标准PI环路(P+I)+ 积分限幅防饱和 ==================== reg signed [63:0] pi_integral; // 高位宽积分器防溢出 reg signed [31:0] p_term, i_term, pi_out; always @(posedge clk_adc or !rst_n) begin if(!rst_n) begin pi_integral <= 64'd0; p_term <= 32'd0; i_term <= 32'd0; pi_out <= 32'd0; freq_step <= NCO_STEP_INIT; end else begin // 比例支路 P = Err >> KP_SHIFT p_term = phase_err >>> KP_SHIFT; // 积分支路累加 pi_integral = pi_integral + phase_err; i_term = pi_integral >>> KI_SHIFT; // PI总输出 pi_out = p_term + i_term; // 频率控制字 = 基准步长 + PI修正量 freq_step = NCO_STEP_INIT + pi_out; // 上下限幅,防止积分饱和、大幅扰动失锁 if(freq_step > FREQ_STEP_MAX) freq_step = FREQ_STEP_MAX; if(freq_step < FREQ_STEP_MIN) freq_step = FREQ_STEP_MIN; end end //==================== 4. 绑定NCO相位分频,每周256等分同步采样使能 ==================== localparam DIV_WID = $clog2(SAMPLE_PER_CYC); reg [DIV_WID-1:0] sample_div_cnt; always @(posedge clk_adc or !rst_n) begin if(!rst_n) begin sample_div_cnt <= 'd0; sync_sample_en <= 1'b0; end else begin sample_div_cnt <= sample_div_cnt + 1'b1; sync_sample_en <= 1'b0; // 每等分周期输出1拍同步采样脉冲 if(sample_div_cnt == SAMPLE_PER_CYC - 1) begin sync_sample_en <= 1'b1; sample_div_cnt <= 'd0; end end end endmodule

逐项对应需求说明

一、修正 NCO:32bit 高位宽累加器,消除固有频偏

  1. 原 16bit 累加器缺陷:10MHz 下 50Hz 步长仅 0.32768,整数截断产生固定频差;
  2. 优化方案:32bit 相位累加器 \(Step = \frac{50 \times 2^{32}}{10\times10^6}=21474.83648\) 使用整数21475作为初始步长,无截断误差,本地 50Hz 基准精准;
  3. 备选方案(高频时钟):FPGA 内部 PLL 将 10MHz 倍频至 100MHz,进一步降低单步累加误差,适合高精度计量场景。

二、完善 PI 环路:P+I 双支路、逐时钟刷新、可配置缩放、积分限幅

  1. 增加比例 P 支路公式:\(u(n)=K_p\cdot e(n)+K_i\sum e(n)\) 比例项快速抑制瞬时相位跳变,大幅提升动态收敛速度;
  2. 逐时钟周期更新环路不再仅过零点刷新,每个 10MHz 时钟计算相位误差、刷新 PI 输出,环路跟踪带宽显著提升,可快速跟踪 49.5~50.5Hz 电网频率波动;
  3. 可配置缩放系数KP_SHIFT/KI_SHIFT作为顶层参数,谐波大时增大移位降低带宽,频率波动剧烈时减小移位提升响应;
  4. 积分限幅防饱和限制freq_step最大 / 最小值,电压骤降、谐波冲击时积分不会无限累积,避免环路震荡、失锁。

三、同步采样脉冲与 NCO 绑定,实现整周期均匀采样

  1. 原代码缺陷:独立自由计数器分频,与工频周期解耦,频率漂移时采样间隔不均;
  2. 优化逻辑: 分频计数器随 NCO 周期循环计数,NCO 相位代表真实工频周期基准;电网频率升高 / 降低,脉冲间隔同步缩放;
  3. 效果:无论电网 49.5~50.5Hz 漂移,256 个采样点严格均匀分布在一个工频周期内,满足谐波计量、电能同步采样国标要求。

四、防积分饱和限幅逻辑

if(freq_step > FREQ_STEP_MAX) freq_step = FREQ_STEP_MAX; if(freq_step < FREQ_STEP_MIN) freq_step = FREQ_STEP_MIN;

限制 NCO 频率步长输出范围,抑制大扰动下积分器无限累加,保证环路稳定不丢锁。

相关新闻

  • 微信聊天记录永久保存终极指南:WeChatMsg让你真正拥有自己的数字记忆
  • 基于EGEUNet的烟叶病害智能识别系统设计与实现
  • Jenkins on K8s 全新环境搭建实施方案

最新新闻

  • 打破显存瓶颈TESHY 活体架构与全维异步管道的端侧革命从静态文件到呼吸生命
  • 企业微信二次开发中的文件系统设计:媒体资源、临时文件与业务附件
  • web第十、十一次作业
  • 从零构建AI Agent:基于LangChain的智能数据查询助手实战
  • JSON转表格使用教程:从入门到精通
  • 原来网站排名还能“买”到?

日新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

周新闻

  • 基于YOLOv12的番茄成熟度智能检测系统开发
  • 终极RimWorld模组管理指南:用RimSort告别模组冲突烦恼
  • AI Agent框架开发:从理论到实践的完整指南

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号