一种用于VHDL可编程逻辑设计的跨时钟域静态分析系统技术方案

技术编号:35206333 阅读:16 留言:0更新日期:2022-10-15 10:17
本发明专利技术涉及硬件描述语言VHDL的跨时钟域分析,使用静态分析的方法识别可编程逻辑设计中的跨时钟域路径。本发明专利技术属于硬件描述语言静态分析技术领域。本发明专利技术能够对使用VHDL硬件描述语言编写的可编程逻辑设计,进行解析生成抽象语法树,分析并遍历抽象语法树,生成时钟树、推断信号时钟域、并判断跨时钟域路径及识别同步化器类型。步化器类型。步化器类型。

【技术实现步骤摘要】
一种用于VHDL可编程逻辑设计的跨时钟域静态分析系统


[0001]本专利技术涉及硬件描述语言VHDL的跨时钟域分析,使用静态分析的方法识别可编程逻辑设计中的跨时钟域路径。本专利技术属于硬件描述语言静态分析


技术介绍

[0002]在FPGA及集成电路等可编程逻辑设计中,使用某一时钟对其他时钟域信号进行采样时,会出现跨时钟域问题。当前FPGA及集成电路设计规模及复杂程度越来越高,对于复杂的设计来说,其内部会使用到多个时钟,各时钟域之间传递信号的情况也十分频繁。因此跨时钟域问题已经成为当前可编程逻辑必然要面临的问题。跨时钟域问题对于设计的可靠性有着十分重大的影响,如果不能妥善处理,使得跨时钟域传递的信号采样不可靠,会导致设计功能的失效。
[0003]跨时钟域有多种类型,每种类型导致采样失效的原理不尽相同,但其总体特性表现为,发生的随机性较强。因此,不管是行为仿真还是时序仿真都很难发现。在工程实践中,跨时钟域问题很容易跟其他时序问题混合在一起,一旦发生很难排查,大大影响了项目研发进度。因此,通常在设计及编码阶段对跨时钟域问题进行处理,尤其是在编码后对跨时钟域问题进行排查十分必要。
[0004]当前排查方法分为人工走查法和静态分析法。人工走查是通过有经验的测试验证人员,对代码进行仔细阅读,依靠经验及专业知识识别跨时钟域的路径,并分析设计上是否进行了妥善处理。这种方法的优点是可靠性高,但缺点是严重依赖人员能力,而且效率不高。当设计规模巨大且时钟复杂时,不但会耗费大量时间,还可能引入人为错误。静态分析是通过使用跨时钟域分析工具对代码进行扫描,能快速识别设计中全部的跨时钟域路径,然后再经过人工检查,确认其是否进行妥善处理。跨时钟域分析工具的关键技术包括硬件描述语言解析、时钟树建立、信号时钟域推断及跨时钟域路径判断等。

技术实现思路

