第二章 FPGA知识大串讲02_知识串联
温馨提示:明德扬2023推出了全新课程——逻辑设计基本功修炼课,降低学习FPGA门槛的同时,增加了学习的趣味性,并组织了考试赢积分活动(点击→了解课程详情)http://www.mdy-edu.com/ffkc/415.html,感兴趣请联系易老师:13112063618(微信同步)第二章 FPGA知识大串讲02_知识串联
作者:潘文明
本文为明德扬原创文章,转载请注明出处!
在上一篇文章中,我们概括地讲述了FPGA的一些学习误区。本文我们将FPGA的关键知识串联起来,系统地介绍各个知识点所处的层次和位置,为后面几仿篇文章的详细讲解做好铺垫。
第1节FPGA的基本电路结构
首先,我们来讲解一下FPGA的基本电路结构。请看上图中左边红色方框,该方框内包含了组合逻辑电路以及一个D触发器。组合逻辑里可能是加法器、减法器、选择器,甚至是什么都没有,就是连线;组合逻辑的输出将连接到D触发器的输入端;D触发器在时钟的驱动下,将组合逻辑的运算结构,输出到D触发器的输出端。
这就是一个FPGA的基本电路结构,而这个电路结构则与VERILOG中的一个ALWAYS对应,如下面的代码
上面代码在综合器的作用下,其综合的FPGA电路结构,也是组合逻辑+D触发器的形式。其中组合逻辑由比较器(cnt==0、cnt==1、cnt==2就是比较器)、选择器(从1、2、3或者保持不变中选择)等组成;D触发器的时钟就是代码中的clk,输入则是组合逻辑的结果,输出则是信号cnt。
有读者可能会对基本电路结构有疑问,难道所有代码都这样结构吗?例如下面代码中的add_cnt0和end_cnt0信号,它是由assign设计的,它们就没有D触发器。
单纯只看add_cnt0和end_cnt0的代码,貌似是没有D触发器,但仔细看第5行和第6行,这个两个信号是参与了判断(事实就是选择器),决定了D触发器的输出cnt0。即从add_cnt0到cnt0之间,就是组合逻辑+D触发器的结构。
FPGA代码是由一个又一个ALWAYS代码组成的,这说明FPGA的绝大部分电路,就是由一个又一个“组合逻辑+D触发器”的电路组合起来的,如下图
上面这种结构是我们设计的基本单位。这种结构还有一种隐含的意思:组合逻辑决定电路的运算及功能,D触发器就像一个节点,将运算结果保存下来,为下一级运算作准备。FPGA代码设计过程,就像是设计一个功能,保存一下,设计下一个功能,保存一下。文字难以描述,请读者认真体会体会。
还有注意的是,上面推荐的是“组合逻辑+D触发器”结构思维,不要使用“D触发器+组合逻辑”思维,这种思维是不正确的。
再看上图,为什么说FPGA代码里,各个ALWAYS是并行的呢?从上图就很容易理解了。图中可以看到,三个D触发器都连接时钟CLK。当时钟CLK的上升沿的时候,这三个D触发器将同时受到此信息,同时将D触发器的输入值给到输出。这些电路都是同时工作的,不存在谁先谁后的。没有所谓说这个电路在工作,另一个不在工作的情况。
这个就是FPGA 的基本电路结构,读者务必做到非常清楚这个电路结构,这是我们后面描述的一个重要基础。
第2节 FPGA的知识点
我们在FPGA基础电路结构图的基础,将FPGA的所有知识点串联起来,然后通过4篇文章,逐一进行详细的讲解。
1. 先讲述组合逻辑部分。组合逻辑是由加法器、减法器、比较器、选择器等电路组成的,所以一开始我们要理解组合逻辑的电路有哪些类型;然后据此掌握这些类型的VERILOG代码的写法;接下来讨论这些组合逻辑的时序,引出组合逻辑才有的竞争和冒险现象,最后提出竞争和冒险的解决方法。
2. 完成组合逻辑的讲述后,我们将讨论D触发器。首先会讲解D触发器的结构,进而会讲述D触发器的时序,讨论D触发器时序与组合逻辑的异同。从D触发器时序中,有一个非常重要的概念:建立时间和保持时间。如果建立时间和保持时间不满足,就会有一个叫亚稳态的情况。亚稳态有什么危害,亚稳态出现的场合有哪些。在明确了出现的场合后,就要想办法解决亚稳态问题,提出了亚稳态的解决方法。其解决方法分两种:一种是单一信号,也就是一比特信号的解决方法;还有一种是多比特信号的解决方法。
3. 讲完了D触发器之后,我们将把组合逻辑和D触发器联合起来。前面已经讲魔神,组合逻辑+D触发器是一个正确的的电路结构。有正确,那么就不正确,根据收集读者的反馈情况,我们列出了一些经常会犯的、不合理的结构。之后将讨论这个基本结构的时序;接下来是讲述如何用VERILOG来实现。实现的话,就有行为描述以及状态机的实现这几种方法了。
4. 最后一部分,我们将单独对时钟进行讲解。时钟是FPGA的一个基础,是一个很重要的概念,是FPGA设计的重点和难点。首先我们将讲述时钟的概念;然后是时钟抖动SKEW和时钟频率。经常有被问到:我这个电脑CPU能跑1G,他那个电脑CPU能跑2G,这就是使用频率。那这个频率取决于什么因素,为什么有些跑得快,有些跑得慢?这个问题将引出关键路径的概念。为了提高时钟频率,我们可以怎么做?流水线的设计!!!
以上就是我们FPGA 的所有知识点,将其展示到一张图,方便读者使用。
页:
[1]