数字IC设计——跨时钟域篇4(多比特处理)
Posted 摆渡沧桑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数字IC设计——跨时钟域篇4(多比特处理)相关的知识,希望对你有一定的参考价值。
数字IC设计——跨时钟域篇4(多比特处理)
一、 两级触发器的问题
- 两级触发器存在的问题
如果简单的按照单比特信号穿越方法各bit打两拍单独穿越,则会造成各个bit穿越时间不一致(寄存器对于每个信号的延迟时间不一样),则会造成另一个时钟域里面有一些被前一个时钟沿采到了,有些被后面的采到了,导致目的时钟域采到的值错误,造成中间态无意义的数据。
- 解决多比特跨时钟域方法
- 如果多比特信号之间存在逻辑关联性,可以在源时钟域将信号合成一个单一的控制信号,然后进行两级寄存器同步。
下左图是错误的处理方式,右图是正确的处理方式;
- 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
二、多比特信号跨时钟域的处理方法
-
格需码编码
通过编码的方式将多位信号转化为每次只有一位变化的信号,将“多比特”的跨时钟域变换成“单比特”进行处理。 -
异步FFO
异步FIFO融合了寄存器同步,格雷码编码,握手控制等处理方式,是处理跨时钟域数据传输最常用的方式。 -
握手处理
所谓握手,是指通信双方使用了专用控制信号进行数据收发的状态指示。这个控制信号既有发送域给接收域的,也有接收域给发送域的,有别于前面的单向控制信号检测方式。类似于DMA与外设模块的通信,会用到dma_req,dma_ack
三、格雷码转换
格雷码可以通过算法与二进制编码进行相互转换,相邻两个编码之间只有一位不同。
- 格雷码是一种特殊的二进制编码方式,在一定程度上优于二进制编码
- 可以通过算法与二进制编码进行相互转换
- 相邻两个编码之间只有一位不同
以上是关于数字IC设计——跨时钟域篇4(多比特处理)的主要内容,如果未能解决你的问题,请参考以下文章