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

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

3天内不再提示

cocotb的安装、python tb文件的写法

倩倩 来源:处芯积律 作者:处芯积律 2022-09-21 11:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文介绍了cocotb的安装、python tb文件的写法、用xrun仿真cocotb的脚本等,我们来看看体验如何。

一、准备

  • centos7

  • python3.6+

  • yum install python3-devel

  • pip3 install --upgradecocotb

二、写RTL


// top.svmodule top  (   input wire       clk,   input wire       rst_n,   input wire [7:0] din,   output reg [7:0] dout   );
  initial begin    $fsdbDumpfile("top.fsdb");    $fsdbDumpvars(0, top);  end  always@(posedge clk, negedge rst_n)    if(!rst_n)      dout <= 'd0;    else      dout <= din;  endmodule // top

三、写tb


# tb.py
import cocotbfromcocotb.triggersimportTimer, FallingEdge
async def gen_clk(dut):    for cycle in range(100):        dut.clk.value = 0        await Timer(10, units="ns")        dut.clk.value = 1awaitTimer(10,units="ns")
async def gen_rst(dut):    dut.rst_n.value = 0    await Timer(22, units="ns")    dut.rst_n.value = 1print("ResetDone")
@cocotb.test()async def tb(dut):
    await cocotb.start(gen_clk(dut))    await cocotb.start(gen_rst(dut))
    test_data_list = range(0,50, 5)    for test_data in test_data_list:        await FallingEdge(dut.clk)dut.din.value=test_data        await Timer(100, units="ns")

6~11行:定义了一个时钟,50MHz,100个周期。

13~17行:定义了一个复位信号,低电平有效。复位拉高打印“Reset Done”,方便看log。

19行:用@cocotb.test()装饰器指定了tb的顶层主函数。

22行:异步启动gen_clk

23行:异步启动gen_rst

25~28行:产生了一些测试数据,在时钟下降沿后驱动dut的din。

30行:等待100ns结束仿真

四、写仿真脚本Makefile


SIM ?= xceliumTOPLEVEL_LANG ?= verilog
VERILOG_SOURCES += ./top.svTOPLEVEL = top
MODULE = tb
include $(shell cocotb-config --makefiles)/Makefile.sim

设置默认仿真器cadence xcellium,RTL语言选verilog,指定RTL顶层模块名字(就是dut的名字),testbench的名字为tb,最后include一个cocotb共用的makefile。

五、仿真和看波形

把top.sv、tb.py、Makefile放同一个目录下,敲linux命令:make。不出意外的话,仿真可以正确编译和仿真,如下图:

819eeb2e-395c-11ed-9e49-dac502259ad0.png

由于我们在RTL顶层加入了dump fsdb波形的代码,所以在log里可以看到有波形产生。280ns仿真结束,并显示“tb passed”,并打印出汇总信息。可见log还是很友好的。

用verdi打开fsdb,与预期一致:

826ac91a-395c-11ed-9e49-dac502259ad0.png

审核编辑 :李倩


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

    关注

    14

    文章

    1048

    浏览量

    86757
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73137
  • python
    +关注

    关注

    57

    文章

    4857

    浏览量

    89571

