对于从事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 #in place of pip in the command shown. 在安装过程中,有遇到“python.h: no such file or directory”,解决办法为: 1.可以先查看一下含python-devel的包 yum search python | grep python-devel2.64位安装python-devel.x86_64,32位安装python-devel.i686,我这里安装: sudo yum install python-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 bashcd verilatorautoconf # create ./configure script./configuremake -j$(nproc)sudo make install example
在cocotb中给出的example中,endian_swapper例子的测试框架为:
测试框架和我们在平常的测试框架行为基本相同,不同是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简直不要太爽)。
一文简述3D打印技术
适合女性的运动电子设备汇总及价格参考
超级方便的轻量级Python流水线工具
新媒体编辑APP开发功能
新唐科技N567HP330(OTP)芯片介绍
基于python的用于构建仿真及测试用例的lib库cocotb
详细介绍了加酸壶清洗机自动控制系统的设计思路,方法及实施方案
赋能汽车主动安全 虹软携DSM、ADAS亮相CITE2019
布局领先,政策推动 5G将迎来最佳投资窗口期
基于DSP Builder的小波变换设计实现
ChatGPT的应用场景越加丰富 GPT-4生成的投资推介材料获更多资金支持
宜百利:这样的洗碗刷你见过么
XR虚拟演播厅解决方案
利用RFID射频识别实现停车场智能化管理
TouchGFX 4.16提供更新更易于访问的方法
MTS传感器在单缸液压圆锥破碎机上的应用
关注| 起诉小鹏汽车雇员,特斯拉是真的慌了吗?
阿里&华科大提出ONE-PEACE:更好的通用表征模型,刷新多个SOTA!
线性稳压器的基础-线性稳压器的分类
加拿大高级军官认为华为参与该国的5G网络建设将会威胁国家安全