我正在嘗試在iverilog中使用vpi函數,該函數在調用它之後會將值返回到verilog測試臺。它編譯好,但我運行時返回以下內容我該如何說服iverilog vpi是系統功能而不是任務
Error: $flash_dat() is a system task, it cannot be called as a function.
我已經把代碼的相關部分放在下面。我將不勝感激,如果我可以得到一個例子,包括編譯和運行過程中使用的vpi函數返回一個值在iverilog(我沒有在谷歌搜索,但沒有得到任何iverilog的例子)或獲得一個指針我在這段代碼中犯的錯誤。在此先感謝您的時間。
感謝, 維奈
代碼: 的Verilog
always @(flash_adr) #110 flash_do <= $flash_dat(flash_adr);
.sft文件
$flash_dat vpiSysFuncInt
flash_dat.c
void flash_dat_register()
{
s_vpi_systf_data tf_data;
tf_data.type = vpiSysTask;
tf_data.tfname = "$flash_dat";
tf_data.calltf = flash_dat_calltf;
tf_data.compiletf = flash_dat_compiletf;
tf_data.sizetf = 0;
tf_data.user_data = 0;
vpi_register_systf(&tf_data);
}
void (*vlog_startup_routines[])() = {
flash_dat_register,
0
};
static unsigned int flash_dat_calltf()
{
unsigned int addr= tf_getp(1);
tf_putp (0,((flash_array[addr+1]<<16)|flash_array[addr]));
return ((flash_array[addr+1]<<16)|flash_array[addr]);
}
組合物1 le:
SOURCES=tb_norflash16.v flash_dat.sft $(wildcard ../rtl/*.v)
all: tb_norflash16 flash_dat.vpi
isim:
vvp -M. -mflash_dat tb_norflash16
tb_norflash16: $(SOURCES)
iverilog -o tb_norflash16 $(SOURCES)
flash_dat.vpi: flash_dat.c flash_dat.sft
iverilog-vpi $^
這些都是偉大的前面是種指針。我需要在verilog中操作寄存器。但我只是找到了解決方案,幫助我解決問題,使tf_data.type = vpiSysTask;到vpiSysFunc似乎解決了這個問題 –