技术领域
[0001] 本发明涉及集成电路设计领域,尤其是涉及一种基于流图划分的FPGA资源划分方法。
相关背景技术
[0002] 在集成电路设计硬件仿真中,工程师一般是通过手动编辑的方式将设计模块、信号、端口与FPGA建立映射关系,从而完成FPGA设计资源划分,这种手动方式在设计模块数量较少的情况下可行,但是当设计模块数量过多时会增加手动划分的出错概率、并且效率低下。通常这个过程需要考虑到很多的因素和处理工作,非常耗费精力和时间。因此,有必要对现有的手动划分流图的方法进行改进。
具体实施方式
[0022] 为了使本技术领域的人员更好地理解本发明的技术方案,下面结合附图对本发明作进一步的详细说明。
[0023] 一种基于流图划分的FPGA资源划分方法,具体包括:
[0024] S1、将用户的多个设计模块抽象成多个RLM,将多个设计模块之间的信号连接关系抽象为多个RLM之间的信号边,根据RLM类型对多个RLM进行分组,得到多个RLM分组节点,根据信号边的类型对多条信号边进行分组,得到多组分组后的信号边,多个RLM分组节点和多组分组后的信号边构成流图;
[0025] S2、创建多个RLM的属性列表和多个信号边的属性列表,将多个RLM的属性列表、多个信号边的属性列表和流图通过流图划分界面展示;
[0026] S3、将多个FPGA的容积抽象分割成若干个存储单元,创建多个FPGA的属性列表和若干个存储单元的属性列表,将若干个存储单元、多个FPGA的属性列表以及若干个存储单元的属性列表通过流图划分界面展示;
[0027] S4、通过多个RLM的属性列表、多个信号边的属性列表、FPGA的属性列表以及存储单元的属性列表进行交互事件,将多个RLM分组节点和多组分组后的信号边划分至若干个存储单元,得到多个RLM对应的划分配置文件;
[0028] S5、根据资源约束条件检查对多个RLM分组节点和多组分组后的信号边的划分是否合理,若划分合理,输出多个RLM对应的划分配置文件。
[0029] 具体地,参见图1,图1为本发明一实施例中一种基于流图划分的FPGA资源划分方法的流程图。
[0030] 首先将用户的设计模块抽象成RLM,一个设计模块对应一个RLM,由此得到多个RLM,多个RLM组成RLM清单,根据设计模块的类型对RLM清单中的多个RLM分组,每组RLM对应一个RLM分组节点,由此得到多个RLM分组节点,通过力导布局算法计算出每个RLM在流图上x轴和y轴的坐标位置,RLM分组节点的位置为组内所有RLM的位置的中心,将不同的设计模块之间的信号连接关系抽象为对应的RLM之间的信号边,根据信号类型对多条信号边进行分组,得到多组分组后的信号边,多个RLM分组节点和多组分组后的信号边构成流图;
[0031] 然后创建多个RLM的属性列表、多个信号边的属性列表,将多个RLM的属性列表、多个信号边的属性列表以及流图通过流图划分界面展示;
[0032] 接着针对一块主板上的多个FPGA,将每个FPGA的容积抽象分割成若干个存储单元,创建多个FPGA的属性列表、若干个存储单元的属性列表,将多个FPGA的属性列表、若干个存储单元的属性列表以及若干个存储单元通过流图划分界面展示;
[0033] 通过上述属性列表(RLM的属性列表、信号边的属性列表、FPGA的属性列表、存储单元的属性列表)进行交互事件,将多个RLM分组节点和多组分组后的信号边划分至若干个存储单元,构建多个RLM分组节点和FPGA之间的映射关系,得到多个RLM组成的RLM列表对应的划分配置文件;
[0034] 根据资源约束条件检查对多个RLM分组节点和若干个存储单元映射关系是否合理,若映射关系满足资源约束条件,则划分合理,输出多个RLM对应的划分配置文件。
[0035] 在一个实施例中,S1中流图中的节点对应RLM分组节点,流图中的多条边对应多个RLM分组节点之间的信号边。
[0036] 具体地,流图由多个节点和多条边组成,流图中的节点对应RLM分组节点,流图中的边对应RLM分组节点之间的信号边。
[0037] 流图中的节点的属性包括:节点名称、节点颜色、节点面积、节点形状、节点类型。
[0038] 将RLM分组节点中已划分的RLM的颜色使用划分后所属的存储单元的颜色进行关联填充;没有划分的RLM用白色填充。
[0039] 节点面积可通过RLM分组节点的半径计算得出,RLM分组节点的半径为组内所有的RLM的半径之和。RLM的半径和Total LUTS(总查表数)资源占用情况成正比,占用Total LUTS(总查表数)的资源数越大,RLM的半径就越大,反之,占用Total LUTS(总查表数)的资源数越小,RLM的半径就越小。
[0040] 由于RLM分为普通和用户自定义两种类型,在对多个RLM划分前把相同类型的RLM放在一块组成一个RLM分组,RLM在流图中用圆形表示,RLM分组节点在流图中用矩形框表示,不同类型的RLM分组节点的鼠标悬停状态、矩形框的大小不同。
[0041] 流图中边的属性包括:边的宽度、边的颜色、边的长度及边的指向。
[0042] 流图中的实线代表信号边,信号边的宽度根据信号的位宽计算,信号边的宽度和构成信号边的每个信号的位宽成正比:信号的位宽越大,对应的信号边的宽度越大;反之信号的位宽越小,对应的信号边的宽度越小;
[0043] 流图中边的颜色具体设置方式如下:未划分的边设置为灰色;已划分的边用颜色(比如选中高亮蓝色)填充;
[0044] 流图中边的长度对应RLM分组节点之间的距离,用于表示信号的松紧耦合:距离长表示信号之间为松耦合,距离短表示信号之间为紧耦合;
[0045] 流图中边的指向用箭头表示,代表信号的传输方向。
[0046] 在一个实施例中,S2中流图划分界面具体包括工具栏、存储单元面板、属性面板和流图,工具栏位于流图划分界面的顶部,存储单元面板位于流图划分界面的右侧,属性面板位于流图划分界面的底部,流图位于流图划分界面的中间。
[0047] 具体地,参见图2,图2为本发明一实施例中的流图划分界面示例图。
[0048] 图2示出的流图划分界面包括工具栏、存储单元面板(对应图2右侧的SLICE)、属性面板和流图,其中:
[0049] 工具栏位于流图划分界面的顶部,工具栏上的操作按钮包括放大、缩小、缩放合适大小、力导算法布局、过滤,搜索,保存,刷新等。点击“放大”操作按钮,可将流图放大;点击“缩小”按钮,可将流图缩小;点击“缩放合适大小”按钮,可将流图缩放至合适大小;点击“力导算法布局”,可重新计算流图中RLM的布局位置;点击“过滤”按钮,可隐藏流图中的过滤的节点或信号边;点击“搜索”按钮,可快速查找并定位某个RLM节点或信号边;点击“保存”按钮,可保存当前编辑了的节点或信号边;点击“刷新”按钮,可刷新流图中RLM分组节点经过重新计算得出的位置。
[0050] 存储单元面板位于流图划分界面的右侧,包括FPGA机柜层级信息、FPGA下属的存储单元列表、已分配的RLM:
[0051] FPGA机柜层级信息用于描述有多少个FPGA以及每个FPGA所属机器主板的位置编号;FPGA下属的存储单元列表用于描述将每个FPGA的容积抽象分割成若干个存储单元,对应的存储单元列表;已分配的RLM表示目前已经划分至FPGA的某个存储单元。
[0052] 属性面板位于流图划分界面的底部,包括RLM属性面板、信号边属性面板、存储单元属性面板和FPGA属性面板。
[0053] 流图位于流图划分界面的中间,包括多个RLM分组节点和多组分组后的信号边。
[0054] 在一个实施例中,S2中RLM的属性列表包括:RLM分组节点名称、拟划分的存储单元、分组ID、RLM分组列表、RLM资源使用明细。
[0055] 具体地,参见图2,RLM的属性列表信息通过流图划分界面的底部的RLM属性面板(对应图2中的RLM Properties)展示,包括如下字段:
[0056] 分组ID,表示RLM分组节点的对应的ID,用ID表示;
[0057] RLM分组节点名称:用name表示;
[0058] 拟划分的存储单元:用存储单元的名称和编号表示;
[0059] RLM分组列表:表示RLM分组节点中的RLM,比如rlm1,rlm2,rlm3等;
[0060] RLM资源使用明细如下表所示:
[0061]名称 中文释义 参考样例数值
TotalLUTS 总查找表数 100
LogicLUTS 等效逻辑查找表数 100
LUTRAMS 用作存储单元查找表数 100
SRLS 位移寄存器数 0
FFS 寄存器数 0
RAM18 块内存18数 0
RAM36 块内存36数 10
URAM 高速内存数 10
DSPBlocks 专用处理器数 10
Trigger 触发信号数 1
Monitor 采样信号数 2
[0062] 在一个实施例中,S2中信号边的属性列表包括:信号边名称、分组名称、RLM连接关系。
[0063] 具体地,参见图2,信号边的属性信息通过流图划分界面的底部的信号边属性面板(对应图2中的Signal Properties)展示,包括如下字段:
[0064] 信号名称:用signal(id)表示;
[0065] 分组名称:用RLM Group1、RLM Group2等表示;
[0066] 总位宽:表示信号的总位宽,用数字如120(假设值)表示;
[0067] RLM连接关系:RLM1‑RLM2
[0068] Single10‑>single20位宽:1(假设值)信号组名称:group1
[0069] Single11‑>single21位宽:64(假设值)信号组名称:group1
[0070] RLM连接关系:RLM3–RLM4
[0071] Single11<‑single21位宽:64(假设值)信号组名称:group2
[0072] Single11<‑single21位宽:64(假设值)信号组名称:group2。
[0073] 在一个实施例中,S3中存储单元的属性列表包括:存储单元名称,FPGA名称,FPGA使用率、RLM清单。
[0074] 具体地,存储单元的属性信息通过流图划分界面的底部的存储单元属性面板(对应图2中的Slice Properties)展示,包括如下字段:
[0075] 存储单元名称:用name表示;
[0076] 存储单元的ID:用ID表示;
[0077] FPGA名称:用FPGA Name表示;
[0078] FPGA使用率:采用百分比表示,例如83%(假设值);
[0079] RLM清单:里面的RLM用rlm1,rlm2,...等来表示;
[0080] RLM资源使用统计如下表所示:
[0081]名称 中文释义 参考样例数值
TotalLUTS 总查找表数 100
LogicLUTS 等效逻辑查找表数 100
LUTRAMS 用作存储单元查找表数 100
SRLS 位移寄存器数 0
FFS 寄存器数 0
RAM18 块内存18数 0
RAM36 块内存36数 10
URAM 高速内存数 10
DSPBlocks 专用处理器数 10
Trigger 触发信号数 1
Monitor 采样信号数 2
Global 全局资源数 5
[0082] 在一个实施例中,S4中的交互事件包括监听流图操作事件和监听工具栏事件。
[0083] 具体地,当交互事件为监听流图操作事件时,选择节点或边的事件包括鼠标悬停、高亮、拖拽、框选、右键;由于在流图中无法呈现节点或边上的所有属性,需要通过增加属性面板的方式来进行更多的属性呈现,可通过绑定浏览器的点击和右键事件,注册相应的处理函数,当点击时触发该函数激活属性面板。
[0084] 流图操作常用的鼠标事件包括:
[0085] 1)点击流图中的节点,选中RLM分组节点(若RLM分组节点中只有一个RLM,此时选中RLM分组节点也就是选中RLM分组节点中的这一个RLM);
[0086] 2)点击流图中的边,选中信号边;
[0087] 3)鼠标框选流图中的目标区域,选中多个RLM节点;
[0088] 4)点击键盘空格键开始拖拽RLM节点到存储单元面板,松开鼠标结束拖拽;
[0089] 5)点击流图中的矩形框,选中RLM分组节点可以拖出和拖入存储单元面板。
[0090] 当交互事件为监听工具栏事件时,可通过命令行模式注册按钮函数,当点击按钮时触发该按钮函数。
[0091] 在一个实施例中,S4中将多个RLM分组节点和多组分组后的信号边划分至若干个存储单元,具体是指通过添加操作将多个RLM分组节点添加到若干个存储单元中,或者通过删除操作将待删除的RLM分组节点从对应的存储单元中删除。
[0092] 具体地,将FPGA的容积抽象分割成若干个存储单元,将流图划分界面的右侧存储单元面板中的每行假设成一个存储单元;将RLM分组节点分配给FPGA中的一个存储单元(存储单元对应图2中的SLICE),从而建立RLM与存储单元之间多对一的映射关系。
[0093] 添加操作是指把RLM分组节点中的RLM添加到存储单元中,具体可通过以下3种方式进行:
[0094] 1)单击选择RLM分组节点,将RLM分组节点拖入到存储单元,RLM分组节点中所有的RLM一块加入到存储单元;
[0095] 2)框选同一个RLM分组节点中的多个RLM,按下空格键,将选取的多个RLM拖入到存储单元;
[0096] 3)单击选择RLM分组节点中的某个RLM,点击存储单元边上的【+】按钮,把选择的RLM加入存储单元。
[0097] 删除操作是指在存储单元面板上把待删除的RLM分组节点从所属的存储单元中删除,具体可通过以下3种方式进行:
[0098] 1)选择包含了待删除的RLM分组节点的存储单元,点击存储单元边上的【‑】按钮,将选择的RLM分组节点从当前所属的存储单元中删除;
[0099] 2)选择包含了待删除的RLM分组节点的存储单元,选择待删除的RLM分组节点,从存储单元中拖出待删除的RLM分组节点,这时待删除的RLM分组节点中的所有RLM一块从存储单元中被删除;
[0100] 3)选择包含了待删除的RLM分组节点的存储单元,点击存储单元边上的 按钮,删除当前存储单元中的所有RLM。
[0101] 在一个实施例中,S4中的资源约束条件包括:RLM分组节点中的RLM是否全部加入存储单元、RLM各类资源占有是否超出FPGA的容积、信号边的端口类型是否满足预设规则、存储单元标识状态是否满足要求。
[0102] 在一个实施例中,预设规则具体包括:跨板信号仅支持GT端口连接、紧耦合信号仅支持LVDS端口连接、松耦合信号支持GT端口或LVDS端口连接、GT端口只能报文传输、LVDS直连自动分配端口、同一FPGA的同一编号的LVDS只能有一种报文传输方式。
[0103] 具体地,将多个RLM分组节点划分至多个存储单元后,需要根据资源约束条件检查划分是否合理,资源约束条件包括:
[0104] 1)RLM分组节点中的RLM是否全部加入存储单元;
[0105] 2)RLM各类资源占有是否超出FPGA的容积,具体为:预设FPGA资源使用率的门阈值,根据预设的门阈值检查RLM的资源占有情况,若RLM的资源占有率超出预设FPGA资源使用率的门阈值的70%,则视为FPGA资源使用率不满足要求,对不满足要求的FPGA使用率采用标红文字提示;
[0106] 3)信号边的端口连接类型是否满足预设规则,预设规则具体包括:跨板仅支持GT端口(即高速收发器端口);紧耦合仅支持LVDS端口(即低电压差分信号端口)连接,松耦合GT端口或LVDS端口均支持;GT端口只能报文传输;LVDS端口直连自动分配端口(通过端口分配算法自动分配的端口);同一FPGA的同一编号的LVDS端口只能有一种报文传输方式,不能相互冲突;
[0107] 4)存储单元标识状态是否满足要求。检查存储单元的划分状态,标题(也就是存储单元的名称)用颜色表示,其中:蓝色标题表示正在编辑;红色标题表示校验错误,需要用户检查存储单元或FPGA资源情况;绿色标题表示校验通过。
[0108] 根据上述约束条件对划分结果进行检查,若检查不通过,需要修改划分,直到修改后的划分检查通过,将检查通过的划分配置文件输出。
[0109] 上述一种基于流图划分的FPGA资源划分方法,将用户的多个设计模块抽象成多个RLM,多个设计模块之间的信号连接关系抽象为多个RLM之间的信号边,根据RLM类型对多个RLM进行分组,得到多个RLM分组节点,根据信号边的类型对多条信号边进行分组,得到多组分组后的信号边,将多个RLM分组节点和多组分组后的信号边构成流图;创建多个RLM的属性列表和多个信号边的属性列表,将多个RLM分组节点的属性列表、多个信号边的属性列表和流图通过流图划分界面展示;将FPGA的容积抽象分割成若干个存储单元,创建FPGA的属性列表和若干个存储单元的属性列表,将FPGA的属性列表、若干个存储单元以及属性列表通过流图划分界面展示;通过上述属性列表进行交互事件,将多个RLM分组节点和多组分组后的信号边划分至若干个存储单元,得到多个RLM对应的划分配置文件;根据资源约束条件检查对多个RLM分组节点和多组分组后的信号边的划分是否合理,若划分合理,输出多个RLM对应的划分配置文件。该方法将RLM和存储单元之间建立多对一的映射关系,简化了真实模块以及真实信号之间的连接关系,丰富了流图交互操作能力,除了提高划分的效率,还提升了用户体验。
[0110] 以上对本发明所提供的一种基于流图划分的FPGA资源划分方法进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。