全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 可编程逻辑 >

FPGA跨时钟域处理方法(一)

时间:2023-05-25 15:06

人气:

作者:admin

标签: 时钟域  FPGA  FPGA设计  信号 

导读:跨时钟域是FPGA设计中最容易出错的设计模块,而且一旦跨时钟域出现问题,定位排查会非常困难,因为跨时钟域问题一般是偶现的,而且除非是构造特殊用例一般的仿真是发现不了这类...

时钟域是FPGA设计中最容易出错的设计模块,而且一旦跨时钟域出现问题,定位排查会非常困难,因为跨时钟域问题一般是偶现的,而且除非是构造特殊用例一般的仿真是发现不了这类问题的。

优秀的FPGA工程,系统工程师一定会进行合理的时钟域划分,理想的情况是整个工程只有一个时钟,完全不考虑跨时钟域的问题,但是实际的工程中一般是不存在的,因此合理的跨时钟域设计是很有必要的。

图片

单bit慢变信号跨时钟域方法:

1、信号展宽

图片

2、跨时钟打两拍

3、取沿

图片

// ============================================================
// File Name: cm_cdc_1bit
// VERSION  : V1.0
// DATA     : 2022/9/28
// Author   : FPGA干货分享
// ============================================================
// 功能:单bit慢变信号跨时钟域模块
// ============================================================




`timescale 1ns/1ps
module cm_cdc_1bit (
    input wire      I_clk_a     , ///输入时钟a
    input wire      I_clk_b     , ///输入时钟b
    input wire      I_single_a  , ///a时钟输入信号
    output reg      O_single_b    ///b时钟输出信号
    );


// ============================================================
// wire reg
// ============================================================
reg          S_clr_flag_a_d0  ;
reg          S_clr_flag_a_d1  ;
reg          S_clr_flag_a_all ;


reg          S_clr_flag_b_d0  ;
reg          S_clr_flag_b_d1  ;
reg          S_clr_flag_b_d2  ;
reg          S_clr_b_posedge  ;




// ============================================================
// a时钟域
// ============================================================


always @(posedge I_clk_a)
    begin
        S_clr_flag_a_d0 <= I_single_a;
        S_clr_flag_a_d1 <= S_clr_flag_a_d0;
    end


///跨时钟域之前先扩展
always @(posedge I_clk_a)
    S_clr_flag_a_all <= I_single_a|S_clr_flag_a_d0|S_clr_flag_a_d1 ;


// ============================================================
// b时钟域
// ============================================================
///使用第二个时钟进行打拍
always @(posedge I_clk_b)
    begin
        S_clr_flag_b_d0 <= S_clr_flag_a_all;
        S_clr_flag_b_d1 <= S_clr_flag_b_d0 ;
        S_clr_flag_b_d2 <= S_clr_flag_b_d1 ;
    end


//打两拍之后的信号进行处理
always @(posedge I_clk_b)
    O_single_b <= (!S_clr_flag_b_d2)&(S_clr_flag_b_d1);




endmodule

图片

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信