← 大华硬件逻辑岗(19.09.25)

推荐答案 测试一下

一个系统有两个时钟域的电路,其时钟频率分别为fClka=60MHz和fClkb=20MHz。Clka时钟域驱动一个脉冲信号pulsea(位宽1bit),传输到Clkb时钟域的电路中,用于触发b模块的某些动作。电路模型和关键时序如下图。请写…

题目配图 题目配图
编程题 中等 经典问答问答题

参考答案

RTL代码(Verilog)如下: module a2b ( input wire clka, input wire rst_n_a, input wire pulsea, input wire clkb, input wire rst_n_b, output wire pulseb ); reg toggle_a; wire sync_pulse; reg sync1, sync2, sync3; // Clka域:将脉冲转换为电平翻转 always @(posedge clka or negedge rst_n_a) begin if (!rst_n_a) toggle_a <= 1'b0; else if (pulsea) toggle_a <= ~toggle_a; end // Clkb域:两级同步 always @(posedge clkb or negedge rst_n_b) begin if (!rst_n_b) begin sync1 <= 1'b0; sync2 <= 1'b0; sync3 <= 1'b0; end else begin sync1 <= toggle_a; sync2 <= sync1; sync3 <= sync2; end end // 边沿检测,还原为脉冲 assign pulseb = sync2 ^ sync3; endmodule 寄存器数量评估:Clka域使用1个寄存器(toggle_a),Clkb域使用3个寄存器(sync1, sync2, sync3),总计4个。 解析: - 由于Clka频率(60MHz)是Clkb(20MHz)的3倍,pulsea宽度仅为Clka的一个周期(约16.67ns),小于Clkb周期(50ns)。直接两级同步会导致脉冲漏采,因此必须采用脉冲同步器结构。 - 本设计使用“脉冲转电平”+“两级同步”+“边沿检测”标准方法:在Clka域将脉冲转换为电平信号(每次脉冲翻转一次),保证电平宽度至少为Clka的一个周期;该电平信号跨越时钟域后,在Clkb域用两级触发器同步消除亚稳态;最后通过异或当前同步值与前一个同步值,检测上升沿或下降沿,生成单周期脉冲(宽度为Clkb的一个周期)。 - 寄存器数量:Clka域1个(toggle_a),Clkb域3个(sync1/sync2/sync3),共4个。若只考虑同步器本身,可简化为2个同步寄存器+1个边沿检测寄存器,故仍为3个;加上Clka域总共4个。 - 易错点:不能只用两级同步器采样脉冲,因为脉冲宽度可能不满足建立保持时间或无法被采样到;必须展宽。

涉及知识点

  • 跨时钟域同步(快时钟到慢时钟)
  • 脉冲同步器(脉冲转电平 + 边沿检测)
  • 两级触发器消除亚稳态
  • 寄存器资源评估
← 上一题
登录后反馈错题
下一题 →