艾巴生活网

您现在的位置是:主页>科技 >内容

科技

fpga的开发流程分析与实施(FPGA的开发流程分析)

2024-12-02 18:20:06科技帅气的蚂蚁
FPGA的开发过程遵循ASIC的开发过程。到目前为止,FPGA的开发过程一般都是按照图1进行的。某些步骤可能被省略,例如静态模拟过程,因为其条

fpga的开发流程分析与实施(FPGA的开发流程分析)

FPGA的开发过程遵循ASIC的开发过程。到目前为止,FPGA的开发过程一般都是按照图1进行的。某些步骤可能被省略,例如静态模拟过程,因为其条件在当前项目中的宽度,从而实现项目时间的优势。但是大部分的流程步骤还是需要我们遵循规则,因为这些步骤的输入是上一步的结果,输出是下一步的输入,所以这样的步骤是必不可少的。

FPGA开发的具体难点,对应软件开发的输入、编译、链接、执行等步骤,是设计输入、综合、布局布线、下载、编写。FPGA开发只是增加了其他的修改(约束)和验证,以保证核心实现主干道各个环节的成功。下面将以核心主干道为路线,介绍各个环节的物理意义和实现目标。

一、设计输入

1.设计输入模式

图一。将第一步设计输入的水平链接从FPGA开发过程中的主线中分离出来,进一步处理细节。图2显示了设计输入模式有三种类型,包括IP核、原理图和HDL,因此展开了设计输入模式的讨论。

1)原理图输入

原数字系统电路的设计可能无法想象。它是用纸笔逻辑门甚至晶体管搭建而成的,称为原理图输入方式。那时候硬件工程师会围坐在一起,拿着图纸讨论电路。好在当时的数字电路不是很复杂。今天,稍微大一点的系统也算是一个庞大的工程。如果电路需要稍微修改,如果此时你不耐烦或不耐烦,你可能会失去对这个领域的兴趣。另一方面,那个时代出来的老工程师,确实电路基础扎实。

事情总是朝着好的方向发展。后来,大型计算机出现了。工程师开始把打孔这种最原始的编程方法应用到数字电路设计中,来记录我们手绘的电路设计。后来开始使用存储设备,从卡片到存储文本文件。当时网表文件大致就是那个时候开始的。

需要注意的是原理图和网表文件之间的关系。原理图是一种方便我们一开始设计的输入方式,计算机使用网表文件将原理图信息传递给下一个流程或者为仿真平台描述和仿真原理图。输入方式不同,但是对于功能仿真来说,最终进展到仿真核心的应该是同一个文件,那么这个文件就是网表文件。

在计算机的帮助下,数字电路的设计可以说有了很大的进步,但如果还是全部基于逻辑门晶体管,还是比较繁琐的。然后是符号库,里面有一些常用的器件,比如D触发器等等。随着需求的发展,这些符号库不断丰富。与使用这些符号库在原理图中构建电路相对应的是,从原理图中得到的这个网表文件的描述也相应展开,所以这里的网表文件中的电路符号描述就是初始原语。

作为数字电路ASIC设计最原始的输入方式,并从ASIC设计流程延伸到FPGA设计流程,有其与生俱来的优势,即直观、简单,以至于目前仍在使用。不过需要注意的是,这也是相对的。具体讨论见下一小节。

2)HDL输入

HDL的全称是硬件描述语言,这种输入法可以追溯到90年代初。当时的数字电路规模足以让按照当时输入方式的门级抽象设计忽略了左右。一不小心就很容易出错,还得多层次切割原理图。最重要的是如何在更抽象的层面上描述数字电路。

于是一些EDA开始提供基于文本的、严谨的、无错误的HDL输入法。特别是在1980年,美国军方启动了超高速集成电路(Very-High-Speed Integrated Circuit)计划,该计划旨在提高军队大型装备所需数字电路的设计和开发效率。所以这个VHSIC硬件描述语言就是我们现在的VHDL语言,它是硬件描述语言的第一个标准。另一方面,后来由民间发起的Verilog于1995年推出,其第一版IEEE标准沿用至今。

前面提到的HDL语言有不同的抽象层次,包括开关层、逻辑门层、RTL层、行为层和系统层,如图3所示。其中开关级和逻辑门级也称为结构级,直接反映了结构的特性。使用了大量的原语调用,非常类似于原理图到门级网表的初始转换。RTL级也可以称为功能级。