原文标题:厌倦了sv/uvm?来看看用python写验证环境

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【EASY EAI Nano-TB(RV1126B)开发板试用】桌面系统功能测试-安装桌面系统chromium-browser

    | 0接上文### 【EASY EAI Nano-TB(RV1126B)开发板试用】开箱测评 EASY-EAI-NANO-TB固件默认不自带桌面系统。有需要桌面系统的用户可通过链接网络自行安装
    发表于 12-01 06:44

    【EASY EAI Nano-TB(RV1126B)开发板试用】命令行功能测试-红绿灯按钮项目-Python实现简单的Web服务器

    11.4.0] on linux。 文件名 :\"/home/nano/server1.py\" 系统采用Python标准库中的http.server模块构建轻量级Web服务器,通过访问设备
    发表于 11-16 16:35

    EASY EAI Nano-TB(RV1126B)开发板试用】1、初识

    Session,并选中Serial,最后选择open,打开终端: 4、输入查看信息: 5、系统已经给我们安装python3: root@EASY-EAI-NANO-TB:/# python
    发表于 11-16 11:15

    使用NucleiStudio生成tb仿真需要的.verilog文件

    打开仿真顶层文件tb_top.v,存放在ITCM模块里面的指令是通过readmemh函数读入.verilog文件实现的: 下面通过对NucleiStudio IDE进行设置,实现将c
    发表于 11-05 07:07

    MA35-RTT如何安装 Python 和 Libusb (Windows) ?

    MA35-RTT:如何安装 Python 和 Libusb (Windows) ?
    发表于 09-03 08:30

    termux调试python猜数字游戏

    安装Python ```bash pkg update && pkg upgrade pkg install python ``` Python是Termux官
    发表于 08-29 17:15

    termux如何搭建python游戏

    Pygame),确保已安装`clang`编译器:`apt install -y clang` 3. 权限问题:若需访问手机文件安装`termux-setup-storage`并授权存储访问权限。 通过以上步骤,即可在Te
    发表于 08-29 07:06

    linux虚拟环境中调用Linux 版matlab编译的python库时出错

    matlab代码编译为CAO_pythonpython库,其中cp_Main_python.m为入口文件,编译后生成的文件有mccExcl
    发表于 07-18 10:40

    【VisionFive 2单板计算机试用体验】安装openplc

    openplc-vf2.deb 1.4、创建环境 创建python虚拟环境并安装python包 user@starfive:~$ cd openplc_v3/ user@starfive
    发表于 07-15 23:30

    ​如何在虚拟环境中使用 Python,提升你的开发体验~

    RaspberryPiOS预装了Python,你需要使用其虚拟环境来安装包。今天出版的最新一期《TheMagPi》杂志刊登了我们文档负责人NateContino撰写的一篇实用教程,帮助你入门
    的头像 发表于 03-25 09:34 628次阅读
    ​如何在虚拟环境中使用 <b class='flag-5'>Python</b>,提升你的开发体验~

    创建OpenVINO™ Python脚本,运行可执行文件时遇到的报错怎么解决?

    创建OpenVINO™ Python 脚本: from openvino.inference_engine import IECore ie = IECore() print(\"
    发表于 03-05 10:20

    如何将python文件导入到ROS系统中

    本文通过使用myCobot机械臂进行QR码视觉追踪的实践案例分析,介绍如何将 python 文件导入到 ROS 系统中。
    的头像 发表于 02-11 11:08 1191次阅读
    如何将<b class='flag-5'>python</b><b class='flag-5'>文件</b>导入到ROS系统中

    使用Python实现xgboost教程

    使用Python实现XGBoost模型通常涉及以下几个步骤:数据准备、模型训练、模型评估和模型预测。以下是一个详细的教程,指导你如何在Python中使用XGBoost。 1. 安装XGBoost
    的头像 发表于 01-19 11:21 2213次阅读

    Flexus 云服务器 X:Python 安装的极致便捷之旅

    前言         Python 作为一种高级编程语言,因其简洁易读的语法和强大的库支持,在数据科学、人工智能、Web 开发等领域得到了广泛应用。然而,不同平台上的安装过程可能会有所不同,尤其是在
    的头像 发表于 01-07 17:00 546次阅读
    Flexus 云服务器 X:<b class='flag-5'>Python</b> <b class='flag-5'>安装</b>的极致便捷之旅

    Triton编译器安装步骤详解

    :用于构建项目。 Python :用于运行 Triton 的 Python 绑定。 其他依赖 :根据您选择的架构,可能需要额外的依赖。 2. 安装依赖 对于 Linux: 打开终端并运行以下命令来
    的头像 发表于 12-24 17:35 4623次阅读