0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于python的用于构建仿真及测试用例的lib库cocotb

OpenFPGA 来源:似猿非猿的FPGA 作者:似猿非猿的FPGA 2021-10-13 17:01 次阅读

对于从事ASIC行业及FPGA行业的小伙伴来说,仿真是一件必不可少的事情。或许有人是验证大拿,UVM高手,但相较于软件丰富的验证框架,对于各种各样的场景单纯的SV构建测试用例是否便捷值得推敲。

何为cocotb

cocotb is a coroutine based cosimulation library for writing VHDL and Verilog testbenches in Python.

21世纪,python成了一门吃香的语言。cocotb是一套基于python的用于构建仿真及测试用例的lib库,它的框架为:

可以看到,在cocotb的框架里,我们的待测试逻辑运行在仿真器中(VCS、Verilator等),而我们的测试框架及测试用例均以python的形式构建,双方通过仿真器提供的各种标准接口进行通信。及设计代码为Verilog/VHDL/Systemverilog,而测试代码为Python。

存在即合理,为什么这么搞?因为Python写起来简单呗!在能够正常实现对DUT的接口驱动的同时借助python丰富的lib库能够让我们快速的构建测试用例及参考模型。而借助软件现成的测试框架能够极大加速验证流程。想想单纯的一个图像处理的仿真用纯Systemverilog的方式进行验证在进行测试数据生成及最后结果对比要多少脚本……

cocotb安装

按照cocotb手册给出的安装流程,在CentOS里安装步骤为:
#Preparesudo yum install make gcc gcc-c++ libstdc++-devel python3 python3-devel python3-pip#install cocotbpip install cocotb##pip may belong to a different Python installation# to what you expect. Use pip -V to check. If this #prints “(python 2.7)”, use pip3 or python3 -m pip #inplaceofpipinthecommandshown.
在安装过程中,有遇到“Python.h: No such file or directory”,解决办法为:
1.可以先查看一下含python-devel的包yumsearchpython|greppython-devel2.64位安装python-devel.x86_64,32位安装python-devel.i686,我这里安装:sudoyuminstallpython-devel.x86_643. 进入/usr/include/python2.7看一下现在有没有Python.h,版本不同目录名不同,我这里是2.7版本。其实也可以看到很多.h文件,python需要库或头文件都在这个地方。
安装后可以查看到:
$cocotb-config -v1.4.1.dev0
对于没有VCS等收费EDA license的小伙伴建议安装Verilator:
sudo apt-get install git make autoconf g++ flex bison -y  # First time prerequisitesgit clone http://git.veripool.org/git/verilator   # Only first timeunsetenv VERILATOR_ROOT  # For csh; ignore error if on bashunset VERILATOR_ROOT  # For bashcdverilatorautoconf        # Create ./configure script./configuremake -j$(nproc)sudomakeinstall

example

在cocotb中给出的example中,endian_swapper例子的测试框架为:

e07e8c38-2a05-11ec-82a8-dac502259ad0.png

测试框架和我们在平常的测试框架行为基本相同,不同是cocotb为Driver、Monitor、Scoreboard等都提供了基础类库供调用,对于搭建仿真平台应该有较好的帮助。而cocotb中提供的TestFactory,能够方便的进行测试用例的生成:
factory = TestFactory(run_test)factory.add_option("data_in",                 [random_packet_sizes])factory.add_option("config_coroutine",        [None, randomly_switch_config])factory.add_option("idle_inserter",           [None, wave, intermittent_single_cycles, random_50_percent])factory.add_option("backpressure_inserter",   [None, wave, intermittent_single_cycles, random_50_percent])factory.generate_tests()
这里根据输入的参数,factory会生成32个testcase用于测试,感觉还是蛮高效的。在仿真完成后,能够自动汇总测试结果:

写在最后

之所以探索下cocotb,主要原因是虽然SpinalHDL测试框架和cocotb差不多,但目前SpinalHDL尚未集成对VCS仿真器的集成(而我又没打算自己集成进去)。而在做FPGA设计时,若代码里集成了Xilinx/Altera的IP,那么在SpinalHDL的框架里就没办法进行仿真了,而cocotb则是一个不错的选择(若可以选,我仍选SpinalHDL,设计仿真一条龙,当然现在也可以,对于Mem、FIFO等常用IP SpinalHDL还是有提供的,或者我们自己按需定制实现IP也可以的,SpinalHDL写IP简直不要太爽)。