除了前面提到的两种HDL语言,历史上还出现过其他HDL语言,比如阿贝尔、AHDL、硬件C语言(System C语言,Handle-C)、系统verilog等。亚伯语和AHDL语是早期的语言,因为与前两种语言相比,它们或多或少都有致命的缺陷,所以被小范围使用或直接淘汰。由于VHDL和verilog具有仿真时间长的缺陷,系统Verilog和硬件C语言应运而生。如图3所示,系统Verilog是对Verilog在系统级和行为级的补充,硬件C语言是因为将软硬件设计集成到一个平台的思想而产生的。

3)IP(知识产权)核心

什么是IP核?任何实现某种功能的模块都称为IP(知识产权)。这里把IP核单独列为一种输入方式,主要是考虑到完全使用IP核确实可以形成一个项目。它的出现可以说是这样一个逆过程。

随着数字电路规模的不断扩大,面对一个超大型的项目,工程师们可能已经达成共识,可以将这个庞大复杂的设计中经常用到的一些常用功能隔离出来,用于其他设计中。在接下来的设计中,发现这些组装好的具有一定功能的模块确实很有用,于是越来越多的这些具有一定功能的模块被提取出来,甚至在工程师之间进行交流。慢慢的,人们注意到了它的知识产权,于是出现了一个叫IP知识产权的东西,一个新的集成电路领域(IP设计)应运而生。

根据IP来源的不同,可以分为三类,第一类是来自之前设计的内部创建模块,第二类是FPGA厂商,第三类是来自IP厂商;后两个是我们关注的,是我们进行零开发时考虑的现有资源。先抛开成本不谈,IP模式的开发对项目周期非常有利,这也是相关FPGA厂商的IP资源被展示在FPGA应用领域章节的原因。

FPGA的制造商和IP供应商可以在FPGA发展的不同时期为我们提供IP。暂时我们知道它们是未加密的RTL级IP,加密的RTL级IP,没有布局的网表级IP,布局后的网表级IP。相信当我们陆续介绍FPGA的开发步骤时,你会恍然大悟它们的含义。需要注意的是,FPGA在前端步骤时提供的IP越多,其二次开发就越好,但其性能可能是一个逆向过程,成本也就越高。毕竟,任何供应商都不会想把自己的源代码程序提供给别人,但为了防止客户去找其他商家,只能抬高价格出售,加上一些法律协议保护。然后,越到FPGA开发步骤的后端,反过来也是如此。越往后端走,IP核的性能会越好,但是有些客户没有的功能不要不好。

FPGA厂商提供常用的IP核。毕竟为了让大家用上自己的芯片,一些有特殊需求的IP核还是需要付费的。当然这里需要说明的是,FPGA厂商的IP很少能被交叉使用。它人们很容易认为制造商不会为竞争对手提供服务。一般来说,IP厂商会以高价提供未加密的RTL级源代码。有时候,FPGA厂商为了扩大芯片的市场份额,会购买第三方的IP进行深加工,免费送给FPGA芯片用户。

2.浅谈输入方式的使用

上面介绍了三种输入法,有些地方会讲到第四种输入法,也就是门级网表文件的输入形式。我们没有这里不分类为输入法,因为这些门级网表文件的产生本身还是由于引入的三种输入法中的一种或者一些混合的方法。所以它这里不分类。

好了,在以上三种输入法介绍的基础上,让让我们来讨论一下这个令人眼花缭乱的输入法。讨论的目的是让我们更好地使用它们。

首先,让让我们总结一下这三者的优缺点。其实有两种,因为不管是哪一级的IP核,要么在原理图中以符号的形式实例化,要么在HDL中以模块的形式实例化。所以这里我们重点介绍原理图和HDL的优缺点。原理图的优点是结构直观,而HDL具有严密性、支持广泛层次的抽象描述、易于移植、便于仿真和调试等优点。缺点是它没有don’我们没有对方的优势。当时HDL出现的时候,人们真的以为原理图应该退出历史舞台了,但是它依然存在。就是存在才有意义,存在也要用,但是HDL也要用,于是就有了混合编程的形式。除了顶层模块的原理图,其他内部子模块都是用HDL描述的。HDL描述的模块可以通过工具转换成符号,然后在顶层模块中引用这些符号,就完成了混合编程。

很多接触FPGA的初学者很容易被原理图的输入方式所迷惑,甚至深爱,再加上对其他输入方式繁琐输入的厌恶,让他们无法从爱中自拔。当一开始就强制开始使用HDL输入的习惯时,他们中的一些人甚至会有痛苦的感受。但是随着学习的深入,他们做的事情越来越大,尝到HDL输入带来的甜头,就会觉得这份苦不是白来的。

