筆者正在搞ysyx,需要用到Verilator的DPI-C機(jī)制。雖然STFM比較容易學(xué)會(huì),但本著學(xué)習(xí)和記錄的目的,還是寫一篇文章出來(lái)。
DPI-C機(jī)制,簡(jiǎn)單來(lái)說(shuō)就是你可以在C語(yǔ)言中實(shí)現(xiàn)一個(gè)函數(shù),卻在Verilog中調(diào)用!在驗(yàn)證的過(guò)程中無(wú)疑會(huì)有很大的助力!
?
下面來(lái)個(gè)例子吧:
import "DPI-C" function int add (input int a, input int b);
module our(
input wire [31:0] a,
input wire [31:0] b,
output reg [31:0] ans
);
always@(*) begin
ans = add(a, b);
end
endmodule
比如我需要在.v中調(diào)用一個(gè)add函數(shù),那就把import那句話添加進(jìn)來(lái)。然后,就可以在你需要的地方直接使用這個(gè)函數(shù)。
在這個(gè)例子中,我對(duì)引出的信號(hào)ans賦值為add(a, b),也就相當(dāng)于ans = a + b了。
#include "Vour__Dpi.h"
#include "svdpi.h"
#include "Vour.h"
Vour *top = new Vour;
int add(int a, int b) {return a + b;}
int main() {
top->a = 1;
top->b = 1;
top->eval();
printf("The value is %d\n", top->ans);
delete top;
exit(0);
return 0;
}
這是驗(yàn)證所需要的.cpp,需要自己進(jìn)行設(shè)計(jì)和編寫。這里對(duì)上面的.v中的add函數(shù)進(jìn)行了定義,并在main函數(shù)中進(jìn)行了驗(yàn)證的操作。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-738785.html
當(dāng)然,DPI-C機(jī)制可以有很多妙用。不過(guò)也不要太過(guò)依賴,不要本末倒置。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-738785.html
到了這里,關(guān)于Verilator的DPI-C機(jī)制:實(shí)現(xiàn)跨平臺(tái)的函數(shù)調(diào)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!