← 2024 · MPS芯源 · 数字FPGA设计(成都) 笔试
推荐答案
测试一下
题目
请使用 Verilog 语言,描述如何将 rstn_a 信号同步到 clk_b 时钟域,并画出电路框图。
参考答案与知识点
参考答案
使用两级D触发器级联实现异步复位同步释放。Verilog代码如下:
module sync_reset (
input clk_b, // 目标时钟域
input rstn_a, // 异步低有效复位(来自clk_a时钟域)
output rstn_b // 同步到clk_b的复位信号
);
reg [1:0] sync_reg; // 两级同步寄存器
always @(posedge clk_b or negedge rstn_a) begin
if (!rstn_a)
sync_reg <= 2'b0; // 异步复位立即生效
else
sync_reg <= {sync_reg[0], 1'b1}; // 同步释放:依次传递高电平
end
assign rstn_b = sync_reg[1]; // 第二级输出作为同步后的复位
endmodule
电路框图:两个D触发器串联,时钟均为clk_b,异步清零端(低有效)均连接rstn_a。第一级D输入接VCC(逻辑1),输出Q连接第二级的D输入,第二级Q输出即为rstn_b。这样当rstn_a有效时,两个触发器立即清零,rstn_b变低;当rstn_a释放后,第一个时钟上升沿将VCC锁存到第一级Q,第二个时钟上升沿传递到第二级Q,rstn_b变高,实现释放同步。注意:同步链长度至少为2,以降低亚稳态概率;所有触发器必须使用异步复位,否则无法在复位有效时即时响应。
涉及知识点
- 跨时钟域同步
- 亚稳态与双锁存器
- 异步复位同步释放电路
- 复位信号处理策略