本帖最后由 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上升沿时才给输出赋值
一周热门 更多>