首页 > 其他分享 >verilator书写模块testbench

verilator书写模块testbench

时间:2023-01-19 22:44:24浏览次数:37  
标签:模块 clk top contextp 信号 eval testbench verilator timeInc

默认顶层模型名称为top,环境名称为contextp

const std::unique_ptr<VerilatedContext> contextp{new VerilatedContext};
const std::unique_ptr<Vxxx> top{new Vxxx{contextp.get(), "TOP"}};
// xxx为自定义待测模块名,由Makefile生成类在Vxxx.h中

仿真信号的操控

总共3种语句:

  • 信号延时: contextp->timeInc(1);,数字为设定的时间宽度,单位默认ps
  • 信号赋值: top->xxx = xxx;,xxx为信号名称
  • 模型同步: top->eval();,就是Evaluate Model

前两种负责改变仿真状态,最后的模型同步负责保存前两种的状态改变,同步到波形图中。若没有最后的模型同步,仿真信号不会更新到波形图中。

前两种语句的顺序无所谓。信号延时表示以之前top->eval()记录的状态保持多少时间;信号赋值表示再时延之后信号应该是什么值。

对于每次模型同步,信号延时语句的数值会相加;而信号赋值则会后语句覆盖前语句,举例如下

① top->eval()前单次信号赋值和时延:

    // init signal
    top->Z_i = 1;
    top->rst_n = 0;
    top->clk = 0;
    top->eval();	// 别忘了这一个,初始的赋值

    contextp->timeInc(1); // 保持当前信号情况,持续1ps时间
    top->clk = !top->clk; // 信号改变
    top->Z_i = 2;
    top->eval();          // 模型同步

image 可见,同步了1ps

② top->eval()前多次信号赋值和时延:

    // init signal
    top->Z_i = 1;
    top->rst_n = 0;
    top->clk = 0;
    top->eval();	// 别忘了这一个,初始的赋值

    contextp->timeInc(1); // 保持当前信号情况,持续1ps时间
    top->clk = !top->clk; // 信号改变
    top->Z_i = 2;
    contextp->timeInc(1);
    top->Z_i = 1;
    top->eval();          // 模型同步

image 看到clk为1(若再取反则变为0);Z_i为1

③ 用两个top->eval()分别记录两次状态变化:

    // init signal
    top->Z_i = 1;
    top->rst_n = 0;
    top->clk = 0;
    top->eval();

    contextp->timeInc(1); // 保持当前信号情况,持续1ps时间
    top->clk = !top->clk; // 信号改变
    top->Z_i = 2;
    top->eval();

    contextp->timeInc(1);
    top->clk = !top->clk;
    top->Z_i = 1;
    top->eval();          // 模型同步

image

标签:模块,clk,top,contextp,信号,eval,testbench,verilator,timeInc
From: https://www.cnblogs.com/elucidator-xrb/p/17062196.html

相关文章

  • Spring security模块
    在SpringSecurity3.0中,"安全性"模块分为单独的jar文件。目的是根据jar文件的功能进行划分,以便开发人员可以根据其要求进行集成。这还有助于将所需的依赖项设置为maven项......
  • 基于simulink的PN码伪码匹配的同步仿真,包括解调,伪码匹配,fft等模块
    1.算法描述在扩频数字通信系统中,接收端与发送端必须实现信息码元同步、PN码元和序列同步及载波同步。只有实现了这些同步,直扩系统才能正常工作,可以说没有同步就没有扩频通......
  • 基于simulink的PN码伪码匹配的同步仿真,包括解调,伪码匹配,fft等模块
    1.算法描述        在扩频数字通信系统中,接收端与发送端必须实现信息码元同步、PN码元和序列同步及载波同步。只有实现了这些同步,直扩系统才能正常工作,可以说没有......
  • 2023年1月18日 模块交接会议 —— 数据收集源的扩展与否
    没有想到还是在年前开了模块交接会议,负责交接的人还是比较开心的,比较可以在年前把这个活切割赶紧,但是负责接受的人可是有些苦头了,估计这个年也过得不能消停了,而我也是这其......
  • dremio DACModule 模块加载简单说明
    dremioDACModule主要是模块加载初始化以及组合,是一个比较重要的模式,同时也支持基于配置进行加载(有点很多了,后边简单介绍)加载机制支持配置加载可以通过dremio运行配......
  • Nginx安装SSL模块教程及注意事项
    一、引言有的时候我们的Linux服务器上之前安装的nginx已经发布了web项目,但之前并没有用到https访问,之后又有需求了,要配置一个SSL证书,那一开始我们编译的Nginx并没有SSL模......
  • HummerRisk V0.9.0:增加RBAC 拓扑图,云检测、漏洞、主机等模块增加规则
     HummerRiskV0.9.0发布:增加RBAC资源拓扑图,首页新增检查的统计数据,云检测、漏洞、主机等模块增加规则,对象存储增加京东云,操作审计增加金山云,镜像仓库新增设置别名。感谢社......
  • python os模块总结
    os(operatingsystem)是python标准库中的操作系统接口,提供了很多与操作系统进行交互的函数。下面我将在C:\Users\Administrator\try这一路径下执行test.py来详细说明os的......
  • IP对讲广播音频模块解决方案
    需求分析 随着数字化进程的不断推进,对讲已经覆盖到了各行业各业。并且也逐渐呈现出场景分散化的特点。鉴于此,团队根据市场的变化,及时推出了一款标准化的模块,方便系统集......
  • Labview ,非标自动化软件通用程序框架,程序模块化新增,快速开发
    Labview,非标自动化软件通用程序框架,程序模块化新增,快速开发,只需配置表格,逻辑判断,循环跳转,变量新建,都在表格内实现,程序不需要改动,快速设备开发,自动化设备编写程序周期由2周......