本文介绍一种在verilog中,运用PLI+VPI机制调用C程序获得cover property的覆盖情况从而控制仿真的方法,其中的C程序,可以接受传参,且可以有返回值,仿真器选择的VCS。

  1. 编写C程序

    #include <stdio.h>
    #include "vpi_user.h"
    //使用PLI有两种机制:TF/ACC机制,或者VPI机制//void hello_calltf(int user_data, int reason)
    //{
    //    int var,result;
    //    var = tf_getp(1);//取$hello调用时的第一个参数传递值
    //    result = var;
    //    tf_putp(0, result);//实际返回值
    //    0;
    //}void get_cover_cnt_calltf(int user_data, int reason)
    {vpiHandle hd;hd=vpi_handle_by_name(tf_getcstringp(1),Null);//根据string获取句柄//从第一个形参获取传入的property层级路径名,//注意使用bind时,property的层级路径是在被bind的instance下面,如:top.xxx.assert_module.cover_nametf_putp(0,vpi_get(vpiAssertSuccessCovered,hd);//获取此property的success次数0;
    }
  2. 建立链接,下面两种方式任选其一即可
    1. tab模式,编写xxx.tab文件,内容参考:

      $hello size=32 call=get_cover_cnt_calltf    //如果期望调用的C程序有返回值,则必须声明size=xxx,PLI视其为function,否则视其为task(无返回值)
    2. 注册模式,麻烦,略。
  3. 仿真选项
    vcs hello.c -P xxx.tab +vpi ...
  4. 在平台中调用即可获得所传property的覆盖情况:

    var=$hello("top.xxx.assert_module.property_inst_name");

大功告成!

参考资料:

hello world

Verilog PLI Tutorial


上面的方法不好用,现在都是用DPI机制了,可以参考SV绿皮书C语言部分,只需两步:

1.C程序部分修改:

int get_cover_cnt_calltf(char *cp_name)
{vpiHandle hd;hd=vpi_handle_by_name(cp_name,Null);//根据string获取句柄//从第一个形参获取传入的property层级路径名,//注意使用bind时,property的层级路径是在被bind的instance下面,如:top.xxx.assert_module.cover_namereturn vpi_get(vpiAssertSuccessCovered,hd);//获取此property的success次数
}

2.SV部分修改:

import "DPI-C" function int get_cover_cnt_call_tf(input string cp_name);//使用sv语法...
get_cover_cnt_call_tf("top.xxx.cp_name");//注意没有$符号

基于VCS使用VPI+PLI/DPI在verilog中调用C程序进行cover property驱动的仿真控制相关推荐

  1. 基于VCS使用VPI在verilog中调用c调用python进行仿真

    遇到了这样一个需求,许多验证人员用python用的很熟练,但是只能通过vpi调用c代码,要用c代码实现相同功能的python代码过于繁琐,所以想着能不能在c中调用python中的方法,将其包一层变为c ...

  2. 基于XRUN使用VPI在verilog中调用c调用python进行仿真

    上次已经写过一个基于VCS使用VPI在verilog中调用c调用python进行仿真,这次使用XRUN复现一下,有关XRUN的文档可是真难找,想要包含一个c语言头文件目录找半天不知道怎样包含上,最后还 ...

  3. 在verilog中调用VHDL模块

    习惯了自己发现一些小问题,既然发现了,就记下来吧,不然又要忘了,这是多么悲痛的领悟. 今天在用vivado进行块设计时所生成的顶层模块居然是用VHDL语言描述的,这时郁闷了,表示只看过VHDL语法但没 ...

  4. 【IEEE_Verilog-4.4】Verilog中的充电强度charge strength和驱动强度drive strength

    本文来自IEEE Standard for Verilog Hardware Description Language中4.4 strength 1 强度strength 在net声明中指定的两种类型 ...

  5. verilog中的定点数、浮点数、定点小数、定点整数的表示及运算

    1.定点数: 顾名思义定点数就是小数位固定不变的数叫做定点数,也就是小数点是定在某个位置不变的数. 2.定点数的分类: (1)定点整数:定点整数的小数点后面没有其他的数值,即小数点定在了数的最后面 定 ...

  6. 基于 FPGA 的以太网回环测试verilog实现UDP协议

    基于 FPGA 的以太网回环测试verilog实现UDP协议 verilog实现UDP协议: 该 设计使用 UDP 协议,首先通过串口助手接收 PC 发送的 UDP 数据包,然后提取其中的数据部分并使 ...

  7. 基于FPGA实现uart串口模块(Verilog)--------发送模块及整合

    基于FPGA实现uart串口模块(Verilog)--------发送模块及整合 当接收模块接收到数据后,需要重新发送形成回环验证模块正确性.思路和结束模块有一点点的小差异.接收模块最终输出的是一个并 ...

  8. 基于FPGA实现uart串口模块(Verilog)--------接收模块及思路总结

    基于FPGA实现uart串口模块(Verilog)--------接收模块及思路总结 uart通信协议简单理解为串转并和并转串的两个模块.同时必须保证数据的正确性.且输入输出端为串行. 此次实现uar ...

  9. html抢答器代码,基于FPGA的四路抢答器的Verilog HDL代码.doc

    基于FPGA的四路抢答器的Verilog HDL代码.doc module qiangda4(clk,clr,inputEn,add,stu,inputL1,inputL2,inputL3,input ...

最新文章

  1. 哈佛医学院解析:触发医学深度学习系统受到「对抗攻击」的诱因有哪些?
  2. zynq学习06 zynq的PL中加入的AXI_GPIO IP核来控制GPIO操作
  3. webService学习3:客户端生成webservice代码
  4. python 扫盲系列(1)
  5. AUTOSAR从入门到精通100讲(二十八)-AutoSar之CAN网络管理
  6. CentOS7 源码编译安装MySQL8.0.15 shell脚本
  7. transforms.Compose()函数
  8. 机械师开机黑屏自动修复此计算机,机械师F117-V-BISO还原教程
  9. java中常见数据库字段类型与java.sql.Types的对应
  10. python seaborn boxplot_seaborn.boxplot
  11. BamlViewer修改
  12. ensprip引入静态路由_IP路由基础理论知识详解(三)
  13. 计算机录屏幕和声音的软件是什么,哪个录屏软件可以录内部声音?分享开启与调节的方法...
  14. Android手机游戏大全apk
  15. Matlab中pause语句
  16. Matlab中如何清除persistent 变量
  17. 中国工程院院士倪光南:大数据产业安全和发展需同步
  18. 阿里云CDN是什么意思?
  19. 按F12,你真的会准确定位前后端问题吗?
  20. qmake -v,出现错误:qmake: could not exec ‘/usr/lib/x86_64-linux-gnu/qt4/bin/qmake‘: No such file or direc

热门文章

  1. 随着BCPNP邀请分数不断居于高位,申请人境外直接申请难度加大,大部分申请人需要先入境工作再递交省提名申请
  2. android后台进程常驻,android 后台常驻,不会被kill
  3. 学习笔记:查看谷歌浏览器的登陆账号以及密码
  4. ubuntu20.04玩植物大战僵尸95版
  5. 小马哥---高仿酷派大神F2 高仿移动定制版4G 详细拆机主板图与开机界面图。6571芯片
  6. 有个朋友要做眼睛手术
  7. 小学交通安全教育课件PPT模板
  8. iOS集成支付宝sdk下载地址
  9. MySQL(最全的MySQL基础版,代码版)
  10. SVG排版公众号文章『两次互动,展开长图』模板代码