2012-12-12 31 views
0

我正在嘗試在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 $^ 

回答

1

答案就在我的眼前 我需要改變

tf_data.type  = vpiSysTask; 

tf_data.type  = vpiSysFunc; 

感謝您的幫助

1

我不認爲這是由Icarus Verilog支持。如果你看看ivltest suite for vpi這些測試是系統任務而不是功能。

您應該能夠通過重寫爲任務調用並驅動VPI中的輸入/輸出網絡來達到您想要的效果。看看pokereg.ccpokereg.v

+0

這些都是偉大的前面是種指針。我需要在verilog中操作寄存器。但我只是找到了解決方案,幫助我解決問題,使tf_data.type = vpiSysTask;到vpiSysFunc似乎解決了這個問題 –

相關問題