标旗信号的跨时钟域处理
0赞昨天在做FIR滤波器时,输入信号的时钟是512k,而系统时钟是100m,需要给IP核一个使能信号,表示输入信号的有效。这个信号需要的频率是512k,但是宽度是10ns(对应系统时钟100m)。而且需要避免这个信号和100m时钟信号同时变化,这样是一个亚稳态。所以在100m下降沿使这个信号由0变到1。这样在100m的上升沿信号是稳定的。这是一个快采慢的问题。
1)快采慢一般采用边沿触发
针对这个问题
wire s_axi_data_valid;
reg s_axi_data_valid_r0;
reg s_axi_data_valid_r1;
always@(negedge clk100m)
begin
s_axi_data_valid_r0 <=clk512k;
s_axi_data_valid_r1 <=s_axi_data_valid_r0;
end
assign s_axi_data_valid=(!s_axi_data_valid_r1)&s_axi_data_valid_r0;
这样这段程序就实现了在512k上升沿,产生了一个10ns的信号。
2)对于慢采快
假设一个这样的场景,输入信号为100m,产生了10ns的一个使能信号(m_axi_data_valid),当你用10m的信号去采样时,有可能会采不到。需要人为的把他延长,直到10m的信号可以采到
reg m_axi_data_valid_r0;
reg [2:0] counter;
always@(posedge 100m)
if(m_axi_data_valid==1)
begin
if(counter==4)
begin
m_axi_data_valid_r0<=0;
counter<=0;
end
else
begin
m_axi_data_valid_r0<=1;
counter<=counter+1;
end
end
else
m_axi_data_valid_r0<=0;
