* [[http://www.eetimes.com/news/design/columns/eda/showArticle.jhtml?articleID=26806455|Is SystemVerilog the next PL/1?]] * [[http://www.deepchip.com/items/0446-06.html|SystemVerilog Real Project?]] * [[http://www.edacn.net:81/bbs/viewthread.php?tid=26776|The search for the perfect language 验证语言的选择和分析]] * [[http://verificationguild.com/modules.php?name=Forums&file=viewtopic&p=4279#4279|"SV" OO vs "e" Aspect]] == Direct Programming Interface (DPI) == === 综述 === 分析SystemVerilog或者外来语言的源程序的时候只需要相应的编译器。不同的编程语言可以用来支持同一种SystemVerilog layer。现今,SystemVerilog3.1只定义C语言的外来接口。<
><
> 定义这样的接口是从两方面考虑的。在方法学上要求异类的系统里应该允许有些部分是用SystemVerilog以外的语言来写的。而在另一方面,又有实际的需求以便容易且有效的将已经写好的代码,通常是C或者C++,连接到系统里来,而无需了解PLI或者VPI的知识和Overhead。<
><
> DPI遵从黑盒的原则:一个component的规范和实现是清晰分开的,具体的实现对系统来说是透明的。因此,具体实现采用的编程语言也是透明的,尽管标准现在只是定义了C的连接语义。SystemVerilog代码和外来语言代码的分离是建立在SystemVerilog中采用函数作为自然的包装单元基础上的。大体上,任何函数可以被看作黑盒,然后可以被透明的用SystemVerilog或者外来语言来实现,而无需修改相应的调用。<
><
> ==== 函数 ==== DPI允许直接的跨语言的函数调用。外来语言实现的函数可以在SystemVerilog里面调用;这样的函数成为imported function。允许在外来语言里面调用的SystemVerilog函数应该在export申明中指定。DPI允许将SystemVerilog的数据通过函数的参数和结果的方式在不同的domain之间传递,而没有固有的性能影响。<
><
> 所有的在DPI里使用的函数都是非阻塞的,就像普通的SystemVerilog的函数一样。除了数据交换和显式的控制传递以外,DPI没有其他的同步方法。<
><
> 每一个imported函数都需要申明。imported function的申明又称为import declaration。它和SystemVerilog的函数申明非常类似。在任何允许定义SystemVerilog函数的地方都允许出现import declaration。一个import declaration相当于定义了SystemVerilog函数,而具体的实现是用外来语言的。一个外来的函数可以用来实现多个SystemVerilog的函数(这在为一个相同的基本函数提供不同的默认参数时很有用),但一个给定的SystemVerilog的函数名在同一个范围内只能使用一次。imported function可以有零到多个input, output和inout形式参数,也可以返回一个结果或者定义为void函数。