在学习FPGA的途中真的遇到了很多的问题,现在就把那些经典的问题以及自己的一些理解写下来供大家参考学习,当然你也可以发表自己的观点!
FPGA定义的理解
FPGA(Field-Programmable
Gate
Array)可编程逻辑门阵列。首先从定义本身进行分析吧,建立一个直观的印象。“可编程”,简单的理解,体现在我们使用的硬件描述语言
VHDL\Verilog这一点,我们采用语言进行电路的描述,那么必须要清楚一点,语言就是电路,对电路的设计表现为语言的理解之上,这里想应用我们老
师曾说过的一句话—“胸有成竹”,坦白地讲,这句话对我的影响很深很深,至少在数字IC这个方向,而我迄今为止一直在做的就是为了不断的理解这句话!
采
用硬件描述语言Verilog描述电路就好像一个画家画竹子一样,在下笔之前应该成竹在胸,即对自己所要描绘的竹子应该清清楚楚,比如竹竿的形状和竹叶怎
么画等等。相应地,语言即电路,在描述电路之间我们也应该对自己所要设计的电路有更全面的认识,这一点对本科阶段的大学生是最为欠缺的,因为我们坚守了一
个本末倒置的概念,那就是当我们拿到题目的时候第一个想法就是赶紧去写电路,或许此刻阅读这篇文章的你也有这种经历,那么就应该认真的去思考和总结,这是
为什么呢?
“门阵列”,在FPGA内部更多的是逻辑资源、宏单元,更深层次的应该建立在D触发器以及一些组合电路的理解上,这样的一副图很多人都有见过,但是不知道诸位能够理解到了什么层级?
设计的核心
FPGA只是一种载体,Verilog也只是一种工具,那么真正的设计核心在哪里呢?
我觉得应该是思路。设想一下,当我们第一次拿到一个课题或者项目时,你脑中浮现的是什么想法呢?是一堆繁琐的Verilog语法或者描述语句,还是那些编程的算法,又或者是一些模块层次的联系框图?
不管是哪一种,起初的这些想法并没有错,只能说我们的认识停留在一定的层次。因为一个习惯于从语言和编程的角度来搭建电路的人是非常辛苦的,这种辛苦不是源于工作,而是源于个人自己的想法,因为他不会善于思考。
数
字IC设计中可以从不同的层次对系统进行描述,而自顶向下的设计方法也决定了我们的设计流程。在系统级别的认识源于对整个系统的需求分析和规范等等,在模
块级别是为了更加清晰的分析数据的流动和整个设计时序的要求等等,在RTL级是才是为了采用语言描述电路。那么从设计电路来讲,真正描述电路所需要的时间
真的很少很少,但是这些却基于我们对目标的清楚认识。
总
的来讲,认识是需要经验作为积累的,但是认识却也源于个人学习的思考和总结,你可能一直都处在编程的层次或者是语言描述的层次,因为你缺乏思考。这些都是
我的真实感受,因为在我身边有很多这样的人,当然,我自己也是从这些阶段走过来的。只能这样讲,我只是在不断的思考和总结,提高自己对电路设计的认识!
有
了一定的认识,那么还是这个问题,当我们第一次拿到一个课题或者项目时,你脑中浮现的是什么想法呢?所以我才觉得设计的核心应该是思路。换句话说,就是个
人对这个题目的认识,这个认识也应该是从系统级到RTL级。只有一定的认识,只有自己心中有竹子,才可以高效地完成一个设计,一幅图画。
设计的方法
电路设计基于一定的认识,但却基于不同的层级也具有不同的设计方法。自顶向下、模块化连接、状态机、异步FIFO、异步触发同步复位、乒乓结构等等。
这里我想讨论一下状态机吧!因为这是一个非常经典的设计方法,经典之处源于我们真实的现实世界是有序的,并且状态机的设计方法在很多的其他语言中也具有很重要的权重。
很
多人对于状态机的学习有了一定的深度和认识,但是前段时间我看到了一些文章,觉得很有必要在这里讨论一下,状态机几乎在数字IC设计中是xx的方法,但是
却也存在一定的缺陷,我们总是习惯于根据自己的需要扩展状态数目,甚至从来不关注每个状态中电路的延迟和细节时序等等,更加细微的就是状态转换时的延迟以
及在设计中的xx状态数目,所以我觉得每一种设计方法都有值得我们学习的很多地方,学无止境!
请点击左下角↙↙ 阅读原文 查看更多