systemverilog学习 --- DPI和结构体(语法完结)

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
// SystemVerilog File
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");
}

执行结果如下,
在这里插入图片描述
如果想在C中运行SV,代码修改如下:
在这里插入图片描述
执行结果如下:
在这里插入图片描述

结构体

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
        //initializing struct
        pkt = '{8'h6, 1'b1, 32'hC001_0FAB};
        $display("pkt = %p", pkt);

        //Change the struct field value
        pkt.addr = 8'h8;
        $display("pkt = %p", pkt);

        //Change the struct field value
        pkt.data = 32'hFFF0_0FFF;
        $display("pkt = %p", pkt);
    end

endmodule

在上面的例子中,结构体的初始化采用单引号加大括号实现的,访问结构体的变量可以通过.操作符,若想打印整个结构体,可以通过%p。执行结果如下:
在这里插入图片描述
同时是组织数据,数组是相同类型的数据集合,而struct可以包含不同的类型。

enum

将变量赋值给枚举类型是非法的,需要进行类型转换。
在这里插入图片描述
其执行结果如下:(报错了)
在这里插入图片描述
解决办法是我们可以通过$cast函数把常数4转化位枚举变量。
在这里插入图片描述
执行结果如下:
在这里插入图片描述
需要指出的是枚举类型还可以指定logic,bit和int类型,我们只需在enum后增加修饰就可以。

在这里插入图片描述

语法完结

systemverilog的语法学习到这里结束了,后期会多多阅读学习别人写的SV代码。加油,星夜赶路人!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值