我觉得从现在的一些蛛丝马迹来看,示意图输入法总有一天会结束服务的。首先,我们找到了一个具有原理图本身优势的替代品,即主流FPGA集成环境中的合成器和第三方合成器都具有RTL视图生成功能。这个视图完整地显示了项目的结构,并且可以从上到下分层。最大的优点是可以对综合后的RTL级代码进行电路检查和验证。另一个线索是大家使用的仿真软件Modelsim并没有提供原理图输入的支持,但是原理图的设计必须在集成环境中转换成RTL代码或者合成为网表形式进行仿真,这也是一件繁琐的事情。它示意图离开只是时间问题。

至于目前选择哪个HDL比较好,这个问题要在HDL基础语法知识入门的地方讨论。这里需要注意的是,并不是因为我们这里说Verilog就否定其他HDL语言。各种HDL之争从未停止,至今仍有四种开发者。第一个是用Verilog/System Verilog的,第二个是用VHDL的,第三个是用System C的,第四个是混用的。哪个更好,或者也许它这是时间问题。时间会证明一切。

二、综合

无论是采用单一输入法还是混合编程(这在很多跨公司合作项目中都会遇到。可能A公司用的是VHDL,B公司用的是Verilog,所以这个项目很有可能采用混合编程),我们统称为,我们得到设计输入后,要得到一个可以匹配FPGA硬件资源的设计输入描述。假设FPGA基于LUT结构,那么我们得到一个基于LUT结构的门级网表。在这个过程中,可以分为如图所示的两步。

需要说明的是,在Altera 的开发过程中,编译和映射过程是根据我们的描述组合起来的,而在Xilinx 的开发过程中,从设计输入中获得门级网表的过程称为综合,映射过程归结为一个称为实现的子步骤。然而,整个过程仍然遵循这个顺序,但它只是在外表上有所不同。

1.编制

将编译原理图、HDL和IP核以生成门级网表。这里生成门级网表的过程,其实就是ASIC早起的步骤,直接生成门网表。此时的网表文件与具体器件无关,也就是说生成的门网表也是平台移植的媒介。

2.绘图

在我们编译一个门网表之后,它不同于之前的ASIC开发过程,在布线后屏蔽这个门网表。接下来,我们要考虑如何将其与我们选择的硬件平台相结合。毕竟我们用的硬件平台是由lut组成的(假设这种FPGA)。那么这个组合过程就是映射过程。

这个过程其实很复杂。首先,我们需要将形成的网表逻辑门规划成一些小的组合,然后映射成LUT。在这个过程中,规划是按照一定的算法和规则进行的。不同的算法和规则会得到不同的映射,不同的映射会为后面的流程提供不同的选择,最终生成不同性能的电路。

让让我们以FPGA为例基于SRAM技术的2选1多路复用器,如图6所示。二选一复用器可以按照红线完全拆分成两边,原表可以规划成另外两个表或表内容,因为拆分的两部分可以单独成表,也可以规划成其他电路形成的表。

映射项目复杂,计算量也很大,这也是为什么FPGA的开发一直存在一个问题。形成最终的可配置二进制文件需要很长时间,特别是对于一些较大的项目。需要花费较长时间的一点是映射,具体的映射算法不在本书范围内。同样,映射与设备相关。即使是同一个系列,不同类型的FPGA之间也有差异。比如从外面看,一个单元楼里的所有单元都不一样,但是每个单元的内部装修和家具都不一样。

三、布局和布线

1.布局

说到这一块,正好有这样一个例子来解释这个概念。最近有消息称,朝鲜希望租用俄罗斯远东地区数十万公顷的土地来种植农产品。让把未来购买的成功放在一边,假设是成功的。有了这份详细的待耕作物品种和数量,还有各种蔬菜、主食、家禽养殖场、果树等等。从我们之前所做的那些过程中获得的LUT门级网表就像这个列表一样。

拿到这样的单子后,让假设在这10万公顷的土地上,阳光、水资源、温差都有一定的分布。众所周知,农作物的生长和高产与阳光、水资源或温差有关,家禽的畜料与农作物的副产品有关。所以接下来要做的就是根据现有的自然条件和农产品所需的环境特点进行合理的布局,哪些地方适合做什么。

