原创 提高代码健壮性

2010-5-19 20:57 4995 7 12 分类: FPGA/CPLD

提高代码健壮性


         早期在写代码的时候,常常过分的追求速度和资源,却往往无法顾及到代码的稳定和可靠(即所谓的健壮性)。先拿下面这个简单的计数器代码说事。


reg[9:0] x_cnt; //x坐标计数器<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 


always @(posedge clk or negedge rst_n)


    if(!rst_n) x_cnt <= 10'd0;


    else begin


        if(x_cnt == 10'd799) x_cnt <= 9'd0;


        else x_cnt <= x_cnt+1'b1; 


    end


         咋看一下,似乎代码很OK,没太有问题,一般来说,基本上是。如果要钻牛角尖挑刺,那么也很容易:如果x_cnt > 10’d799,是不是这个计数器x_cnt就罢工了?当然。这也许就是问题所在。但是话说回来,这个代码正常运行在常规复位或稳定环境中出问题的概率也是微乎其微(时序未收敛的情况另当别论)。只不过有那么一些极端的情况,比如,异步复位信号来了个毛刺,也就是概率小得可怜的让rst_n违反removalrecovery时序的事件出现了,这时候就可能出现本段开始所说的问题,那么x_cnt就罢工了,指不定系统就崩溃了。


         所以,要让这个代码更健壮一些,改进代码势在必行。


reg[9:0] x_cnt; //x坐标计数器


 


always @(posedge clk or negedge rst_n)


    if(!rst_n) x_cnt <= 10'd0;


    else begin


        if(x_cnt >= 10'd799) x_cnt <= 9'd0;


        else x_cnt <= x_cnt+1'b1; 


    end


 


         话说回来,特权指出这个问题并非空穴来风——乃是事出有因。解决了闪屏的AV图像这回犯上了一个新毛病(也许之前就有,只是注意力不在它):一开始运行时液晶都是实时的随摄像头而动,但是运行到某个时刻(一般是几分钟后)忽然定住了,图像不再变化。量量解码芯片的输出,时钟\同步信号都正常,排除硬件故障;那么问题肯定在FPGA本身,内部的时序是收敛的,IO接口上的VCLKDB[7:0]时序也收敛,只不过这上面还可能存一些不可预知的问题,那么问题定位到了外部数据接口的采集,尤其是视频帧的帧头检测上(这里有一个状态机,初步估计是它死了,那么问题就归结到代码的健壮性上)。于是,仔细搜寻,问题锁定在和开篇提出的代码类似的计数器上,做了一点修改,其后上电验证几个小时问题不再复现。


         VCLKDB[7:0]锁存数据目前似乎不能完全做到无误码,只不过像上面的问题即便帧检测不完全准确,但却是在人眼所能够觉察的范围之外。尤其在这种环境中,代码的健壮性将会得到体现。但是话说回来,下一版需要采取一些硬件上的措施,以提高这个接口的可靠性。


 


 

文章评论5条评论)

登录后参与讨论

用户440847 2015-10-23 17:35

初学者的福利

用户1711475 2015-5-14 10:15

写的不错,值得一读。

用户1775009 2015-5-11 20:14

谢谢特权

395354912_796243290 2015-5-9 19:51

特权大哥您好,我想问您两个问题:1. 究竟什么情况下,我们需要对存储器的地址线,数据线分别作等长处理? 2.一根导线蛇形布线时该如何设置它自己内部线线之间的距离?也就是同一根线线线之间的距离多少时不会引起信号传输受影响方面的问题?希望您能较详细的解答,谢谢!!

用户575829 2010-12-6 16:27

学习!夯实基础!

ilove314_323192455 2010-6-12 11:19

TimeQuest是无法直接使用现有数据分析IO接口时序,但是人可以分析,可以提出IO口约束参数交给TimeQuest分析啊。目前也发现之前的板子闪屏和电源纹波过大有一定关系,改版后由于电源部分也做了一些改进,已经不会出现这个问题了

用户972891 2010-6-11 09:30

建议仔细分析下“IO接口上的VCLK和DB[7:0]”之间的通路延时(PCB板+FPGA内部通路所有延时),防止一定概率的建立/保持时间不满足 不要忽略一点,FPGA无法分析外部的条件的;而且,个人认为,时序分析OK也只是说明了概率问题

ilove314_323192455 2010-5-22 22:52

正常仿真的时候都是没有问题的,而且最终出现状况并不是有规律的,是有一定突发性的,所以我只能推断是误码存在

用户1492539 2010-5-22 15:26

觉得是不是与这个计数器配合的电路有问题?就像博主说的当x_cnt > 10’d799时,计数器是可以继续跑的,直到0,再循环,也就是说这个计数器可以恢复,而与之配合的的那部分电路却没有恢复,所以博主还要看那部分电路是否够健壮。
相关推荐阅读
特权ilove314 2016-06-30 21:16
例说FPGA连载6:FPGA开发所需的技能
例说FPGA连载6:FPGA开发所需的技能 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   前面的文字已经做了很多铺垫,相信读...
特权ilove314 2016-06-28 21:09
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-28 21:05
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-26 22:11
例说FPGA连载4:FPGA语言与厂商介绍
例说FPGA连载4:FPGA语言与厂商介绍 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   Verilog与VHDL 说到FP...
特权ilove314 2016-06-23 21:26
例说FPGA连载3:FPGA与其它主流芯片的比较
例说FPGA连载3:FPGA与其它主流芯片的比较 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   FPGA、ASIC和ASSP...
特权ilove314 2016-06-21 20:32
例说FPGA连载2:FPGA是什么
例说FPGA连载2:FPGA是什么 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   2015年伊始,Intel欲出资百亿美金收...
我要评论
5
7
关闭 站长推荐上一条 /2 下一条