一种基于Python语言的EDA验证平台及其使用方法与流程

文档序号:21638512发布日期:2020-07-29 02:49阅读:1387来源:国知局
一种基于Python语言的EDA验证平台及其使用方法与流程

本发明涉及fpga验证的技术领域,尤其是指一种基于python语言的eda验证平台及其使用方法。



背景技术:

随着半导体工艺和集成电路技术不断发展,数字ic设计扮演着越来越重要的角色。在早期设计中,由于硬件规模较小,功能较单一,验证工程师通常采用编写teshbanch测试文件以模拟的方式来验证逻辑时序的正确性,它以源的方式来激励用户编写的逻辑功能模块,并将实际输出与期望输出作对比,以验证模块正确性和完善性。随着fpga资源和容量不断提升,硬件设计也变的越来大规模和复杂,越来越多的功能模块被集成到同一颗ic上,容易出现复杂且不易发现的缺陷,其功能上的完备性和正确性越来越难以保证,往往需要花大量的精力在硬件验证阶段。据统计,硬件验证的工作量占据整个设计周期的70%以上。传统定向激励的方式逐渐暴露出低效率、覆盖率不足等缺点,难以快速定位逻辑问题,已无法满足硬件验证的需求。

为了克服传统验证方法的缺陷,业界开始采用高级语言如c/c++来描述越来越复杂的测试激励,但是由于多数验证对象dut仍是rtl代码,将会带来兼容性问题,另外高级语言一般没有时序的概念。后来又相继出现了systemc和systemverilog(sv)语言,sv语言很好的解决了这些问题,成为了现代验证技术中较为常用的验证语言。

在硬件验证工作中,因不同验证人员思维习惯上的不同,导致使用sv语言设计出的验证平台点的框架和组件也不尽相同,导致使用验证平台的交流成本增加,平台可移植性降低。因此,引入了验证方法学用于制定一种统一的标准规范。2006年synopsys公司推出了vmm验证方法学,其逻辑层次清晰,代码简洁的优点大大提高了验证效率。2008年cadence公司和mentor公司又推出了ovm验证方法学,引入了factory机制和phase机制等,是验证平台更为灵活。2011年,uvm出现,它吸收了ovm与vmm以及早期验证方法学的优点,具有更好的可重用性,更清晰的层次感,成为了业界通用的验证方法学。

在越来越高的抽象层次上进行硬件验证是当前验证方法学的主要趋势,虽然uvm属于tlm级验证,相比于传统的rtl级验证有着更高的效率,但是其本身具备众多的组件与机制,语法规则也有一定的学习门槛,对硬件验证工程师的要求较高,不利于用户快速使用和推广。

python作为当今主流高级语言,其学习成本低,简洁优美的特点成为了编程设计的不二之选,灵活的数据结构和运算符重载、多态多继承等特性使编程更加灵活简单,同时具备丰富的软件库。硬件构造语言pyhcl的出现更是打破了顶层与底层的界限,根据uvm各组件层次清晰的特点,结合pyhcl,使用python对其封装实现敏捷开发硬件验证平台成为了可能。



技术实现要素:

本发明的目的在于克服现有技术的不足与缺点,提出了一种基于python语言的eda验证平台及其使用方法,通过使用python脚本向上提供用户接口,向下转化uvm验证组件,使得能够直接用python语言进行硬件验证设计,该方法充分利用python高级语言灵活数据结构,面向对象,运算符重载和多态多继承等特点,不需要掌握复杂的底层语法,极大简化硬件验证工程师工作,在降低uvm验证环境的使用门槛的同时,大大提高了硬件验证的质量和效率。

为实现上述目的,本发明所提供的技术方案如下:

一种基于python语言的eda验证平台,包括:

uvm验证组件,用于构建uvm基本验证环境;

python脚本,用于实现向上提供用户接口,向下转化uvm验证组件;所述python脚本根据用户接口信息进行字符串分析与处理,将uvm验证组件中的特定参数进行替换;其中,仅需定义特定的用户接口,调用python脚本即可生成相应的uvm验证systemverilog文件,最终生成的syetemverilog文件能够直接传递到仿真验证工具中。

进一步,所述uvm验证组件包括包抽象层、序列层、序列发生层、代理类、驱动器、监视器、接口层、环境层、参考模型、计分牌、测试基类和测试顶层,其中:

所述包抽象层负责transaction的定义与约束,将数据进行抽象;

所述序列层能够定义不同类型的sequence序列来应对不同种类的测试激励,序列由transaction数据构成,输送至序列发生层;

所述序列发生层负责接收序列层transaction数据,输送至驱动器输出;

所述代理类包含i_agent和o_agent,通过uvm_agent自带方法定义,i_agent为active模式,内部会例化序列发生器sequencer、驱动器driver和监视器monitor,o_agent为passive模式,仅例化监视器monitor;

所述驱动器负责将从序列发生器中获得transaction数据驱动至待验证模块dut中;

所述监视器包括输入监视器i_monitor和输出监视器o_monitor,负责监视接口层transaction数据,i_monitor收集dut输入数据传送至参考模型,o_monitor收集dut输出数据传送至计分牌;

所述接口层定义了dut和验证平台的接口,通过使用interface接口实现验证平台的可移植性;

所述环境层内部实例化代理类、参考模型和计分牌,并定义互相之间通信的analysisport用于传输transaction数据;

所述参考模型负责实现与dut功能相同的行为,其输出结果将作为验证的期望值;

所述计分牌通过调用compare方法比较期望值和实际值是否一致,同时记录命中数和不匹配数;

所述测试基类用于实现一些测试框架的基础用法,包括定义验证平台最长运行时间和定义测试结束后打印的结果,子类能够继承测试基类的方法;

