VPI step by step(1)

本文主要参考”The Verilog PLI Handbook(Second Edition)”, 权当读书笔记。主要针对VCS flow, 也许会穿插其他两大家工具的flow.


说在最前面

到今天为止,SV对C/Cpp的主要接口支持大多改用DPI, 也推荐使用DPI。或者直接使用UVM自带现成的DPI lib, 已经可以满足不少需求。然后类似C与汇编的关系,VPI更接近与底层Verilog与C的交互,可以很容易的取得各种仿真时的资源和状态。所以可以说因为迫不得已,有时候还得上VPI.


Hello World!

A “Hello, World!” program is traditionally used to introduce novice programmers to a programming language. —— [ wiki ]

让我们遵循传统,从hello world开始。
Hello world需要四步, 这里直接把原文例子搬运过来:

1. 定义系统task/function

第一步很简单, 起个名字,你希望在TB里怎么调用它?这里就叫$hello了:

module test;
    initial
    $hello();
endmodule

2. 实现系统task/function

看到“实现“两个字就知道这一步是核心。这一步主要完成的是Verilog里调用C的内容,因此也可以说是C的部分怎样去实现。另外,书中把这称之为calltf, 感觉这个tf是task/function的合体.下面给出具体实现:

#include <stdlib.h>
#include <stdio.h>
#include “vpi_user.h”
/* ANSI C standard library */
/* ANSI C standard input/output library */
/* IEEE 1364 PLI VPI routine library */
PLI_INT32 PLIbook_hello_calltf(PLI_BYTE8 *user_data)
{
    vpi_printf(“\nHello World!\n\n”);
    return(0);
}

首先值得一提的是vpi_user.h. 这个头文件里包含了vpi的各种数据结构体,参数类型,属性以及函数原型。这部分内容可以在IEEE 1800(SV标准)的附录里找到。可以说这是每一个vpi程序必备的头文件,EDA厂商据此实现API供用户使用,具体实现就内部保密了。正因为是自定义,御三家对这个文件具体处理是不一样的,比如synopsys就没有实现vpi_get_data()这个API,理由是他们觉得不会有很多人用。但是大体上说,三家都实现了绝大部分规定的VPI,以及自己还提供扩展的API.基于vpi_user.h的实现,一般可以认为是通用的。
第二点新鲜的是PLI_INT32与PLI_BYTE8,其实就是C里的int和char类型,这里认为int是32位而char是8位。
再往下看,vpi_printf()这个函数是第一个接触到的VPI函数,和C里的printf的用法是一致的。

3.注册系统task/function

说白了就是建立VPI和Verilog之间的关联,这样TB才知道调用哪个tf. 注册内容主要包括三个方面:

  • API类型:task还是function(熟悉Verilog的你知道这句话在说什么)
  • Verilog侧API名
  • VPI侧API名

可以看出,verilog侧完全可以不叫VPI那边的名字。
在VPI中注册信息包含在s_vpi_register_systf这个结构体中,vpi_register_systf()函数使用这个结构体去注册。注册的函数都保存在VPI侧一个叫vlog_startup_routines的数组里。下面以$hello为例:

void PLIbook_hello_register()
{
    s_vpi_systf_data tf_data;

    tf_data.type        = vpiSysTask;
    tf_data.sysfunctype = 0;
    tf_data.tfname      = "$hello";
    tf_data.calltf      = PLIbook_hello_calltf;
    tf_data.compiletf   = NULL;
    tf_data.sizetf      = NULL;
    tf_data.user_data   = NULL;

    vpi_register_systf(&tf_data);
}

以上是注册的细节,在实际操作中往往不用这么麻烦–其实至今没有实验出vcs走这个flow怎样才能走通。
vcs中通常使用的方法是pli.tab文件,在这个例子里很简单:

$hello call=PLIbook_hello_calltf

nc中有类似的文件plimap.


万事俱备, 开始编译:

vcs hello_test.v +vpi -P pli.tab hello_vpi.c -full64

运行simv输出

Hello World!

参考资料

[1]: Stuart Sutherland. The Verilog PLI Handbook(Second Edition), 2002

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: VPI手册是指针对特定职位或部门的员工编制的一份详细指导手册。这本手册旨在为员工提供在工作中所需的重要信息和指导,以确保他们能够更好地了解和履行工作职责。 VPI手册通常包含公司的组织结构介绍,包括各个部门的职责和功能。这有助于员工了解公司的整体运作方式,并帮助他们更好地融入和适应团队工作环境。 此外,VPI手册还包含有关员工的权益与责任的信息。它详细说明了员工的基本权益,如工作时间、工资福利、休假政策等,并强调了员工在工作中应遵守的法律和道德规范。 此手册还提供了有关员工职责和期望的明确说明。它会列举每个职位的具体职责和要求,以确保员工清楚地了解自己在团队中的责任,并帮助他们更好地规划和组织工作。 此外,VPI手册还包含了公司的价值观和文化方面的信息。它帮助员工了解企业文化和价值,以便他们能够更好地适应和与公司的价值观相契合。 总而言之,VPI手册对于新员工入职和现有员工的参考和指导具有重要意义。它是企业用来确保员工了解和遵守公司规章制度、履行职责,并适应公司文化的重要工具。 ### 回答2: VPI手册是一本由VPI公司出版的指南书,用于提供组织内部员工和管理人员必要的信息和指导。VPI是一家全球性的科技公司,致力于为客户提供创新的解决方案和服务,帮助他们实现业务增长和成功。 这本手册包含了重要的政策、程序和指南,涵盖了公司内部各个方面,如人力资源、财务、行政和运营等。其中,人力资源章节详细介绍了员工的福利计划、培训发展机会、绩效评估和晋升机制等内容,旨在帮助员工全面了解公司的人力资源政策,并有效利用这些资源来提高个人和团队的绩效。 此外,VPI手册还规范了公司的财务管理流程和规范,并提供了相关的账务指南和报销流程,以确保公司的财务运作高效且合规。行政和运营章节包括了公司的行政规定和运营流程,旨在提供日常工作和运作中的准则和指导,以保证公司的顺利运行。 总的来说,VPI手册是VPI公司内部管理的重要工具,它为员工提供了组织内部运作的详细了解和指导。员工可以通过阅读手册来了解公司的政策和流程,提高工作效率和责任意识。同时,手册也是公司管理团队的有效管理工具,用于确保组织内部的一致性和高效性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值