题解 | #使用握手信号实现跨时钟域数据传输#

使用握手信号实现跨时钟域数据传输

https://www.nowcoder.com/practice/2bf1b28a4e634d1ba447d3495134baac

`timescale 1ns/1ns
module data_driver(
	input clk_a,
	input rst_n,
	input data_ack,
	output reg [3:0]data,
	output reg data_req
	);
//=========================================================================\\
//*****************************define sinals*******************************\\
//=========================================================================\\

reg  [2:0]  cnt_wait ;

reg  data_ack_r0  ;
reg  data_ack_r1  ;


//=========================================================================\\
//*****************************main code***********************************\\
//=========================================================================\\

//data_ack  跨时钟域处理
always@(posedge clk_a or negedge rst_n)begin
    if(!rst_n)begin
        data_ack_r0 <= 1'b0    ;
        data_ack_r1 <= 1'b0    ;
    end
    else begin
        data_ack_r0 <= data_ack     ;
        data_ack_r1 <= data_ack_r0  ;
    end

end

//data_req 边沿检测实现 数据请求信号的拉低 然后 通过等待5个时钟周期的cnt实现拉高
always@(posedge clk_a or negedge rst_n)begin
    if(!rst_n)
        data_req <=  1'b0    ;
    else if(data_ack_r0 && !data_ack_r1)
        data_req <=  1'b0    ;
    else if(cnt_wait == 'd4 )
        data_req <=  1'b1    ;
    else
        data_req <= data_req ;    
end

//cnt_wait  只有在数据响应信号为低电平的时候才会进行计数,目的是计算等待的5个时间间隔
always@(posedge clk_a or negedge rst_n)begin
    if(!rst_n)
        cnt_wait <= 'd0             ;
    else if(cnt_wait == 'd4)
        cnt_wait <= 'd0             ;
    else if(data_req == 'd0)
        cnt_wait <= cnt_wait + 1'b1 ;
    else 
        cnt_wait <= cnt_wait        ;
end

//data
always@(posedge clk_a or negedge rst_n)begin
    if(!rst_n)
        data <= 'd0        ;
    else if(data_ack_r0 && !data_ack_r1)
        data <= data + 1'b1 ;
    else
        data <= data        ;
end
endmodule


`timescale 1ns/1ns
module data_receiver(
	input                clk_b        ,
	input                rst_n        , 
	input       [3:0]    data         ,
    input                data_req     ,
	output  reg          data_ack    
	);
    
//=========================================================================\\
//*****************************define sinals*******************************\\
//=========================================================================\\

reg         data_req_r0  ;
reg         data_req_r1  ;

reg  [3:0]  data_reg     ;

//=========================================================================\\
//*****************************main code***********************************\\
//=========================================================================\\

//data_req 输入信号需要打两拍进行跨时钟域处理
always@(posedge clk_b or negedge rst_n)begin
    if(!rst_n)begin
        data_req_r0 <= 1'b0   ;
        data_req_r1 <= 1'b0   ;
    end
     else begin
        data_req_r0 <= data_req     ;
        data_req_r1 <= data_req_r0  ;
    end
end


//data_reg 
always@(posedge clk_b or negedge rst_n)begin
    if(!rst_n)
        data_reg  <= 'd0        ;
    else if(data_req_r0 && !data_req_r1)
        data_reg  <= data       ;
    else
        data_reg  <=  data_reg  ;
end

//data_ack 通过上边沿检测实现响应信号ack的生成
always@(posedge clk_b or negedge rst_n)begin
    if(!rst_n)
        data_ack <= 1'b0  ;
    else if(data_req_r0 && !data_req_r1)
        data_ack <= 1'b1  ;
    else 
        data_ack <= 1'b0  ;
end




endmodule

全部评论

相关推荐

评论
2
收藏
分享

创作者周榜

更多
正在热议
更多
# 长得好看会提高面试通过率吗? #
3637次浏览 45人参与
# 离家近房租贵VS离家远但房租低,怎么选 #
16869次浏览 137人参与
# 巨人网络春招 #
11519次浏览 224人参与
# 春招至今,你的战绩如何? #
15402次浏览 142人参与
# 你的实习产出是真实的还是包装的? #
2934次浏览 52人参与
# 沪漂/北漂你觉得哪个更苦? #
1413次浏览 40人参与
# MiniMax求职进展汇总 #
25058次浏览 321人参与
# HR最不可信的一句话是__ #
1066次浏览 32人参与
# AI面会问哪些问题? #
926次浏览 22人参与
# 你做过最难的笔试是哪家公司 #
1201次浏览 21人参与
# AI时代,哪个岗位还有“活路” #
2781次浏览 51人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152881次浏览 889人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7990次浏览 43人参与
# XX请雇我工作 #
51154次浏览 171人参与
# 简历第一个项目做什么 #
32120次浏览 359人参与
# 简历中的项目经历要怎么写? #
310994次浏览 4262人参与
# 投格力的你,拿到offer了吗? #
178311次浏览 891人参与
# 你最满意的offer薪资是哪家公司? #
76961次浏览 375人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187576次浏览 1123人参与
# AI时代,哪些岗位最容易被淘汰 #
64632次浏览 871人参与
# 如果重来一次你还会读研吗 #
230002次浏览 2011人参与
# 正在春招的你,也参与了去年秋招吗? #
364304次浏览 2641人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务