[0005]本专利技术解决的技术问题是:克服现有技术的不足,提供了一种用于VHDL可编程逻辑设计的跨时钟域静态分析系统,能够对使用VHDL硬件描述语言编写的可编程逻辑设计,进行解析生成抽象语法树,分析并遍历抽象语法树,生成时钟树、推断信号时钟域、并判断跨时钟域路径及识别同步化器类型。
[0006]本专利技术的技术解决方案是:一种用于VHDL可编程逻辑设计的跨时钟域静态分析系统,包括VHDL解析单元、时钟树建立单元、信号时钟域推断单元和跨时钟域路径判断单元;
[0007]所述VHDL解析单元用于对VHDL语言编写的可编程逻辑设计的代码进行词法分析及语法分析,生成单个设计文件的抽象语法树,并将各个文件的抽象语法树进行连接,生成整个设计的抽象语法树;
[0008]所述时钟树建立单元用于根据时钟约束文件确定用户定义时钟,分析抽象语法树结构推断时钟,并将二者结合生成整个设计的时钟树;
[0009]信号时钟域推断单元用于分析及遍历抽象语法树,并结合时钟树数据,推断信号时钟域;
[0010]跨时钟域路径判断单用于分析及遍历抽象语法树,结合信号时钟域数据,判读跨时钟域路径,并根据同步化器特征识别同步化器类型。
[0011]进一步地,所述VHDL解析单元包含词法分析模块、语法分析模块、抽象语法树拼接模块;
[0012]所述词法分析模块接收字符串形式的单个VHDL文件,按照输入的次序依次扫描源程序,根据VHDL的词法规则识别出具有独立意义的单词,产生与源程序等价的属性字Token流;
[0013]所述语法分析模块用于将属性字Token流组合成语法短语,然后按照VHDL语言的语法规则判断源程序在结构上是否正确,如果语法正确则生成该文件的抽象语法树,否则报出语法错误;
[0014]抽象语法树拼接模块用于当每个VHDL文件的语法均正确且成功生成抽象语法树后,采用自顶向下的方式对单个文件的抽象语法树进行拼接,形成整个设计的抽象语法树。
[0015]进一步地,所述对单个文件的抽象语法树进行拼接的方法包括:
[0016]新建数据结构,用来保存设计中文件的调用层次及信号连接关系;
[0017]访问用户指定的顶层设计文件的抽象语法树,获取其模块例化结点数;如果结点数为0则结束;否则,获取全部模块例化结点的模块名及其输入/输出信号,按层次存入所述数据结构中;
[0018]循环访问上一步中每个例化模块对应的抽象语法树,获取其模块例化结点数;如果结点数等于0则访问本循环中下一个抽象语法树,如果已访问全部抽象语法树则结束;否则,获取全部模块例化结点的模块名及其输入信号和输出信号,按层次存入所述数据结构中,进入下一层循环,重复本步骤过程,直至最下层的抽象语法树中没有模块例化结点结束。
[0019]进一步地,所述时钟树建立单元包括时钟约束文件读取模块、时钟推断模块、时钟树搭建模块;
[0020]所述时钟约束文件读取模块读取符合标准格式的时钟约束文件,获取用户定义的时钟路径;对所获取的时钟路径进行去重,删除重复定义的时钟路径;并在VHDL解析单元输出的抽象语法树中,依次对去重后的时钟路径进行查询,如未能查询到,则给出报警信息;如能查询到,则将该时钟路径作为一颗时钟树的根结点,针对每一个根结点,都新建一个哈希表,并将该条时钟路径作为一条时钟树的根结点存入对应哈希表的第一个位置中;
[0021]所述时钟树搭建模块按自顶向下的层次依次访问VHDL解析模块输出的抽象语法树,在访问抽象语法树时,调用时钟推断模块,获取本抽象语法树中的时钟信号;对每一个时钟信号进行判断,如该时钟信号既不是来自输入端口也不是来自例化模块的输出端口,则在哈希表里查询,如未能查询到则判断该信号为一个新的时钟树的根结点,新建一个哈希表数据结构,将该时钟路径放在哈希表的第一个位置中;否则,根据VHDL解析模块输出的调用层次及信号连接关系,判读该时钟信号与各个时钟树根结点的连接关系,如果相连接,则把当前时钟路径存入对应哈希表的下一个位置;遍历所有的抽象语法树后,将所有的时钟路径存入各个哈希表中,完成时钟树建立。
[0022]进一步地,所述推断信号时钟域的方法为:
[0023]按自顶向下的层次依次访问VHDL解析模块输出的抽象语法树;
[0024]遍历抽象语法树中的时序逻辑,将对应的时钟信号在时钟树中进行查询,将查询到的时钟树根结点对时序逻辑中赋值语句左侧的信号进行标记;
[0025]遍历抽象语法树中的输出端口信号,对输出端口信号进行标记。
[0026]进一步地,所述判读跨时钟域路径的方法为:
[0027]按自顶向下的层次依次访问VHDL解析模块输出的抽象语法树;
[0028]遍历抽象语法树中的时序逻辑,获取时序逻辑的时钟信号及条件语句中的信号;将时钟信号在时钟树中查询,获取其时钟树根结点;根据信号时钟域推断单元生成的标记,获取条件语句中信号的时钟树结点;如果上述两个时钟树根结点不同,则判断为跨时钟域路径,记录条件语句所在的代码行数及模块名,输出报警信息;
[0029]遍历抽象语法树中的时序逻辑,获取时序逻辑的时钟本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种用于VHDL可编程逻辑设计的跨时钟域静态分析系统,其特征在于,包括VHDL解析单元、时钟树建立单元、信号时钟域推断单元和跨时钟域路径判断单元;所述VHDL解析单元用于对VHDL语言编写的可编程逻辑设计的代码进行词法分析及语法分析,生成单个设计文件的抽象语法树,并将各个文件的抽象语法树进行连接,生成整个设计的抽象语法树;所述时钟树建立单元用于根据时钟约束文件确定用户定义时钟,分析抽象语法树结构推断时钟,并将二者结合生成整个设计的时钟树;信号时钟域推断单元用于分析及遍历抽象语法树,并结合时钟树数据,推断信号时钟域;跨时钟域路径判断单用于分析及遍历抽象语法树,结合信号时钟域数据,判读跨时钟域路径,并根据同步化器特征识别同步化器类型。2.根据权利要求1所述的一种用于VHDL可编程逻辑设计的跨时钟域静态分析系统,其特征在于:所述VHDL解析单元包含词法分析模块、语法分析模块、抽象语法树拼接模块;所述词法分析模块接收字符串形式的单个VHDL文件,按照输入的次序依次扫描源程序,根据VHDL的词法规则识别出具有独立意义的单词,产生与源程序等价的属性字Token流;所述语法分析模块用于将属性字Token流组合成语法短语,然后按照VHDL语言的语法规则判断源程序在结构上是否正确,如果语法正确则生成该文件的抽象语法树,否则报出语法错误;抽象语法树拼接模块用于当每个VHDL文件的语法均正确且成功生成抽象语法树后,采用自顶向下的方式对单个文件的抽象语法树进行拼接,形成整个设计的抽象语法树。3.根据权利要求2所述的一种用于VHDL可编程逻辑设计的跨时钟域静态分析系统,其特征在于,所述对单个文件的抽象语法树进行拼接的方法包括:新建数据结构,用来保存设计中文件的调用层次及信号连接关系;访问用户指定的顶层设计文件的抽象语法树,获取其模块例化结点数;如果结点数为0则结束;否则,获取全部模块例化结点的模块名及其输入/输出信号,按层次存入所述数据结构中;循环访问上一步中每个例化模块对应的抽象语法树,获取其模块例化结点数;如果结点数等于0则访问本循环中下一个抽象语法树,如果已访问全部抽象语法树则结束;否则,获取全部模块例化结点的模块名及其输入信号和输出信号,按层次存入所述数据结构中,进入下一层循环,重复本步骤过程,直至最下层的抽象语法树中没有模块例化结点结束。4.根据权利要求1所述的一种用于VHDL可编程逻辑设计的跨时钟域静态分析系统,其特征在于:所述时钟树建立单元包括时钟约束文件读取模块、时钟推断模块、时钟树搭建模块;所述时钟约束文件读取模块读取符合标准格式的时钟约束文件,获取用户定义的时钟路径;对所获取的时钟路径进行去重,删除重复定义的时钟路径;并在VHDL解析单元输出的抽象语法树中,依次对去重后的时钟路径进行查询,如未能查询到,则给出报警信息;如能查询到,则将该时钟路径作为一颗时钟树的根结点,针对每一个根结点,都新建一个哈希表,并将该条时钟路径作为一条时钟树的根结点存入对应哈希表的第一个位置中;
所述时钟树搭建模块按自顶向下的层次依次访问VHDL解析模块输出的抽象语法树,在访问抽象语法树时,调用时钟推断模块,获取本抽象语法树中的时钟信号;对每一个时钟信号进行判断,如该时钟信号既不是来自输入端口也不是来自例化模块的输出端口,则在哈希表里查询,如未能查询到则判断该信号为一个新的时钟树的根结点,新建一个哈希表数据结构,将该时钟路径放在哈希表的第一个位置中;否则,根据VHDL解析模块输出的调用层次及信号连接关系,判读该时钟信号与各个时钟树根结点的连接关系,如果相连接,则把当前时钟路径存入对应哈希表的下一个位置;遍历所有的抽象语法树后,将所有的时钟路径存入各个哈希表中,完成时钟树建立。5.根据权利要求1所述的一种用于VHDL可编程逻辑设计的跨时钟域静态分析系统,其特征在于,所述推断信号时钟域的方法为:按自顶向下的层次依次访问VHDL解析模块输出的抽象语法树;遍历抽象语法树中的时序逻辑,将对应的时钟信号在时钟树中进行查询,将查询到的时钟树根结点对时序逻辑中赋值语句左侧的信号进行标记;遍历抽象语法树中的输出端口信号,对输出端口信号进行标记。6.根据权利要求1所述的一种用于VHDL可编程逻辑设计的跨时钟域静态分析系统,其特征在于,所述判读跨时钟域路径的方法为:按自顶向下的层次依次访问VHDL解析模块输出的抽象语法树;遍历抽象语法树中的时序逻辑,获取时序逻辑的时钟信号及条件语句中的信号;将时钟信号在时钟树中查询,获取其时钟树根结点;根据信号时钟域推断单元生成的标记,获取条件语句中信号的时钟树结点;如果上述两个时钟树根结点不同,则判断为跨时钟域路径,记录条件语句所在的代码行数及模块名,输出报警信息;遍历抽象语法树中的时序逻辑,获取时序逻辑的时钟及赋值语句中赋值符号右侧的信号;将时钟信号在时钟树中查询,获取其时钟树根结点;根据信号时钟域推断单元生成的标记,获取赋值语句右侧信号的时钟树结点;如果上述两个时钟树根结点不同,则判断为跨时钟域...

【专利技术属性】
技术研发人员:李铀孙宇明唐柳王宏伟曾霞尤静赵敏
申请(专利权)人:北京轩宇信息技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1