新闻  |   论坛  |   博客  |   在线研讨会
FPGA至简设计法为什么这么简单
十年一刻 | 2017-12-18 16:52:12    阅读:552   发布文章

由潘文明先生开创的IC/FPGA至简设计法,具备划时代的意义。这种设计方法不仅将IC/FPGA学习难度降到了最低,同时将设计过程变得简单,并规范了代码避免了混乱,将出错几率降到最低。下面我们来看看是如何实现的吧。


一、 知识点集中化。(实例实证28原则)
二、 填空式的设计过程。


通常,我们通过敲代码实现程序功能类似于记流水账,一行一行一页一页的向下写。在这个过程中,难免遇到设计无思路、代码冗长重复、逻辑关系不明确、代码之间出现冲突等等现象。
明德扬至简设计法,提取大量的实际项目,采用科学的手段统计分析,找出其内在通用性部分,并建立相关的体系,实现了“填空式”设计!首先,把复杂的代码划分成几种类型的模块,然后以统一规范的代码格式,通过相应的脚本语言建立可调用的通用模板。不仅如此,通过模板生成的代码可参数化定制,一旦生成无需修改。下面我们先以非常常用的计数器模板为例演示一下。
我们知道,计数器是FPGA实现时序的基本单元,时钟分频要计数,串并转换要计数,乒乓操作要计数。明德扬即建立了下面这么一个模板:

FPGA至简设计法为什么这么简单 - mingdeyangkejiao - 明德扬科教

 

当工程师需要用到计数器时,只需要打开GVIM,在命令模式下输入 :Mdyjsq回车,便出现了这么一个计数器的标准模板。
接下来设计师所需要做的,仅是在( )里填上内容,计数器设计便完成了。
该模板还设有自动命名功能,第一次输入:Mdyjsq默认名为cnt0,第二次则为cnt1,第三次为cnt2,依此类推。如果原代码中已经有cnt0,则会自动从cnt1开始。从而完全避免了命名重复产生冲突的现象。
如此卓越的设计方法,当然也支持个性化命名服务。比如你想将计数器的名称设置为time_cnt,只需要在命令模式下输入:call MDYJSQ(“time_cnt”) 回车。生成的模板如下:

FPGA至简设计法为什么这么简单 - mingdeyangkejiao - 明德扬科教

 

学过至简设计法的同学都知道,计数器主要是想好“加1条件”和“数多少个”。我们在调用模板时,可以直接赋上条件,这样代码就完成生成了。如输入命令 :call MDYJSQ(“time_cnt”,”flag_add”,10)回车,模板如下:

FPGA至简设计法为什么这么简单 - mingdeyangkejiao - 明德扬科教

 

使用至简设计法,即可省略掉常规设计中的繁复思考过程。比如计数器的设计,只需要填入设置条件“什么情况下加一”和“数多少下”。
在调用模板时,直接赋上条件,这样代码就完成生成了。如输入命令 :call MDYJSQ(“time_cnt”,”flag_add”,10)回车,即形成如下模板:

FPGA至简设计法为什么这么简单 - mingdeyangkejiao - 明德扬科教

 

三、 四段式状态机。
复杂的时序操作均需用到状态机与计数器配合实现。目前通用的做法式采用三段式状态机。(缺陷)而至简设计法使用的是四段式状态机,(四段状态机是哪四段)。采用该状态机,不仅让设计变得更加简单,程序运行也非常稳健,出错几率大大降低。
例如设计一个状态机,其状态转移图如下图所示:

FPGA至简设计法为什么这么简单 - mingdeyangkejiao - 明德扬科教



在明德扬至简设计法中直接使用模板,在命令模式下输入命令
:callMDYZTJ(3,”IDLE”,”S1”,”S2”,12,23,31)回车,即得到如下图的结果:

FPGA至简设计法为什么这么简单 - mingdeyangkejiao - 明德扬科教

(结果解释。)


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客