然后我们回到FPGA开发,我们通过前面的步骤得到的列表是LUT门级网表。表中提供的只是一些LUT结构的逻辑联系。我们需要在FPGA的什么地方配置这些LUT结构?需要注意的是,FPGA中的任何硬件结构都是根据横坐标和纵坐标进行校准的。图中选择了一个切片,表和其他结构存储在切片中,切片位于X50Y112上。不同资源的坐标不同,但坐标的零点是共有的。

FPGA布局要考虑的问题是如何将这些现有的逻辑连接的lut和其他元件合理的放入现有的FPGA中,在满足功能要求的同时保证质量。具体来说,例如乘法器等电路适合放置在RAM附近。当然,硬件乘法器的硬件布局一般都在内存附近,有利于缩短乘法的延迟时间,高速需要配置什么样的电路等等。

如果规划10万公顷土地的布局,农产品会有好收成。同样,如果对FPGA开发的布局进行了布局,FPGA搭建的电路会更加稳定,可扩展性更强。

2.接线

上一节我们整理了10万公顷土地,哪些土地要种。还有一些事情必须在实施之前完成,比如农作物的灌溉。没有好的灌溉系统是个问题;例如,收获必须再次采摘。这个时候,让大货车能够到达每一片农田的公路枢纽,也是一个需要解决的问题。灌溉系统的建设和连接各个领域或相关领域的高速公路就像我们的布线过程。

通过FPGA中的版图,我们知道那些lut分布到哪个片上,但是一方面如何连接这些片,另一方面如何将输入信号拿到对应的开始处理点,如何将输出拿到输出IO,连接的电路整体性能好,这是布线需要完成的。要实现最优路由,当然还有路由算法、PLL资源分配等很多细节问题。但是,这些对于我们理解布线的概念并不是很有利。暂时来说,本质上是优化布线的问题。

四、约束条件

如图1所示,约束出现在综合和布局这两个过程步骤中。我们暂时将其定义为约束1和约束2,或者综合约束和布局约束。布局约束可分为位置约束和时间约束。约束是这些链接的定制规则。通常,开发环境会有这些约束的缺省设置,并且这些缺省设置在大多数情况下仍然适用,但是布局约束中的I/O约束通常由每个项目给出。同时,开发工具开放了其他约束接口,允许我们设置这些规则。如何做具体的约束将在后面使用该工具时讨论。这里,先了解一下这些约束的基本概念。

1.综合制约因素

相信大家都下意识的把合成约束和合成过程联系起来了。那没错,合成约束确实是在合成过程中做的,用来指导合成过程,包括编译和映射。我们已经知道,综合的过程是将RTL级电路描述转换成FPGA上的硬件单元(LUT),形成由FPGA内存在的硬件单元组成的电路。

让让我们以前面的例子来说明不同的约束会导致产生不同性能的电路。综合这样一个完美的* * *功能电路,添加资源共享得到的电路如图8左边的电路所示,但是添加资源共享约束得到的电路结构如图8右边的电路所示。

通过前面的分析,发现左边的电路结构消耗资源多但速度快,右边的结构消耗资源少但速度慢,所以乘法器需要时分复用。

当然,这只是一个例子,但足以说明不同的综合指导原则,即综合约束,会产生不同的回路。当电路性能可以不满足要求时,应适当考虑综合约束,以达到速度和面积转换的效果,提高性能。电路实现的速度和消耗的面积是贯穿FPGA发展的两个矛盾问题,综合约束是实现速度和小范围内表观平衡点移动的途径之一。

2.位置约束

位置约束与布局有关,是指布局策略。我们的布局是根据所选FPGA平台的现有硬件资源分布来确定的。

最典型的位置约束是I/O约束。典型的系统既有输入又有输出,输入和输出都来自作为端点的I/O。输入从哪个端点进来,输出从哪个端点出去,输入是端点需要支持什么样的电特性,输出是端点需要支持什么样的电特性。这些都是I/O约束所做的事情。任何项目都必须有这样的约束。

另一个典型的位置约束是增量编译中涉及的物理定义。针对FPGA开发中耗时较长的综合和布局,提出了增量编译。思路是把FPGA切割成很多小块FPGA,然后约定哪个小FPGA放什么模块,实现什么功能,物理定义。项目修改时,开发平台会检测哪些小FPGA没有修改,哪些修改了,然后修改的部分会重新布局。这样相对于原来的修改,整个项目又要经过那些流程,节省时间。

3.时间限制

