FPGA程序,跨时钟打拍的原因
2026/7/24 4:02:33 网站建设 项目流程

测试设置:低端信号发生器,输出20K的方波;FPGA工作在100M的时钟下,抓取触发信号上升沿;
FPGA程序为:
assign o_rise_edge = i_ex_trig_3p3v && !r_ex_trig_3p3v;

always @(posedge clk) begin
r_ex_trig_3p3v <= i_ex_trig_3p3v; // 打一拍,保存上一周期值
end
测试现象:o_rise_edge 时有时无。

原因:

解决方案:
reg r_ex_trig_3p3v_sync1, r_ex_trig_3p3v_sync2;

// 第一级同步:打两拍,解决亚稳态
always @(posedge clk) begin
r_ex_trig_3p3v_sync1 <= i_ex_trig_3p3v; // 第一拍
r_ex_trig_3p3v_sync2 <= r_ex_trig_3p3v_sync1; // 第二拍
end

// 然后用同步后的信号做边沿检测
assign o_rise_edge = r_ex_trig_3p3v_sync2 && !r_ex_trig_3p3v_sync1;
// 注意:这里用 sync2 和 sync1 比较,而不是用 r_ex_trig_3p3v

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询