看到题目,你可能会略感迷惑,听说过财富自由,设计自由又是什么呢?
初学英语的时候有这样的体会,26个英文字母都认识了,单词也没啥大问题,但只知道些基础语句,不能随心所欲的表达自己的意思。
学FPGA的时候,也有这样的感觉:UART、SPI等一些协议都熟悉了;DDR及FLASH等一些存储器件也都实机用过了;硬件语言verilog及VHDL的语法也都了解了。甚至做过的项目都有十多个,但是总感觉心里不是很踏实:
接下来的项目超出自己的能力范围怎么办?
新的通信协议没有用过,甚至没有听过怎么办?
需要处理的case太多,只会堆ifelse怎么办?
用到的时钟个数多,时钟域之间处理不好怎么办?
时序约束只是懵懂,实机测试不稳定怎么办?
需要用到多张板卡,功能划分没有依据怎么办?
...........................等等
之所以有上述一些困扰,多半是对自己的设计没有信心,不知道自己处于一个怎样的水平。很想做一个复杂项目来证明一下或者提升一下自己,如果只做些初级的案子或模块,很难有进一步的成长的,毕竟并不是所有的量变都能引起质变。
然而真正遇到复杂的设计时,有前辈指导还好,如果没有,要独自闯过去,估计要扒一层皮才行。真正的问题在于,即便侥幸闯过去了,内部代码设计的怎么样只有自己知道,是否为了凑时序而生硬的堆砌语句?是否根据实机调试的结果反过来不知所以的修改代码?是否有理不清的关系的模块?如果是这样,那么后面的项目我们是否还有运气趟过去。
项目是永远做不完的,升级打怪,最终的BOSS又在哪里?技术更新更是日新月异,学会了A,后面还有A+、B+等等。所以我们要的不是鱼,而是渔。
相对其他软件工程师,国内做FPGA的人相对还是较少的,查看目前FPGA的相关书籍,也不是很多,在寥寥数本中大部分还是入门级的:
介绍vivado工具如何使用
介绍FPGA的内部架构
来个跑马灯之类的程序
讲讲数字信号的基础知识
...........................
厚厚的一本,里面的内容大部分是图片,占据的页面没有最大,只有更大。或者讲些案例,但只是案例而已。只讲是这样做的,没有进行一步讲为什么这样做。总之给人的感觉是零零散散,形不成系统,书中讲的是1加1,但实际项目一上来就是微积分,给人以沉重的打击。
那么FPGA逻辑设计有没有一些方法可寻呢?答案肯定是有的。有时候我们需要通过现象看本质,比如设计uart的程序和设计dma的程序,哪个困难一些呢?实际上都是由D触发器搭建成的,无非一个数量可能少一些,一个数量可能多一些。复杂项目也一样,是可以拆分成一个个简单的模块的,每个模块内部是可以拆分成一个个的功能段的,每个功能段又是可以用基础语句实现的。所以问题的关键在于怎么拆,如何拆。这样的话我们就不必担心未知的协议,uart和dma其实是一样的,A协议和A++协议设计的本质也是一样的。只要学会了渔,就可自由撒网。
之前你肯定看到过这样的结构图:
换个角度看,也可以是这样的:
后面我们将共同探讨如何渔,希望能帮助到您。
作者:大工小工, 来源:面包板社区
链接:https://mbb.eet-china.com/blog/uid-me-3885609.html
版权声明:本文为博主原创,未经本人允许,禁止转载!
-END-
关注我菜单栏查看100+篇干货
#推荐阅读#
有一个懂机械、懂焊接、懂电子的爹是什么概念。。。
信号与系统公式大全(全记下来的都是大神)
下顿馆子,完美诠释了电子工程师为什么不愿意改设计?
工程师谈第一次PCB上电的各种“奇幻”经历!
加速和改进PCB布线
工程师第一定律:电器坏了,肯定是电容器问题!
最全的硬件测试5个流程,少一个都不行!
嵌入式必须会的一些硬件面试题,你敢来试试吗?
学模电很头痛?那是因为你没吃透清华老师总结的这3点核心能力!
常用电路图符号大全
MOS场效应管基本知识
▼点击阅读原文,下载《cadence入门教程》