估计没有太大悬念,时间限制很大程度上和布线有关。为什么要做这个约束?

一方面,信号在芯片内传输需要时间;另一方面,有很多带有反应时间的寄存器,这在我们开发之初是很理想的。但是考虑到真实情况,如果运行速度比较高,达到200M,当然这个高速度和具体的芯片有关。高性能芯片本身的运行速度可以达到很高的速度,但是200M相对来说并不是一个很高的速度,对于一些低性能芯片甚至可能达到200M。此时,当这些时间达到系统时间的同一数量级时,就很可能影响电路的性能。在某个时候,如果该来的信号没有来。t来了,默认会收集错误的信号。

为了使这些硬件带来的延迟时间更加理想,我们应该优化这些决定时间延迟的因素来减少时间延迟。对于寄存器本身的响应时间,我们开发者是无能为力的。我们要做的优化就是布线。走直线还是走其他,不仅取决于路径本身,还取决于整个系统的布线,比如水桶原理,系统性能取决于最差路径时延。

时间约束做所有这些事情,但时间约束不表示具体连接每条线。这项工作是由软件实现的,就像前面的过程一样。首先,我们使用软件的默认原则来连线,然后分析结果。如果没有如果不满足时间要求,我们将对特定的问题路径做出一些指导约束。时间序列约束的添加主要包括周期约束、输入偏移约束和输出偏移约束。在后面的章节中介绍这些工具时,具体的过程会有具体的实际操作说明。

五、FPGA开发模拟

在介绍了从设计输入到综合再到布局的流程之后,让我们将重点放在这些过程中涉及的相应模拟上。

模拟,字面意思就是模拟真实情况。我们FPGA设计中的仿真就是模拟真实的电路,看看这个电路是不是我们需要的。如果我们把FPGA开发形成电路看作是一个产品的生产过程,那么FPGA开发过程中包含的三种仿真(RTL级仿真、静态仿真和时序仿真)就好比是产品线中的三个检测站。如图9所示,如果三个流程中的任何一个出现问题,都必须在修改设计后重新拿三张牌,所以尽量在源头找到问题。

1.测试平台

所谓testbench,即测试平台,具体就是给待验证的设计加上激励,观察输出响应是否满足设计要求。功能仿真、静态仿真和时序仿真所需的测试平台。一开始对于一些初学者来说,遇到一些简单的事情,测试平台也很简单。一个文件可以清晰地呈现测试结构。对于一些复杂的项目,测试就没那么简单了,这也就产生了一个行业——测试行业。这个时候我们需要用到的一个概念就是结构化测试。

如下图10所示,一个完整的测试平台由子结构组成,其中对设计测试结果的判断不仅可以通过观察对比波形来获得,还可以灵活地使用脚本命令将有用的输出信息打印到终端或生成文本供观察,或者为它们编写一段代码来自动比较输出结果。

测试平台的设计多种多样,可以使用灵活的Verilog验证脚本。但是,它也是一种基于硬件语言但服务于软件测试的语言,有时是并行的,有时是顺序的。只有掌握了这些关键点,才能很好地为测试服务。需要注意的是,无论你是已经在使用Verilog编写测试平台,还是刚刚开始学习编写测试平台,建议你还是可以使用System Verilog的新语法或者尝试一下。系统Verilog是一种趋势,而且是向后兼容的第三代Verilog。

2.RTL级模拟

RTL级仿真是这里的第一个测试,在某些场合也叫功能仿真。为了突出RTL级仿真和静态仿真的区别,以免后面介绍静态仿真时大做文章,我们还是这么叫。它在寄存器传输级测试项目的描述,并检查在RTL级实现的功能的正确性。

对于RTL级仿真,如果在设计中输入原理图,有些仿真工具不支持,比如Modelsim。这时候就需要进行功能验证,可以将原理图转换成HDL描述,也可以将整个工程直接转换成LUT门级网表,然后就可以完成后面要讨论的静态仿真了。

所有逻辑功能的验证预计在RTL级完成,这样可以尽可能在RTL级仿真过程中发现问题,减少后期问题造成的重复。

3.静态模拟

静态仿真,有些地方昵称为门级仿真,确切的说应该是集成的LUT门级网表。它这是在综合过程之后进行的模拟。在某些开发平台下,静态模拟可以分为编译模拟和映射模拟。比如ISE就是这么做的,但个人觉得这种编译模拟应该很少做。静态仿真的目的是验证在用LUT门级网表描述项目时,从功能上检查和验证项目的正确性。

