基于Python语言的Rapidio切换器逻辑仿真验证平台及方法
技术领域
本发明涉及云计算技术领域,具体涉及一种基于Python语言的Rapidio切换器逻辑仿真验证平台及方法,使用Python语言进行逻辑仿真的方法。
背景技术
芯片的逻辑功能验证是伴随芯片设计不断发展的一个行业,功能验证在芯片的整个设计周期中占用的时间最多。尽管目前有许多技术可用于减少验证时间,但并没有一个明确适用于某一项目的验证方法。
很多带有微处理器的SOC设计项目所使用的传统的验证环境,是基于Verilog模型以及类似C驱动程序的测试向量组成的。C程序模拟芯片中微处理器的启动程序,启动后对芯片中各组件的寄存器进行读写操作,将实际得到的寄存器值与期望值进行比较,判断测试是否通过。仿真时,C程序被编译为2进制文件,由Verilog测试平台读入到微处理器的存储器模型中,然后处理器开始执行C代码编译出的程序,模拟芯片的行为。
对于没有微处理器的芯片,则基本使用Verilog测试平台。后来出现的UVM与SystemVerilog为验证人员开发面向对象的验证环境提供了方便,但是由于SystemVerilog必须向前兼容经典Verilog的语法,所以它的面向对象机制有很多固有缺陷。如何应用一种抽象层次更高,且简单易学的面向对象编程语言,成为很多芯片验证项目需要考虑的问题。
Python语言是近些年新兴的一种脚本语言,对比其他面向对象的语言,它的优势非常明显。它的类模块支持多态、操作符重载和多重继承等高级概念,并且以Python特有的简洁的语法和类型,OOP(面向对象编程Object Oriented Programming,是一种计算机编程架构)十分易于使用。
Python的使用和分发是完全免费的。就像其他的开源软件一样,Python的在线社区对用户需求的响应和商业软件一样快。而且,由于Python完全开放源代码,提高了开发者的实力,并产生了一个很大的专家团队。它可以在不同的系统平台中简单的进行移植。另外Python是一个混合体。它丰富的工具集使它介于传统的脚本语言(例如,Tcl和Perl)和系统语言(例如,C、C++和Java)之间。Python 提供了所有脚本语言的简单和易用性,并且具有在编译语言中才能找到的高级软件工程工具。不像其他脚本语言,这种结合使Python 在长期大型的开发项目中十分有用。
发明内容
本发明要解决的技术问题是:本发明针对以上问题,提供一种基于Python语言的Rapidio切换器逻辑仿真验证平台及方法。
本发明所采用的技术方案为:
基于Python语言的Rapidio切换器逻辑仿真验证平台,所述验证平台包括:对Python语义进行解释的SystemC接口函数、SystemC调用SystemVerilog的DPI接口函数、Python实现的测试用例及运行脚本。
所述验证平台实现步骤如下:
1)对Verilog编写的Rapidio切换器被测对象进行例化;
2)用Verilog程序编写基本的激励输入以及响应输出的DPI函数与外层SystemC环境进行交互;
3)编写SystemC对于Python的解释器;
4)编写Python的底层库函数;
5)编写Python的测试用例以及运行脚本。
基于Python语言的Rapidio切换器逻辑仿真验证方法,其中其中基于Python语言的逻辑仿真环境分2部分:在Cadence仿真器能够运行的部分、Python语言编写的测试用例以及相关代码部分,由于Cadence仿真器不能直接支持对Python的编译,所以需要有一种机制来连接这2部分的进程,采用共享内存的方法,利用Liunx机制,对所述2部分进程进行数据交换。
所述方法所运行的内容包括:
1)Cadence仿真器部分运行的内容包括:
由Verilog实现的Rapidio Switch被测对象;
外层的Verilog TB wrapper例化这个被测对象,并且把更外层的SystemC送来的TLM数据包转换为具体信号流,施加给被测对象,并把被测对象的输出转换为TLM包送出;
SystemC TB负责把TLM数据流从更外层取到,分别送给SystemC的参考模型以及Verilog被测对象,对这2个的输出的数据包进行对比,并对比较结果进行输出,给到外层的API函数;
最外层的内存访问程序接口,负责通过Cadence仿真器提供的接口函数,读入加载给被测对象的数据包,并把比对结果通过Cadence仿真器提供的接口函数送入共享内存;
2)Python语言编写的测试用例以及相关代码部分运行的内容包括:
具体的测试用例以及运行脚本和一些基本库函数;每次运行一个测试用例,通过运行脚本把测试用例编译,并创建一个进程,使这个进程与Cadence仿真器的仿真进程同步,直到仿真运行完毕;
上述2部分通过2部分进程的共享内存,相互传输要测试的包信息以及测试结果,实现Cadence仿真器部分的数据与Python编译器部分的数据之间的交换,能够让Python实时控制仿真的进程,并得知仿真结果。
所述方法编译运行一个测试的启动步骤如下:
Python运行脚本启动;
编译Python测试用例以及库函数;
编译Cadence仿真器需要的被测对象的Verilog代码;
编译SystemC相关代码及Verilog Wrapper代码;
启动Cadence仿真器,获取相应线程以及共享内存;
运行编译过的Python代码,启动Python程序,这时Python进程可以对仿真进程的共享内存进行读写;
当仿真结束,Python测试用例执行完毕后,关闭仿真器以及其他进程。
本发明的有益效果为:本发明通过增加Python语言与SystemC语言间的解释器,使得Python语言能够直接控制逻辑仿真器的激励输入并比较响应输出,使得由Python编写的测试用例能直接用于逻辑仿真,并在一个Rapidio切换器上进行应用,通过以上环境的使用,可以极大提高测试用例的编写效率以及可复用性。
附图说明
图1为本发明Python语言的Rapidio切换器逻辑仿真验证平台基本结构示意图;
图2为本发明Python逻辑仿真验证平台的启动流程图;
其中:
APIS:应用程序接口(application programe interfaces);
IUS:Incisive Unified Simulator。
具体实施方式
下面通过说明书附图,结合具体实施方式对本发明进一步说明:
基于Python语言的Rapidio切换器逻辑仿真验证平台,所述验证平台包括:对Python语义进行解释的SystemC接口函数、SystemC调用SystemVerilog的DPI接口函数、Python实现的测试用例及运行脚本。
所述验证平台实现步骤如下:
1)对Verilog编写的Rapidio切换器被测对象进行例化;
2)用Verilog程序编写基本的激励输入以及响应输出的DPI函数与外层SystemC环境进行交互;
3)编写SystemC对于Python的解释器;
4)编写Python的底层库函数;
5)编写Python的测试用例以及运行脚本。
基于Python语言的Rapidio切换器逻辑仿真验证方法,其中其中基于Python语言的逻辑仿真环境分2部分:在Cadence仿真器能够运行的部分、Python语言编写的测试用例以及相关代码部分,由于Cadence仿真器不能直接支持对Python的编译,所以需要有一种机制来连接这2部分的进程,采用共享内存的方法,利用Liunx机制,对所述2部分进程进行数据交换。
如图1所示,所述方法运行的内容包括:
1)Cadence仿真器部分能够运行的内容包括:
图1中间部分为由Verilog实现的Rapidio Switch被测对象;
外层的Verilog TB wrapper例化这个被测对象,并且把更外层的SystemC送来的TLM数据包转换为具体信号流,施加给被测对象,并把被测对象的输出转换为TLM包送出;
SystemC TB负责把TLM数据流从更外层取到,分别送给SystemC的参考模型以及Verilog被测对象,对这2个的输出的数据包进行对比,并对比较结果进行输出,给到外层的API函数;
最外层的内存访问程序接口,负责通过Cadence仿真器提供的接口函数,读入加载给被测对象的数据包,并把比对结果通过Cadence仿真器提供的接口函数送入共享内存;
2)Python语言编写的测试用例以及相关代码部分运行的内容包括:
具体的测试用例以及运行脚本和一些基本库函数;每次运行一个测试用例,通过运行脚本把测试用例编译,并创建一个进程,使这个进程与Cadence仿真器的仿真进程同步,直到仿真运行完毕;
上述2部分通过2部分进程的共享内存,相互传输要测试的包信息以及测试结果,实现Cadence仿真器部分的数据与Python编译器部分的数据之间的交换,能够让Python实时控制仿真的进程,并得知仿真结果。
如图2所示,所述方法编译运行一个测试的启动步骤如下:
Python运行脚本启动;
编译Python测试用例以及库函数;
编译Cadence仿真器需要的被测对象的Verilog代码;
编译SystemC相关代码及Verilog Wrapper代码;
启动Cadence仿真器,获取相应线程以及共享内存;
运行编译过的Python代码,启动Python程序,这时Python进程可以对仿真进程的共享内存进行读写;
当仿真结束,Python测试用例执行完毕后,关闭仿真器以及其他进程。
整个仿真进程实际是由Python程序来控制,所有的仿真信息都能通过仿真器提供的API传送到Python控制端,这样就做到了整个仿真验证平台的最上层接口可以是Python的函数。我们就可以利用Python的众多优越特性,编写各种复用性很高的测试用例了。
通过以上的层次扩展,一个标准的数字逻辑设计,就可以被Python编写的测试用例驱动了。
以上实施方式仅用于说明本发明,而并非对本发明的限制,有关技术领域的普通技术人员,在不脱离本发明的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。