ASYNC_REG属性一般用于跨时钟域的数据同步上,该属性指定:寄存器可以接受异步数据或者该寄存器是一个位于同步链上的同步寄存器。
module async_reg(src_clk,des_clk,ce,d,Q);
input s_clk, d_clk,ce,d;
output Q;
reg r0; //ASYNC_REG的值默认为false
(*ASYNC_REG="true"*)reg Q,r1; //true表示寄存器 Q和r1是同一个时钟控制的寄存器
always@(posedge s_clk)
begin
if(!ce)
r0<=0;
else
r0<=d;
end
always@(posedge d_clk)
begin
if(!ce)
r1<=0;
else
r1<=r0;
end
always@(posedge d_clk)
begin
if(!ce)
Q<=0;
else
Q<=r1;
end
endmodule