FPGA|CPLD|ASICwilliam hill官网
直播中

x282718048

9年用户 20经验值
擅长:电源/新能源 光电显示 EDA/IC设计 控制/MCU RF/无线
私信 关注
[问答]

输入输出同步问题

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

请问william hill官网 里的各位大神,用altera三代的 FPGA利用输入脉冲信号的上升沿触发产生一个同步输出脉冲时,输出信号的上升沿相对输入上升沿来说有一个周期的抖动,请问这是怎么产生的,该怎么解决?输出信号频率大概100-200M,万分感激!!!

    ns_delay.v (2016-10-9 09:21 上传)

    2.24 KB, 下载次数: 41

    Verilog

回帖(19)

lfjd05

2016-9-30 11:56:42
你的问题是在RTL仿真发现的,还是时序仿真发现的,还是上板子测试发现的?不同阶段不用原因。代码最好也贴出来
举报

刘磊

2016-9-30 12:22:57
加一个触发器,不用同一个信号,前一个信号只做触发用
举报

KYE_CQS

2016-9-30 13:07:02
不是很清楚,用的非常的少。不好意思。
举报

x282718048

2016-9-30 15:30:02
引用: lfjd05 发表于 2016-9-30 11:56
你的问题是在RTL仿真发现的,还是时序仿真发现的,还是上板子测试发现的?不同阶段不用原因。代码最好也贴出来

我是自己已经做出来的板子测试出来发现这种情况,基本功能是外部给定一个触发信号,同步输出一个可调脉宽信号,只是这个输出信号与输入信号有一个周期的抖动,谢谢!
举报

x282718048

2016-9-30 15:36:19
引用: liulei1111 发表于 2016-9-30 12:22
加一个触发器,不用同一个信号,前一个信号只做触发用

这位朋友,谢谢你的回答,不过没太明白,我是用Verilog语言写的,思路是先检测到上升沿,并给一个寄存器赋值1,根据赋值为1的寄存器输出一个可调脉宽信号。实际测出来输出前言抖动。
举报

lfjd05

2016-9-30 16:15:23
引用: x282718048 发表于 2016-9-30 15:30
我是自己已经做出来的板子测试出来发现这种情况,基本功能是外部给定一个触发信号,同步输出一个可调脉宽信号,只是这个输出信号与输入信号有一个周期的抖动,谢谢!

Gate-level仿真中出现这个抖动了吗,把波形图发上来看看
举报

王栋春

2016-9-30 21:00:00
引用: lfjd05 发表于 2016-9-30 11:56
你的问题是在RTL仿真发现的,还是时序仿真发现的,还是上板子测试发现的?不同阶段不用原因。代码最好也贴出来

坛友能分别给出解决方法吗
举报

lfjd05

2016-10-2 08:59:13
引用: 王栋春 发表于 2016-9-30 21:00
坛友能分别给出解决方法吗

刚懂个皮毛,一点愚见。RTL级仿真有问题,妥妥的代码问题,不管是verilog还是vhdl写的,行为级仿真只仿真硬件描述语言的功能。时序仿真里面考虑了实际器件的各种延时,出问题的话可能是器件延迟的问题,需要做一下时序约束,也有可能是代码问题,例如别的逻辑过程都是上升沿触发的,偏偏有个写成了下降沿出发,可能造成平白无故多了一个延时。上板子调试出问题的话,可能是威廉希尔官方网站 画的不对,阻抗匹配不对,或者就是用了个坑爹的示波器。如果只有实际板子调试出问题了,一定有勇气坚信自己代码写的没错啊。
举报

王栋春

2016-10-2 12:31:20
引用: lfjd05 发表于 2016-10-2 08:59
刚懂个皮毛,一点愚见。RTL级仿真有问题,妥妥的代码问题,不管是verilog还是vhdl写的,行为级仿真只仿真硬件描述语言的功能。时序仿真里面考虑了实际器件的各种延时,出问题的话可能是器件延迟的问题,需要做一下时序约束,也有可能是代码问题,例如别的逻辑过程都是上升沿触发的,偏偏有个写成了下降沿出发,可能造成平 ...

不错的见解  学习了
举报

FPGA_wuhan

