一种高准确度的fpga在线调试方法
技术领域
本发明涉及FPGA
技术领域
,尤其是一种高准确度的FPGA在线调试方法。背景技术
当用户电路在FPGA上实现并在FPGA上正常运行时,为了确定用户电路在FPGA上的运行过程正确且符合设计思想,通常需要观测用户电路内部某些特定信号的行为或波形。为了实现这个功能,目前的做法是在FPGA上增加监控电路,当用户电路在FPGA上正常运行时,利用监控电路采样用户电路的待观测信号并输出到FPGA进行在线观测监控继而实现相应的调试。
但是现有的这种做法调试困难较大,主要是因为监控电路的加入会影响原用户电路的用户电路行为:当用户电路单独在FPGA上实现时,其采用布局布线环境A,从而具有对应的用户电路行为A,用户电路行为可以包括某些信号的时序或者某些信号之前的时序关系等多种含义。当加入监控电路后,监控电路也要占用FPGA内部的可编程逻辑资源,需要对用户电路与监控电路合并得到的新电路在FPGA上进行整体的布局布线,因此受到监控电路的影响,用户电路的布局布线环境会相较于未设置监控电路时发生变化,也即变为采用布局布线环境B,从而具有对应的用户电路行为B。因此按照现有常规做法,在加入监控电路后,用户电路的用户电路行为由于布局布线环境改变而实际发生了变化,导致观测到的待观测信号与未加入监控电路时的实际信号是不同的,观测监控的结果不准确,而调试的准确性依赖于观测监控结果的准确性,因此也就导致调试的难度较大、准确性不高。
发明内容
本发明人针对上述问题及技术需求,提出了一种高准确度的FPGA在线调试方法,本发明的技术方案如下:
一种高准确度的FPGA在线调试方法,该方法包括:
在对用户电路进行调试时,确定全局电路由用户电路和监控电路构成,监控电路连接用户电路;
基于FPGA内部的可编程逻辑资源生成全局电路对应的配置码流,配置码流包括基于第一类资源生成并与用户电路对应的第一部分以及基于第二类资源生成并与监控电路对应的第二部分;其中,第一类资源和第二类资源分别表示FPGA内部不同部分的可编程逻辑资源,第一类资源是FPGA内部在未对用户电路进行调试时用于实现用户电路的可编程逻辑资源,且第一类资源和第二类资源中具有相同资源类型的可编程逻辑资源的硬件结构相同;
将配置码流加载到FPGA上,FPGA基于配置码流中的第一部分利用第一类资源形成用户电路、并基于配置码流中的第二部分利用第二类资源形成监控电路,监控电路在用户电路运行过程中采样用户电路的待观测信号并利用FPGA内建的边界扫描链传输到FPGA外进行监控调试。
其进一步的技术方案为,监控电路包括触发模块、采样模块、样本存储模块和样本输出模块,触发模块用于获取触发信号并在检测到触发信号满足预设触发条件时向采样模块发送采样使能信号,采样模块根据采样使能信号按照采样时钟对用户电路的待观测信号进行采样并存储在样本存储模块中直至采样过程结束,采样过程结束后,样本输出模块将样本存储模块中存储的数据利用边界扫描链传输到FPGA外。
其进一步的技术方案为,用户电路运行过程中,触发模块根据获取到的触发信号多次触发采样模块在每个采样过程进行采样。
其进一步的技术方案为,触发模块在根据接收到的触发信号多次触发采样模块进行采样时,存在至少两次所使用的预设触发条件不同。
其进一步的技术方案为,采样模块在至少两个不同的采样过程使用不同的采样参数对用户电路的待观测信号进行采样,采样参数包括采样长度和/或采样次数。
其进一步的技术方案为,FPGA的全局时钟树作为采样模块所使用的采样时钟和/或触发模块发送的采样使能信号。
其进一步的技术方案为,触发模块获取到的触发信号来自于用户电路,或者来自于FPGA外部。
其进一步的技术方案为,FPGA内存在至少一个基本逻辑单元所包含的一部分逻辑部件属于第二类资源、其余另一部分逻辑部件属于第一类资源。
其进一步的技术方案为,在基本逻辑单元中随机选取一部分逻辑部件预留为第二类资源,或者,在基本逻辑单元中间隔式选取一部分逻辑部件预留为第二类资源。
其进一步的技术方案为,FPGA的预定区域内的所有可编程逻辑资源属于第二类资源,其余区域的可编程逻辑资源属于第一类资源。
其进一步的技术方案为,预定区域是一个基本模块所包含的区域,或者,预定区域是FPGA内每个行结构或列结构所包含的区域,或者,预定区域是一个时钟域所包含的区域,或者,预定区域位于预定位置处且具有预定区域范围。
其进一步的技术方案为,FPGA内包括若干个位于不同位置处的预定区域,每个预定区域内包含一个或多个基本模块,每个预定区域内包含的基本模块属于一种或多种资源类型,存在至少两个预定区域具有不同的区域范围,和/或,存在至少两个预定区域包括不同资源类型的基本模块。
其进一步的技术方案为,包含的资源类型不同的两个预定区域具有不同的区域范围。
其进一步的技术方案为,各个预定区域随机分布在FPGA内或者间隔式分布在FPGA内。
其进一步的技术方案为,FPGA为多裸片FPGA,多裸片FPGA内包括多个具有连接关系的FPGA裸片,预定区域均位于同一个FPGA裸片上。
其进一步的技术方案为,预定区域所包含的可编程逻辑资源少于所在的FPGA裸片所包含的可编程逻辑资源,则第二类资源所在的FPGA裸片中还包括部分可编程逻辑资源属于第一类资源,且与第二类资源共用同一个FPGA裸片的第一类资源用于形成用户电路中的预定电路部分。
本发明的有益技术效果是:
本申请公开了一种高准确度的FPGA在线调试方法,预先对FPGA内部的可编程逻辑资源作为划分,对用户电路进行调试时用于实现用户电路的第一类资源,同时也是未对用户电路进行调试用于实现用户电路的可编程逻辑资源,使得在加入监控电路前后,用户电路的布局布线环境基本不受影响,从而使得用户电路行为在监控电路加入前后基本保持一致,因此监控电路对用户电路监测得到的信号更准确,使得调试也更准确。
附图说明
图1是基于监控电路对用户电路进行在线调试时,全局电路在FPGA上的实现流程示意图。
图2是在对用户电路进行在线调试和未进行在线调试两种不同场景下,不同的全局电路在FPGA上的实现流程示意图。
图3是FPGA内部的可编程逻辑资源的排布示意图。
图4是监控电路的结构示意图。
具体实施方式
下面结合附图对本发明的具体实施方式做进一步说明。
本申请公开了一种高准确度的FPGA在线调试方法,请参考图1所示的流程图,该方法包括如下步骤:
步骤S1,在对用户电路进行调试时,确定全局电路由用户电路和监控电路构成,监控电路连接用户电路。
本申请中的全局电路是需要利用FPGA上的可编程逻辑资源实现并在FPGA上运行的全部电路结构,全局电路至少包括用户电路,用户电路是全局电路中用于实现用户设计功能的电路结构。当对用户电路进行调试时,全局电路除了包括用户电路之外,还包括连接至用户电路的监控电路,监控电路是全局电路中用于实现对用户电路的信号监控功能的电路结构,则在这种情况中全局电路由用户电路和监控电路构成。
同时该方法的流程也兼容未对用户电路进行调试、用户电路单独在FPGA上运行的场景,只不过在未对用户电路进行调试,全局电路和配置码流的含义与调试过程中不同,在该步骤中,当未对用户电路进行调试时,全局电路仅由用户电路构成,因此请参考图2所示的流程图,在调试和未调试两种场景下,全局电路在FPGA上实现的过程如图2所示。
步骤S2,基于FPGA内部的可编程逻辑资源生成全局电路对应的配置码流。
FPGA内部的可编程逻辑资源包括多个基本模块及环于每个基本模块分布的互连资源(INT),每个基本模块是一种资源类型的可编程逻辑资源,可编程逻辑资源的资源类型主要包括CLB(基本逻辑单元)、BRAM、IOB、DSP和PC等,每种资源类型包括若干个基本模块。比如图3中,FPGA内部的可编程逻辑资源包括15个基本模块属于三种不同的资源类型,其中有12个CLB、2个DSP和1个BRAM。每个基本逻辑单元CLB内部包括若干个逻辑部件,基本逻辑单元CLB内部包含的逻辑部件主要包括LUT(查找表)和REG(寄存器)。这些基本模块按一定的结构排布,比如以现有常规的Column-Based的FPGA架构为例,其中每个column都是相同资源类型的基本模块,如CLB column以CLB由上到下排列占满一个芯片column,BRAMcolumn以BRAM由上到下排列占满一个芯片column。
本申请预先将FPGA内部的可编程逻辑资源划分为两类,第一类资源和第二类资源分别表示不同部分的可编程逻辑资源,用户电路和监控电路有各自专属的一类可编程逻辑资源,而且用户电路和监控电路分别由各自对应的一类资源来实现,每一类资源包含的基本模块的资源类型和数量根据对应的电路预估的规模所确定,一般来说用户电路的规模大于监控电路,因此用户电路对应的第一类资源所包含的可编程逻辑资源的资源规模大于监控电路对应的第二类资源。且第一类资源和第二类资源中具有相同资源类型的可编程逻辑资源的硬件结构相同,比如第一类资源中的CLB和第二类资源中的CLB的硬件结构相同,也即本申请并没有对FPGA内部的可编程逻辑资源的硬件结构进行修改,只是对可编程逻辑资源进行了划分。
基于已经划分好的第一类资源和第二类资源,可以生成全局电路对应的配置码流,在对用户电路进行调试时,全局电路由用户电路和监控电路构成,配置码流包括基于第一类资源生成并与用户电路对应的第一部分以及基于第二类资源生成并与监控电路对应的第二部分。在未对用户电路进行调试时,全局电路仅由用户电路构成,此时配置码流基于FPGA内部的第一类资源生成并与用户电路对应,因此在对用户电路进行调试时用于实现用户电路的第一类资源,同时也是未对用户电路进行调试用于实现用户电路的可编程逻辑资源,由于在监控电路加入前后,都由第一类资源实现用户电路,因此用户电路的用户电路行为在监控电路加入前后基本保持一致。
FPGA内部哪些可编程逻辑资源属于第一类资源、哪些属于第二类资源是预先划分好的,可选的,本申请提供如下几种不同的划分方式:
方式一、第一类资源和第二类资源共用同一个位置处的基本模块,这种方式主要针对资源类型为基本逻辑单元CLB的基本模块,也即FPGA内存在至少一个基本逻辑单元所包含的一部分逻辑部件属于第二类资源、其余另一部分逻辑部件属于第一类资源。在对一个基本逻辑单元内的逻辑部件进行划分时,又可以按照如下任一种情况进行划分:(1)在基本逻辑单元中随机选取一部分逻辑部件预留为第二类资源、剩余的逻辑部件作为第一类资源。(2)在基本逻辑单元中间隔式选取一部分逻辑部件预留为第二类资源、剩余的逻辑部件作为第一类资源。
由于CLB内部包括LUT和REG两类逻辑部件,因此在将一个基本逻辑单元所包含的一部分逻辑部件预留为第二类资源时,包括如下几种情况:
(a)仅将一部分LUT或者全部LUT预留为第二类资源、所有REG以及可能存在的未被选择的LUT作为第一类资源。
(b)仅将一部分REG或者全部REG预留为第二类资源、所有LUT以及可能存在的未被选择的REG作为第一类资源。
(c)同时选择一部分LUT以及一部分REG预留为第二类资源、剩余未被选择的LUT和REG作为第一类资源。这是最常用的一种方式,比如一个CLB内部包括8个LUT和16个REG,则可以划分2个LUT和4个REG属于第二类资源,剩余的6个LUT和12个REG属于第一类资源。
而在同时选取部分LUT和部分REG作为第二类资源时,LUT和REG可以均采用随机式选取预留,或者均采用间隔式选取预留,或者一个采用随机式选取预留、另一个采用间隔式选取预留。当LUT和REG均采用间隔式选取预留时,LUT和REG采用的间隔相同或不同,比如在间隔式选取LUT时,每隔1个LUT选取一个预留为第二类资源;在间隔式选取REG时,每隔2个LUT选取一个预留为第二类资源。
方式二、按所在位置对可编程逻辑资源所属类别进行划分,FPGA的预定区域内的所有可编程逻辑资源均属于第二类资源,而除预定区域之外的其余区域的可编程逻辑资源属于第一类资源。与第一种方式不同的是,在这种方式中,每一类资源分别独占一个位置处的基本单元,也即当将一个CLB划分给第二类资源时,该CLB内的所有LUT和REG都属于第二类资源。其中,预定区域有多种不同的含义,分别对应不同的划分方式,按如下分类:
第一类,一个预定区域仅包括一个基本模块:(1)预定区域是一个基本模块所包含的区域,则在这种情况中,预定区域内仅包括属于一种资源类型的一个基本模块。比如将一个CLB所在区域作为一个预定区域划分给第二类资源,或者将一个BRAM所在区域作为一个预定区域划分给第二类资源。
第二类,一个预定区域包括至少两个基本模块,又可以包括如下几种情况:
(2)预定区域是FPGA内每个行结构或列结构所包含的区域,在这种情况中,预定区域内包括属于同一资源类型的多个基本模块或者包括至少属于两种不同资源类型的多个基本模块。较为常用的是将FPGA内每个列结构作为一个预定区域,而在Column-Based的FPGA架构中,同一个列结构中的各个基本模块的资源类型相同,因此基于此,预定区域内包括多个属于同一资源类型的基本模块。
(3)预定区域是一个时钟域所包含的区域,在这种情况中,预定区域内包括属于同一资源类型的多个基本模块或者包括至少属于两种不同资源类型的多个基本模块。
(4)预定区域位于预定位置处且具有预定区域范围,在这种情况中,预定区域内包括属于同一资源类型的多个基本模块或者包括至少属于两种不同资源类型的多个基本模块。也即预定区域根据需要自定义划分,预定位置可以根据需要选取任意合适的位置,比如选取全片的左下角、全片的中央、全片的右上角、时钟域的最高行/最低行等等。预定区域范围也可以根据需要配置合适的大小,比如配置预定区域范围包含8*6个CLB的范围。
在实际应用时,可以仅将一个预定区域内的所有可编程逻辑资源预留给第二类资源。或者,将多个预定区域内的所有可编程逻辑资源预留给第二类资源,则FPGA内包括若干个位于不同位置处的预定区域,其中BRAM的位置通常靠近同一类资源中相应的CLB,或者靠近时钟域的边界。通常情况下,第一类资源和第二类资源中分别均包括多种资源类型的基本模块,而上述情况(1)中一个预定区域仅包含一种资源类型的一个基本模块,因此尤其是当单个预定区域的区域范围如上述情况(1)时,FPGA内通常包括多个预定区域,同样的,当单个预定区域的区域范围如上述情况(2)、(3)和(4)时,FPGA内通常也会包括多个预定区域。
当FPGA内包括多个预定区域时,这多个预定区域位于不同位置处,每个预定区域内包含一个或多个基本模块,每个预定区域内包含的基本模块属于一种或多种资源类型,各个预定区域包含相同资源类型的基本模块,或者存在至少两个预定区域包括不同资源类型的基本模块,比如一个预定区域内仅包括CLB、另一个预定区域内仅包括BRAM。
每个预定区域所包含的区域范围为上述(1)~(4)中任一种,各个预定区域的区域范围均相同,或者存在至少两个预定区域具有不同的区域范围,其中,包含的资源类型相同的两个预定区域具有不同的区域范围,比如一个预定区域以CLB为单位仅包含一个CLB,另一个预定区域以自定义的预定区域范围为单位包括8*6个CLB。或者,包含的资源类型不同的两个预定区域具有不同的区域范围,这是更为常用的做法,比如一个预定区域以自定义的预定区域范围为单位包括8*6个CLB,另一个预定区域以BRAM Column为单位包括1个BRAM。
FPGA内的多个预定区域随机分布在FPGA内或者间隔式分布在FPGA内,当多个预定区域分隔式分布时,可以是所有预定区域之间依次间隔分布,或者更为常用的,包含相同资源类型且具有相同区域范围的预定区域构成一组,每一组内的各个预定区域相互之间间隔分布,不同组采用的间隔相同或不同。比如10个以CLB为单位的预定区域构成一组,每两个预定区域之间的间隔为128个CLB;8个以CLB Column为单位的预定区域构成一组,每两个预定区域之间的间隔为64个CLB Column;5个以时钟域为单位的预定区域构成一组,每两个预定区域之间的间隔为12个时钟域;3个以BRAM Column为单位的预定区域构成一组,每两个预定区域之间的间隔为2个BRAM Column。由此可见,包含的资源类型不同和/或涵盖的区域范围不同的预定区域在间隔式分布式采用的间隔相同或不同。
本申请中的FPGA既可以是单裸片FPGA也可以是多裸片FPGA,多裸片FPGA内包括多个具有连接关系的FPGA裸片。不管是对于单裸片FPGA还是多裸片FPGA,均可以采用上述方式一或方式二提供的任意一种方法对FPGA上的可编程逻辑资源划分第一类资源和第二类资源。对于单裸片FPGA,划分得到的第一类资源和第二类资源均位于同一个裸片上。而对于多裸片FPGA,划分得到的每一类资源分别包括一个或多个裸片上的可编程逻辑资源,也即预定区域仅位于其中一个FPGA裸片上或者存在至少两个FPGA裸片上均包含预定区域,且两类资源所覆盖的裸片相同或不同。则在该实施例中,对于多裸片FPGA在上述方式二中,当将多裸片FPGA的预定区域内的所有可编程逻辑资源划分为第二类资源时,预定区域均位于多裸片FPGA中的同一个FPGA裸片上,也即专门预留一个FPGA裸片上的可编程逻辑资源给第二类资源、其他FPGA裸片上的可编程逻辑资源均划分给第一类资源。需要说明的是,若一个FPGA裸片的可编程逻辑资源不能满足所需的第二类资源的资源需求,也可以预留多个FPGA上的可编程逻辑资源给第二类资源,但实际情况中由于监控电路的电路规模不会太大,因此第二类资源的资源需求通常不会太大,一个FPGA裸片上的可编程逻辑资源就可以满足需求。
在上述实施例中,预定区域所包含的可编程逻辑资源可以与所在的FPGA裸片所包含的可编程逻辑资源相同,也即将FPGA裸片上的全部可编程逻辑资源全部划分为第二类资源。或者,预定区域所包含的可编程逻辑资源少于所在的FPGA裸片所包含的可编程逻辑资源,也即只将FPGA裸片上的部分可编程逻辑资源划分为第二类资源,则可以将FPGA裸片上的其余可编程逻辑资源划分为第一类资源,因此存在部分第一类资源与全部第二类资源共用同一个FPGA裸片。比如多裸片FPGA中包括4个具有连接关系的FPGA裸片分别记为裸片1、裸片2、裸片3和裸片4,一种示例性的做法是第二类资源包括裸片1上的全部可编程逻辑资源,第一类资源包括裸片2、裸片3和裸片4共三个裸片上的全部可编程逻辑资源;另一种示例性的做法是第二类资源包括裸片1上的部分可编程逻辑资源,第一类资源包括裸片1上剩余其他的可编程逻辑资源以及裸片2、裸片3和裸片4共三个裸片上的全部可编程逻辑资源。在该实施例中,与第二类资源共用同一个FPGA裸片的第一类资源用于形成用户电路中的预定电路部分,预定电路部分是预先配置的用户电路中位于非关键路径上的电路部分,非关键路径是指时序余量达到预设阈值的路径,这样即便监控电路对用户电路产生一些影响,也基本不会导致用户电路的用户电路行为发生变化。
本领域技术人员知道的是,在输入全局电路后,需要经过综合、装箱、布局、布线和时序分析等步骤才能生成全局电路对应的配置码流,需要注意的是,将可编程逻辑资源划分为两类时同样需要满足装箱约束,尤其是当第一类资源和第二类资源共用同一个位置处的CLB时需要考虑满足CLB装箱约束,比如在将监控电路打散分别加入到CLB中占用属于第二类资源的逻辑部件时,加入每个CLB最多有2个时钟信号,而监控电路的REG需要连一路时钟信号,则只能将监控电路中的REG加入到至少有一路空余的时钟信号的CLB中。然后再正常进行布局布线等处理即可生成配置码流,本申请对这些中间步骤不再详细展开描述。
步骤S3,将配置码流加载到FPGA上实现全局电路。
在对用户电路进行调试时,对应于全局电路由用户电路和监控电路构成的情况,FPGA基于配置码流中的第一部分利用第一类资源形成用户电路、并基于配置码流中的第二部分利用第二类资源形成监控电路,用户电路和监控电路均在FPGA上运行,同时监控电路对用户电路的运行过程进行监控。
监控电路在用户电路运行过程中采样用户电路的待观测信号并利用FPGA内建的边界扫描链传输到FPGA外进行监控调试,监控电路的电路结构如图4所示,监控电路包括触发模块、采样模块、样本存储模块和样本输出模块,触发模块用于获取触发信号Trig并在检测到触发信号Trig满足预设触发条件时向采样模块发送采样使能信号Sample_EN,采样模块根据采样使能信号Sample_EN按照采样时钟CLK对用户电路的待观测信号Sig进行采样并存储在样本存储模块中直至采样过程结束。采样模块按照预先配置的采样参数对待观测信号Sig进行采样,采样参数包括采样长度和/或采样次数,因此当已采样的数据的长度达到预先配置的采样长度和/或已采样的次数达到预先配置的采样次数时,确定采样过程结束,其中,预先配置的采样长度和/或已采样的次数不超过样本存储模块的存储容量,避免存储满溢。采样过程结束后,样本输出模块按照先入先出次序将样本存储模块中存储的数据利用FPGA已内建的边界扫描链传输到FPGA外。然后片外的连接器可以接收整理这些数据并显示波形,继而进行调试,从而实现对待观测信号的在线监控和调试,如上所述,由于用户电路的用户电路行为基本不受监控电路的影响,因此片外观测到的待观测信号更准确、调试也更准确。
上述电路结构中,触发模块主要由寄存器以及LUT形成的触发器实现,寄存器用于存储预设触发条件,触发器用于在获取到的触发信号Trig满足预设触发条件时发送采样使能信号Sample_EN。采样模块主要由寄存器以及LUT形成的计数器实现,寄存器用于存储采样参数,计数器实现采样次数的计数。样本存储模块主要由BRAM实现。样本输出模块主要由移位寄存器实现。
在一个实施例中,FPGA的全局时钟树作为采样模块所使用的采样时钟和/或触发模块发送的采样使能信号。
在上述过程中,触发模块获取到的触发信号Trig同样来自于用户电路,或者来自于FPGA外部,图4以来自于用户电路为例。触发信号Trig包括单路或多路信号,触发信号Trig所需要满足的预设触发条件预先自定义配置,比如获取到的触发信号Trig为“a,b,c”,确定“a,b,c=1,0,1”时满足预设触发条件。
在本申请中,由于边界扫描链的传输速度通常无法达到采样模块的采样带宽(采样速度*采样位宽),难以在采样时同步输出,因此本申请将采样到的数据先存储后再输出。可选的,在用户电路运行过程中包括多个采样过程,触发模块根据获取到的触发信号多次触发采样模块在每个采样过程进行采样,则可以在每个采样过程结束后将该采样过程采样到的数据输出,或者在多个采样过程结束后将多个采样过程采样到的数据输出。
当触发模块根据接收到的触发信号多次触发采样模块进行采样时,每次使用的预设触发条件相同,或者存在至少两次所使用的预设触发条件不同,比如按照上述举例,一个采样过程中,当触发信号“a,b,c=1,0,1”时触发采样;在另一个采样过程,当触发信号“a,b,c=0,0,1”时触发采样。
不管多次触发时使用的预设触发条件是否相同,在另一个实施例中,采样模块在至少两个不同的采样过程使用不同的采样参数对用户电路的待观测信号进行采样,采样参数包括采样长度和/或采样次数。
同理,在未对用户电路进行调试时,对应于全局电路仅由用户电路构成的情况,FPGA基于配置码流利用第一类资源形成用户电路,用户电路在FPGA上运行,如图2所示。
以上所述的仅是本申请的优选实施方式,本发明不限于以上实施例。可以理解,本领域技术人员在不脱离本发明的精神和构思的前提下直接导出或联想到的其他改进和变化,均应认为包含在本发明的保护范围之内。