淺析基于Modelsim FLI接口的協(xié)同仿真技術(shù)_第1頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、淺析基于modelsim fli接口的協(xié)同仿真技術(shù)協(xié)同就是利用仿真工具提供的外部接口,用其它程序設(shè)計(jì)語言(非hdl語言,如c語言等)編程,用輔助仿真工具舉行仿真。modelsim 提供了與c語言的協(xié)同仿真接口。以windows平臺為例,用戶可通過modelsim 提供的c語言接口函數(shù)編程,生成動態(tài)鏈接庫,由modelsim 調(diào)用這些動態(tài)鏈接庫舉行輔助仿真,1所示。圖1 協(xié)同仿真暗示圖2 modelsim及fli接口介紹modelsim是model technology( graphics的子公司)的hdl硬件描述語言仿真軟件,可以實(shí)現(xiàn)、以及vhdl-verilog混合設(shè)計(jì)的仿真。除此之外,mo

2、delsim 還能夠與c語言一起對hdl設(shè)計(jì)文件實(shí)現(xiàn)協(xié)同仿真。同時,相對于大多數(shù)的hdl仿真軟件來說,modelsim 在仿真速度上也有顯然優(yōu)勢。這些特點(diǎn)使modelsim 越來越受到設(shè)計(jì)者、尤其是設(shè)計(jì)者的青睞。modelsim的fli(foreign language interface)接口,提供了c語言動態(tài)鏈接程序與仿真器的接口,可以通過c語言編程對設(shè)計(jì)文件舉行輔助仿真。3 協(xié)同仿真系統(tǒng)的結(jié)構(gòu)及意義modelsim與c語言協(xié)同仿真,一是用于產(chǎn)生測試向量,避開手工編寫測試向量的繁瑣;二是可以按照程序計(jì)算結(jié)果自動檢查仿真結(jié)果正確與否;三是模擬其它模塊(如ram)的功能,在系統(tǒng)級對設(shè)計(jì)文件仿真

3、。實(shí)踐中普通是把一和二結(jié)合在一起,用程序產(chǎn)生仿真向量,一方面輸出給設(shè)計(jì)文件作為輸入,另一方面由程序本身對該向量計(jì)算,把得到的結(jié)果與仿真器的輸出結(jié)果比較,檢查規(guī)律是否正確,2所示。至于模擬功能,現(xiàn)在已經(jīng)有一些通用芯片的模擬程序,如denali可以模擬ram的功能。另外,用戶也可以利用modelsim 提供的編程接口自己模擬一些芯片的行為,然后與設(shè)計(jì)文件銜接到一起仿真。圖2 語言測試程序?qū)hdl設(shè)計(jì)文件的協(xié)同仿真結(jié)構(gòu)圖4 對vhdl設(shè)計(jì)文件的協(xié)同仿真4.1 構(gòu)成框圖仿真文件的構(gòu)成3所示,包括hdl文件和動態(tài)鏈接庫(即c程序)。圖中c程序?qū)?yīng)的vhdl文件要負(fù)責(zé)聲明對應(yīng)的動態(tài)鏈接庫文件名及初始化函

4、數(shù),另外還可以給出一些調(diào)用參數(shù)。動態(tài)鏈接中用到的輸入輸出信號也要在對應(yīng)的vhdl文件中聲明。例如,假定有一個dll文件名為sim.dll,對應(yīng)的初始化函數(shù)為sim_init,有輸入信號in1、in2,輸出信號out1、 out2,可以這樣編寫對應(yīng)的vhdl文件(sim.vhd):library ieee;use ieee.std_logic_1164.all;entity sim isport(in1 :in std_logic;in2 :in std logic;out1 :out std_logic;out2 :out std_logic;);end entity sire;archite

5、cture dll of sim isattribute foreign :string;attribute foreign of dll :architecture is sim_initsim.dll”beginend;仿真時,仿真器對頂層的hdl文件舉行仿真,并按照各vhdl文件的動態(tài)鏈接庫聲明來調(diào)用、執(zhí)行相應(yīng)的動態(tài)鏈接庫。4.2 動態(tài)鏈接庫的程序結(jié)構(gòu)利用modelsim仿真時,可按照vhdl文件的聲明,調(diào)用dll文件(如sim.dll)。在vhdl文件中已經(jīng)給出了調(diào)用文件(sim.dll)和初始化函數(shù)名(如sim_init),modelsim 按照這些信息,調(diào)用sim.dll中的sim

6、_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è)計(jì)步驟如下:(1)包含頭文件,包括c程序常用的一些頭文件和modelsim 給出的外部語言接口頭文件mti.h。modelsim 給出的外部接口函數(shù)解釋、類型定義

