免责声明:本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下,作者不对因使用本文内容而导致的任何直接或间接损失承担责任,包括但不限于数据丢失、业务中断或其他经济损失。
读者在使用本文信息时,应自行验证其准确性和适用性,并对其使用结果负责。本文内容不构成专业技术咨询或建议,具体的技术实现和应用应根据实际情况和需要进行详细分析和验证。
本文所涉及的任何商标、版权或其他知识产权均属于其各自的所有者。若本文中引用了第三方的资料或信息,引用仅为学术交流目的,不构成对第三方内容的认可或保证。
若有任何疑问或需进一步信息,请联系本文作者或相关专业人士。
前言
本期介绍第二个Xilinx FPGA跨时钟域原语XPM_CDC_ASYNC_RST
一、Introduction
-
异步复位信号同步到目标时钟域 :
复位信号是异步的,意味着它与系统中的时钟信号不直接同步。因此,必须将该异步复位信号与目标时钟域同步,以避免跨时钟域时引发的亚稳态问题。这个宏的作用就是帮助将异步复位信号同步到特定的时钟域。
-
复位信号异步断言(assertion) :
当复位信号被"断言"(通常表示复位信号有效,即被激活时),该信号是异步的,即它与目标时钟域没有同步关系。
-
同步取消(deassertion)复位信号 :
当复位信号被"取消"(即无效时),它会与目标时钟域同步。这样可以确保在取消复位时,系统能在时钟的上升沿或下降沿精确同步复位信号的变化。
-
复位信号的极性 :
你可以定义复位信号的极性,即复位信号是高电平有效还是低电平有效。
-
输出脉冲的最小宽度 :
当复位信号被断言时,宏会控制输出复位脉冲的最小宽度。这个最小宽度是通过同步器中寄存器级数来决定的。寄存器级数越多,脉冲的宽度可能越大,且同步器的稳定性也越好
注:最小输入脉冲断言取决于寄存器的复位或设置引脚的设置和保持要求。有关目标架构,请参阅各自的直流和交流开关特性数据表。
二、使用方法
javascript
xpm_cdc_async_rst #(
.DEST_SYNC_FF (4), // 设置用于同步的寄存器级数
.INIT_SYNC_FF (0), // 仿真初始化参数使能
.RST_ACTIVE_HIGH(0) // DECIMAL; 0=active low reset, 1=active high reset
)
xpm_cdc_async_rst_inst (
.dest_arst(dest_arst), //目的复位信号
.dest_clk (dest_clk ), // 目的时钟
.src_arst (src_arst ) // 源复位信号
);
三、仿真
javascript
module xpm_test(
input dest_clk ,
input src_arst ,
output dest_arst
);
xpm_cdc_async_rst #(
.DEST_SYNC_FF (4), // 设置用于同步的寄存器级数
.INIT_SYNC_FF (0), // 仿真初始化参数使能
.RST_ACTIVE_HIGH(0) // DECIMAL; 0=active low reset, 1=active high reset
)
xpm_cdc_async_rst_inst (
.dest_arst(dest_arst), //目的复位信号
.dest_clk (dest_clk ), // 目的时钟
.src_arst (src_arst ) // 源复位信号
);
endmodule
javascript
module TB();
reg clk1 ;
reg clk2 ;
reg rst ;
reg rst_r = 1 ;
wire dest_arst ;
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_arst ( rst_r ),
. dest_arst ( dest_arst )
);
endmodule
总结
再见