簡(jiǎn)介:1,系統(tǒng)級(jí)設(shè)計(jì)描述語(yǔ)言SYSTEMC,徐寧儀XUNY97MAILSTSINGHUAEDUCNXUNYSMTH東主樓9區(qū)324房間62781914,版權(quán)所有2004,第二部分SYSTEMC的基本語(yǔ)法,教材陳曦徐寧儀SYSTEMC片上系統(tǒng)設(shè)計(jì),科學(xué)出版社,2003本課件大部分內(nèi)容參考此書(shū),僅作為大學(xué)教學(xué)之用,請(qǐng)勿用于商業(yè),2,課程主要內(nèi)容,共講4次,爭(zhēng)取講清楚WHY,WHAT,SC_CTORHELLO{//此處聲明SYSTEMC構(gòu)造函數(shù)COUTBUILDSYSTEMCLIBF7,20,NAND2,CREATENEWPROJECTFILENEWPROJECTWIN32CONSOLEAPPLICATIONEMPTYPROJECTADDEXISTEDFILESPROJECTADDTOPROJECTFILESMAINCPPTBHNAND2HBUILDINGARGUMENTANDDEPENDENCYPROJECTSETTINGSC/CCLANGUAGEENABLERUNTIMEINFORMATIONPROJECTSETTINGSC/CPREPROCESSORADDITIONALINCLUDEDIRECTORYC\TEMP\SYSTEMC201\SRCADDSYSTEMCLIBPROJECTADDTOPROJECTFILESC\TEMP\SYSTEMC201\MSVC60\SYSTEMC\DEBUG\SYSTEMCLIBBUILD,RUN,21,用MODESIM查看波形,建一個(gè)MODELSIM項(xiàng)目,將NAND2VCD復(fù)制到該項(xiàng)目的目錄下。使用MODELSIM行命令VCD2WLF將VCD文件轉(zhuǎn)化為WLF文件。命令格式為VCD2WLF,這里我們輸入VCD2WLFNAND2VCDNAND2WLF。請(qǐng)注意VCD2WLF與NAND2VCD、NAND2VC與NAND2WLF之間都有空格。如果沒(méi)有任何提示,則命令被正確執(zhí)行,這時(shí)將產(chǎn)生一個(gè)NAND2WLF文件。,22,用MODESIM查看波形,打開(kāi)SIGNAL、STRUCTURE和WAVE窗口。,在WAVE窗口下選擇OPENDATASET菜單,將生成的NAND2WLF文件導(dǎo)入進(jìn)來(lái)。這時(shí)你將在STRUCTURE窗口中看到設(shè)計(jì)SYSTEMC,在SIGNAL窗口中選擇所要看的信號(hào)放到WAVE窗口中你就可以看到波形了。,23,特別強(qiáng)調(diào),所有的支持標(biāo)準(zhǔn)C的編譯器都可以編譯SYSTEMC。為了方便PC上的使用,我們使用VISUALC60編譯器。,可以使用MODELSIM、WAVEVIEWER、VCS、SIGNALSCAN等查看波形。WAVEVIEWER是免費(fèi)的,直接可以查看VCD文件記錄的波形。,24,SYSTEMC仿真過(guò)程,SYSTEMC可執(zhí)行文件的執(zhí)行EXECUTION過(guò)程分為目標(biāo)描述(ELABORATION)、初始化(INITIALIZATION)和仿真(SIMULATION)三個(gè)階段。,SYSTEMC的仿真過(guò)程是基于事件EVENT的。仿真時(shí)間只前進(jìn),不后退。前進(jìn)的尺度與仿真時(shí)間分辨率和時(shí)間單位有關(guān)。,25,目標(biāo)描述(ELABORATION)階段,從SC_MAIN到SC_START的第一次執(zhí)行。SC_MAININT,CHAR{//ELABORATIONSTARTSHERESC_START1000//ELABORATIONENDSHERE},ELABORATION部分一般包括模塊實(shí)例和連接模塊的通道的初始化、設(shè)置缺省時(shí)間單位和仿真分辨率、SC_CLOCK的初始化、SC_TIME類(lèi)型數(shù)據(jù)的初始化。,SYSTEMC不支持模塊的動(dòng)態(tài)創(chuàng)建。(SYSTEMC模塊等效于VHDL的ENTITY),26,初始化INITIALIZATION階段,整個(gè)SYSTEMC仿真的執(zhí)行過(guò)程由SYSTEMC調(diào)度器控制,INITIALIZATION是SYSTEMC調(diào)度器執(zhí)行的第一步。,SYSTEMC核心語(yǔ)言庫(kù)定義了三種進(jìn)程SC_METHOD、SC_THREAD和SC_CTHREAD。在初始化階段,缺省情況下每一個(gè)進(jìn)程都被執(zhí)行一次,THREAD進(jìn)程被執(zhí)行到第一個(gè)WAIT語(yǔ)句。,通過(guò)DON’T_INITIALIZE函數(shù)可以關(guān)閉對(duì)進(jìn)程的初始化。當(dāng)進(jìn)程的敏感表上有事件發(fā)生的時(shí)候,沒(méi)有初始化的進(jìn)程的第一條語(yǔ)句才開(kāi)始執(zhí)行。,27,初始化INITIALIZATION階段CON’T,在初始化階段,進(jìn)程的初始化順序是不確定的。但不同次執(zhí)行中進(jìn)程的初始化順序是確定的。所以同一設(shè)計(jì)用不同的編譯器得到的可執(zhí)行文件由于初始化順序不同可能產(chǎn)生不同的運(yùn)行結(jié)果??聪马?yè)的例子,28,初始化INITIALIZATION階段CON’T,上述代碼中第一次顯示的ADDR的值是0還是1,SC_MODULEEXAMPLE{SC_IN_CLKCLKSC_UINTLAST_ADDR0SC_UINTADDR0VOIDINC{WHILETRUE{ADDRLAST_ADDR1WAIT}}VOIDDISPLAY{COUTDATA_BUS,SYSTEMC中信號(hào)與變量的區(qū)別與VHDL中一樣。信號(hào)常被用來(lái)連接模塊和用于進(jìn)程間通信,變量則用于進(jìn)程和模塊的本地存儲(chǔ)。變量仿真的賦值是立刻發(fā)生的,沒(méi)有DELTA延時(shí)而信號(hào)和端口的值刷新要經(jīng)過(guò)一個(gè)DELTA延時(shí),變量的定義與標(biāo)準(zhǔn)C是一樣的。,按照上面的說(shuō)法,信號(hào)應(yīng)常被綜合為邏輯塊間的連線。變量常被綜合為邏輯塊,可以是組合或者時(shí)序邏輯。,53,信號(hào)和端口的關(guān)聯(lián),關(guān)聯(lián)(ASSOCIATION)基本等于連接CONNECT,也稱(chēng)為綁定BIND,關(guān)聯(lián)(ASSOCIATION)分為位置關(guān)聯(lián)和名字關(guān)聯(lián),與VHDL一樣。名字關(guān)聯(lián)就是按照名字一一對(duì)應(yīng);位置關(guān)聯(lián)就是按照端口定義的順序一一對(duì)應(yīng)。,54,名字關(guān)聯(lián)實(shí)例,INCLUDE“NAND2H“INCLUDE“TBH“INTSC_MAININT,CHAR{SC_SIGNALA,B,FSC_CLOCKCLK“CLK“,20,SC_NSNAND2N2“NAND2“N2AAN2BBN2FFTBTB1“TB“TB1CLKCLKTB1AATB1BBTB1FF//RESTOFTHECODEOMITTEDRETURN0},55,位置關(guān)聯(lián)實(shí)例,INCLUDE“NAND2H“INCLUDE“TBH“INTSC_MAININT,CHAR{SC_SIGNALA,B,FSC_CLOCKCLK“CLK“,20,SC_NSNAND2N2“NAND2“N2A,B,FTBTB1“TB“TB1CLK,A,B,F//RESTOFTHECODEOMITTEDRETURN0},56,兩種關(guān)聯(lián)方式的對(duì)比,位置關(guān)聯(lián)在一個(gè)只有少量端口的模塊的初始化中是非常合適的,它能夠使描述簡(jiǎn)單化。,然而在對(duì)一個(gè)有大量端口的模塊的初始化中使用位置關(guān)聯(lián)將是非常危險(xiǎn)的,因?yàn)閷?shí)際工作中設(shè)計(jì)者可能會(huì)不經(jīng)意間修改了模塊的端口的順序,這時(shí)就會(huì)產(chǎn)生關(guān)聯(lián)錯(cuò)誤,而這種錯(cuò)誤很可能是很難發(fā)現(xiàn)的。遇到這種情況最好使用下文所述的名字關(guān)聯(lián)。,所以對(duì)于一個(gè)大的SYSTEMC項(xiàng)目,一般建議統(tǒng)一的使用名字關(guān)聯(lián)。,57,模塊的構(gòu)造函數(shù),C中的構(gòu)造函數(shù)創(chuàng)建模塊內(nèi)部數(shù)據(jù)結(jié)構(gòu),并把這些數(shù)據(jù)結(jié)構(gòu)初始化為已知的值。,SYSTEMC構(gòu)造函數(shù)還用于初始化進(jìn)程的類(lèi)型并創(chuàng)建進(jìn)程的敏感表。,SYSTEMC的構(gòu)造函數(shù)用SC_CTOR標(biāo)識(shí),構(gòu)造函數(shù)的名字必須與模塊的名字相同。,58,一個(gè)構(gòu)造函數(shù)的實(shí)例,//ASYSTEMCDESCRIPTIONOF2INPUTNANDGATEDESIGNEDBYCHENXI,2003322INCLUDEINCLUDESC_MODULENAND2{SC_INA,BSC_OUTFVOIDDO_NAND{FA}SC_CTORNAND2{SC_METHODDO_NAND//聲明DO_NAND為SC_METHOD進(jìn)程SENSITIVEAB}//這里是DO_NAND進(jìn)程的敏感表},59,另外一個(gè)構(gòu)造函數(shù)的例子,INCLUDE//OTHERINCLUDESSC_MODULESIMPLE_SOC{CPUCPU1MEMORYUNITMU1GPIOGPIO1DMADMA1//DECLARECLOCKAND//OTHERSINGALS//CONSTRUCTORSC_CTORSIMPLE_SOC{//SEENEXTSLIDE}SIMPLE_SOC{}//DESTRUCTOR},60,另外一個(gè)構(gòu)造函數(shù)的例子CON’T,SIMPLE_SOC的構(gòu)造函數(shù)如下,SC_CTORSIMPLE_SOC{CPU1NEWCPU“CPU“//CONNECTPORTSMU1NEWMEMORYUNIT“MU“//CONNECTPORTSGPIO1NEWGPIO“GPIO“//CONNECTPORTSDMA1NEWDMA“DMA“//CONNECTPORTS},61,在構(gòu)造函數(shù)中對(duì)端口的初始化方法,SC_MODULETB{SC_OUTDATA_SOURCE//OTHERPORTDECLARATIONSBOOLVALUEVOIDGENINPUT{DATA_SOURCEWRITEVALUEVALUEVALUE}SC_CTORTB{SC_METHODGENINPUTSENSITIVE_POSCLKDATA_SOURCEWRITETRUE//WRONGDATA_SOURCETRUE//WRONGDATA_SOURCEINITIALIZETRUE//OKVALUETRUE//OK}}(INT2BOOLTESTDSW),62,析構(gòu)函數(shù),析構(gòu)函數(shù)釋放代碼中申請(qǐng)的內(nèi)存SIMPLE_SOC的析構(gòu)函數(shù)如下,//DESTRUCTORSIMPLE_SOC{IFCPU1{DELETECPU1CPU10}IFMU1{DELETEMU1MU10}IFGPIO1{DELETEGPIO1GPIO10}IFDMA1{DELETEDMA1DMA10}},63,SYSTEMC時(shí)鐘模型,在SYSTEMC中,時(shí)鐘被作為一個(gè)特殊的對(duì)象處理,它就是SC_CLOCK類(lèi)。,時(shí)鐘端口作為一個(gè)特殊的端口。如SC_IN_CLKCLK1//可以用SC_INCLK1代替,在SYSTEMC201中,SC_CLOCK一共有6個(gè)重載的構(gòu)造函數(shù)。如SC_CLOCKSC_MODULE_NAMENAME_,CONSTSC_TIME,64,SYSTEMC時(shí)鐘定義實(shí)例1,SC_CLOCKCLK1“CLK1“,20,05,5,TRUE,65,SYSTEMC時(shí)鐘定義實(shí)例2,SC_CLOCKCLK2“CLK2“,20,05,0,TRUE,66,以上兩例的缺點(diǎn),在CLK1和CLK2的定義中,沒(méi)有給出時(shí)鐘的具體時(shí)間單位,系統(tǒng)默認(rèn)的時(shí)間單位將被采用,不同的系統(tǒng)的默認(rèn)時(shí)間單位可能不同,這將不利于IP核的設(shè)計(jì)復(fù)用。假設(shè)CLK1的周期為50MHZ,則更合適的定義方法為SC_CLOCKCLK1“CLK1“,20,SC_NS,05,5,SC_NS,TRUE,67,其它生成時(shí)鐘的辦法,另外一種定義時(shí)鐘的辦法SC_SIGNALCLOCKSC_INITIALIZEFORINTI0I1000ICLOCK1SC_CYCLE5CLOCK0SC_CYCLE5},
下載積分: 6 賞幣
上傳時(shí)間:2024-01-07
頁(yè)數(shù): 149
大?。?0.76(MB)
子文件數(shù):