Verilog多bit同步,多bit之间稳定判断

一个多bit信号的同步常用方法是使用demux方法,先将data数据的valid同步到dstClk,检测到valid_dst之后在采样data就可以了,此时data的多bit认为是已经稳定可采样。

还有一种需要握手的同步 先将src_valid同步到dst_valid,检测到dst_valid 产生dst_ack同步回src_ack,用src_ack清零 src_valid 这种方法常用在apb信号的同步 即只同步psel,penable。

可参考

apb/axi异步桥实现_cy413026的博客-CSDN博客_异步桥1.基本异步处理电路1.1电平同步1.2脉冲同步现将脉冲变成电平,同步之后再恢复,1.下面是脉冲展电平的做法2.下面是电平恢复脉冲1.3异步fifo1.4demux同步DEBUX通过一个同步到目标时钟域的信号作为目标时钟域多比特数据更新的使能信号2.Qualifier synchronization其实和demux很相像,先选择一个quali...https://blog.csdn.net/cy413026/article/details/104993507

这里在介绍一种没有相关的valid信号这种情况,代码如下:

module multiBitsync(
    src_data,
    dst_data,
    dst_clk,
    dst_rst_n
);

input [3:0]    src_data;
input          dst_clk;
input          dst_rst_n;
output [3:0]   dst_data;

reg [3:0]  d_s4;

wire [3:0] d_s3;
wire [3:0] q_tmp;
wire       unstable_data;
genvar i;
generate for (i=0; i<4; i++) begin: gen_sync_cell
    xxx_sync_bit #(
                                .RST_VAL(0),
                                .SYNC_DEPTH(3)
                  ) u_xxx_sync_bit(
                      .q (d_s3[i]),
                      .rst_n (dst_rst_n),
                      .clk (dst_clk),
                      .d (src_data[i])
                  );
endgenerate

always @(posedge dst_clk or negedge dst_rst_n) begin
    if (dst_rst_n == 1'd0) begin
        d_s4 <= 4'd0;
    end
    else begin
        d_s4 <= d_s3;
    end
end

assign unstable_data = |(d_s3 ^ d_s4);
assign q_tmp         = (unstable_data == 1'd1) ? dst_data : d_s4;


always @(posedge dst_clk or negedge dst_rst_n) begin
    if (dst_rst_n == 1'd0) begin
        dst_data <= 4'd0;
    end
    else begin
        dst_data <= q_tmp;
    end
end


//或者用下面的写法 清晰一点,也就是最终输出dst_data在不稳定的时候不采样数据,稳定的时候采样d_s4
//always @(posedge dst_clk or negedge dst_rst_n) begin
//    if (dst_rst_n == 1'd0) begin
//        dst_data <= 4'd0;
//    end
//    else begin
//        if (unstable_data == 1'd1)
//            dst_data <= dst_data;
//        else
//            dst_data <= d_s4;
//    end
end

endmodule

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值