数字IC设计——跨时钟域篇4(多比特处理)

数字IC设计——跨时钟域篇4(多比特处理)

一、 两级触发器的问题

  1. 两级触发器存在的问题
    如果简单的按照单比特信号穿越方法各bit打两拍单独穿越,则会造成各个bit穿越时间不一致(寄存器对于每个信号的延迟时间不一样),则会造成另一个时钟域里面有一些被前一个时钟沿采到了,有些被后面的采到了,导致目的时钟域采到的值错误,造成中间态无意义的数据。
    在这里插入图片描述
  2. 解决多比特跨时钟域方法
  • 如果多比特信号之间存在逻辑关联性,可以在源时钟域将信号合成一个单一的控制信号,然后进行两级寄存器同步。
    下左图是错误的处理方式,右图是正确的处理方式;
    在这里插入图片描述
  • RTL 代码
module twobits_cdc (
  input  clka ,
  input  clkb ,
  input  rst_n,
  input  lden  ,
  input  load  ,
  output a_lden  
);

reg b_lden;
reg b_load;
reg b_lden;

reg a_lden;
reg a_d;

always@(posedge clkb or  negedge rst_n) begin
  if (!rst_n) 
    b_lden <= 0;
    b_load <= 0;
  else 
    b_lden <= lden;
    b_load <= load;
end

always@(posedge clka or negedge rst_n) begin
  if (!rst_n) begin
    a_d 	<= 0;
    a_lden  <= 0;
    b_lden 	<= 0;
  end
  else  begin
  	b_lden 	<= b_load & b_lden ;
    a_d 	<= b_lden;
    a_lden 	<= a_d;
  end
end

endmodule

二、多比特信号跨时钟域的处理方法

  1. 格需码编码
    通过编码的方式将多位信号转化为每次只有一位变化的信号,将“多比特”的跨时钟域变换成“单比特”进行处理。

  2. 异步FFO
    异步FIFO融合了寄存器同步,格雷码编码,握手控制等处理方式,是处理跨时钟域数据传输最常用的方式。

  3. 握手处理
    所谓握手,是指通信双方使用了专用控制信号进行数据收发的状态指示。这个控制信号既有发送域给接收域的,也有接收域给发送域的,有别于前面的单向控制信号检测方式。类似于DMA与外设模块的通信,会用到dma_req,dma_ack

三、格雷码转换

格雷码可以通过算法与二进制编码进行相互转换,相邻两个编码之间只有一位不同。

  1. 格雷码是一种特殊的二进制编码方式,在一定程度上优于二进制编码
  2. 可以通过算法与二进制编码进行相互转换
  3. 相邻两个编码之间只有一位不同
    在这里插入图片描述
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值