责任编辑:haq
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1602

    文章

    21320

    浏览量

    593159
  • 软件
    +关注

    关注

    67

    文章

    4348

    浏览量

    85620

原文标题:cocotb初探

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Nuclei Studio IDE工具如何调用生成的lib

    创建2个工程: test工程:主工程,会调用libt_lib.a 目前将t_lib工程生成的libt_lib.a直接拷贝到test工程的application/source目录下
    发表于 01-10 06:12

    是德科技成功验证3GPP Release 17 NTN标准测试用

    论坛(GCF)一致性协议工作组(CAG)第 76 次会议上通过的验证,主要用于是德科技 5G 网络仿真一致性测试平台(TP168)。
    的头像 发表于 11-15 09:33 456次阅读

    是德科技验证首个协议一致性测试用

    (3GPP)第 17 版 (Rel-17) 标准验证了首个协议一致性测试用例。该经过验证的测试用用于是德科技的 5G 网络仿真一致性测试
    的头像 发表于 11-14 16:01 332次阅读

    如何实现lib封装

    看到别人的程序里有lib一个文件,在MDK中双击打不开。这应该是个函数封装吧。如果做自己的函数封装,并用在MDK工程中呢。
    发表于 10-23 06:44

    Bulbea:用于股票市场预测和建模的Python

    Bulbea 是一个基于深度学习开发的,用于股票市场预测和建模的Python库。 Bulbea 自带了不少可用于股票深度学习训练及测试的API,并且易于对数据进行扩展和延申,
    的头像 发表于 10-17 11:01 239次阅读
    Bulbea:<b class='flag-5'>用于</b>股票市场预测和建模的<b class='flag-5'>Python</b>库

    【KV260技术分享】宿主机构建Gstreamer

    Gstreamer的用途 其实这个框架主要是用来替代ffmpeg的学习和使用。它也可以直接挂载各种媒体处理,用字符串的形式构建流。 Gstreamer的构建问题 首先构建分为宿主机
    发表于 10-10 23:47

    GAT通用自动测试系统

    问题,满足不同用户的使用需求。 GAT特点: ◆ 通用性:源于实践,广泛适用于民用通信、射频微波、军工电子等行业的研发调测、生产测试、可靠性试验、外场试验等应用场景。 ◆ 兼容性:所有产品测试用
    发表于 09-26 10:09

    Kendryte IDE怎么配置使用.lib

    Kendryte IDE 怎么配置使用.lib
    发表于 09-15 07:32

    AS950 ARM应用程序员指南

    )·支持使用ADS构建示例所需的实用程序。 还提供了一个通用的C实用程序util_lib来演示每个主要组件。 根据许可协议的条款,您可以自由地将中包含的任何源代码合并到任何产品中。
    发表于 08-18 07:31

    如何使用Python包装器正确构建OpenVINO工具套件

    LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/openvino/bin/intel64/Release/ 测试 构建。运行 以下脚本以导入内核,检查您是否正确构建
    发表于 08-15 07:13

    修改自测试用run_test遇到的问题求解

    我修改了add.S文件,想让make run_test SIM=iverilog后出现file.可是编译不了,add.S文件也没显示更新。 可是我在测试测试用的时候,make compile
    发表于 08-12 06:50

    如何使用Microsoft Visual Studio构建本机Windows on Arm

    您可以将这些技术应用于任何图书馆本指南适用于:•希望提供Arm原生构建作者•如果Windows on Arm二进制文件不可用,则需要从源代码构建
    发表于 08-02 08:26

    【芒果派MangoPi MQ Pro】+ 失败的Python 3尝试

    有完整的Python 3,正好可以测试一下。 把讯飞星火提供的示例程序运行了一下,发现缺少Websocket,结果发现板子上并没有安装pip,所以先需要安装pip: sudo apt-get
    发表于 07-28 19:44

    可重用的验证组件中构建测试平台的步骤

    writer ) 进行区分,前者负责测试平台的构建和配置,后者可能对测试平台的底层了解较少,但用它来创建测试用例。 基于验证组件创建测试
    的头像 发表于 06-13 09:14 351次阅读
    可重用的验证组件中<b class='flag-5'>构建</b><b class='flag-5'>测试</b>平台的步骤

    使用Python实现功能测试自动化

    PyTest 是一个测试框架,允许个人使用 Python 编写测试代码,使您能够为数据库、API 和用户界面创建简单且可扩展的测试用例。PyTest 主要
    的头像 发表于 05-04 11:20 597次阅读
    使用<b class='flag-5'>Python</b>实现功能<b class='flag-5'>测试</b>自动化