单根信号跨时钟域——两级D触发器消除亚稳态

meta_harden

这个模块是在Xilinx的例程工程Wave Generator中看到的,来看一下有什么用。

描述

在源文件注释中有描述到,这是一个基础的亚稳态固化方法;通过两级的时钟同步,将异步的信号传输到一个新的时钟域上。

端口

先看一下端口定义:

module meta_harden (
  input            clk_dst,      // Destination clock
  input            rst_dst,      // Reset - synchronous to destination clock
  input            signal_src,   // Asynchronous signal to be synchronized
  output reg       signal_dst    // Synchronized signal
);

输入端口有目标时钟,复位,以及需要同步的异步信号。

输出端口有已经同步后的信号。

实例化端口

实例化端口的使用方式为:

/* Synchronize the RXD pin to the clk_rx clock domain. Since RXD changes
* very slowly wrt. the sampling clock, a simple metastability hardener is
* sufficient */
meta_harden meta_harden_rxd_i0 (
	.clk_dst      			(clk_rx),
    .rst_dst      			(rst_clk_rx),
    .signal_src   			(rxd_i),
    .signal_dst   			(rxd_clk_rx)
);

这里选用的是典型的uart通信中的在rxd_i在接入到rx模块时,通过该meta_harden模块,将输入信号固化到clk_rx这个时钟域。

关键变量声明

只有一个变量:

reg signal_meta;

对异步信号采样来说,第一次采样大概率是处于亚稳态的,然而使用目标时钟进行第二次采样,处于亚稳态的概率就小很多。

此变量为时钟进行的第一次采样。

main code

code如下:

always @(posedge clk_dst) begin
    if (rst_dst) begin
      signal_meta <= 1'b0;
      signal_dst  <= 1'b0;
    end else begin // if !rst_dst
      signal_meta <= signal_src;
      signal_dst  <= signal_meta;
    end // if rst
end // always

注意:输出引脚signal_dstreg类型.

应用

正如开头描述的那样,一般单根控制信号有夸时钟域操作时候,就需要接入此模块。

比如,标准的RGB视频信号,接收时,VsyncHsyncDE等控制信号就需要接入此模块,打两个时钟之后在做其他处理,24 bit Data信号也都可以这样处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShareWow丶

前人栽树,分享知识,传播快乐。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值