时序分析,重中之重,柳暗花明又一村 搞定美女了
0赞问题:
AET:http://blog.chinaaet.com/detail/14402.html
AET:http://blog.chinaaet.com/detail/14472.html
经过了无数个无眠的夜晚,问题终于解决了。。。柳暗花明又一村。。。
经过了n个网友的帮助:狼来了、最后的红旗手、达克斯特、Neddy、七哥、牙缝、湘雨潇潇等人的人心帮助下,以及万般努力的情况下终于解决了。。。
现在我把我的问题,把我的bug,把我的经历,都告诉你们
首先,有几个必须要了解的知识,这些都是我个人转载整理归纳总结的:
(1)影响FPGA设计中时钟因素的探讨:http://blog.chinaaet.com/detail/14626.html
(2)门控时钟与多扇出问题解决方案:http://blog.chinaaet.com/detail/14564.html
(3)FPGA你必须知道的那些事儿:http://blog.chinaaet.com/detail/14651.html
(4)全局时钟--复位设计:http://blog.chinaaet.com/detail/14471.html
接下来就剩下我的心里话了:
最重要的一句话是:“重大的失败,往往是因为微小的细节”,细节决定成败。
其次,学会FPGA真的挺简单的,相信给你一个月时间你要不能驱动VGA那可能智商不够吧,但是要想学好,没那么容易,往往因为细节,让你的东西永远不完美
最后,完美是没有极限的。。。
解释一下我的项目当时显示的美女出现边沿闪电的原因:
(1)时序约束,时钟优化,
(2)时序建立时间,保持时间的把握
(3)时序逻辑,组合逻辑传输延时
(4)最可怕的 时钟在寄存器之间的传输延时
(5)时序逻辑的信号滞后,超前
(6)跨时钟域信号传输,同步处理
(7)门控时钟,始终满天飞,(用最高时钟控制一切)
部分原因还是结合代码跟你们解释吧:
(1)输入时钟是CLOCK,CLOCK2 是50MHz的,经过综合器设置适当的时钟约束(105%)可以将相关的逻辑在布线时尽量布的靠近一点,从而减少走线的时延
(2)always@(posedge MCU_CLK or negedge RST_n)
MCU_CLK是CPU 的写时钟,没一个时钟的上升沿,verilog读取数据写入SRAM,在表上看着完全没有问题。
实际上,当然在写数据上没问题,但因为用的不是全局时钟,是门控时钟,会影响组合逻辑Tdelay,
我尝试了n遍,最后换成了使能时钟,跨时钟域信号同步处理(CPU 20Mhz,verilog 65MHz)reg同步时钟,写入SRAM,这样会更加的稳定,数据没有缺失
(3)always @ (negedge VGA_HS or negedge RST_n)
VGA驱动的地方,本来VS是在HS的上升沿变化的,为了达到的数据的稳定变化(排除异常),我用HS_CLK最为跳变时钟,自我感觉良好
但实际上在65MHz 1024*768的吞吐率下,虽然VS本身的确没有任何问题,但是由于门控时钟的介入,使布线不稳定,重者造成设计混乱。门控时中较多,也会使得整个设计的最大工作速度下降,降低产品的性能。
因此因为这一步的出错,使得整个系统性能大大下降,数据出现了不稳定甚至亚稳态,数据不能够在保持时间内传输,以至于出现边缘闪电(变化快)
最后我还是通过判断hcnt写成了使能时钟(问题解决)
(4)位置有点点点点不正常,盯着他才能看出来,我在我的ColorTest观察过,实际上是因为时序逻辑,组合逻辑的问题
类似if( (hcnt >= H_DISP+H_FRONT) && (hcnt < H_DISP+H_FRONT+H_SYNC) )的地方,实际上你在时序逻辑判断时钟给一个信号赋值,但经过建立时间,组合延时,保持时间之后,已经是下一个clk了,数据的出现实际滞后了一个 clk,所以要保证时序的绝对准确,要把条件减小1,这样因为超前+滞后 刚刚满足了时序
就在要回寝室的那一刻,我看到了亲爱的美女,完全不在有色差 ,开心,一切尽在时序中。。。
突然想起暑假的时候师父跟我说过:“为了系统的稳定以及高速时钟干扰,整个系统要用最高时钟控制,不能用门控时钟,只能用使能时钟”,NND问题就出在这里
经过了冰山火海,终于解决了,我提醒我自己,回去再好好研究FPGA的时序分析,研究时序约束,研究时域分析,研究异常问题,研究系统稳定性能问题。。。。
要做出一个东西简单,要做好一个东西真的没那么容易。。。。。
明天把图片放上来。。。。。
谢谢大家的关心。。。 时序分析,你完蛋了。。。
继续。。。。走一步 ,再走一步,。。。