整洁代码避免混乱轻松设计整洁代码,整洁代码避免混乱

代码 3
轻松设计整洁代码代码整洁之道干净的代码是程序员的核心技能如何避免代码混乱用好的代码实现0仿真0调试(注:所有标题中可切入FPGA这个关键词)在正式开始之前,我们先看看一位FPGA工程师的工作日常:开始设计代码开始写第一个always代码发现要增加一个信号,因此写第二个always,设计这个新增的信号回到第一个always上,继续完善这个代码开始写第三个always代码感觉第一个always有情况没考虑到一阵重新思考回去修改第一个always的代码写完后,得了,不检查代码了,仿真再说吧。
仿真过程:每个时钟上升沿一个一个检查发现这时某信号没有变高检查代码,把BUG补上 继续检查波形,继续补BUG发现信号A和B时序对不齐思考是打补丁呢还是打补丁呢是改这个信号呢,还是改那个信号,还是加一个信号一番折腾后,终于对齐了修改测试文件,再测试还是有BUG,继续打补丁 该上板调试了系统跑一会没问题,长时间跑就出BUG用调试工具各种分析各种定位一番折腾后,终于找到BUG一个corner没想到/粗心大意漏了个条件/早知道,要没这BUG,我早就做完了 又出现BUG了,又要来折腾啦。
这个场景是不是觉得很熟悉?还有下面这些情形也许都遇到过:一个项目看上去很简单,精心设置了架构,结果越做发现冲突越多,直到整个逻辑完全混乱。
本来一天可以的完成的事不知道怎么搞的一个星期还没有完成;本来只需要做一行更改,结果却涉及到N个模块;出现了一个非常小的BUG打了一个补丁,然后补丁越来越多,到最后 无法解决。
诸如此类等等情况不一而足,究其原因,总离不开“混乱” 两个字。
这些混乱的根源是什么?又该如何解决呢? 一个好的FPGA项目的设计作品,不仅依赖于架构设计,优秀的 代码也是必不可少的关键因素。
而好的代码最基本的就是清晰整洁。
整洁的代码运行稳定,也是后期维护和升级的基础。
正如C++语言发 明者BjarneStroustrup说的那样:“代码逻辑应当直截了当,叫缺 陷难以隐藏;尽量减少依赖关系,使之便于维护;依据某种分层战略 完善错误处理代码;性能调至最优,避免其他人优化时不知所措从而 出现混乱状态。
整洁的代码只做好一件事。
” 这段话说得实在太好了,整洁的代码只去做好一件事。
事实上, 有两点只要做到了,就可以大大提高自己代码的整洁度。

一、写简 单的代码;第
二、把复杂的代码简单化。
下面我们通过一个小的实例 来说明一下。
我们先来看这样一组代码: 1always@(posedgeclkornegedgerst_n)begin
2 if(rst_n==1'b0)begin
3 shi_ge<=0;
4 end
5 elseif(((set_flag==1'b1&&set_sel==4)&&(key_vld==1&&key_num== 4'b0010))||shi_ge_add)begin
6 if(shi_shi==2&&shi_ge==3)begin
7 shi_ge<=0;
8 end
9 elseif((shi_shi==0||shi_shi==1)&&shi_ge==9)begin 10 shi_ge<=0; 11 end 12 elsebegin 13 shi_ge<=shi_ge+1; 14 end 15 end 16end 这个程序时一个数字时钟功能的其中一份关于小时个位的代码。
小时个位复位等于0(第3行代码);设置的语句(第5行代码),意 思是当你选中小时的个位并且按键按下去,小时个位+
1,或者说正常 情况下一个小时+
1。
这里需要注意的是:首先小时的计数方式在0: 00——9:00,10:00——19:00,20:00——23:00情况下+1;另 外几个时间点清零。
我们来分析一下,在这份代码的设计中需要考虑到很多因素。

一、需要考虑按键;第
二、按下去时与正常计数的关系;第
三、需要 数多少次清零,比如说9点、19点、23点清零;当很多因素混在
起去考虑,特别是格式没有被规范的时候,就容易出现混乱、遗漏点 或是相互之间出现冲突,出错的可能性随之变大。
接下来我们来看另外一组代码的思路和操作。
首先,我们建立一个通用的计数器模板,命名为jsq。
每次遇到 计数器,只需要输入JSq,即可调入该模板。
(注:关于模板的设置 以后章节介绍) 1always@(posedgeclkornegedgerst_n)begin
2 if(!
rst_n)begin
3 cnt<=0;
4 end
5 elseif(t)begin
6 if(t)
7 cnt<=0;
8 else
9 cnt<=t+1; 10 end 11end 12 13assignt=; 14assignt=t&&t==; 接下来设置什么时候个位+
1,分为两种情况:
1、按键按下去;
2、 自然计数+1;(第13行) 采用变量法设置X-1;即先不用去管数多少下,反正数完就清零; (第14行) 最后我们设置数多少下。
20:00时数4下;其它时候数10下;(16~21 行) 1always@(posedgeclkornegedgerst_n)begin
2 if(!
rst_n)begin
3 cnt<=0;
4 end
5 elseif(t)begin
6 if(t)
7 cnt<=0;
8 else
9 cnt<=t+1; 10 end 11end 12 13assignt=((set_flag==1'b1&&set_sel==4)&&(key_vld==1&&key_num== 4'b0010))||shi_ge_add; 14assignt=t&&t==x-1; 15 16always@(*)begin 17 if(shi_s==2) 18 x=4; 19 else 20 x=10; 21end 现在我们来回顾一下这段代码,从中不难发现,设计的总体思路有着严密的逻辑和步骤,并采取了便捷工具(模板)来规范了代码编写,减少了设计量。
最重要的是设计者的意图清晰了然,控制语句直截了当,代码之间相互依赖性非常低,作者之外的开发者阅读和增补非常轻松。
这一节我们讲到了代码混乱的根源及解决这个问题的技巧,下
节我们要讲到的是简单代码规则的技巧。
系统的学习FPGA可联系Q1241003385微信 培训班以阶段性项目训练为主,老师辅导学习形式。
应用中学会fpga设计;培训分为三个阶段:学习计数器、状态机、软件、调试技巧等FPGA基础知识目标:掌握明德扬至简设计法的思维和技巧、掌握fpga基本应用。
达到给出功能做出设计的目标学员独立完成至少5个大项目。
目标:深刻掌握fpga应用,了解一个完整的fpga开发流程拿到项目经验,成为简历亮点。
所有学员个性化的项目交流都在这阶段: 在职人士:提供fpga项目指导在校学生:提供fpga毕设指导

标签: #文件 #文件 #引线 #中文 #直径 #文件 #文件 #空间