0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一位FPGA工程师的工作日常

工程师人生 来源:FPGA之家 作者:FPGA之家 2020-11-30 12:03 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在正式开始之前,我们先看看一位FPGA工程师的工作日常:

开始设计代码
开始写第一个always代码
发现要增加一个信号,因此写第二个always,设计这个新增的信号
回到第一个always上,继续完善这个代码
开始写第三个always代码
感觉第一个always有情况没考虑到
一阵重新思考
回去修改第一个always的代码
写完后,得了,不检查代码了,仿真再说吧。

仿真过程
每个时钟上升沿一个一个检查
发现这时某信号没有变高
检查代码,把BUG补上
继续检查波形,继续补BUG
发现信号A和B时序对不齐
思考是打补丁呢还是打补丁呢
是改这个信号呢,还是改那个信号,还是加一个信号
一番折腾后,终于对齐了
修改测试文件,再测试
还是有BUG,继续打补丁

该上板调试了
系统跑一会没问题,长时间跑就出BUG
用调试工具各种分析各种定位
一番折腾后,终于找到BUG
一个corner没想到/粗心大意漏了个条件/
早知道,要没这BUG,我早就做完了

又出现BUG了,又要来折腾啦。

这个场景是不是觉得很熟悉?还有下面这些情形也许都遇到过:一个项目看上去很简单,精心设置了架构,结果越做发现冲突越多,直到整个逻辑完全混乱。本来一天可以的完成的事不知道怎么搞的一个星期还没有完成;本来只需要做一行更改,结果却涉及到N个模块;出现了一个非常小的BUG打了一个补丁,然后补丁越来越多,到最后无法解决。诸如此类等等情况不一而足,究其原因,总离不开“混乱”两个字。这些混乱的根源是什么?又该如何解决呢?

一个好的FPGA项目的设计作品,不仅依赖于架构设计,优秀的代码也是必不可少的关键因素。而好的代码最基本的就是清晰整洁。整洁的代码运行稳定,也是后期维护和升级的基础。正如C++语言发明者Bjarne Stroustrup说的那样:“代码逻辑应当直截了当,叫缺陷难以隐藏;尽量减少依赖关系,使之便于维护;依据某种分层战略完善错误处理代码;性能调至最优,避免其他人优化时不知所措从而出现混乱状态。整洁的代码只做好一件事。”

这段话说得实在太好了,整洁的代码只去做好一件事。事实上,有两点只要做到了,就可以大大提高自己代码的整洁度。第一、写简单的代码;第二、把复杂的代码简单化。下面我们通过一个小的实例来说明一下。我们先来看这样一组代码:

always @(posedge clk or negedge rst_n)begin

