跨时钟域-单脉冲信号处理方法
逻辑设计中将所有同步元件(例如触发器和RAM等)使用相同时钟信号的部分称为时钟域。
退出亚稳态所需的时间被称为resolution Time(Tr)。
由于建立时间的违反,寄存器的输出电压可能是代表逻辑高、逻辑低,甚至更糟糕的是介于逻辑高和逻辑低之间的电压。
亚稳态是指触发器无法在特定时间内达到已知状态。当触发器进入亚稳状态时,您既无法预测元件的输出电压电平,也无法预测输出何时将稳定至正确的电压电平。在此稳定时间内,触发器的输出处于某个中间电压电平,或者可能振荡,并且可以级联无效的输出电平,以使触发器在信号路径的更下方。
单脉冲信号的跨时钟域处理
所谓单脉冲信号就是单bit信号,对于这类信号,有两种场景:
1、从慢时钟域到快时钟域的脉冲信号处理。
2、从快时钟域到慢时钟域的脉冲信号处理。
1、慢到快
信号从慢时钟域同步到快时钟域,在快时钟域是一定能采样到的,只不过可能会出现亚稳态的结果。处理方式是两级寄存器同步,也就是“打两拍”。
2、快到慢
同步一个单比特信号到频率较慢的时钟域,比较麻烦。因为这存在目的时钟域检测不到源时钟域脉冲的情况。
我们首先应该会想到展宽源时钟域信号,这里的展宽需要牺牲一点东西,例如展宽高电平信号就得牺牲低电平持续的时间,同理展宽低电平,就得牺牲一点高电平的时间,不过这都不是事,因为我们既然要展宽,肯定是展宽我们需要使用的电平信号。 这通常需要在每个时钟域中设置一个寄存器,从目的时钟域向源时钟域反馈一种形式,表示检测到了信号。
module fast2slow_CDC( input wire clk1 , input wire clk2 , input wire rst , input wire pulse_clk1 , output wire pulse_syn_clk2 ); reg pulse_wide_clk2 ; reg reg1_pulse_wide_clk2 ; reg reg1_pulse_wide_clk1 ; reg reg2_pulse_wide_clk1 ; //生成脉冲展宽信号 reg pulse_wide_clk1 ; always@(posedge clk1 or posedge rst) begin if(rst) begin pulse_wide_clk1 <= 1'b0 ; end else if(pulse_clk1) begin pulse_wide_clk1 <= 1'b1 ; end else if(reg2_pulse_wide_clk1) begin pulse_wide_clk1 <= 1'b0 ; end else begin pulse_wide_clk1 <= pulse_wide_clk1 ; end end //在目的时钟域内采样展宽后的信号 always@(posedge clk2 or posedge rst) begin if(rst) begin pulse_wide_clk2 <= 1'b0 ; reg1_pulse_wide_clk2 <= 1'b0 ; end else begin pulse_wide_clk2 <= pulse_wide_clk1 ; reg1_pulse_wide_clk2 <= pulse_wide_clk2 ; end end //在源时钟域内同步目的时钟域内的展宽信号,以生成反馈信号 always@(posedge clk1 or posedge rst) begin if(rst) begin reg1_pulse_wide_clk1 <= 1'b0 ; reg2_pulse_wide_clk1 <= 1'b0 ; end else begin reg1_pulse_wide_clk1 <= reg1_pulse_wide_clk2 ; reg2_pulse_wide_clk1 <= reg1_pulse_wide_clk1 ; end end assign pulse_syn_clk2 = reg1_pulse_wide_clk2; endmodule
本文作者:大耳毛豆
本文链接:https://www.cnblogs.com/yjxmike/p/18732101
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 百万级群聊的设计实践
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期