输入输出同步问题

2019-07-15 22:22发布

本帖最后由 x282718048 于 2016-10-9 09:21 编辑

请问论坛里的各位大神,用altera三代的 FPGA利用输入脉冲信号的上升沿触发产生一个同步输出脉冲时,输出信号的上升沿相对输入上升沿来说有一个周期的抖动,请问这是怎么产生的,该怎么解决?输出信号频率大概100-200M,万分感激!!!
ns_delay.v 下载积分: 积分 -1 分
2.24 KB, 下载次数: 10, 下载积分: 积分 -1 分 Verilog
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
19条回答
lfjd05
2019-07-17 17:25
本帖最后由 lfjd05 于 2016-10-9 14:24 编辑
x282718048 发表于 2016-10-9 09:25
大神,我把代码贴出来了,也麻烦你帮忙看下,谢谢!

跑了一下你的代码,在低速情况下没有你说的问题,接近100MHz的时候RTL仿真出现了,毛刺(位于右下角,最后一条波形) 捕获.JPG
不知道这是不是楼主发现的问题。
怀疑问题出现在这段代码里,
        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上升沿时才给输出赋值

一周热门 更多>