Altera和Xilinx的开发平台都直接支持静态仿真,但是由于各自厂商的仿真器都不专业,所以我们还是更多的使用第三方仿真工具。此时,第三方工具下的输入必须是LUT门级网表文件,由综合工具合成,覆盖项目的所有信息。一般专业的第三方综合工具不具备综合功能。至少我们在使用Modelsim的时候,不需要添加项目中使用了哪个具体FPGA型号的信息。这也是静态模拟的昵称。门级仿真是指LUT门级网表仿真的基础。

4.时间序列模拟

时序仿真是在布局布线之后进行的。前面引入时序约束的时候,说的是在布线延迟问题影响电路性能的时候可以做时序约束。那么这个延迟问题就可以通过时间序列模拟得到,当然也存在得到的延迟过载的情况,这属于下一节介绍的静态时间序列分析。

一般电路接线后会生成一个延时信息文件,简称SDF(standard rad dealy格式)文件。它以的形式存在。Quartus平台下的sdo文件。它包含三种延时信息,即最小值、典型值和最大值,现有形式为最小值:典型值:最大值,一般缩写为minmax。这也说明FPGA中的延迟信息可以无法精确得到,只能近似,因为在同一器件中,不同区域逻辑门的延迟很可能与其他区域相同逻辑门的延迟不同。让让我们举一个例子来说明这三个价值的含义。

如上图所示,这是描述延迟线的延迟信息。给定的延迟信息从入端点到出端点。输入跳变后,信号分别以最小值、典型值和最大值跳变到输出端点。我们只是这里的一条延迟线。延时信息文件中还有一种延时信息,就是一些具有逻辑功能的信元延时。此时信号跳变可分为高-低和低-高两种。因为这两个跳变在这些器件中的三个延时值是不一样的,所以要分开讨论,可以举一个具体的案例来举例。

在做后期仿真的时候,我们只需要在静态仿真之后添加布线的延时信息,然后分析逻辑功能是否满足要求。后一种策略的平台使用与前一种策略相同。通常,使用第三方仿真工具,通常是Modlesim。具体操作过程参见软件的相关操作章节。

六、静态时间序列分析

静态时序分析,简称STA(静态时序分析),如果在后仿真过程中进行,则在后仿真之前进行。布线布局后,会生成时间序列分析报告,由分析工具从布线的路强中提取寄生参数后精确计算。该报告将提示一些关键路径。所谓关键路径强度,是指延迟信息突出的信号节点流。通过分析,我们可以得到不满足时序要求的路径。这个过程就是STA过程。

静态时序分析的特点是无需输入向量即可穷尽所有路径,运行速度快,占用内存少。它不仅可以全面检查芯片设计的时序功能,还可以利用时序分析的结果优化设计。许多设计可以基于功能验证的成功,加上良好的静态时序分析,这可以取代耗时的后期仿真,这是一种非常安全的简化过程的方法。与静态时序分析相比,仿真还具有逻辑验证,在添加延迟信息的基础上进行逻辑分析。

七、在线调试

在线调试,也叫板级调试,是将项目下载到FPGA芯片后,对代码运行的分析。有人会觉得我们已经做了模拟,连时间序列模拟都过去了。还会有问题吗?在实践中,有这样的情况需要我们使用在线调试:

仿真是不完整的,并且没有发现FPGA设计错误。很多情况下,要实现100%的代码覆盖率太复杂;

在板级交互中,有异步事件,所以很难模拟,或者需要很长时间模拟,所以可以不要跑。

除了自身FPGA之外,还可能存在板上互连可靠性问题、电源问题以及IC之间的信号干扰问题,所有这些都可能导致系统操作错误;

其他潜在问题。

在线调试主要有两种方式。一种是用外部测试设备将内部信号传输到FPGA管脚,然后用示波器或逻辑分析仪观察信号。另一种是使用嵌入式逻辑分析仪,将逻辑分析仪嵌入到设计中,使用JTAG edge数据扫描和开发工具完成数据交互。

嵌入式逻辑分析仪的原理相当于在FPGA中开辟了一个环形存储器。内存的大小决定了可以查看的数据深度,可以人为设置,但不得超过资源。在FPGA内部,根据设定的要查看的信号节点信息和驱动的采样时钟,对信息进行采样并放入设定的存储空间,该存储空间是环形的,内容随时间更新。然后通过判断触发点来检查采集的数据。一旦满足触发条件,此时会停止扫描,然后将触发点前后的一些数据返回给PC端测试工具进行波形显示,供开发人员调试。