7、等都在mti.h中。(2)定義自己的結(jié)構(gòu)體,這一點(diǎn)主要是為了編程便利,例如輸入輸出信號對應(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ù)舉行具體解釋。a.初始化全局變量(略)b.設(shè)置vhdl輸入輸出信號與c程序變量的對應(yīng)關(guān)系。這是通過調(diào)用mti_find

8、port函數(shù)實(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);來實(shí)現(xiàn)輸入信號in1與變量in1的對應(yīng)關(guān)系。對輸出信號來說,它的目的是產(chǎn)生驅(qū)動。因此,這些變量(out1和out2)除了要找到對應(yīng)的輸出信號外,還要驅(qū)動這些信號。對信號的驅(qū)動可以通過調(diào)用mti_createdriver函數(shù)來實(shí)現(xiàn)。該函數(shù)的定義為:mtidriveridt mti_c

9、reatedriver(mtisignalidt sig);因?yàn)檫@些變量普通只用于對外驅(qū)動,因此可以容易寫成下面的形式:ip.out1 = mti+ createdriver(mti_findport(ports,out1);c.調(diào)用mti_scheduledriver函數(shù),設(shè)置輸出信號的初始狀態(tài)。mti_scheduledriver函數(shù)的定義為:void mti_scheduiedriver(mtidriveridt driver,long value,mtidelaytdelay,mtidrivermodet mode);其中,driver是輸出信號對應(yīng)的變量名,如ip.out1和ip.o

10、ut2;value是要設(shè)置(驅(qū)動)的值,如高電平(1,對應(yīng) value為3)、低電平(0,對應(yīng)value為2)、高阻(z,對應(yīng)value為4)、未賦值(u,對應(yīng)value為0)等等;delay 是從當(dāng)前時光開頭到把信號驅(qū)動成給定值(value)的等待時光,單位與仿真器當(dāng)前用法的最小時光單位相同;mode為信號模式,有兩個值可供挑選:mti_inertial或者是mti_transport,分離對應(yīng)于標(biāo)準(zhǔn)vhdl語言的inertial和transport。例如,設(shè)置信號 out1的初始狀態(tài)為低電平:mti_scheduledriver(ip.out1,2,0,mti_inertial);d.設(shè)置

11、在仿真器重新仿真(運(yùn)行指令restart)或退出仿真(運(yùn)行指令quit-sim)等狀況下調(diào)用的函數(shù)。這一部分主要是為了釋放內(nèi)存或者保存當(dāng)前狀態(tài)等。以restart為例,假設(shè)在程序中用malloc申請了存儲空間buf,在仿真器restart時需要釋放,就可以用以下的函數(shù)調(diào)用來注冊:mti_addrestartcb(free,buf);注冊后,當(dāng)仿真器運(yùn)行指令restart時就會調(diào)用free(buf)。其它一些函數(shù)可以參照modelsim的用戶手冊這里不再詳述。e.設(shè)置敏感表,給出在某些信號發(fā)生某些變幻時(如時鐘升高沿等)執(zhí)行的函數(shù)。例如,在輸入信號in1發(fā)生變幻時,要執(zhí)行函數(shù) in1_chang

12、e(in1_change為用戶定義好的函數(shù)),可以這樣定義:processed proc;proc=mti_createprocess(p_in 1 change,in1_change,&ip);mti_sensitize(proc,ip.in1,mti_event);也就是說,先創(chuàng)建進(jìn)程,然后設(shè)置敏感表。當(dāng)滿足敏感表的條件時,仿真器就會執(zhí)行該進(jìn)程。mti_createprocess函數(shù)的定義為:mtiprocessldt mti_createprocess(char *name,mtivoidfuncptrt func,void * param);其中,name是將要在仿真器窗口中顯示的名稱

13、;func是要執(zhí)行的函數(shù);后面的param是要傳給func的參數(shù)。 mti_sensitize的定義為:void mti_sensitize(mtiprocessidt proc,mtisignalidt sig,mtiprocesstriggert when);其中,proc為調(diào)用mti_createprocess的返回值;sig為信號名,即vhdl文件的輸入輸出信號對應(yīng)于c程序的變量;when可以取mti_event或者mti_active兩種值。4.3 c程序的編譯對windows平臺,采納的編譯器是microsoftvisual c+,并用如下的指令舉行編譯:cl -c -i app.clink -dll -export: app.objmodeltech.lib上面的是modelsim 的安裝名目,是c程序的初始化函數(shù)名,如我們給出的sim.c的sim_init。編譯之后就可以生成.dll文件。仿真向量是用c語言還是用hdl挺直產(chǎn)生,要視設(shè)計(jì)者的應(yīng)用而定,選取最容易的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論