电子说
当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条评论
快来发表一下你的评论吧 !