主播网站建立广西住房城乡和建设厅网站
web/
2025/9/27 14:11:49/
文章来源:
主播网站建立,广西住房城乡和建设厅网站,比较火的小程序购物平台,wordpress管理入口一、前言
多比特一般为数据#xff0c;其在跨时钟域传输的过程中有多种处理方式#xff0c;比如DMUX#xff0c;异步FIFO#xff0c;双口RAM#xff0c;握手处理。本文介绍通过DMUX的方式传输多比特信号。
二、DMUX同步跨时钟域数据
dmux表示数据分配器#xff0c;该方…一、前言
多比特一般为数据其在跨时钟域传输的过程中有多种处理方式比如DMUX异步FIFO双口RAM握手处理。本文介绍通过DMUX的方式传输多比特信号。
二、DMUX同步跨时钟域数据
dmux表示数据分配器该方法适合带数据有效标志信号的多bit数据做跨时钟域传输。其典型结构如下 慢时钟域到快时钟域
快时钟域到慢时钟域只要将红框中换成单bit快时钟域到慢时钟域处理单元即可。
DMUX遵循的原则就是数据不同步只对控制信号同步这点其实和异步fifo里的思路一样只不多异步fifo中的控制信号是多比特的格雷码而这个场景下的控制信号是data_valid。继续观察结构可以发现DMUX是将单bit控制信号同步之后将其最为mux的选择信号。因此使用这个结构需要满足一些要求
1.数据和使能信号在源时钟域为同步到来的信号
2.在目的时钟域对数据完成采样前数据信号不能跳变
如果不满足以上的要求那么就可能造成数据漏同步、错同步等问题。
三、DMUX Verilog代码
3.1 慢时钟域数据到快时钟域
module mult_bit_slow_to_fast_dmux #(parameter DATAWIDTH 8)(input rst_n, input clk_slow,input [DATAWIDTH-1:0] data_slow,input data_valid_slow,input clk_fast,output reg [DATAWIDTH-1:0] data_fast,output reg data_valid_fast);//signal valid slow to fast cdcreg data_valid_slow_reg;always(posedge clk_slow or negedge rst_n)beginif(!rst_n)data_valid_slow_reg 1b0;elsedata_valid_slow_reg data_valid_slow; endreg data_valid_slow2fast_reg0,data_valid_slow2fast_reg1;always(posedge clk_fast or negedge rst_n)beginif(!rst_n)begindata_valid_slow2fast_reg0 1b0;data_valid_slow2fast_reg0 1b0;endelsebegindata_valid_slow2fast_reg0 data_valid_slow_reg ; data_valid_slow2fast_reg1 data_valid_slow2fast_reg0 ;endendalways(posedge clk_fast or negedge rst_n)beginif(!rst_n)data_valid_fast 1b0;elsedata_valid_fast data_valid_slow2fast_reg1 ;end//data slow to fast cdcreg [DATAWIDTH-1:0] data_slow_reg,always(posedge clk_slow or negedge rst_n)beginif(!rst_n)data_slow_reg 0;elsedata_slow_reg data_slow ;endalways(posedge clk_fast or negedge rst_n)beginif(!rst_n)data_fast 0;else if(data_valid_slow2fast_reg1 1b1)data_fast data_slow_reg ;endendmodule
3.2 快时钟域数据到慢时钟域
module mult_bit_fast_to_slow_dmux #(parameter DATAWIDTH 8)(input rst_n, input clk_fast,input [DATAWIDTH-1:0] data_fast,input data_valid_fast,input clk_slow,output reg [DATAWIDTH-1:0] data_slow,output reg data_valid_slow);//signal valid fast to slow cdcreg data_valid_fast_reg;always(posedge clk_fast or negedge rst_n)beginif(!rst_n)data_valid_fast_reg 1b0;else if(data_valid_fast 1b1)data_valid_fast_reg ~data_valid_fast_reg ; endreg data_valid_fast2slow_reg0,data_valid_fast2slow_reg1;always(posedge clk_slow or negedge rst_n)beginif(!rst_n)begindata_valid_fast2slow_reg0 1b0;data_valid_fast2slow_reg1 1b0;endelsebegindata_valid_fast2slow_reg0 data_valid_fast_reg ; data_valid_fast2slow_reg1 data_valid_fast2slow_reg0;endendreg data_valid_fast2slow_reg2always(posedge clk_slow or negedge rst_n)beginif(!rst_n)data_valid_fast2slow_reg2 1b0;elsedata_valid_fast2slow_reg2 data_valid_fast2slow_reg1;endassign data_valid_slow_ready data_valid_fast2slow_reg1 ^ data_valid_fast2slow_reg2 ;always(posedge clk_slow or negedge rst_n)beginif(!rst_n)data_valid_slow 0;else data_valid_slow data_valid_slow_ready ;end//data fast to slow cdcreg [DATAWIDTH-1:0] data_fast_reg,always(posedge clk_fast or negedge rst_n)beginif(!rst_n)data_fast_reg 0;elsedata_fast_reg data_fast;endalways(posedge clk_slow or negedge rst_n)beginif(!rst_n)data_slow 0;else if(data_valid_slow_ready 1b1)data_slow data_fast_reg ;endendmodule
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81109.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!