當(dāng)plusargs的數(shù)量很多時(shí),此時(shí)的命令行參數(shù)會(huì)非常多,或者相應(yīng)的仿真配置文件也會(huì)變得復(fù)雜和冗長(zhǎng),且容易出錯(cuò)。此時(shí)可以考慮使用json文件傳入相關(guān)的配置信息,環(huán)境中獲取對(duì)應(yīng)的配置數(shù)據(jù)。
systemverilog讀取json文件?
是的,并且已經(jīng)有了相關(guān)的開(kāi)源庫(kù)JSONinSV實(shí)現(xiàn)了常用的讀取json,獲取string、int、bool類(lèi)型的數(shù)據(jù)、保存json文件、修改json數(shù)據(jù)的功能,也可以解析多個(gè)object嵌套的結(jié)構(gòu),對(duì)json語(yǔ)法的支持很好。
這里將常用的幾個(gè)plusargs選項(xiàng)放置在json文件中,sv側(cè)解析到對(duì)應(yīng)的配置信息。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側(cè)的解析demo如下:
classjson_test; virtualfunctionvoidrun_test(); stringjson_str,keys[$]; JSONValuejv,node_value; intvalue_list[$]; jv=new(); jv.loadFromFile(json_file); //printstringjsoncontext jv.dumps(json_str,4); $display("%s",json_str); //getallkeys jv.getObjectKeys(keys); $display("allcfgoption:%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 virtualfunctionvoidgetArrayIntValue(constrefJSONValuex_jv,outputintx_value[$]); intarray_size=x_jv.getArraySize(); for(inti=0;i
仿真后可以得到:
審核編輯:劉清
-
仿真器
+關(guān)注
關(guān)注
14文章
1017瀏覽量
83721 -
Verilog語(yǔ)言
+關(guān)注
關(guān)注
0文章
113瀏覽量
8224
原文標(biāo)題:換種方式管理plusargs傳入的控制參數(shù)
文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論