找回密码
 注册
关于网站域名变更的通知
查看: 380|回复: 1
打印 上一主题 下一主题

转——FPGA设计进阶技巧(一)-FPGA帧率采样计算 

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-25 08:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
FPGA设计进阶技巧(一)-FPGA帧率采样计算

. _$ m5 W$ n# t4 M& q; }" w  t, g* z0 T0 j7 N; `
   对于IT相关从业人员来说,看别人代码是必不可少的磨难。在学习阶段,我们经常需要从书上看别人的代码以吸取宝贵经验,这是相当枯燥无趣的过程,也时常无法领会作者的意图。在实际工作中,不可避免的出现需要接手做到一半的项目或是团队合作的项目,这时候就必须看以前的工程师的代码。如果说看书上的代码用痛苦来形容的话,那么这种情况时遇到代码不够规范或者设计不合理,简直就是苦不堪言。还有一些神一般的选手,设计者在编写代码时的“灵机一动”,其结果只有他自己和上帝才看得懂。这些代码能看得你觉得生不如死,甚至开始怀疑人生:到底是代码写得混乱or我水平不行?!你以为这是最痛苦的吗?NO!还有一种情况足以令你看得生不如死,甚至开始怀疑人生。那就是遇到运行不正常的代码,对问题排查错误花的时间和精力还不如重新写一遍,这时你的内心完全是崩溃的!
    有一件事非常无奈,我们不可能要求别人的代码都非常规范。所以,正确的学习方法和思维方式尤为重要。怎样看他人代码才是正确的方式?看代码之前应该做些什么准备工作?看代码用正向思维还是逆向思维?如何判断代码中哪些地方是否值得借鉴?由此,掌握到一种通用的去看懂别人代码的技巧显得非常重要。下面我们就来谈谈这方面。
    我们知道,实现功能可能有很多种方法,所以不同的人写出的代码不相同。通过看代码去知道它要实现的是什么功能是一件很困难的事情。有些初学者会想到采取仿真一下、看电路图、流程图、时序图、注释等等方法,都是不可取的,通过这些你还是无法知道它的功能,以及有没有错误。
    那么正确的方法是什么呢?我们采取一种可称之为“反推法”或是“逆向法”的方式,这个问题就迎刃而解了。要知道,代码的目的是实现功能。无论你用那种代码,有一点完全相同的就是“实现功能”这个最终结果。了解到这一点,我们就可以通过结果(功能)去反推过程(代码),代码的思路、流程、用途就抽丝剥茧清晰的显露出来。好的,下面我们举个实例来说明怎么通过反推法有步骤的去看懂别人的代码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//-------------------------------------------
//帧率采样计算
reg                        fps_state;
reg        [7:0]        fps_data;
always@(posedge iCLK or negedge iRST_N)
begin
        if(!iRST_N)
                begin
                fps_data <= 0;
                fps_state <= 0;
                CMOS_FPS_DATA <= 0;
                end
        else if(Frame_valid)
                begin
                case(fps_state)
                0:        begin
                        CMOS_FPS_DATA <= CMOS_FPS_DATA;
                        if(delay_2s == 0)
                                begin
                                fps_state <= 0;
                                if(CMOS_VSYNC_over == 1'b1)        //VS上升沿,1帧写入完毕
                                        fps_data <= fps_data + 1'b1;
                                end
                        else
                                fps_state <= 1;
                        end
                1:        begin
                        fps_state <= 0;
                        fps_data <= 0;
                        CMOS_FPS_DATA <= fps_data >>1;
                        end
                endcase
                end
        else
                begin
                fps_data <= 0;
                fps_state <= 0;
                CMOS_FPS_DATA <= 0;
                end
end
endmodule
详细分析见附件
: x% E' ?0 n% t7 ]
游客,如果您要查看本帖隐藏内容请回复

) C1 q; q1 _0 r! P' U) y

该用户从未签到

2#
发表于 2019-3-25 16:05 | 只看该作者
回复看看是什么东东
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-29 01:03 , Processed in 0.140625 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表