免责声明:本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下,作者不对因使用本文内容而导致的任何直接或间接损失承担责任,包括但不限于数据丢失、业务中断或其他经济损失。
读者在使用本文信息时,应自行验证其准确性和适用性,并对其使用结果负责。本文内容不构成专业技术咨询或建议,具体的技术实现和应用应根据实际情况和需要进行详细分析和验证。
本文所涉及的任何商标、版权或其他知识产权均属于其各自的所有者。若本文中引用了第三方的资料或信息,引用仅为学术交流目的,不构成对第三方内容的认可或保证。
若有任何疑问或需进一步信息,请联系本文作者或相关专业人士。
前言
本期介绍第五个Xilinx FPGA跨时钟域原语XPM_CDC_SINGLE
一、Introduction
-
信号同步:当一个信号在不同的时钟域间传输时,由于时钟信号的不同步,可能导致数据不稳定或错误。这个宏的目的是确保信号在目标时钟域中是稳定的。
-
采样要求:输入数据在目标时钟域中必须被采样两次或更多次,这有助于降低由于时钟域不同步带来的不确定性。这种方法通常是通过使用多个触发器(register stages)来实现的。
-
寄存器阶段:可以定义在同步器中使用的寄存器阶段的数量。更多的寄存器阶段通常能提供更好的稳定性,但会增加延迟。
-
可选输入寄存器:可以选择在源时钟域中使用一个输入寄存器,这样在信号被同步之前,信号就已经在源时钟域中被注册,从而提高了稳定性。
二、使用方法
module xpm_test(
input dest_clk ,
input src_clk ,
input src_in ,
output dest_out ); xpm_cdc_single #(.DEST_SYNC_FF(2), // DECIMAL; range: 2-10.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.SRC_INPUT_REG(1) // DECIMAL; 0=do not register input, 1=register input)xpm_cdc_single_inst (.dest_out(dest_out), .dest_clk(dest_clk), // 1-bit input: Clock signal for the destination clock domain..src_clk (src_clk ), // 1-bit input: optional; required when SRC_INPUT_REG = 1.src_in (src_in ) // 1-bit input: Input signal to be synchronized to dest_clk domain.);
SRC_INPUT_REG = 1:
SRC_INPUT_REG = 0:
三、仿真
module TB();reg clk1 ;reg clk2 ;reg src_in ;reg src_in_r ;
wire dest_out ;
initial begin
clk1 = 1;
clk2 = 1;
src_in = 0;#100
src_in = 1;
#100
src_in = 0;
#100
src_in = 1;endalways #5 clk1 = ~clk1;
always #2.5 clk2 = ~clk2;always@(posedge clk1)src_in_r <= src_in;xpm_test tp0(
. dest_clk ( clk2 ) ,
. src_clk ( clk1 ) ,
. src_in (src_in_r ) ,
. dest_out (dest_out ) ); endmodule
SRC_INPUT_REG = 0:
SRC_INPUT_REG = 1:
总结
再见