此书籍包含六大部分内容:
1.数字电路设计入门
2.FPGA简介
3.FPGA开发流程
4.RTL设计
5.QuartusⅡ设计实例
6..ModelSim和Testbench
首先介绍了数字电路的基本设计,其实在《数字电路原理》中,我们都比较熟悉了,这里再次提及,说明要学好FPGA,掌握数字电路的基本设计是非常重要的。数字电路设计的核心是逻辑设计。通常,数字电路的逻辑值只有‘1’和‘0’,表征的是模拟电压或电流的离散值,一般‘1’代表高电平,‘0’代表低电平。
高低电平的含义可以理解为,存在一个判决电平,当信号的电压值高于判决电平时,我们就认为该信号表征高电平,即为‘1’。反之亦然。当前的数字电路中存在许多种电平标准,比较常见的有TTL、CMOS、LVTTL、LVCMOS、ECL、PECL、LVDS、HSTL、SSTL等。数字电路设计大致可分为组合逻辑电路和时序逻辑电路。
一般的数字设计的教材中对组合逻辑电路和时序逻辑电路的定义分别为:组合逻辑电路的输出仅与当前的输入有关,而时序逻辑电路的输出不但与输入有关,还和系统上一个状态有关。但是在设计中,我们一般以时钟的存在与否来区分该电路的性质。由时钟沿驱动工作的电路为时序逻辑电路。大家注意,这两种电路并不是独立存在的,他们相互交错存在于整个电路系统的设计中。
组合逻辑电路由任意数目的逻辑门电路组成,一般包括与门、或门、非门、异或门、与非门、或非门等。一般的组合逻辑电路如下图所示:
图中A,B,C,D,E,F为输入,G为输出。
时序逻辑电路由时钟的上升沿或下降沿驱动工作,其实真正被时钟沿驱动的是电路中的触发器(Register),也称为寄存器。触发器的工作原理和参数如下图:
tsu:建立时间,在时钟有效沿到来之前触发器数据输入应保持稳定的时间,如果建立时间不够,数据将不能在这个时钟沿被打入触发器。它间接约束了组合逻辑的最大延时。
thold:保持时间,在触发器数据输入引脚的数据在系统有效时钟沿到来后,需要保持稳定的时间,如果保持时间不够,数据同样不能被打入触发器。它间接约束了组合逻辑的最小延时。
tc-q: 触发器从有效时钟沿到来到输出有效的最大时间。
文中列举出了两个简单的时序逻辑电路例子。
第一个是时钟分频电路
该时序电路的功能为实现对时钟‘clk’的4分频,其中‘clk_2’为2分频时钟,‘clk_4’为4分频时钟,‘enable’为该电路的使能信号。其功能仿真波形如下图所示:
第二个是序列检测器电路
该时序电路实现了一个序列检测器,当输入序列‘datain’中出现‘101’时,标志位F将输出‘1’,其他时刻输出‘0’。电路中‘clk’为时钟信号,‘D1’,‘D2’,‘D3’为移位寄存器的输出,‘enable’为该电路的使能信号。其功能仿真波形如下图所示:
综上得知,时序电路设计的核心是时钟和触发器,这两者也是我们设计电路时需重点关注的。
从第二章起,开始介绍有关FPGA的知识,由什么是FPGA引出话题,FPGA是Field Programmable Gate Array的缩写,即现场可编程门阵列,是一种可编程的IC芯片(集成电路芯片)。
FPGA的结构与组成:通常FPGA由布线资源分隔的可编程逻辑单元构成阵列,又由可编程 I/O 单元围绕阵列构成整个芯片,排成阵列的逻辑单元由布线通道中的可编程内连线连接起来实现一定的逻辑功能。目前我们使用的 FPGA 的可编程逻辑单元一般由查找表和触发器构成。
文中有介绍FPGA与ASIC设计的区别
ASIC是Application Specific Integrated Circuit的缩写,即专用集成电路。ASIC和FPGA属于SOC(System on a chip片上系统)的两个发展方向,两者唯一的区别在于,ASIC的逻辑电路是固化在其芯片中的,我们可以将ASIC理解为不可编程的FPGA。由于FPGA设计是基于固有的硬件结构(如逻辑单元、块RAM、PLL/DLL、时钟资源等)的;而ASIC设计结构灵活,目标多样,所以ASIC设计的代码风格和FPGA设计的代码风格有明显差异,特别是在功耗、速度、时序等要求上。例如ASIC设计中根据要求会有意识地采用某些组合逻辑、门控时钟等,以降低功耗或提高速度。
第三章详细介绍了FPGA的开发流程
HDL(Hardware Design Language)和原理图是两种最常用的数字硬件电路描述方法,HDL 设计法具有更好的可移植性、通用性和模块划分与重用性的特点,在目前的工程设计中被广泛使用。所以,我们在使用FPGA设计数字电路时,其开发流程是给基于HDL的。流程图如下图所示:
需求定义(功能定义)
设计和实现一个系统的第一步,是明确整个系统的性能指标,然后进一步将系统功能划分为可实现的具体功能模块,同时明确各模块的功能与基本时序,还可大致确定模块间的接口,如时钟、读写信号、数据流和控制信号等。
RTL级HDL描述
RTL级(寄存器传输级)指不关注寄存器和组合逻辑的细节(如使用了多少逻辑门、逻辑门的连接拓扑结构等),通过描述寄存器到寄存器之间的逻辑功能的HDL设计方法。RTL级比门级更抽象,同时也更简单和高效。RTL级的最大特点是可以直接用综合工具将其综合为门级网表。RTL级设计直接决定着系统的功能和效率。我们使用的HDL语言是verilog。
功能仿真(前仿真)
功能仿真也称综合前仿真,其目的是验证RTL级描述是否与设计意图一致。为了提高效率,功能仿真需要建立testbench,其测试激励一般使用行为级HDL语言描述。
管脚分配与设计约束
无论是RTL级还是门级的HDL设计,在实现该逻辑时都需要与实际的FPGA芯片相匹配。管脚分配是指将设计文件的输入输出信号指定到器件的某个管脚,设置此管脚的电平标准、电流强度等。设计约束指对设计的时序约束和在综合、布局布线阶段附加的约束等。
综合
将RTL级HDL语言翻译成由与、或、非门等基本逻辑单元组成的门级连接(网表),并根据设计目标与要求(约束条件)优化所生成的逻辑连接,输出门级网表文件。
门级仿真(综合后仿真)
在综合后通过后仿真来检查综合结果是否与原设计一致。一般综合后仿真和功能仿真的测试激励相同。由于综合工具日益完善,在目前的FPGA设计中,这一步骤被省略掉。
布局布线
布局布线就是使用综合后的网表文件,将工程的逻辑与时序要求与器件的可用资源相匹配。也可以简单地将布局布线理解为对FPGA内部查找表和寄存器资源的合理配置,那么‘布局’可以被理解挑选可实现设计网表的最优的资源组合,‘布线’就是将这些查表和寄存器资源以最优方式连接起来。
时序/时延分析
通过时序/时延分析获得布局布线后系统的延时信息,不仅包括门延时,而且还有实际的布线延时。时序/时延分析的时序仿真是最准确的,能较好地反映芯片的实际工作情况,同时发现时序违规(Timing Violation),即不满足时序约束条件或者器件固有时序规则(建立时间、保持时间)的情况。
配置与下载
通过编程器(programmer)将布局布线后的配置文件下载至FPGA中,对其硬件进行编程。配置文件一般为.pof或.sof文件格式,下载方式包括AS(主动)、PS(被动)、JTAG(边界扫描)等方式。
书籍的后三章涉及一些实质性的开发设计内容,有兴趣的坛友可以使用手边的开发板,进一步深入研究。此次跟读就介绍到此,欢迎回帖交流。
*附件:FPGA入门教程.pdf