Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >厌倦了sv/uvm?来看看用python写验证环境

厌倦了sv/uvm?来看看用python写验证环境

作者头像
ExASIC
发布于 2022-06-21 07:56:42
发布于 2022-06-21 07:56:42
2.3K01
代码可运行
举报
文章被收录于专栏:ExASICExASIC
运行总次数:1
代码可运行

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

一、准备

  • centos7
  • python3.6+
  • yum install python3-devel
  • pip3 install --upgrade cocotb

二、写RTL

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// top.sv
module 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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# tb.py

import cocotb
from cocotb.triggers import Timer, FallingEdge

async def gen_clk(dut):
    for cycle in range(100):
        dut.clk.value = 0
        await Timer(10, units="ns")
        dut.clk.value = 1
        await Timer(10, units="ns")

async def gen_rst(dut):
    dut.rst_n.value = 0
    await Timer(22, units="ns")
    dut.rst_n.value = 1
    print("Reset Done")

@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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SIM ?= xcelium
TOPLEVEL_LANG ?= verilog

VERILOG_SOURCES += ./top.sv
TOPLEVEL = 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。不出意外的话,仿真可以正确编译和仿真,如下图:

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

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

用spinal生成了一个计数器

MyHDL,体验一下“用python设计电路”

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ExASIC 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
腾讯信鸽集成
现在移动推送很多大厂都在做,腾讯信鸽跟个推、极光、友盟比算是比较晚的一个了。 但这并不妨碍我用它。
从今若
2019/09/19
6.5K3
【玩转腾讯云】初识腾讯移动通讯 TPNS~
和尚之前因业务需求,配合过推送平台的相关搭建,其中涉及过 友盟 UmengPush、极光 JPush、个推、公司自建 UPDPush、华为 HMS、小米 MiPush、OPPO Push 和 VIVO Push 等;今天借 腾讯云 活动,简单了解一下 腾讯移动通讯 TPNS;
阿策小和尚
2021/04/07
12.1K1
【玩转腾讯云】初识腾讯移动通讯 TPNS~
零代码三步快速集成腾讯移动推送(Android)
以 Android 接入腾讯移动推送为例,步骤非常简单,在不需要编写任何代码的情况下就可以让你的应用集成专业的推送服务。
rickenwang
2018/05/09
4.9K3
TRTC Android端开发接入学习之环境快速搭建(三)
通过前面对TRTC的基本了解,本期我们开始尝试使用SDK在本地搭建开发环境,同时说明SDK的基本用法
腾讯云-hongyang
2020/09/01
1.2K0
TRTC Android端开发接入学习之环境快速搭建(三)
Android Studio之gradle的配置与介绍
Android Studio之gradle的配置与介绍 非著名程序员 1、gradle的简单介绍 Gradle是可以用于Android开发的新一代的Build System,也是Android Studio默认的build工具。其实Gradle脚本是基于一种JVM语言— Groovy,再加上DSL组成的。由于Groovy是JVM语言,所以可以使用大部分的Java语言库。所谓DSL就是专门针对Android开发的插件,比如标准Gradle之外的一些新的方法(Method)、闭包(Closure)等等。通过我们
非著名程序员
2018/02/01
2K0
build.gradle文件介绍,gradle版本对应
Could not find com.android.tools.build:gradle:3.0.1.
zhangjiqun
2024/12/16
6320
build.gradle文件介绍,gradle版本对应
Arcgis for Android 开发环境搭建(Android Studio篇)
开发工具:Android Studio 2.1.2(mac版本) 开发环境:OS X EI Capitan 版本 10.11.5 Android系统要求:Android 4.4以上(minSDK 19) SDK版本:V10.2.7
专注APP开发
2019/11/07
1.7K0
Arcgis for Android 开发环境搭建(Android Studio篇)
Gradle For Android(3)--管理依赖关系
依赖关系管理是Gradle的闪光点。在这个脚本中最好的一点,就是你所需要的只是添加一行到你的build.gradle中,然后Gradle就会从一个远程仓库中下载与之相关的依赖关系的库,以保证它的Classes对你的Project的是可用的。Gradle甚至解决了依赖项是自己的问题,这种依赖关系被称之为Transitive Dependencies。
None_Ling
2018/10/24
1.8K0
Flutter在Android平台实现消息推送
点击“应用设置”,就可以看到应用信息了,其中AppKey非常重要,在项目中使用极光推送会用到。
越陌度阡
2021/03/02
2.1K0
Flutter在Android平台实现消息推送
Android Gradle 初识
最近在研究一些技术,需要一些Android相关的知识,但发现要想了解 Android,必须要了解 gradle。因为gradle是Android Studio指定的自动编译脚本,它有点像 Linux C开发中的 Makefile。下面我来看下 Android Studio 是如何使用 Gradle 的。
音视频_李超
2020/04/01
5640
Android  Gradle 初识
如何使得自己的代码被别人优雅引用:上传Android Library到JCenter 教程
本文主要讲解如何通过bintray-release插件快速上传代码(Library)到 Jcenter
Carson.Ho
2022/03/25
1.1K0
如何使得自己的代码被别人优雅引用:上传Android Library到JCenter 教程
Android OPPO推送服务集成(详细教学)
  为了丰富应用推送的场景和国产大厂设备,在我有这个条件的情况下,相关机型的文章我都会写一遍,这一篇就写一下OPPO的推送服务集成,我本身是荣耀的手机,OPPO是借的朋友的旧手机来测试对接的,手机名称是OPPO Find X,ColorOS版本是V7.1,Android版本是10,下面进入正文。