所述测试顶层负责例化测试激励,定义三个interface接口与激励相连,三组信号与dut输入输出互不干扰。

进一步,所述python脚本提供的用户接口包括数据包定义与约束、数据包驱动方式、数据包监视方式及参考模型功能,其中:

所述数据包定义与约束负责对uvm验证组件中序列层的transaction进行定义与约束,同时加入field_automation机制对所有字段进行注册,在调用python脚本时写入uvm验证组件的序列层;

所述数据包驱动方式负责实现uvm验证组件中驱动器的transaction驱动输出,在调用python脚本时写入uvm验证组件的驱动器;

所述数据包监视方式负责实现uvm验证组件中监视器的transaction输入输出监视,在调用python脚本时写入uvm验证组件的监视器;

所述参考模型功能负责实现与dut相同的功能行为,在调用python脚本时写入uvm验证组件的参考模型。

进一步,所述仿真验证工具有modelsim、vcs。

本发明也提供了上述基于python语言的eda验证平台的使用方法,包括以下步骤:

1)定义python脚本提供的用户接口,包括数据包定义与约束、数据包驱动方式、数据包监视方式和参考模型功能;

2)调用python脚本,将用户接口信息传入uvm验证组件中,生成syetemverilog代码;

3)导出syetemverilog代码并保存;

4)调用仿真软件进行syetemverilog代码uvm验证。

本发明与现有技术相比,具有如下优点与有益效果:

通过python语言对uvm各组件进行封装并制作脚本,使得能够直接用python语言进行硬件验证,充分利用python语言的面向对象,支持多态,运算符重载和多继承等特点,不需要掌握复杂的底层语法,降低了uvm验证环境使用门槛,简化硬件工程师验证工作,大大提高了硬件验证的质量和效率。

附图说明

图1为验证平台的框架示意图,其中:pythonuserinterface为python脚本提供的用户接口;pythonscript为python脚本;sequence为uvm验证组件中的序列层,transaction为数据包;driver为uvm验证组件中的驱动器,driver_one_pkt为transaction驱动输出任务;monitor为uvm验证组件中的监视器,collect_one_pkt为transaction输入输出监视任务;referencemodel为uvm验证组件中的参考模型,main_phase为与dut相同功能行为的任务;interface为uvm验证组件中的接口层,logicsignal为逻辑端口信号;toptb为uvm验证组件中的测试顶层,wires&regs为相关连接线与寄存器,dutinstance为dut实例化。

图2为uvm验证组件关系示意图。

图3为验证平台使用流程示意图。

具体实施方式

下面结合具体实施例对本发明作进一步说明。

如图1所示,本实施例所提供的基于python语言的eda验证平台,是一种充分利用python高级语言特点,降低uvm验证环境使用门槛,简化硬件工程师验证工作的eda验证平台,包括python脚本和uvm验证组件。

所述python脚本用于实现向上提供用户接口,向下转化uvm验证组件。所述用户接口包括数据包定义与约束,数据包驱动方式,数据包监视方式,参考模型功能。python脚本根据用户接口信息进行字符串分析与处理,将uvm验证组件中的特定参数进行替换。其中:

所述数据包定义与约束负责对uvm验证组件中序列层(sequence)的transaction进行定义与约束,同时加入field_automation机制对所有字段进行注册,在调用python脚本时写入sequence;

所述数据包驱动方式负责实现uvm验证组件中驱动器(driver)的transaction驱动输出(在drive_one_pkt任务中),在调用python脚本时写入uvm验证组件的driver;

所述数据包监视方式负责实现uvm验证组件中监视器(monitor)的transaction输入输出监视(在collect_one_pkt任务中),在调用python脚本时写入uvm验证组件的monitor;所述参考模型(referencemodel)功能负责实现与dut相同的功能行为(在main_phase任务中),在调用python脚本时写入uvm验证组件的referencemodel;

所述python脚本还将综合上述用户接口信息在uvm验证组件接口层(interface)中添加逻辑端口信号(logicsignal),并在uvm验证组件测试顶层(toptb)中添加相关连接线wires与寄存器regs并实例化dut。

如图2所示,uvm验证组件主要包抽象层、序列层、序列发生层、代理类、驱动器、监视器、接口层、环境层、参考模型、计分牌、测试基类和测试顶层。

所述uvm验证组件自顶向下分为测试顶层,测试基类,环境层。其中:

所述测试顶层选择测试用例,测试用例继承所述测试基类。

所述环境层包括了序列层、参考模型、计分牌、代理层、接口层和待验证模块dut。代理层由i_agent和o_agent组成,i_agent中例化了序列发生器、驱动器和监视器,o_agent中仅例化监视器。序列层负责产生出transaction送入序列发生器,最终由驱动器通过接口层将transaction灌入dut中。同时,i_agent监视器收集相同输入transaction传入参考模型计算期望值,o_agent监视器收集dut实际输出transaction传入计分牌与期望值比较。

如图3所示,本实施例也提供了上述基于python语言的eda验证平台的使用方法,使用流程步骤如下:

1)定义python脚本提供的用户接口,包括数据包(transaction)定义与约束,数据包(transaction)驱动方式,数据包(transaction)监视方式,参考模型功能;

2)调用python脚本,将用户接口信息传入uvm验证组件中,生成syetemverilog代码;

3)导出syetemverilog代码并保存;

4)调用仿真软件进行syetemverilog代码uvm验证。

以上实施方式仅用于说明本发明,而非对本发明的限制,有关技术的普通技术人员,再不脱离本发明的精神和范畴情况下,还可以做出变化和变型,因此所有等同的技术方案也属于本发明的范畴,本发明的专利保护范围应由权利要求限定。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1