本帖最后由 x282718048 于 2016-10-9 09:21 编辑
请问论坛里的各位大神,用altera三代的 FPGA利用输入脉冲信号的上升沿触发产生一个同步输出脉冲时,输出信号的上升沿相对输入上升沿来说有一个周期的抖动,请问这是怎么产生的,该怎么解决?输出信号频率大概100-200M,万分感激!!!
-
-
ns_delay.v
下载积分: 积分 -1 分
2.24 KB, 下载次数: 10, 下载积分: 积分 -1 分
Verilog
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
跑了一下你的代码,在低速情况下没有你说的问题,接近100MHz的时候RTL仿真出现了,毛刺(位于右下角,最后一条波形)
不知道这是不是楼主发现的问题。
怀疑问题出现在这段代码里,
always @(posedge clk, negedge reset_n)
begin
if(!reset_n)
begin
delay_counter <= 32'b0;
width_counter <= 32'b0;
trigger_out <= 1'b0;
set_out <= 1'b0;
end
else
begin
if(upclk)
begin
if((set_delay_length == 0) || (delay_counter == set_delay_length))
begin
set_out = 1'b1;
delay_counter = 0;
end
else
delay_counter <= delay_counter + 1'b1;
end
else
begin
if((delay_counter > 0) && (delay_counter < set_delay_length))
delay_counter <= delay_counter + 1'b1;
else if((set_delay_length != 0) && (delay_counter == set_delay_length))
begin
set_out = 1'b1;
delay_counter = 0;
end
else
trigger_out = 1'b0;
end
if(set_out)
begin
if(width_counter == set_pulse_width)
begin
width_counter <= 32'b0;
delay_counter <= 32'b0;
trigger_out <= 1'b0;
set_out <= 1'b0;
end
else
begin
width_counter <= width_counter + 1'b1;
trigger_out <= 1'b1;
end
end
else
trigger_out <= 1'b0;
end
end
组合逻辑过多,速度快的时候由于逻辑电平实际有先后顺序,不是同时到达的,所以波形出现了短暂的跳变。
修改的话,找到组合逻辑比较复杂的地方,加入上升沿判断,只有逻辑满足要求且收到一个clk上升沿时才给输出赋值
你好,首先非常谢谢你的建议;我板子的时钟频率是200M的,频率比较高,你仿真出现的毛刺在我实际板子上没有出现,现在出现的问题是:从示波器(4G带宽)上看输出周期信号的前沿相对输入周期信号的前沿有一个周期的抖动,比如说这个周期输入输出上升沿相隔10ns,下一个周期可能是10-15个ns,从示波器上看输入输出前沿相对抖动,也就是有10个ns的固定延时(这是信号延时和寄存器存储引起的),另加5个ns的不固定延时(我所说的一个周期抖动)。麻烦帮忙想下这是怎么产生的?该怎么解决。谢谢你!
哦,我实验室没有示波器能采那么快速度的波形没法给你实测。建议你现在Gate-level仿真里看看有没有这个问题。如果没有说明是硬件电路问题。毕竟就5ns,哪个环节瑕疵都有可能啊
这个我也不太懂 这个你还是参考14楼坛友的意见吧
嗯,还是非常感谢你的!
一周热门 更多>