晨曦_LLW
2021/06/11
2.5K0
Android OPPO推送服务集成(详细教学)
Android 发布个人组件到JCenter
把BINTRAY_USERNAME 替换成你的bintary上组册的用户名 BINTRAY_KEY 替换成你的 Bintray的API Key 即可
码客说
2019/10/22
1K0
这是一份详细&清晰的 上传Android Library到JCenter 教程:如何使得自己的代码被别人优雅引用
1.对于eclipse: 下载包 --> 放入到 lib 文件目录 2.对于Android Studio:在build.gradle文件中添加依赖。如下图
Android技术干货分享
2019/04/22
1.2K0
这是一份详细&清晰的 上传Android Library到JCenter 教程:如何使得自己的代码被别人优雅引用
集成推送那点事-友盟/Mob-Flutter/FCM
这里就挑我用过的几个来做一个简单对比,毕竟鸡老大说了,连基本的论证对比都没,你还玩个锤子(我瞎编的)。
贺biubiu
2020/07/14
12.8K1
集成推送那点事-友盟/Mob-Flutter/FCM
Android library快速构建上传jcenter
compile 'com.android.support:appcompat-v7:25.2.0'
先知先觉
2019/01/21
9630
IMSDK华为离线推送快速集成
即时通信 IM 的终端用户需要随时都能够得知最新的消息,而由于移动端设备的性能与电量有限,当 App 处于后台时,为了避免维持长连接而导致的过多资源消耗,即时通信 IM 推荐您使用各厂商提供的系统级推送通道来进行消息通知,系统级的推送通道相比第三方推送拥有更稳定的系统级长连接,可以做到随时接受推送消息,且资源消耗大幅降低。
腾讯云-chaoli
2021/01/13
4.2K1
IMSDK华为离线推送快速集成
从HelloWorld开始了解Android
我相信任何学习编程的人,刚开始都会接触一个项目,那就是 HelloWorld 。一般来说,这是每一种计算机编程语言中最基本、最简单的程序,亦通常是初学者所编写的第一个程序。它还可以用来确定(测试)该语言的编译器、程序开发环境,以及运行环境是否已经安装妥当,将输出字符串“Hello World”作为第一个示范程序,现在已经成为编程语言学习的传统,接下来让我们来创建第一个程序Hello World。
晨曦_LLW
2020/09/25
1.3K0
Android Studio 遇到问题集锦
Android Studio First Run 检测 Android SDK 及更新,由于众所周知的原因,我们会「Unable to access Android SDK add-on list」,而且大家一般也已经提前配置好了 Android SDK,真正需要更新的时候手动去 SDK Manager 更新就好了。
mzlogin
2020/04/16
7.1K0
Android Studio 遇到问题集锦
从0系统学Android--1.3创建你的第一个 Android 项目
在 Android Studio 的欢迎页面点击 Start a new Android Studio project 就会自动为我们创建一个项目。(首次开启项目,可能构建时间很长,需要下载很多东西,和你的网速有关系)
开发者
2019/12/26
6710
相关推荐
腾讯信鸽集成
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验