本人对dpi一些文档的翻译,和自身使用的一些总结
然后
我会翻译一些外文的DPI资料在这里,最后做一些使用上的总结。
更新会比较慢,只是给验证区,增加点人气。
我道行尚浅 ,欢迎大家提意见
强烈支持
强烈支持小编
dpi介绍
Direct Programming Interface是sv和其他编程语言的接口。DPI包括两个互相独立的层,一个是sv,一个是其他编程语言。
以c++为例
sv ⇌dpi ⇌C++
DPI基本就是这个意思,sv的函数可以通过dpi拿到c++里面用,而c++的函数也可以通过dpi直接给sv用
唯一要注意的东西,就是,这些函数都是不消耗仿真时间,但可以通过输出task的方式,来达到时序控制的效果
关于dpi的编译,sv和c++会各自使用适合自身语言的编译器进行编译,不用关心这个
特别注意的是,dpi目前只支持c,使用c++的话要加上extern c
使用dpi有两点原因,一个是验证技术发展至今,一个验证系统里面需要用到多种语言来建模,sv需要这样一个东西
第二个是 PLI VPI 之类的太tmd复杂了,用起来麻烦
任务和函数
其实,其实,dpi自称是支持时序的,这种方式呢,叫做调用task。
但是很遗憾,c只能作为函数被调用,所以如我之前所说的,别太想同步的事情。
dpi使用外部语言的输入输出函数,需要先声明,声明的方式和普通函数一样,位置都是任意的,只要用import、export这样的关键词就好了,声明的时候可以加上input output之类的参数,给一个简单例子,帮助理解import "DPI" context task c_test(input int base_addr);
重要的事情再重复一遍,使用这些import outport函数的时候,和sv自身的函数一模一样,就当sv的函数用。
想知道小编用的是什么EDA工具来进行验证的
纠正小编一个基本的错误,“唯一要注意的东西,就是,这些函数都是不消耗仿真时间,这意味着,别想同步的事了”。
首先,C函数是可以消耗仿真时间的,比如C函数本身调用SV的task(在sv中export到C中的task);
其次,在结合import和export以及task之后,SV和C/C++之间做一些同步是完全没有问题的。
vcs
很对,当时没有看到输出task这里
技术上的论点,如果能用yes和no区分的时候,我们还是要直白的说出来,不是针对小编。
共同提高,小编加油!
十分感谢,只有大家指出问题,才能共同提高,我给您私信了,我会重新整理笔记,到时候先发给您看看,然后发帖,不能误人子弟
期待小编的更新。
对小编的钻研精神赞一个
请问小编,用sv调用matlab的.m文件可行么,如果可以,具体需要怎么做,谢谢!