免责声明:本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下,作者不对因使用本文内容而导致的任何直接或间接损失承担责任,包括但不限于数据丢失、业务中断或其他经济损失。
读者在使用本文信息时,应自行验证其准确性和适用性,并对其使用结果负责。本文内容不构成专业技术咨询或建议,具体的技术实现和应用应根据实际情况和需要进行详细分析和验证。
本文所涉及的任何商标、版权或其他知识产权均属于其各自的所有者。若本文中引用了第三方的资料或信息,引用仅为学术交流目的,不构成对第三方内容的认可或保证。
若有任何疑问或需进一步信息,请联系本文作者或相关专业人士。
前言
本期介绍第三个Xilinx FPGA跨时钟域原语XPM_CDC_SYNC_RST
一、Introduction
这个宏将复位信号同步到目标时钟域。与XPM_CDC_ASYNC_RST宏不同,生成的输出将同步地对目标时钟域进行断言和取消断言。
为了正常工作,输入数据必须由目标时钟采样两次或两次以上。您可以定义同步器中使用的寄存器阶段的数量以及配置后这些寄存器的初始值。您还可以启用模拟功能来生成消息,报告任何可能的宏误用
二、使用方法
xpm_cdc_sync_rst #(
.DEST_SYNC_FF(4), // 用于同步目标时钟域中信号的寄存器级数。
.INIT(1), // 将同步寄存器初始化
.INIT_SYNC_FF(0), // DECIMAL; 0=disable simulation init values, 1=enable simulation init values
.SIM_ASSERT_CHK(0) // DECIMAL; 0=disable simulation messages, 1=enable simulation messages
)
xpm_cdc_sync_rst_inst (
.dest_rst(dest_rst ),
.dest_clk(dest_clk ),
.src_rst ( src_rst )
);
三、仿真
module TB();
reg clk1 ;
reg clk2 ;
reg rst ;
reg rst_r = 1 ;
wire dest_rst ;
initial begin
clk1= 1;
clk2= 1;
rst = 1;
#200
rst = 0;
#800
rst = 1;
end
always #5 clk1 = ~clk1;
always #10 clk2 = ~clk2;
always@(posedge clk2)
rst_r <= rst ;
xpm_test t1(
. dest_clk ( clk1 ),
. src_rst ( rst_r ),
. dest_rst ( dest_rst )
);
endmodule
module xpm_test(
input dest_clk ,
input src_rst ,
output dest_rst
);
xpm_cdc_sync_rst #(
.DEST_SYNC_FF(4), // 用于同步目标时钟域中信号的寄存器级数。
.INIT(1), // 将同步寄存器初始化
.INIT_SYNC_FF(0), // DECIMAL; 0=disable simulation init values, 1=enable simulation init values
.SIM_ASSERT_CHK(0) // DECIMAL; 0=disable simulation messages, 1=enable simulation messages
)
xpm_cdc_sync_rst_inst (
.dest_rst(dest_rst ),
.dest_clk(dest_clk ),
.src_rst ( src_rst )
);
endmodule
总结
注意XPM_CDC_ASYNC_RST与XPM_CDC_SYNC_RST的区别。