目前所有的调试工具都是链接到自己的FPGA开发平台上的,不同的FPGA厂商都有开发软件平台,所以嵌入式逻辑分析仪是不一样的。Altera厂商提供SignalTapII,Xilinx厂商提供ChipScope。以下工具解释了这些工具的具体用法。

当然,除了嵌入式逻辑分析仪,各个厂商还提供一些其他的在线调试工具,如SignalProbe等。但或多或少用的人不多。有兴趣的可以找这个功能的使用说明书。

八、配置和固化

好了,我们可以在最后一个环节完成FPGA的流程了。这一部分分为四节。首先,我们安排FPGA的配置过程,你们很多人都不知道我不太清楚。然后,为了有更深的理解,我们引用altera 用FPGA来描述整个配置过程。第三节讨论了FPGA的主要配置方式,最后一节是这些配置方式的比较和选择。

1.FPGA配置流程

当FPGA正常工作时,配置数据存储在SRAM中,也称为配置RAM。由于SRAM是易失性存储器,FPGA上电后,外部电路需要将配置数据重新加载到芯片中的配置RAM中。芯片配置完成后,必须初始化内部寄存器和I/O引脚。初始化完成后,芯片会按照用户设计的功能正常工作,即进入用户模式。

FPGA上电后首先进入配置模式,最后一次配置数据加载到FPGA后进入初始化模式,初始化完成后进入用户模式。在配置模式和初始化模式下,FPGA的用户I/O处于高阻态(或内部弱上拉状态)。当它进入用户模式时,用户I/O根据用户设计的功能工作。

2.以——altera FPGA配置的全过程为例

一个设备完整的配置过程会经历三个过程:复位、配置、初始化。FPGA正常上电后,当其nCONFIG引脚被拉低时,器件处于复位状态。此时,所有配置RAM内容被清除,所有I/O处于高阻态。FPGA的状态引脚nSTATUS和CONFIG_DONE引脚也将输出低电平。当FPGA的nCONFIG引脚发生从低到高的跳变时,配置开始,芯片将对MSEL引脚的信号状态进行采样,以决定接受哪种配置模式。然后,芯片将释放开漏输出的nSTATUS引脚,该引脚将被片外上拉电阻上拉,这意味着FPGA可以接收配置数据。在配置之前和配置期间,FPGA的用户I/O处于高阻态。

在接收配置数据的过程中,配置数据由数据引脚送入,而配置时钟信号由DCLK引脚送入。配置数据在DCLK的上升沿锁存到FPGA中。当所有的配置数据加载到FPGA后,FPGA上的CONF _完成信号将被释放,开漏输出的CONF _完成信号也会被外部的上拉电阻上拉。因此,CONF _完成引脚的低至高跳变意味着配置的完成和初始化过程的开始,而不是芯片的正常工作。

INIT_DONE是表示初始化完成的信号。在FPGA中是可选信号,需要通过Quartus II工具中的设置来决定是否使用该引脚。初始化期间,内部逻辑、内部寄存器和I/O寄存器将被初始化,I/O驱动器将被启用。初始化完成后,器件漏极上的INIT_DONE引脚被释放,并由外部上拉电阻上拉。此时FPGA完全进入用户模式,所有内部逻辑和I/O按照用户运行的设计。此时,FPGA配置过程中I/O的弱上拉现象将不复存在。然而,有些器件在用户模式下也有可编程弱上拉电阻用于I/O。配置后,DCLK信号和数据引脚不应悬空,而应拉至固定电平,或高或低。

如果需要重新配置FPGA,需要在外部再拉低nCONFIG一段时间,然后再拉高。当nCONFIG被拉低时,nSTATUS和CONF_DONE也会被FPGA芯片拉低,配置RAM将被清零,所有I/O变为三态。当nCONFIG和nSTATUS都变为高电平时,重新配置开始。

3.配置模式

这个块分为两部分,一部分是在线调试配置,另一部分是固化,即将项目配置到相应的存储单元中,上电后通过内存中存储的内容对FPGA进行配置。

1)在线配置

在线调试配置过程的第一部分是通过JTAG模式完成的,如图13所示。在JTAG模式下,PC和FPGA之间的通信时钟是JTAG接口的TCLK,数据直接从TDI进入FPGA,完成相应功能的配置。