if(rst_n==1'b0)begin

shi_ge

end

else if(((set_flag == 1'b1 && set_sel == 4)&& (key_vld == 1 && key_num == 4'b0010)) || shi_ge_add)begin

if(shi_shi ==2 && shi_ge == 3)begin

shi_ge

end

else if((shi_shi == 0 || shi_shi ==1) && shi_ge == 9)begin

shi_ge

end

else begin

shi_ge

end

end

end

这个程序时一个数字时钟功能的其中一份关于小时个位的代码。小时个位复位等于0(第3行代码);设置的语句(第5行代码),意思是当你选中小时的个位并且按键按下去,小时个位+1,或者说正常情况下一个小时+1。这里需要注意的是:首先小时的计数方式在0:00——9:00,10:00——19:00,20:00——23:00情况下+1;另外几个时间点清零。

我们来分析一下,在这份代码的设计中需要考虑到很多因素。第一、需要考虑按键;第二、按下去时与正常计数的关系;第三、需要数多少次清零,比如说9点、19点、23点清零;当很多因素混在一起去考虑,特别是格式没有被规范的时候,就容易出现混乱、遗漏点或是相互之间出现冲突,出错的可能性随之变大。

接下来我们来看另外一组代码的思路和操作。

首先,我们建立一个通用的计数器模板,命名为jsq。每次遇到计数器,只需要输入JSq,即可调入该模板。(注:关于模板的设置以后章节介绍)

always @(posedge clk or negedge rst_n)begin

if(!rst_n)begin

cnt

end

else if(add_cnt)begin

if(end_cnt)

cnt

else

cnt

end

end

assign add_cnt = ;

assign end_cnt = add_cnt && cnt== ;

接下来设置什么时候个位+1,分为两种情况:1、按键按下去;2、自然计数+1;(第13行)

采用变量法设置X-1;即先不用去管数多少下,反正数完就清零;(第14行)

最后我们设置数多少下。20:00时数4下;其它时候数10下;(16~21行)

always @(posedge clk or negedge rst_n)begin

if(!rst_n)begin

cnt

end

else if(add_cnt)begin

if(end_cnt)

cnt

else

cnt

end

end

assign add_cnt =((set_flag == 1'b1 && set_sel == 4)&& (key_vld == 1 && key_num == 4'b0010)) || shi_ge_add ;

assign end_cnt = add_cnt && cnt== x-1 ;

always @(*)begin

if(shi_s == 2)

x = 4 ;

else

x = 10 ;

end

现在我们来回顾一下这段代码,从中不难发现,设计的总体思路有着严密的逻辑和步骤,并采取了便捷工具(模板)来规范了代码编写,减少了设计量。最重要的是设计者的意图清晰了然,控制语句直截了当,代码之间相互依赖性非常低,作者之外的开发者阅读和增补非常轻松。

这一节我们讲到了代码混乱的根源及解决这个问题的技巧,下一节我们要讲到的是简单代码规则的技巧。

编辑:hfy


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1655

    文章

    22283

    浏览量

    630197
  • 工程师
    +关注

    关注

    59

    文章

    1600

    浏览量

    70648
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    这句话用在哪里都合适 #硬件工程师 #电子爱好者 #工作日常 #内容过于真实

    硬件工程师
    扬兴科技
    发布于 :2025年10月17日 18:20:17

    硬件工程师面试必会:10个核心考点#硬件设计 #硬件工程师 #电路设计 #电路设计

    硬件工程师
    安泰小课堂
    发布于 :2025年09月23日 18:00:33

    电子发烧友工程师看!电子领域评职称,技术之路更扎实

    。比如一位电源工程师,评职称前主要做基础电源调试;评上 “高级电源工程师” 后,受邀参与电子发烧友 “电源技术研讨会” 做分享,还接到厂商委托的高功率密度电源开发项目,项目成果被平台推荐为 “年度技术
    发表于 08-20 13:53

    文分享电子工程师年度私藏清单!助你测试效率翻倍!

    对于电子工程师而言,套趁手的实用工具就如同战士的利刃,不仅能让日常的测试工作事半功倍,更能在关键时刻精准捕捉问题、高效解决难题。下面就为大家推荐
    的头像 发表于 07-24 18:38 3623次阅读
    <b class='flag-5'>一</b>文分享电子<b class='flag-5'>工程师</b>年度私藏清单!助你测试效率翻倍!

    做了电子工程师之后,最好拍的视频出现了#硬件设计 #电子DIY #电子工程师

    电子工程师
    安泰小课堂
    发布于 :2025年06月24日 17:45:57

    【华秋DFM】V4.6正式上线:工程师的PCB设计“好搭子”来了!

    款软件,更 是每一位工程师背后的“隐形助手” 。从设计之初的风险排查,到制造阶段的成本控制,再到装配环节的细节优化,我们始终致力于为工程师们提供更专业、更智能、更贴心的服务。 未来,
    发表于 05-22 16:07

    问,成为硬件工程师需要几只手?#硬件工程师 #YXC晶振 #扬兴科技 #搞笑

    硬件工程师
    扬兴科技
    发布于 :2025年04月25日 17:15:37

    硬件工程师:回答我!#回答我 #硬件工程师 #YXC晶振 #扬兴科技

    硬件工程师
    扬兴科技
    发布于 :2025年03月25日 18:46:59

    招拿捏电子工程师#被AI拿捏了 #电子工程师 #电子电工

    电子工程师
    安泰小课堂
    发布于 :2025年03月25日 17:30:51

    一位老电子工程师的十年职场感悟

    这里主要以个人经历谈谈电子工程师技术生涯可能面临的困惑、关心的问题以及对未来的期待。Chrent新手感兴趣的问题1、电子工程师矛盾心态——电子新手新没事做,没人教,工作没有技术含量?电子新手往往
    的头像 发表于 03-19 17:32 708次阅读
    <b class='flag-5'>一位</b>老电子<b class='flag-5'>工程师</b>的十年职场感悟

    硬件工程师工作前VS工作后!抱歉!是我想的太简单了!# #电工 #电子爱好者

    硬件工程师
    MDD辰达半导体
    发布于 :2025年01月08日 18:15:18