真实面经题目 · 原创解析
DPSK 绝对码调制在 FPGA 内部如何实现?
这题考把通信调制算法落成硬件结构,回答重点是差分编码、符号定时、相位选择、波形生成和流水线实现。
真实面经题目 · 原创解析
这题考把通信调制算法落成硬件结构,回答重点是差分编码、符号定时、相位选择、波形生成和流水线实现。
题里说绝对码时,要先说明绝对码是原始输入数据,进入 DPSK 调制前通常先按协议做差分编码,生成相对码或相位状态;后级再用这个状态选择 0/pi 等载波相位。硬件实现可以分几级:符号有效时保存上一相位状态,用当前 bit 按约定决定保持或翻转;再用 NCO/DDS 或查表产生载波,通过取反或地址偏移实现二相相位选择;后面接成形滤波、插值、DAC 或数字接口。工程上要注意复位初始相位、bit 0/1 对应保持还是翻转的协议约定、符号使能、流水线延迟对齐、位宽量化、滤波器资源和软件模型比对。
差分编码把输入数据转换为相邻符号相位变化关系;调制阶段再把相位状态映射到载波波形。硬件实现时这两部分通常分模块,便于验证和替换。
实现需要保存上一符号状态,在符号有效时根据当前输入比特更新相位状态。二相场景可以用 1 bit 表示相位翻转与否;多相场景则用相位累加或符号映射表。
数字载波可由 NCO 或查找表产生。二相调制中,相位相差 pi 可以通过波形取反或查表地址加半周期实现;更复杂调制则选择不同相位点。
符号时钟与系统时钟通常通过 clock enable 管理。成形滤波、插值、DAC 接口和位宽截断都要做流水线延迟对齐,测试时用已知比特序列和软件模型比对相位跳变。
module dbpsk_diff_encoder (
input wire clk,
input wire rst_n,
input wire sym_valid,
input wire bit_in,
output reg phase_sel
);
always @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
phase_sel <= 1'b0;
end else if (sym_valid) begin
// Example convention: bit 1 toggles phase, bit 0 keeps phase.
phase_sel <= phase_sel ^ bit_in;
end
end
endmodule 差分调制让接收端通过相邻符号相位变化恢复信息,降低对绝对载波相位初始值的依赖。
用固定输入序列生成期望差分状态和相位跳变,和软件模型逐符号比对,同时检查复位初值、符号使能和流水线延迟。
我会至少做仿真、lint、综合后资源检查、时序约束和 STA;涉及跨时钟域还要做 CDC 检查,涉及板级接口还要结合时序裕量和实测波形验证。