DPI
systemverilog提供DPI(Direct Programming Interface),这是一个直接编程接口,可以使得SV和其它的外部语言进行交互,外部的语言包括C,C++,systemC。
其它语言的实现方法,可以在SV中调用,称为import method。而其它语言执行SV实现的方法,成为export method。故导入导出都是针对SV而言。SV可以和其他的语言通过参数的传递和返回来传输数据。
import declaration的用法如下:
import “DPI-C” function int calc_parity(input int a);
export declaration的用法如下:
export “DPI” my_function= function myfunction
module dpi_tb;
import "DPI-C" function void c_method();
initial begin
$display("Before calling C Method");
c_method();
$display("After calling C Method");
end
endmodule
#include <stdio.h>
#include <stdlib.h>
extern void c_method()
{
printf(" Hello Wordld....!\n");
}
执行结果如下,
![在这里插入图片描述](https://img-blog.csdnimg.cn/e102e50980794e4d967b9d60421335ac.png)
如果想在C中运行SV,代码修改如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/98b86c1c870e463280c6ff15ca0a43e3.png)
执行结果如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/c462ebd7cb0e403987cbeb30366ad8b5.png)
结构体
sv提供的结构体可以把多种类型的数据组合在一起,这样就可以把他们看成一个整体。其语法如下,使用typedef可以更好的声明结构体变量,其中packed是可以选择的。
typedef struct packed{
type_1 var_1;
type_2 var_2;
type_3 var_3;
} struct_name;
module struct_tb;
typedef struct packed{
bit [7:0] addr ;
bit valid ;
bit [31:0] data ;
} mem_pkt;
mem_pkt pkt;
initial begin
pkt = '{8'h6, 1'b1, 32'hC001_0FAB};
$display("pkt = %p", pkt);
pkt.addr = 8'h8;
$display("pkt = %p", pkt);
pkt.data = 32'hFFF0_0FFF;
$display("pkt = %p", pkt);
end
endmodule
在上面的例子中,结构体的初始化采用单引号加大括号实现的,访问结构体的变量可以通过.操作符,若想打印整个结构体,可以通过%p。执行结果如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/e8ff6bfa7d31455eb0bc7bf39891ece8.png)
同时是组织数据,数组是相同类型的数据集合,而struct可以包含不同的类型。
enum
将变量赋值给枚举类型是非法的,需要进行类型转换。
![在这里插入图片描述](https://img-blog.csdnimg.cn/9a284ad80bcd4dd587c44f21f0fa9701.png)
其执行结果如下:(报错了)
![在这里插入图片描述](https://img-blog.csdnimg.cn/e35f5a034e104685ad31105786f3111d.png)
解决办法是我们可以通过$cast函数把常数4转化位枚举变量。
![在这里插入图片描述](https://img-blog.csdnimg.cn/3e51d27405b34de0a23e4aab4dbaba41.png)
执行结果如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/11dd60540b7b46e1a014c9b7ab5462af.png)
需要指出的是枚举类型还可以指定logic,bit和int类型,我们只需在enum后增加修饰就可以。
![在这里插入图片描述](https://img-blog.csdnimg.cn/a831ff6d746a41dc9dcfd0f652d34265.png)
语法完结
systemverilog的语法学习到这里结束了,后期会多多阅读学习别人写的SV代码。加油,星夜赶路人!!!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)