一种波形文件解析方法及存储器与流程

文档序号:29122782发布日期:2022-03-04 22:51阅读:207来源:国知局
一种波形文件解析方法及存储器与流程

1.本发明涉及集成电路仿真领域,尤其涉及一种波形文件解析方法及存储器。


背景技术:

2.在ic设计阶段通常使用波形文件用于存储电路仿真结果,vcd格式作为一种标准定义的通用格式,所有仿真器均支持vcd波形文件的输出。现有的vcd波形文件解析技术仍以自上而下的解析为主,导致在解析比较大的波形文件时,解析时间过长。


技术实现要素:

3.本发明的目的是针对上述现有技术存在波形文件解析时间长的缺陷,提供一种波形文件解析方法及存储器。
4.本发明实施例中,提出了一种波形文件解析方法,其包括:主线程在读取vcd波形文件时创建第一子线程和第二子线程,并将读取到的头节点信息数据和值变化信息数据分别存储于第一队列和第二队列,第一子线程用于对第一队列中的数据进行解析,第二子线程用于对所述第二队列中的数据进行解析。
5.本发明实施例中,主线程将vcd波形文件中的关键字符串以哈希表的形式进行存储。
6.本发明实施例中,主线程读取vcd波形文件时设置两个布尔标识符flag1和flag2,flag1用于监测头节点信息是否读取完毕,flag2用于监测vcd波形文件是否读取完毕。
7.本发明实施例中,flag1的初始状态为false,当头节点信息读取完毕时,主线程将flag1的状态设置为ture;flag2的初始状态为false,当vcd波形文件读取完毕时,主线程将flag2的状态设置为ture。
8.本发明实施例中,主线程读取vcd波形文件的过程包括:主线程逐行读取vcd波形文件,若读取到头节点结束标识符,则将接下来读取的数据存放到第二队列;若未读取到头节点结束标识符,则将读取的数据放到第一队列。
9.本发明实施例中,第一子线程对第一队列中的数据进行解析的过程包括:第一子线程循环判断第一队列是否为空,若不为空,第一子线程从第一队列中取出第一条数据进行解析,解析完成后,将该条数据从第一队列中删除;若第一队列为空,则检测flag1状态,如flag1为false,则等待主线程读取vcd文件的数据并存放到第一队列,如flag1为true,则主线程已经完全读取头节点信息,解析完成。
10.本发明实施例中,第一子线程从第一队列中取出第一条数据进行解析,包括:判断是否是实例起始或结束位置,若是实例起始位置,则进行压栈操作;若是实例结束位置,则进行出栈操作;若既不是实例起始位置也不是实例结束位置,则记录信号的id、类型、位宽、名称。
11.本发明实施例中,第二子线程对第二队列中的数据进行解析的过程包括:第二子线程循环判断第二队列是否为空,若不为空,第二子线程从第二队列中取出第一条数据进行解析,当前数据解析完成后,将该条数据从第二队列中删除;若第二队列为空,则检测flag2状态,如flag2状态为false,则等待主线程读取vcd文件数据并存放到第二队列,如flag2状态为true,则说明主线程已经完全读取值变化信息部分数据,解析完成。
12.本发明实施例中,第二子线程对第二队列中的数据进行解析的过程包括:第二子线程从第二队列中取出第一条数据进行解析,判断是否是时间信息,若为时间信息,则更新当前记录的时间节点,否则判断是标量信号还是矢量信号,若是标量信号,则提取标量信息,若是矢量信号,则提取矢量信息。
13.本发明实施例中,还提供了一种存储器,所述存储器中存储有计算机程序,当所述计算机程序被处理器运行时,执行上述的波形文件解析方法。
14.与现有技术相比,采用本发明的波形文件解析方法,主线程在读取vcd波形文件时创建第一子线程和第二子线程,并将读取到的头节点信息数据和值变化信息数据分别存储于第一队列和第二队列,第一子线程用于对第一队列中的数据进行解析,第二子线程用于对所述第二队列中的数据进行解析,第一子线程和第二子线程在主线程读取波形文件时并行对波形文件进行解析,利用vcd波形文件的编码特点和计算机多线程技术,实现vcd波形文件的并行解析,提高vcd波形文件的解析效率。
附图说明
15.图1是本发明实施例中主线程的解析流程图。
16.图2是本发明实施例中第一子线程的解析流程图。
17.图3是本发明实施例中第二子线程的解析流程图。
具体实施方式
18.本发明实施例中,提出了一种波形文件解析方法,其包括:主线程在读取vcd波形文件时创建第一子线程和第二子线程,并将读取到的头节点信息数据和值变化信息数据分别存储于第一队列和第二队列,第一子线程用于对第一队列中的数据进行解析,第二子线程用于对所述第二队列中的数据进行解析。
19.需要说明的是,vcd波形文件依据其编码特点分为头信息、节点模块信息和值变化信息三个部分。其中头信息、节点模块信息(以下把头信息和节点模块信息统称为头节点信息)与值变化信息部分相对独立,以信号id建立联系。因此,本实施例中,在程序中创建两个子线程t1和t2,分别用于头节点信息的解析和值变化信息的解析,主线程用于vcd文件的读取和数据分块存放,从而实现数据的并行处理。
20.本发明实施例中,主线程将vcd波形文件中的关键字符串以哈希表的形式存储用于分支处理。设置两个布尔标识符flag1和flag2,flag1用于监测头节点信息是否读取完毕,flag2用于监测vcd文件是否读取完毕。flag1和flag2的初始状态为false。创建两个队
列l1和l2,l1用于存储主线程读取到的头节点信息数据,l2用于存储主线程读取到的值变化信息数据。
21.具体地,如图1所示,主线程的工作过程如下:主线程读入vcd文件,创建子线程t1并循环检测l1是否有数据,主线程逐行读取vcd波形文件数据,读取数据后从根据哈希表数据进行分支处理;如读取到头节点信息结束标识符,则将flag1置为true,同时创建子线程t2并循环检测l2是否有数据,主线程将接下来读取的数据存放到l2中;如未读取到头节点信息结束标识符,将读取的数据存放到l1中。主线程读取所有数据后,将flag2置为true,主线程读取vcd波形文件完成。
22.如图2所示,子线程t1对队列l1中的数据进行解析的过程包括:子线程t1循环判断队列l1是否为空,若不为空,t1从队列l1中取出第一条数据进行解析,解析完成后,将该条数据从第一队列中删除;若队列l1为空,则检测flag1状态,如flag1为false,则等待主线程读取vcd文件的数据并存放到队列l1,如flag1为true,则主线程已经完全读取头节点信息,子线程t1解析完成。
23.其中,子线程t1从队列l1中取出第一条数据进行解析,包括:判断是否是实例起始或结束位置,若是实例起始位置,则进行压栈操作;若是实例结束位置,则进行出栈操作;若既不是实例起始位置也不是实例结束位置,则记录信号的id、类型、位宽、名称。
24.需要说明的是,通过压栈和出栈操作,来记录各实例间的层次化关系。
25.如图3所示,本发明实施例中,子线程t2对队列l2中的数据进行解析的过程包括:子线程t2循环判断队列l2是否为空,若不为空,子线程t2从队列l2中取出第一条数据进行解析,当前数据解析完成后,将该条数据从队列l2中删除;若队列l2为空,则检测flag2状态,如flag2状态为false,则等待主线程读取vcd文件数据并存放到队列l2,如flag2状态为true,则说明主线程已经完全读取值变化信息部分数据,子线程t2解析完成。
26.其中,子线程t2对队列l2中的数据进行解析的过程包括:子线程t2从队列l2中取出第一条数据进行解析,判断是否是时间信息,若为时间信息,则更新当前记录的时间节点;否则判断是标量信号还是矢量信号,若是标量信号,则提取标量信息,若是矢量信号,则提取矢量信息。
27.本发明实施例中,还提供了一种存储器,所述存储器中存储有计算机程序,当所述计算机程序被处理器运行时,执行上述的波形文件解析方法。
28.综上所述,采用本发明的波形文件解析方法,主线程在读取vcd波形文件时创建第一子线程和第二子线程,并将读取到的头节点信息数据和值变化信息数据分别存储于第一队列和第二队列,第一子线程用于对第一队列中的数据进行解析,第二子线程用于对所述第二队列中的数据进行解析,第一子线程和第二子线程在主线程读取波形文件时并行对波
形文件进行解析,利用vcd波形文件的编码特点和计算机多线程技术,实现vcd波形文件的并行解析,提高vcd波形文件的解析效率。
29.以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1