FPGA异步输入
主要看你脉冲宽度是多少,只有宽度大于80MHz的时钟宽度,才能够采集到。
不知道小编有没有搞错“上升时间”和”脉冲宽度“,如果是上升时间的话,1us也太大了吧?
触发器容易产生亚稳态,不过多用几级触发器进行同步的话,大概也可以。
1us是上升时间,我关心的其实也是亚稳态的问题。我可以将这个上升时间控制到400ns左右,但是12.5ns周期的时钟总是会在上升时间内采集到几个点,怎样的设计才能够保证一个上升沿的输入我能够且只能够采集到一次低到高的切换?
你百度一下上升沿检测电路。另外多用几级触发器进行同步。
降频采样是不是唯一的出路?……
你百度一下上升沿检测电路。另外多用几级触发器进行同步。
小编,我也遇到同样的问题,我也觉得应该是降频来处理吧。
嗯,多用几级同步触发器应该是对上升时间小于时钟周期的情况适用(即第一个触发器不会连续多次采集到亚稳态的输入)。有时间设计一个实验验证一下:多级同步触发器如果输入波形上升比较长,在上升时间的过程中,输出会有多次翻转。
如果输入的电平信号不是异步信号(高有效),那么缓存一拍后去上升沿,比如输入的电平信号是sin, 时钟是clk, 复位信号是rstn,用如下方式可只以在第一个上升沿(start)采集数据
reg sin_q;
wire start;
always@(posedge clk or negedge rstn)begin
if(!rstn) sin_q <= 1'b0l;
else sin_q <= sin;
end
assign start = sin&(~sin_q);
如果是异步信号,那么把电平信号同步后采样
reg sin_q;
reg sin_2q;
wire start
always@(posedge clk or negedge rstn)begin
if(!rstn)begin
sin_q <= 1'b0l;
sin_2q <= 1'b0;
end
else begin
sin_q <= sin;
sin_2q <= sin_q;
end
assign start = sin_q&(~sin_2q);
可以用移位寄存器进行脉冲宽度判断,在进行触发
采用同步电路,把异步输入同步到当前时钟域。根据时钟的快慢,网上都有很经典的电路。从慢速时钟域同步到快速时钟域只需要两级寄存器来同步就好了。
从快速时钟域同步到慢速时钟域可以用结绳法电路
不懂,觉得好高端。
谢谢小编
肯定可以检测的,12.5ns周期去测量1us,没有任何问题
