我試圖讓我的測試平臺具有更高的可擴展性,並且具有一組需要路徑名稱給實例的PLI函數。我試圖避免強硬的路徑。我可以用系統任務/功能構建路徑。我嘗試將此路徑定義爲SystemVerilog類型,但PLI拒絕它,我無法更改PLI。 PLI確實接受一個reg數組。pli調用的左對齊文本
挑戰是PLI需要左對齊文本,但$sformat
,$sformatf
和%s
都是正確的。
left-justified : "tb.vdut[10].inst9.sample_func " // Desired right-justified : " tb.vdut[10].inst9.sample_func" // Actual
示例功能:
function void call(
integer dut_id, inst_id,
reg [CHAR_NUM-1:0] func_name,
integer arg0, arg1, argN);
reg [CHAR_NUM-1:0] path;
$sformat(path,"tb.vdut[%0d].inst%0d.%0s", dut_id, inst_id, func_name);
// Make path left-justified
/* missing convert code here */
$display("path:'%s', arg0:%0d, arg1:%0d, argN:%0d", path, arg0, arg1, argN);
//$my_pli(path, arg0, arg1, argN);
endfunction : call
我有自己的答案,但我正在尋找一個清晰的解決方案。如果CHANR_NUM
很大並且功能call
經常執行,則while循環會吸取大量CPU時間。
如何執行轉換的新PLI函數? – Ari 2015-02-10 23:58:27
@Ari,如果我有一個源代碼爲'$ sformat'的源代碼,或者是一個如何編寫一個帶有N個參數的PLI的教程,那麼我會考慮編寫一個左對齊的PLI等價的'$ sformat'類型。 – Greg 2015-02-11 17:01:07
爲什麼選擇源代碼?我正在考慮將字符串傳遞給一個PLI函數,該函數可以訪問'sformat','std:setw','std:right'或者甚至'Boost'等庫函數。 – Ari 2015-02-11 19:34:10