2016-10-3 15:10:59
新手过来取取经,看看
举报

x282718048

2016-10-9 09:24:08
引用: lfjd05 发表于 2016-10-2 08:59
刚懂个皮毛,一点愚见。RTL级仿真有问题,妥妥的代码问题,不管是verilog还是vhdl写的,行为级仿真只仿真硬件描述语言的功能。时序仿真里面考虑了实际器件的各种延时,出问题的话可能是器件延迟的问题,需要做一下时序约束,也有可能是代码问题,例如别的逻辑过程都是上升沿触发的,偏偏有个写成了下降沿出发,可能造成平 ...

大神,我实在找不出原因了,把代码贴出来,麻烦帮忙看下,万分感激!
举报

x282718048

2016-10-9 09:25:44
引用: 王栋春 发表于 2016-10-2 12:31
不错的见解  学习了

大神,我把代码贴出来了,也麻烦你帮忙看下,谢谢!
举报

lfjd05

2016-10-9 14:22:59
本帖最后由 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上升沿时才给输出赋值
举报

x282718048

2016-10-9 15:13:57
引用: lfjd05 发表于 2016-10-9 14:22
跑了一下你的代码,在低速情况下没有你说的问题,接近100MHz的时候RTL仿真出现了,毛刺(位于右下角,最后一条波形)
不知道这是不是楼主发现的问题。
怀疑问题出现在这段代码里,

你好,首先非常谢谢你的建议;我板子的时钟频率是200M的,频率比较高,你仿真出现的毛刺在我实际板子上没有出现,现在出现的问题是:从示波器(4G带宽)上看输出周期信号的前沿相对输入周期信号的前沿有一个周期的抖动,比如说这个周期输入输出上升沿相隔10ns,下一个周期可能是10-15个ns,从示波器上看输入输出前沿相对抖动,也就是有10个ns的固定延时(这是信号延时和寄存器存储引起的),另加5个ns的不固定延时(我所说的一个周期抖动)。麻烦帮忙想下这是怎么产生的?该怎么解决。谢谢你!
举报

lfjd05

2016-10-9 17:44:35
引用: x282718048 发表于 2016-10-9 15:13
你好,首先非常谢谢你的建议;我板子的时钟频率是200M的,频率比较高,你仿真出现的毛刺在我实际板子上没有出现,现在出现的问题是:从示波器(4G带宽)上看输出周期信号的前沿相对输入周期信号的前沿有一个周期的抖动,比如说这个周期输入输出上升沿相隔10ns,下一个周期可能是10-15个ns,从示波器上看输入输出前沿相对 ...

哦,我实验室没有示波器能采那么快速度的波形没法给你实测。建议你现在Gate-level仿真里看看有没有这个问题。如果没有说明是硬件威廉希尔官方网站 问题。毕竟就5ns,哪个环节瑕疵都有可能啊
举报

王栋春

2016-10-9 20:15:17
引用: x282718048 发表于 2016-10-9 09:25
大神,我把代码贴出来了,也麻烦你帮忙看下,谢谢!

这个我也不太懂  这个你还是参考14楼坛友的意见吧
举报

x282718048

2016-10-10 18:36:51
引用: lfjd05 发表于 2016-10-9 17:44
哦,我实验室没有示波器能采那么快速度的波形没法给你实测。建议你现在Gate-level仿真里看看有没有这个问题。如果没有说明是硬件威廉希尔官方网站 问题。毕竟就5ns,哪个环节瑕疵都有可能啊

你好,其实200M的示波器也是可以看出来的!哎!这问题整了好长时间了,头都大了,
硬件应该没问题吧,我用自己时钟产生两路可调延时和脉宽的信号没有一点问题,同步精度也在1ns以内的。
举报

x282718048

2016-10-10 18:37:31
引用: 王栋春 发表于 2016-10-9 20:15
这个我也不太懂  这个你还是参考14楼坛友的意见吧

嗯,还是非常感谢你的!
举报

王栋春

2016-10-10 20:07:56
引用: x282718048 发表于 2016-10-10 18:37
嗯,还是非常感谢你的!

不客气   不知解决问题了吗
举报

更多回帖

发帖
×
20
完善资料,
赚取积分