摘要:4.2動態(tài)鏈接庫的程序結(jié)構(gòu)利用modelsim仿真時,可根據(jù)VHDL文件的聲明,調(diào)用DLL文件(如sim.dll)。在VHDL文件中已經(jīng)給出了調(diào)用文件(sim.dll)和初始化函數(shù)名(如sim_init),modelsim根據(jù)這些信息,調(diào)用sim.dll中的sim_init函數(shù),完成初始化工作。初始化包括:①初始化全局變量;②設(shè)置VHDL輸入輸出信號與c程序變量的對應(yīng)關(guān)系;③
4.2 動態(tài)鏈接庫的程序結(jié)構(gòu)
利用modelsim仿真時,可根據(jù)VHDL文件的聲明,調(diào)用DLL文件(如sim.dll)。在VHDL文件中已經(jīng)給出了調(diào)用文件(sim.dll)和初始化函數(shù)名(如sim_init),modelsim根據(jù)這些信息,調(diào)用sim.dll中的sim_init函數(shù),完成初始化工作。初始化包括:
①初始化全局變量;
②設(shè)置VHDL輸入輸出信號與c程序變量的對應(yīng)關(guān)系;
③設(shè)置輸出信號的一些初始狀態(tài)(mti_ScheduleDriver);
④設(shè)置在仿真器重新仿真(restart)和仿真器退出仿真(quit)等情況下執(zhí)行的一些函數(shù)(mti_AddRestartCB和mti_AddQuitCB等),如釋放動態(tài)申請內(nèi)存等;
⑤設(shè)置敏感表,給出在某些信號發(fā)生變化(如時鐘上升沿等)時執(zhí)行的函數(shù)。
⑥其它。
C程序的設(shè)計步驟如下:
(1)包含頭文件,包括c程序常用的一些頭文件和modelsim給出的外部語言接口頭文件mti.h。Modelsim給出的外部接口函數(shù)說明、類型定義等都在mti.h中。
(2)定義自己的結(jié)構(gòu)體,這一點主要是為了編程方便,例如輸入輸出信號對應(yīng)的變量在各函數(shù)中基本上都會用到,可以把這些變量定義成一個結(jié)構(gòu),便于參數(shù)傳遞。
(3)編寫初始化函數(shù)
初始化函數(shù)的定義為:
init_func(mtiReginoIdT region,char *param,
mtiInterfaceListT *generics,mtiInterfaceListT *ports)
各參數(shù)的意義可以參閱modelsim用戶手冊。
下面結(jié)合上面給出的初始化函數(shù)要完成的任務(wù)進(jìn)行詳細(xì)說明。
a.初始化全局變量(略)
b.設(shè)置VHDL輸入輸出信號與c程序變量的對應(yīng)關(guān)系。這是通過調(diào)用mti_FindPort函數(shù)實現(xiàn)的。mti_FindPort函數(shù)定義為:
mfiSignalIdT mti_FindPort(mtiInterfaceListT *list,char *name);
例如,定義輸入輸出信號對應(yīng)的結(jié)構(gòu)ip:
PortStruct ip;
就可以用:
ip_in1=mti_FindPort(ports,“in1”);
來實現(xiàn)輸入信號in1與變量in1的對應(yīng)關(guān)系。
對輸出信號來說,它的目的是產(chǎn)生驅(qū)動。因此,這些變量(out1和out2)除了要找到對應(yīng)的輸出信號外,還要驅(qū)動這些信號。對信號的驅(qū)動可以通過調(diào)用mti_CreateDriver函數(shù)來實現(xiàn)。該函數(shù)的定義為:
mtiDriverIdT mti_CreateDriver(mtiSignalIdT sig);
由于這些變量一般只用于對外驅(qū)動,因此可以簡單寫成下面的形式:
ip.out1 = mti+ CreateDriver(mti_FindPort(ports,“out1”));
通信工程師備考資料免費領(lǐng)取
去領(lǐng)取