需求说明:Verilog设计
内容 :FPGA开发基本流程及注意事项
来自 :时间的诗
原文来自:http://www.dzsc.com/data/2015-3-16/108011.html
要知道,要把一件事情做好,不管是做哪们技术还是办什么手续,明白这个事情的流程非常关键,它决定了这件事情的顺利进行与否。同样,我们学习FPGA开发数字系统这个技术,先撇开使用这个技术的基础编程语言的具体语法、使用工具和使用技巧不谈,咱先来弄清楚FPGA的开发流程是什么。
FPGA的开发流程是遵循着ASIC的开发流程发展的,发展到目前为止,FPGA的开发流程总体按照图1进行,有些步骤可能由于其在当前项目中的条件的宽度的允许,可以免去,比如静态仿真过程,这样来达到项目时间上的优势。但是,大部分的流程步骤还是需要我们循规蹈矩的去做,因为这些步骤的输入是上一个步骤的结果,输出是下一个步骤的输入的关系,这样的步骤就必不可少了。
有人看到这个流程图的时候,第一个发自内心的感叹是“啊,怎么这么麻烦啊,特别是之前从事软件开发转过来的。对于他们来讲,很少有接触到一种技术有如此多的环节来实现。但是这并不能说明FPGA开发的具体难度,与软件开发有输入、编译、链接、执行步骤对应的就是设计输入、综合、布局布线、下载烧写,FPGA开发只是为了确保这核心实现主干路每一个环节的成功性加了其他的修饰(约束)和验证而已。下面,我们将以核心主干路为路线,一一介绍每个环节的物理含义和实现目标。
5.1设计输入
5.1.1设计输入方式
从图1 FPGA开发流程中的主干线上分离出第一步设计输入横向环节,并做了进一步的细节的处理,如图2,从图上看到,设计输入方式有三种形式,有IP核、原理图、HDL,由此展开设计输入方式的探讨。
原理图输入
原始的数字系统电路的设计可能大家还不可能想象,是用笔纸一个个逻辑门电路甚至晶体管搭建起来的,这样的方式我们称作原理图的输入方式。那个时候,硬件工程师们会围绕的坐在一块,拿着图纸来讨论电路。幸亏那时候的数字电路的还不是很复杂,要是放到今天,稍微大一点的系统,也算得上是浩大工程,稍微有点电路要修改的话,这个时候你要是一个没耐心或是一个急性子的人可能就就会丧失对这个领域的兴趣。话说回来,那个年代出来的老工程师们,电路基础功夫确实很扎实。
事情总是朝着好的方向发展的,后来出现了大型计算机,工程师们开始将最原始的打孔的编程方式运用到数字电路设计当中,来记录我们手工绘画的电路设计,后来存储设备也开始用上了,从卡片过度到了存储文本文件了,那个时候网表文件大致是起于那个时候。
需要注意的问题是原理图和网表文件的关系,原理图是我们最开始方便我们设计的一个输入方式,而网表文件是计算机传递原理图信息给下一道流程或是给仿真平台进行原理图描述仿真用的。设计输入方式不一样,但是对于功能仿真来讲,最终进度到仿真核心的应该是同一个文件,那么这个文件就是网表文件了。
有了计算机的辅助,数字电路设计起来可以说进步了一大截,但是如果依然全部是基于逻辑门晶体管的话,还是比较繁琐。于是后来出现了符号库,库里包含一些常用的具有通行的器件,比如D触发器类的等等,并随着需求的发展,这些符号库不断的在丰富。与在原理图里利用这些符号库构建电路对应的是,由原理图得到的这个网表文件的描述方式也相应的得到扩展,那么这里网表文件里对电路符号的描述就是最开始的原语了。
作为最原始的数字电路ASIC设计输入的方式,并从ASIC设计流程延续到FPGA的设计流程,有着它与生俱来的优点,就是直观性、简洁性,以致目前依然还在使用。但是需要注意的是,这也是相对的,具体讨论见下一小节。
HDL输入
HDL全称是硬件描述语言Hardware Description Language,这种输入方式要追溯的话得到20世纪90年代初了。当时的数字电路的规模已足以让按照当时的输入方式进行门级抽象设计顾左顾不了右了,一不小心很容易出错,而且得进行多层次的原理图切割,最为关键的是如何能做到在更抽象的层次上描述数字电路。
于是一些EDA开始提供一种文本形式的,非常严谨,不易出错的HDL输入方式开始提供了。特别是在1980年的时候,美国军方发起来甚高速集成电路(Very-High-Speed Integrated Circuit)计划,就是为了在部队中装备中大规模需求的数字电路的设计开发效率,那么这个VHSIC硬件描述语言就是我们现在的VHDL语言,它也是最早成为硬件描述语言的标准的。与之相对的是晚些时间民间发起的Verilog, 后来到1995年的时候,它的第一个版本的IEEE标准才出台,但是沿用至今。
前面提到HDL语言具有不同层次上的抽象,这些抽象层有开关级、逻辑门级、RTL级、行为级和系统级,如图3。其中开关级、逻辑门级又叫结构级,直接反映的是结构上的特性,大量的使用原语调用,很类似最开始原理图转成门级网表。RTL级又可称为功能级。
HDL语言除了前面提到的两种外,历史上也出现了其他的HDL语言,有ABEL、AHDL、硬件C语言(System C语言、Handle-C)、System verilog等。其中ABEL和AHDL算是早期的语言,因为相比前面两种语言来讲,或多或少都有些致命的缺陷而在小范围内使用或者直接淘汰掉了。而因为VHDL和Verilog在仿真方面具有仿真时间长的缺陷,System verilog和硬件C语言产生了,从图3看,System Verilog是在系统级和行为级上为Verilog做补充,同时硬件C语言产生的原因还有就是有种想把软件和硬件设计整合到一个平台下的思想。
IP(Intellectual Property)核
什么是IP核?任何实现一定功能的模块叫做IP(Intellectual Property)。这里把IP核作为一种输入方式单独列出来,主要考虑到完全用IP核确实是可以形成一个项目。它的产生可以说是这样的一个逆过程。
在随着数字电路的规模不断扩大的时候,面对一个超级大的工程,工程师们可能是达到一种共识,将这规模巨大而且复杂的设计经常用到的具有一定通用性的功能给独立出来,可以用来其他设计。当下一次设计的时候,发现这些组装好的具有一定功能的模块确实挺好用的,于是越来越多的这种具有一定功能的模块被提取出来,甚至工程师之间用来交换,慢慢大家注意到它的知识产权,于是一种叫做IP知识产权的东西出来了,于是集成电路一个全新领域(IP设计)产生了。
IP按照来源的不同可以分为三类,第一种是来自前一个设计的内部创建模块,第二种是FPGA厂家,第三种就是来自IP厂商;后面两种是我们关注的,这是我们进行零开发时考虑的现有资源问题,先撇开成本问题,IP方式的开发对项目周期非常有益的,这也是在FPGA应用领域章节陈列相关FPGA厂家IP资源的原因。
FPGA厂家和IP厂商可以在FPGA开发的不同时期提供给我们的IP。我们暂且知道他们分别是未加密的RTL级IP、加密的RTL级IP、未经布局布线的网表级IP、布局布线后的网表级IP。他们的含义在后面陆续介绍FPGA的开发步骤的时候,相信大家能够恍然大悟。需要说明的是,越是FPGA靠前端步骤的时候提供的IP,他的二次开发性就越好,但是它的性能可能是个反的过程,同时也越贵,毕竟任何一个提供者也不想将自己的源码程序提供给他者,但是为了不让客户走向其他商家,只能提高价卖了,同时加上一些法律上的协议保护。那么越朝FPGA开发步