电子说

当plusargs的数量很多时,此时的命令行参数会非常多,或者相应的仿真配置文件也会变得复杂和冗长,且容易出错。此时可以考虑使用json文件传入相关的配置信息,环境中获取对应的配置数据。
systemverilog读取json文件?
是的,并且已经有了相关的开源库JSONinSV实现了常用的读取json,获取string、int、bool类型的数据、保存json文件、修改json数据的功能,也可以解析多个object嵌套的结构,对json语法的支持很好。
这里将常用的几个plusargs选项放置在json文件中,sv侧解析到对应的配置信息。json的配置信息如下:
{
"enable_3G_clk": true,
"axi_vip_enable": false,
"trans_num": 123,
"push_data": [1, 2, 3],
"cfg_reg":[
{"addr": 100,
"data": 1},
{"addr": 200,
"data": 4}
]
}
sv侧的解析demo如下:
class json_test;
virtual function void run_test();
string json_str,keys[$];
JSONValue jv,node_value;
int value_list[$];
jv = new();
jv.loadFromFile(json_file);
//print string json context
jv.dumps(json_str,4);
$display("%s",json_str);
// get all keys
jv.getObjectKeys (keys);
$display("all cfg option: %p",keys);
node_value = jv.getObjectMember("trans_num");
$display("trans_num: %p",node_value.getNumber);
node_value = jv.getObjectMember("push_data");
getArrayIntValue(node_value,value_list);
$display("push_data: %p",value_list);
endfunction
virtual function void getArrayIntValue(const ref JSONValue x_jv, output int x_value[$]);
int array_size = x_jv.getArraySize();
for(int i=0;i
仿真后可以得到:

审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !