页面加载中,请稍候
来源:集成电路那些事发布时间:2023-05-244647浏览
询问 AI什么是握手信号
可以看到因为有握手控制,可以确保数据的正确传输,不会丢失。
跨时钟域的握手设计就是利用握手控制这种优势,从而避免因为跨时钟域引起的数据传输错误。
图1是多比特跨时钟域的接口设计,可以看到握手模块其实就是一个桥梁,用来连接 clock1 时钟域和 clock2 时钟域。接口上看它有:
方案一和本文在第一部分讲的设备1和设备2通信的顺序是一样的。
接口时序
按照图2的接口时序,我们可以先描述一下握手模块的功能和步骤:
描述完上述步骤之后,对应的电路/代码设计其实也一目了然了:
步骤1. 两级寄存器同步器logic [1:0] valid1_2_ms_q;logic valid1_2_q;always_ff @(posedge clk2 or posedge rst2) if (rst2) begin valid1_2_ms_q <= 2'b00; valid1_2_q <= 1'b0; end else begin valid1_2_ms_q <= {valid1_2_ms_q[0], valid1}; valid1_2_q <= valid1_2_ms_q[1]; end
步骤2. 组合逻辑
logic pulse_1;always_comb begin pulse1 = !valid1_2_q & valid1_2_ms_q[1]; end步骤3和4. 数据数据寄存器data1_2,标志寄存器valid2 + 控制组合逻辑
// 输出数据寄存器logic [N-1:0] data1_2_q; // assume input data is N bitsalways_ff @(posedge clk2 or posedge rst2) if (rst1) begin data1_2_q <= '0; end else begin if (pulse_1) begin data1_2 <= data1; end endassign data2 = data1_2_q;// 输出 valid 标记寄存器logic valid2_d, valid2_q;always_comb begin valid2_d = valid2_q; if (pulse_1) begin valid2_d = 1'b1; end else if (valid2_q & ready2) begin valid2_d = 1'b0; endendalways_ff @(posedge clk2 or posedge rst2) if (rst1) begin valid2_q <= '0; end else begin valid2_q <= valid2_d; endassign valid2 = valid2_q;// 脉冲信号assign pulse2 = valid2 & ready2;值得注意的是,这里数据data1是在 clock1 时钟域,而寄存器data1_2是在 clock2 时钟域,为什么可以直接采样而不会有问题呢。
从图2可以看到data1在valid1拉高之后是保持不变的,跨时钟域采样一个不变的数据是不会有问题的。
步骤5. 单比特脉冲跨时钟域同步器。
之前的文章FPGA设计之跨时钟域(二)已经介绍过单比特脉冲同步器的设计。
步骤6. 连线
assign ready1 = pulse2_1;多比特跨时钟域握手设计方案二接口时序如图3所示,你能看出与图2的区别吗?![]()
区别主要是在valid1,在图1的时序图中valid1是一个电平信号,而这里valid1变成了脉冲信号。
电路设计
因为valid1变成了一个脉冲信号,我们就不能用简单的两级寄存器来同步了。logic [N-1:0] data1_local_q;always_ff @(posedge clk1 or posedge rst1) if(rst1) begin data1_local_q <= '0; end else begin if(valid1) begin data1_local_q <= data1; end end总结
在本篇文章中我们总结了多比特跨时钟域的握手原理和设计,包括两种不同方案的接口时序和电路设计。
以上内容转载自:FPGA开发之路,版权归原作者,如需转载本文,请联系原公众号,文章中其它相关链接也请去原公众号内获取,欢迎大家留言讨论,谢谢!
扫码关注
动动你的发财手,给个“在看”呗!
新闻来源:集成电路那些事,文中所述为作者独立观点,不代表icspec立场。更多精彩资讯请下载icspec App。如对本稿件有异议,请联系微信客服specltkj。
暂无评论哦,快来评论一下吧!

2026-06-26

2026-06-12
2026-06-08