systemverilog 的svlib的用法1

1、关于svlib的用法可以参考:

https://zhuanlan.zhihu.com/p/366129803icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/366129803http://www.lujun.org.cn/?p=941icon-default.png?t=N7T8http://www.lujun.org.cn/?p=941https://zhuanlan.zhihu.com/p/366129803icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/366129803

2、资料下载路径

        svlib - a programmer's utility library for SystemVerilog

3、使用例子

        3.1:解析固定格式的文件到class里面

          第一步:在flist里面加载对应的svlib,以及对应的宏

        -f ../cbb/svlib/svlib.f

        cbb/svlib/src/svlib_macros.svh

           第二步:在对应模块里面import svlib_pkb

  import svlib_pkg::*;

             第三步:准备文件,文件后缀为ini,其中[secA],这个字符串,表示一个数据的section,一种类别,sv数据默认处理的是后面带等号的数据个数。

[secA]

data=1

str=20,30,40

[secA_tmp]

data=3

str=4,0,0

[secC]

str_tmp_0=01010

str_tmp_1=01010

str_tmp_2=01010

str_tmp_3=01010

str_tmp_4=01010

str_tmp_5=01010

str_tmp_6=01010

str_tmp_7=01010

str_tmp_8=01010

str_tmp_9=01010

str_tmp_10=01010

str_tmp_11=01010

str_tmp_12=01010

str_tmp_13=01010

str_tmp_14=01010

str_tmp_15=01010

               第四步 :准备ini文件对应的class

下面的循环注册字符串使用的函数SVLIB_DOM_FIELD_STRING_BY_NAME的原代码宏定义来自于:https://download.csdn.net/download/pgl512228/89714380,里面还有其他关于int/object 的数组注册的宏,请下载后自取。

class svlib_secA;

    string str              ;
    int    data             ;

    
    `SVLIB_DOM_UTILS_BEGIN(svlib_secA)
        `SVLIB_DOM_FIELD_INT(data)
        `SVLIB_DOM_FIELD_STRING(str)

    `SVLIB_DOM_UTILS_END
       
endclass
class svlib_secC;

    string str_tmp[12]=1,1,1;
    
    `SVLIB_DOM_UTILS_BEGIN(svlib_secC)
        foreach(str_tmp[i])begin
            `SVLIB_DOM_FIELD_STRING_BY_NAME(str_tmp,i,$formatf("str_tmp_%0d",i))
        end
    `SVLIB_DOM_UTILS_END
       
endclass

class globle;
    svlib_secA secA,secA_tmp,secB;
    svlib_secC secC     ;
    `SVLIB_DOM_UTILS_BEGIN()
        `SVLIB_DOM_FIELD_OBJECT(secA)
        `SVLIB_DOM_FIELD_OBJECT(secA_tmp)
        `SVLIB_DOM_FIELD_OBJECT(secB)
        `SVLIB_DOM_FIELD_OBJECT(secC)
    `SVLIB_DOM_UTILS_BEGIN
endclass

        第五步:读取文件

        在需要读取的class里面下如下代码,读取后就可以打印了:

string file_name ;
cfgNodeMap cfg_nod; 
cfgFileINI file = cfgFileINI::create(); 
cfgError_enum_err; 
globle glb_cfg = new; 
file_name = "test.ini";
err = cfg_file.openR(file_name);
$cast(cfg_nod,file.deserializse());
err = file.close;
$display("secA data is %0d",glb_cfg.data);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NobleGasex

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值