JTAG接口是一种工业标准接口,主要用于芯片测试等功能。基本上,所有的FPGA都可以支持JTAG命令来配置FPGA,JTAG配置比其他任何方法都具有更高的优先级。JTAG接口由四个必要信号TDI、TDO、TMS、TCK和一个可选信号TRST组成,其中:

TDI,用于输入测试数据;

TDO,用于测试数据的输出;

TMS,模式控制引脚,决定JTAG电路内部TAP状态机的跳转;

TCK、测试时钟等信号线必须与之同步;

TRST,可选。如果不使用JTAG电路,可以说它连接到GND。

2)固化

将程序固化到存储器中的过程的第二部分可以分为两种方式,主模式和从模式。在主模式下

FPGA指导配置操作过程,控制外部存储器和初始化过程;在从机模式下,配置过程由外部计算机或控制器控制。主机模式和从机模式从数据传输的宽度上可以分为串行模式和并行模式。

I)主弦模式

主模式是最简单的固化模式。如图14所示,该模式过程不需要为外部存储器提供一系列地址。它使用一个简单的脉冲信号来指示数据读取的开始,然后由FPGA提供给存储器时钟。存储器由时钟驱动,数据输入FPGA Cdata_in端口。

II)主并行模式

实际上,并行模式与主串模式具有相同的机制,只是在主串的基础上,在同一循环数中传输的数据变成了8位或更高,如图15所示。这样,主并行优先于主串行。在一些现代的地方,FPGA已经这样配置了。

III)从并行模式

从上面来看,主模式下的连接还是很简单的。然而,有时系统可能会使用其他微处理器来配置FPGA。这里的微处理器可以指嵌入FPGA的处理器,比如Nios。微处理器控制何时配置FPGA以及从哪里读取配置文件。如图16所示,这种方式的优点是处理器可以随时灵活改变FPGA配置,配置速度也快。微处理器首先从外部存储设备中读取一个字节数,然后将其写入FPGA。

IV)从串模式

为了理解从机并行模式,不需要解释从机串行模式,其特点是节省FPGA引脚I/O.

v)多芯片级联

多芯片模式有两种,一种是菊花链的思路,多个FPGA共用一个存储器,另一种是不同的FPGA可以配置其他存储器。如果显示器是共享结构,则显示器被激活。有主FPGA和从FPGA。主FPGA和存储器配置为串行主机模式,而后者的配置由第一个配置的FPGA上的微处理器协调。

4.方式选择

今天FPGA应该可以支持以上五种配置模式,通过三个mode引脚实现。具体映射如下表所示,以后可能会增加模式。

在PS模式下,如果你用线缆配置了板上的FPGA芯片,而这个FPGA芯片在板上已经有了配置芯片,那么你必须隔离线缆和配置芯片之间的信号。通常调试时不会焊接配置芯片。此时,通过电缆下载程序。只有调试完成后,在配置芯片中烧录程序,然后焊接芯片。或者说配置芯片是那种可以很容易从焊接中取出来的。如果出了问题,很容易调试。

在FPGA芯片的配置中,可以采用AS模式的方法。如果EPCS芯片用于通过下载线路编程,初始nCONFIG,nSTATUS 应该拉起来。如果考虑多种配置模式,可以采用跳线设计。让配置模式在跳线中切换,上拉电阻的阻值可以是10K。一般在制作FPGA实验板的时候,可以通过JTAG进行调试,最后在程序调试正确后,通过as模式烧录到配置芯片中。

:开发工具概述

围绕图1完成FPGA开发流程后,这里总结了各个环节设计的相关软件,如下表所示。毕竟充分利用各种工具的特点,进行各种EDA工具的协同设计,对于FPGA开发是非常重要的。充分利用这些EDA工具的优势,可以提高开发效率和系统性能。

表中列出的每种EDA工具都有自己的特点。一般FPGA厂商提供的集成开发环境,比如Altera Quartus II和Xilinx ISE,在逻辑综合和设计仿真方面都不是很好。所以一般都会提供第三方EDA工具的接口,让用户更方便的使用其他EDA工具。为了提高设计效率,优化设计结果,很多厂商提供各种专业软件,配合FPGA芯片厂商提供的工具,进行更高效的设计。

一种常见的使用方式是:将FPGA厂商提供的集成开发环境、专业的逻辑仿真软件、专业的逻辑综合软件一起使用,进行各种EDA工具的协同设计。如Quartus II+ModelSIM+FPGA编译器II、ISE+ModelSIM+Synplify Pro等。

编辑:李倩