斗鱼体育app(中国)官网下载 FPGA中NCO相位截断导致的杂散若何扼制?

在FPGA中杀青NCO(数控飘浮器)时,相位截断是导致输出频谱产生杂散(Spur)的主要原因之一。相位截断是指为了减少波形查找表(ROM)的存储深度,只使用相位累加器输出的高位动作ROM地址,而丢弃低位。这一进程引入了周期性的相位错误,在频域阐扬为非谐波关连的杂散频率重量,成功影响系统的无杂散动态规模(SFDR)4。
1. 相位截断杂散的成因分析相位累加器的输出是一个位宽为 N(举例32位)的线性递加序列。遐想的NCO会使用齐全的 N 位相位值来寻址一个深度为 2^N 的ROM,但这在物理上无法杀青。试验运筹帷幄中,咱们只取高 M 位(如12位)动作ROM地址,丢弃低 N-M 位(如20位)。这种量化错误是周期性的,其周期与频率收尾字(FCW)和截断位宽联系3。 杂散能量与周期性的数学关系:设相位累加器位宽 N, 截取的高位地址位宽 M, 则相位截断错误 e(n) 是一个在 [0, 2^(N-M)-1] 区间内周期性变化的序列。该错误序列会调制ROM输出的正弦波幅度,在输出频谱中产生以 f_out 为中心,拆开为 f_spur = (GCD(FCW, 2^(N-M)) * f_clk) / 2^N 的杂散谱线,斗鱼体育app其中GCD暗意最大条约数4。
2. 中枢扼制本事扼制相位截断杂散的中枢想路是碎裂其周期性,将荟萃的杂散能量“打散”为溜达更均匀的布景噪声,从而擢升SFDR。主要本事包括相位抖动注入和ROM压缩优化。
2.1 相位抖动注入(DITHERING)这是最灵验且平凡应用的轨范。其旨趣是在进行相位截断前,将一个非关连的立时序列(抖动)加到相位累加器的低位上,从而将截断错误的信服性周期性升沉为立时性,使杂散能量扩散为底噪3, 6。 杀青轨范对比:抖动类型旨趣优点纰谬适用场景加性抖动(在截断前添加) 将伪立时数发生器的输出加到相位累加器的低
L
位上,然后进行截断。
杀青陋劣,能灵验碎裂周期性。
会引入突出的宽带噪声,微弱劣化信噪比(SNR)。
对SFDR条目严苛,可接收一定SNR亏本的应用。 乘性抖动(在ROM输出后添加) 在ROM输出的幅度数据上类似一个轻微的立时扰动。
对输出频谱模式影响更可控。
对扼制由相位截断引起的杂散成果不如加性抖动成功。
适用于同期存在多种错误源(如幅度量化错误)需要扼制的场景。 Verilog杀青示例:加性相位抖动 verilog
module phase_acc_with_dither #(
parameter PHASE_WIDTH = 32,
parameter TRUNC_WIDTH = 20, // 被截断的低位宽度 (N-M)
parameter DITHER_WIDTH = 4 // 抖动位宽,频繁为2-4位
)(
input wire clk,
input wire rst_n,
input wire [PHASE_WIDTH-1:0] fcw_i,
output wire [PHASE_WIDTH-TRUNC_WIDTH-1:0] phase_truncated_o // 截断后的高位地址
);
reg [PHASE_WIDTH-1:0] phase_acc;
wire [TRUNC_WIDTH-1:0] phase_low_bits;
wire [DITHER_WIDTH-1:0] dither_seq;
reg [PHASE_WIDTH+DITHER_WIDTH-1:0] phase_with_dither;
// 1. 线性响应移位寄存器(LFSR)生成伪立时抖动序列[ref_6]
lfsr #(.WIDTH(DITHER_WIDTH)) u_lfsr (
.clk(clk),
.rst_n(rst_n),
.rand_out(dither_seq)
);
// 2. 相位累加
always @(posedge clk or negedge rst_n) begin
米兰体育2026世界杯指定中国官网if (!rst_n)
verilog
// Verilog示例:基于1/4周期ROM的正弦波生成(无抖动)
module sine_gen_quarter_rom #(
parameter ADDR_WIDTH = 10, // 对应1/4周期ROM的地址宽度,总深度为2^ADDR_WIDTH
parameter DATA_WIDTH = 16
)(
input wire clk,
input wire [ADDR_WIDTH+1:0] phase_msb, // 输入为齐全的相位高位(包含象限信息)
output reg signed [DATA_WIDTH-1:0] sine_out
);
// 1/4周期正弦波ROM, 深度为 2^ADDR_WIDTH
reg [DATA_WIDTH-1:0] quarter_sine_rom [0:(1[π,2π)
wire quadrant_lsb = phase_msb[ADDR_WIDTH]; // 次高位:0->[0,π/2)U[π,3π/2), 1->[π/2,π)U[3π/2,2π)
// 地址映射逻辑:将0-2π的相位映射到0-π/2的地址
assign rom_addr = (quadrant_lsb == 1'b0) ?
phase_msb[ADDR_WIDTH-1:0] :
~phase_msb[ADDR_WIDTH-1:0]; // 应用对称性,第二半区间取反
always @(posedge clk) begin斗鱼体育app(中国)官网下载