FPGA逻辑设计系列文章☞模块划分

      1.   FPGA是自顶向下的设计模式,开始写代码时第一项面临的就是模块划分。模块划分说容易就容易,说难就难,根据工程师的码龄,可以分为下列几种情况:

     第一阶段:有啥好分的,就一个.v文件看着多方便;

     第二阶段:代码写的有点多啊,尝试着分一下;

     第三阶段:动手前,先想怎样划分:按A情况的划分,接口端子数量太多啊

     第四阶段:这个功能需要复用,单独写个.v

     第五阶段:这样分怎么样,客户需求变了的话,也好改

     第六阶段:这是最好的划分方法了,不能追求太完美

     ......

      总的来说,模块划分的意思在于,将复杂的功能一一分解开来,是设计思路的一种体现,模块划分的好,后期维护或者代码留用都比较方便。一旦划分成单独的模块,就可以将每个模块分配给不同的工程师来做,当然这是大公司的策略。大部分的情况还是一个人负责一个项目的,或者负责一块FPGA的。

        2. 模块划分的依据

       首先按功能和所处的位置进行划分:比如输入接口模块、输出接口模块、内部处理模块、及必要的时钟和复位控制模块。每个接口模块根据协议的复杂程度考虑是否进行细分。

       其次模块间端口数量尽量不要太多,数据线除外。太多的话,一是写起来麻烦,浪费时间,容易出错;二是后期维护也不方便。实在不行的话,就将同功能的端口进行编码合并,增加单个信号的位宽。

       再次,多个地方需要用到的功能要单独划分成模块。这样的好处是可以直接调用,也可以为后面的项目进行留用,有了问题只更改这一个模块即可。

       最后模块划分并不是画几个框图而已,尤其是初学的时候要注意,一定要将各模块的端口名列出来。当你很清楚的列出端口名时,这个项目某种意义上已经做完了。

       3. 模块间数据的处理方式-推拉门

       数据(包括命令)在模块间进行传输时,根据情况有下来几种方式:

      (1)这种情况用于B模块有能力够处理完A模块的数据,此时不需要协商,也是最简单的模式

模块划分数据传输1

      (2)这种情况用于B模块没有持续处理数据的能力,或者在上电后的一段时间内尚未完成初始化,此时A需要看B的状态(ready信号)进行传输数据

模块划分数据传输2

 

    (3)这种情况多半B模块占据着主控位置,在A模块准备好后,B决定何时去取数据

模块划分数据传输3

     (4)多用于数据发送方不止一个情况,B内部需要进行仲裁

模块划分数据传输4

     (5)情况同上,区别在于B主动去读取数据

模块划分数据传输5

 

       整体来看,数据(包括命令)在模块间进行如何传输,某种程度上就是在决定谁是主模块,谁是从模块;主模块既可以主动去读取数据,也可以叫从模块主动发送数据,如同大门一样,既可以推也可以拉。

       4. 最后一点,模块划分的最终归宿往往是如何对信号进行命名,毕竟起个好名字,bug都会少些O(∩_∩)O哈哈~

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值