專利名稱:一種嵌入式微處理器的周期精確和位精確系統(tǒng)級(jí)模型的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及嵌入式處理器設(shè)計(jì)技術(shù)領(lǐng)域,特別涉及一種嵌入式微處理器的周期精確和位精確系統(tǒng)級(jí)模型。
背景技術(shù):
隨著SoC復(fù)雜度呈現(xiàn)出指數(shù)級(jí)增長(zhǎng),越來越多的處理器、存儲(chǔ)器和外設(shè)邏輯構(gòu)成一個(gè)完整的電子系統(tǒng)被集成到一塊芯片上,給SoC設(shè)計(jì)的軟硬件工程師帶來了極大的挑戰(zhàn)。傳統(tǒng)的SoC設(shè)計(jì)只有在真實(shí)的硬件存在條件下才能夠進(jìn)行軟件開發(fā),以及軟硬件結(jié)合的系統(tǒng)驗(yàn)證。但SoC系統(tǒng)越來越復(fù)雜,使得工期增長(zhǎng),上市時(shí)間越來越短,傳統(tǒng)RTL級(jí)的設(shè)計(jì)已無法滿足設(shè)計(jì)的需求,迫使設(shè)計(jì)者尋求一種新的設(shè)計(jì)方法即ESL(Electronic System Level,電子系統(tǒng)級(jí))設(shè)計(jì)。ESL設(shè)計(jì)是以抽象方式來描述SoC系統(tǒng),給軟硬件工程師提供一個(gè)虛擬的硬件原型平臺(tái),用以進(jìn)行硬件系統(tǒng)結(jié)構(gòu)的探究和軟件程序的開發(fā)。在ESL 設(shè)計(jì)中,SoC系統(tǒng)的描述和仿真速度快,使設(shè)計(jì)工程師可以快速的分析SoC系統(tǒng)結(jié)構(gòu)的優(yōu)劣。一方面,功能正確和時(shí)鐘精確的執(zhí)行環(huán)境使提前開發(fā)軟件成為可能,縮短了軟硬件集成的時(shí)間;另一方面,系統(tǒng)設(shè)計(jì)更早地與驗(yàn)證流程相結(jié)合,能確定工程開發(fā)產(chǎn)品的正確性。 TLM(Tranction Level Modeling,事務(wù)級(jí)模型)作為ESL設(shè)計(jì)的核心,將運(yùn)算功能和通信功能分開,模塊之間的通信通過函數(shù)調(diào)用來實(shí)現(xiàn),減少了事件和信息的處理,并且能夠根據(jù)具體的實(shí)際需求提供相應(yīng)的設(shè)計(jì)精度。TLM在抽象層次上描述SoC系統(tǒng),可以分為三種模型即非定時(shí)的模型、周期近似的模型及周期精確的模型。ISSdnstruction Set Simulator,指令集仿真器)作為ESL設(shè)計(jì)仿真平臺(tái)的主要器件,是現(xiàn)代處理器設(shè)計(jì)和軟件設(shè)計(jì)過程中的一部分。ISS利用宿主機(jī)模擬目標(biāo)機(jī)每條指令的運(yùn)行過程,是模擬目標(biāo)機(jī)處理器的重要軟件。ISS能夠使早期的軟件開發(fā)成為可能, 以及能夠評(píng)估指令集結(jié)構(gòu),在硬件原型構(gòu)造出來之前,即可對(duì)包含軟件和硬件的整個(gè)嵌入式系統(tǒng)的功能進(jìn)行驗(yàn)證,根據(jù)所提供的時(shí)序精度對(duì)系統(tǒng)體系結(jié)構(gòu)進(jìn)行設(shè)計(jì)。VCI (Virtual Component Interface,Π ) ^ VSIA(Virtual Socket Interface Alliance) 提出的,可以提供虛擬器件與總線或虛擬器件與虛擬器件之間統(tǒng)一的接口協(xié)議。VCI協(xié)議實(shí)現(xiàn)簡(jiǎn)單,可以通過點(diǎn)對(duì)點(diǎn)的方式進(jìn)行通信,使用了 VCI標(biāo)準(zhǔn)的ISS可以與使用同樣VCI標(biāo)準(zhǔn)的總線或虛擬器件直接相連,而無需對(duì)ISS做任何的修改,具有很強(qiáng)的可移植性。蘇州國芯公司的32位嵌入式微處理器C*C0RE310具有國家自主知識(shí)產(chǎn)權(quán),以其靈活性高、功耗低、面積小、性能高和成本低等特點(diǎn)在SoC設(shè)計(jì)領(lǐng)域得到了越來越廣泛的應(yīng)用。C*C0RE310處理器因其固定位寬的16位指令集,比其他32位的處理器提高了代碼密度, 可以使用更小的存儲(chǔ)單元來達(dá)到同樣的應(yīng)用目的,從而減小芯片的面積,降低設(shè)計(jì)成本。但現(xiàn)有的C*C0RE310處理器缺少ESL高抽象層次模型,無法進(jìn)行基于C*C0RE310的SoC軟硬件協(xié)同設(shè)計(jì)和驗(yàn)證
發(fā)明內(nèi)容
為了提供C*C0RE310處理器的周期精確和位精確的系統(tǒng)級(jí)模型,能夠?yàn)榛?C*C0RE310處理器的SoC設(shè)計(jì)提供性能評(píng)估;并且能夠?yàn)檐浖こ處熖峁┸浻布f(xié)同開發(fā)和驗(yàn)證平臺(tái),本發(fā)明提供了一種嵌入式微處理器的周期精確和位精確系統(tǒng)級(jí)模型,詳見下文描述一種嵌入式微處理器的周期精確和位精確系統(tǒng)級(jí)模型,所述嵌入式微處理器為 C*C0RE310處理器,所述系統(tǒng)級(jí)模型包括指令集仿真器和SystemC feapper,所述SystemC Wrapper運(yùn)用系統(tǒng)級(jí)語言在抽象層次上封裝所述指令集仿真器,調(diào)用指令集仿真器的運(yùn)行函數(shù),對(duì)指令進(jìn)行取指、譯碼、執(zhí)行和相應(yīng)寄存器寫回操作,通過VCI接口方法實(shí)現(xiàn)指令集仿真器與總線的指令和數(shù)據(jù)的交互;所述C*C0RE310處理器包括用戶編程模式和管理員編程模式,在所述用戶編程模式下,訪問16個(gè)32位通用寄存器和進(jìn)位標(biāo)志位;在所述管理員編程模式下,訪問16個(gè)32位通用寄存器、16個(gè)替換寄存器以及特殊功能單元寄存器。通過所述SystemC Wrapper調(diào)用所述指令集仿真器中的運(yùn)行函數(shù)來控制所述指令集仿真器進(jìn)行取指、譯碼、執(zhí)行和所述相應(yīng)寄存器寫回操作。所述 SystemC Wrapper 包括transition()進(jìn)程禾口 genMoore ()進(jìn)程,所述 transition()進(jìn)程在時(shí)鐘上升沿被觸發(fā),實(shí)現(xiàn)指令狀態(tài)機(jī)、數(shù)據(jù)狀態(tài)機(jī)和命令操作狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換,根據(jù)所述相應(yīng)寄存器的現(xiàn)有值和輸入信號(hào)來計(jì)算所述相應(yīng)寄存器下一狀態(tài)的值;所述genMoore ()進(jìn)程在時(shí)鐘下降沿被觸發(fā),通過所述VCI接口方法實(shí)現(xiàn)所述指令集仿真器的命令、數(shù)據(jù)和地址分別與總線的通信;根據(jù)所述相應(yīng)寄存器的現(xiàn)有值和輸入信號(hào)來產(chǎn)生所述相應(yīng)寄存器的輸出值。所述指令集仿真器包括請(qǐng)求取指子模塊、指令響應(yīng)子模塊、譯碼子模塊、指令執(zhí)行子模塊、數(shù)據(jù)請(qǐng)求子模塊和數(shù)據(jù)響應(yīng)子模塊,所述請(qǐng)求取值子模塊用于請(qǐng)求所述指令集仿真器的指令信息;所述指令響應(yīng)子模塊用于獲取指令;所述譯碼子模塊用于執(zhí)行指令譯碼操作;所述指令執(zhí)行子模塊用于完成相應(yīng)的指令執(zhí)行操作;所述數(shù)據(jù)請(qǐng)求子模塊用于請(qǐng)求所述指令集仿真器的數(shù)據(jù);所述數(shù)據(jù)響應(yīng)子模塊將從存儲(chǔ)器中取得的數(shù)據(jù)賦給所述通用寄存器。所述系統(tǒng)級(jí)模型采用多級(jí)索引進(jìn)行譯碼操作,將16字長(zhǎng)的指令平均分為4段,每一個(gè)字段長(zhǎng)4位,在內(nèi)存中建立多級(jí)索引表。所述系統(tǒng)級(jí)模型采用多級(jí)索引進(jìn)行譯碼操作具體為以指令的第一個(gè)字段為地址在第一級(jí)索引表中尋找,判斷查找成功標(biāo)志是否為真,若為真,則譯碼成功;否則該行給出第二級(jí)索引表的起始地址;以指令的第二個(gè)字段為地址在第二級(jí)索引表中尋找,判斷所述查找成功標(biāo)志是否為真,若為真,則譯碼成功;否則該行給出第三級(jí)索引表的起始地址;以指令的第三個(gè)字段為地址在第三級(jí)索引表尋找,判斷所述查找成功標(biāo)志是否為真,若為真,則譯碼成功;否則該行給出第四級(jí)索引表的起始地址;依此類推,最終完成譯碼操作。當(dāng)所述指令狀態(tài)機(jī)在指令空閑狀態(tài)時(shí),通過調(diào)用所述指令請(qǐng)求子模塊判斷是否有指令請(qǐng)求信號(hào)以及阻塞指令讀操作是否為假,若所述指令請(qǐng)求信號(hào)為真且所述阻塞指令讀操作為假,則轉(zhuǎn)入指令等待狀態(tài);當(dāng)同時(shí)存在所述指令請(qǐng)求信號(hào)和數(shù)據(jù)請(qǐng)求信號(hào)時(shí),所述命令操作狀態(tài)機(jī)的空狀態(tài)先響應(yīng)所述指令請(qǐng)求信號(hào),直到取到指令之后響應(yīng)所述數(shù)據(jù)請(qǐng)求信號(hào);所述命令操作狀態(tài)機(jī)在時(shí)鐘的上升沿被觸發(fā),當(dāng)所述命令操作狀態(tài)機(jī)進(jìn)入指令讀響應(yīng)狀態(tài)時(shí),給出讀指令是否成功信號(hào),所述指令狀態(tài)機(jī)檢測(cè)到所述讀指令是否成功信號(hào), 轉(zhuǎn)入所述指令空閑狀態(tài),進(jìn)入下一個(gè)指令周期;當(dāng)所述數(shù)據(jù)狀態(tài)機(jī)在數(shù)據(jù)空閑狀態(tài)時(shí),通過調(diào)用所述數(shù)據(jù)請(qǐng)求子模塊判斷是否有所述數(shù)據(jù)請(qǐng)求信號(hào)以及數(shù)據(jù)讀信號(hào)是否為真,若所述數(shù)據(jù)請(qǐng)求信號(hào)為真且所述數(shù)據(jù)讀信號(hào)為真,則轉(zhuǎn)入數(shù)據(jù)讀等待狀態(tài);通過調(diào)用所述數(shù)據(jù)請(qǐng)求子模塊判斷是否有所述數(shù)據(jù)請(qǐng)求信號(hào)以及數(shù)據(jù)寫信號(hào)是否為真,若所述數(shù)據(jù)請(qǐng)求信號(hào)為真且所述數(shù)據(jù)寫信號(hào)為真,則轉(zhuǎn)入數(shù)據(jù)寫等待狀態(tài);當(dāng)所述命令操作狀態(tài)機(jī)進(jìn)入數(shù)據(jù)讀響應(yīng)狀態(tài)時(shí),給出讀數(shù)據(jù)是否成功信號(hào),所述數(shù)據(jù)狀態(tài)機(jī)檢測(cè)到所述讀數(shù)據(jù)是否成功信號(hào),轉(zhuǎn)入所述數(shù)據(jù)空閑狀態(tài);當(dāng)所述命令操作狀態(tài)機(jī)進(jìn)入數(shù)據(jù)寫響應(yīng)狀態(tài)時(shí),給出寫數(shù)據(jù)是否成功信號(hào),所述數(shù)據(jù)狀態(tài)機(jī)檢測(cè)到所述寫數(shù)據(jù)是否成功信號(hào),轉(zhuǎn)入所述數(shù)據(jù)空閑狀態(tài);當(dāng)所述命令操作狀態(tài)機(jī)在命令空閑狀態(tài)時(shí),接收到數(shù)據(jù)寫請(qǐng)求信號(hào),轉(zhuǎn)入數(shù)據(jù)寫命令狀態(tài),在時(shí)鐘的下降沿所述C*C0RE310處理器給總線發(fā)送所述數(shù)據(jù)請(qǐng)求信號(hào)以及寫數(shù)據(jù)和地址等信息;在下一個(gè)時(shí)鐘的上升沿,所述命令操作狀態(tài)機(jī)判斷總線是否有返回的握手信號(hào),若有,則進(jìn)入數(shù)據(jù)寫響應(yīng)狀態(tài);在此時(shí)鐘的下降沿,所述C*C0RE310處理器發(fā)出數(shù)據(jù)請(qǐng)求成功信號(hào);在時(shí)鐘的上升沿,判斷總線是否有返回的握手信號(hào),若有,則進(jìn)入所述命令空閑狀態(tài)。本發(fā)明提供的技術(shù)方案的有益效果是本發(fā)明提供了一種嵌入式微處理器的周期精確和位精確系統(tǒng)級(jí)模型,本發(fā)明針對(duì)C*C0RE310嵌入式微處理器,采用新興的ESL設(shè)計(jì)方法在不同的抽象層次上建立 C*C0RE310處理器的周期精確和位精確的系統(tǒng)級(jí)模型,該抽象模型包括周期精確和位精確的C*C0RE310ISS和SystemC Wrapper等,可輔助設(shè)計(jì)者完成以C*C0RE310處理器為核心的 SoC功能驗(yàn)證與性能評(píng)測(cè);同時(shí)也為基于C*C0RE310處理器的SoC產(chǎn)品的順利推廣提供技術(shù)支持與保障;將所建立的周期精確和位精確的系統(tǒng)級(jí)模型與傳統(tǒng)的RTL級(jí)模型比較,實(shí)驗(yàn)表明所建立的系統(tǒng)級(jí)模型可以獲得與RTL級(jí)模型相似的精確度。
圖1為本發(fā)明提供的一種嵌入式微處理器的周期精確和位精確系統(tǒng)級(jí)模型示意圖;圖2為本發(fā)明提供的指令集仿真流程框圖;圖3為本發(fā)明提供的三級(jí)索引表圖;圖4為本發(fā)明提供的基于索引技術(shù)的譯碼流程圖;圖5為本發(fā)明提供的指令狀態(tài)機(jī)圖;圖6為本發(fā)明提供的數(shù)據(jù)狀態(tài)機(jī)圖;圖7為本發(fā)明提供的VCI握手協(xié)議圖;圖8為本發(fā)明提供的命令操作狀態(tài)機(jī)圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。為了提供C*C0RE310處理器的周期精確和位精確的系統(tǒng)級(jí)模型,能夠?yàn)榛?C*C0RE310處理器的SoC設(shè)計(jì)提供性能評(píng)估;并且能夠?yàn)檐浖こ處熖峁┸浻布f(xié)同開發(fā)和驗(yàn)證平臺(tái),本發(fā)明實(shí)施例提供了一種嵌入式微處理器的周期精確和位精確系統(tǒng)級(jí)模型, 詳見下文描述參見圖1,一種嵌入式微處理器的周期精確和位精確系統(tǒng)級(jí)模型,嵌入式微處理器為C*C0RE310處理器,系統(tǒng)級(jí)模型包括指令集仿真器ISS和SystemC Wrapper, SystemC Wrapper運(yùn)用系統(tǒng)級(jí)語言在抽象層次上封裝指令集仿真器,調(diào)用指令集仿真器的運(yùn)行函數(shù), 對(duì)指令進(jìn)行取指、譯碼、執(zhí)行和相應(yīng)寄存器寫回操作,通過VCI接口方法實(shí)現(xiàn)指令集仿真器與總線的指令和數(shù)據(jù)的交互。指令集仿真器ISS作為C*C0RE310處理器模型的核心,是運(yùn)用C或C++語言在非定時(shí)抽象層次上描述的事務(wù)級(jí)模型。SystemC Wrapper運(yùn)用SystemC系統(tǒng)級(jí)語言,在周期精確和位精確的抽象層次上封裝指令集仿真器ISS,通過VCI信號(hào)轉(zhuǎn)換接口技術(shù)實(shí)現(xiàn)ISS與總線的指令和數(shù)據(jù)的交互,具有時(shí)序的精確性。參見圖1,C*C0RE310ISS的模型運(yùn)用了改進(jìn)型的基于解釋的技術(shù),在譯碼階段根據(jù)C*C0RE310指令集獨(dú)有的特點(diǎn)采用多級(jí)索引譯碼技術(shù),改進(jìn)了傳統(tǒng)的譯碼方法?;诮忉尲夹g(shù)的指令集仿真策略是目前應(yīng)用較廣泛的一種仿真器實(shí)現(xiàn)技術(shù),該仿真器實(shí)現(xiàn)技術(shù)與基于編譯的技術(shù)相比具有實(shí)現(xiàn)簡(jiǎn)單、運(yùn)用靈活的特點(diǎn)。 在C*C0RE310ISS模型過程中,首先在內(nèi)存中建立有關(guān)C*C0RE310處理器狀態(tài)的數(shù)據(jù)結(jié)構(gòu), 然后根據(jù)C*C0RE310指令的流水線分別對(duì)指令進(jìn)行取指、譯碼、執(zhí)行和寫回等操作,完成指令流水的仿真功能。為了得到周期精確和位精確的C*C0RE310處理器模型,采用SystemC封裝指令集仿真器ISS,在SystemC進(jìn)程中通過SystemC Wrapper調(diào)用指令集仿真器ISS中的運(yùn)行函數(shù)來控制指令集仿真器ISS進(jìn)行取指、譯碼、執(zhí)行和相應(yīng)寄存器寫回操作。VCI信號(hào)轉(zhuǎn)換接口定義兩個(gè)SC_METH0D進(jìn)程,即transition ()進(jìn)程和genMoore () 進(jìn)程。transitionO進(jìn)程在時(shí)鐘上升沿被觸發(fā),實(shí)現(xiàn)指令狀態(tài)機(jī)、數(shù)據(jù)狀態(tài)機(jī)和操作命令狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換;而genMoore ()進(jìn)程在時(shí)鐘下降沿被觸發(fā),通過VCI信號(hào)轉(zhuǎn)換接口實(shí)現(xiàn) C*C0RE310ISS的命令、數(shù)據(jù)、地址等信號(hào)與總線的通信。參見圖2,指令集仿真器ISS的模型描述了基于改進(jìn)型解釋技術(shù)的ISS模型過程, 基于高級(jí)語言描述的應(yīng)用經(jīng)過C*C0RE310處理器的交叉編譯器得到二進(jìn)制可執(zhí)行代碼,被裝載器加載到虛擬的存儲(chǔ)器中,SystemC Wrapper調(diào)用指令集仿真器ISS中的運(yùn)行函數(shù),對(duì)指令進(jìn)行取指、譯碼、執(zhí)行和寄存器寫回等操作。按照?qǐng)D2中所示循環(huán)執(zhí)行,直到程序結(jié)束或異常退出。C*C0RE310處理器定義了兩種編程模式,分別是用戶編程模式和管理員編程模式。 在用戶編程模式下,程序可訪問16個(gè)32位通用寄存器和進(jìn)位標(biāo)志位(C位);在管理員編程模式下,程序可訪問16個(gè)32位通用寄存器、16個(gè)替換寄存器以及特殊功能單元寄存器 (例如異常屏蔽寄存器EPSR、EPC、FPSRFPC,向量基址寄存器VBR等)。
指令集仿真器包括請(qǐng)求取指子模塊、指令響應(yīng)子模塊、譯碼子模塊、指令執(zhí)行子模塊、數(shù)據(jù)請(qǐng)求子模塊和數(shù)據(jù)響應(yīng)子模塊,其中,請(qǐng)求取指子模塊用于得到指令集仿真器ISS指令請(qǐng)求的參數(shù),通過請(qǐng)求取指函數(shù) getlnstructionRequest (bool&req, uint32_t&address)實(shí)現(xiàn),req 代表請(qǐng)求信號(hào), address代表指令請(qǐng)求地址,在該函數(shù)每次被調(diào)用時(shí),req被賦值為真。其中,指令響應(yīng)子模塊用于獲取指令,通過指令響應(yīng)函數(shù)setlnstructionOxwl error, uint32_t ins)實(shí)現(xiàn),error代表從存儲(chǔ)器中取回的指令是否有錯(cuò),error等于1表示有錯(cuò);ins代表請(qǐng)求得到的指令。其中,譯碼子模塊用于執(zhí)行指令譯碼操作,譯碼子模塊通過譯碼函數(shù)decodeO實(shí)現(xiàn)。傳統(tǒng)的指令譯碼邏輯針對(duì)每一條指令操作碼給出其最大值和最小值,當(dāng)進(jìn)行指令譯碼時(shí),將指令操作碼的值逐一比較,查找到正確的區(qū)間完成譯碼。盡管這種譯碼邏輯簡(jiǎn)單易于實(shí)施,但是軟件需要大量開銷,嚴(yán)重降低了指令的仿真速度。針對(duì)C*C0RE310指令集操作碼長(zhǎng)度不固定的特點(diǎn),采用多級(jí)索引技術(shù)進(jìn)行譯碼操作,將16長(zhǎng)的指令平均分為4段,每一個(gè)字段長(zhǎng)4位,在內(nèi)存中建立多級(jí)索引表,參見圖3,描述了一個(gè)三級(jí)索引表,第一級(jí)索引表中每一行的地址對(duì)應(yīng)指令的第一字段值(高四位),第二級(jí)索引表中每一行的地址對(duì)應(yīng)指令的第二字段值,依此類推。索引表的第一列指明譯碼成功的指令或者下一級(jí)索引表的起始地址,第二列是查找成功標(biāo)志Flag。下面結(jié)合圖4來說明基于多級(jí)索引技術(shù)的指令譯碼過程以指令的第一個(gè)字段(高四位)為地址在第一級(jí)索引表中尋找,判斷查找成功標(biāo)志Flag是否為真,若為真,則譯碼成功;否則該行給出第二級(jí)索引表的起始地址;以指令的第二個(gè)字段為地址在第二級(jí)索引表中尋找,判斷查找成功標(biāo)志Flag是否為真,若為真,則譯碼成功;否則該行給出第三級(jí)索引表的起始地址;以指令的第三個(gè)字段為地址在第三級(jí)索引表尋找,判斷查找成功標(biāo)志Flag是否為真,若為真,則譯碼成功;否則該行給出第四級(jí)索引表的起始地址;依此類推,最終完成譯碼操作。其中,指令執(zhí)行子模塊用于完成相應(yīng)的指令執(zhí)行操作。step()函數(shù)是ISS模型的重要入口函數(shù),該函數(shù)調(diào)用了譯碼邏輯、指令執(zhí)行邏輯及對(duì)異常做出相應(yīng)處理。指令執(zhí)行邏輯是由102個(gè)函數(shù)組成,每一個(gè)函數(shù)的實(shí)現(xiàn)都對(duì)應(yīng)一條指令的功能,下面給出jmp跳轉(zhuǎn)指令的具體實(shí)現(xiàn)方式
void ChinacoreIss:: op Jmp()
{
r_pc = r_gp[m_ins.a.rx] & ~0xl; rnpc = r_pc; m_next_pc = rnpc + 2; setInsDelay(2);
在StepO函數(shù)中根據(jù)所譯碼出的操作碼,運(yùn)用函數(shù)指針的具體方法找到相應(yīng)的指令執(zhí)行函數(shù),完成指令執(zhí)行操作。C*C0RE310處理器的大部分指令是在1個(gè)周期內(nèi)完成的,少部分的指令執(zhí)行周期大于1,為了得到延遲精確的指令,setlnsDelayO函數(shù)被用于多周期指令集中,下面給出setlnsDelayO函數(shù)具體實(shí)現(xiàn)方式
inline void setInsDelay( uint32_t delay) {
assert( delay > 0 );
m—ins—delay = delay-1;
}其中,數(shù)據(jù)請(qǐng)求子模塊用于得到指令集仿真器ISS數(shù)據(jù)請(qǐng)求的數(shù)據(jù),通過數(shù)據(jù)請(qǐng)求函數(shù) void getDataRequest (bool &req, enum DataAccessType&type, uint32_t&addr, uint32_t wdata[16],uint32_t&rnum, uint32_t&wnum)實(shí)現(xiàn),req 代表數(shù)據(jù)請(qǐng)求信號(hào),type 表明數(shù)據(jù)訪問類型,address表示數(shù)據(jù)請(qǐng)求地址。由于C*C0RE310處理器存在burst操作的存取指令,例如STM和LDM等指令,用函數(shù)參數(shù)wdata、rnum和wnum來支持burst操作的存取指令。dataAccessType支持讀字、讀半字和寫字節(jié)等一系列訪存操作,下面給出了具體
實(shí)現(xiàn)方式
enum DataAccessType {
READ—WORD, READ—HALF, READ—BYTE, WRITE—WORD, WRITE—HALF, WRITE—BYTE,
};其中,數(shù)據(jù)響應(yīng)子模塊將從虛擬存儲(chǔ)器中取得的數(shù)據(jù)賦給通用寄存器,通過數(shù)據(jù)口向應(yīng)函數(shù) void setDataResponse (bool error, uint32_t rdata[16],uint32_t mum)實(shí)現(xiàn), rdata[16]表示讀操作數(shù)組,用于單個(gè)讀操作或burst讀操作,rnum是讀請(qǐng)求的數(shù)目。虛擬部件接口 VCI調(diào)用該數(shù)據(jù)響應(yīng)函數(shù),將從虛擬存儲(chǔ)器中取得的數(shù)據(jù)賦給C*C0RE310中的通
用寄存器。SystemC Wrapper是C*C0RE310ISS的指令和數(shù)據(jù)控制器,通過由時(shí)鐘驅(qū)動(dòng)的SC_ METHOD進(jìn)程來控制指令集仿真器ISS與總線進(jìn)行指令和數(shù)據(jù)的交互,能夠達(dá)到周期精確和位精確。SystemC Wrapper 用 SystemC 語言定義了 transitionO 和 genMoore ()兩種 SC_ METHOD進(jìn)程。其中,genMooreO進(jìn)程在時(shí)鐘下降沿被觸發(fā),根據(jù)相應(yīng)寄存器的現(xiàn)有值和輸入信號(hào)來產(chǎn)生相應(yīng)寄存器的輸出值;另外,transitionO進(jìn)程根據(jù)相應(yīng)寄存器的現(xiàn)有值和輸入信號(hào)來計(jì)算相應(yīng)寄存器下一狀態(tài)的值,它包含三個(gè)狀態(tài)機(jī)的轉(zhuǎn)換,即指令狀態(tài)機(jī),數(shù)據(jù)狀態(tài)機(jī)以及命令操作狀態(tài)機(jī),在時(shí)鐘上升沿被觸發(fā),實(shí)現(xiàn)指令狀態(tài)、數(shù)據(jù)狀態(tài)和命令操作狀態(tài)的轉(zhuǎn)換。參見圖5,指令狀態(tài)機(jī)在指令空閑狀態(tài)INS_IDLE時(shí),通過調(diào)用指令請(qǐng)求子模塊判斷是否有指令請(qǐng)求信號(hào)ireq. valid以及阻塞指令讀操作r_block是否為假,若指令請(qǐng)求信號(hào)ireq. valid為真且阻塞指令讀操作r_block為假,則轉(zhuǎn)入指令等待狀態(tài)INS_WAIT ;當(dāng)同時(shí)存在指令請(qǐng)求信號(hào)和數(shù)據(jù)請(qǐng)求信號(hào)時(shí),命令操作狀態(tài)機(jī)的空狀態(tài)CMD_IDLE先響應(yīng)指令請(qǐng)求信號(hào),直到取到指令之后才響應(yīng)數(shù)據(jù)請(qǐng)求信號(hào),但此時(shí)下一條指令請(qǐng)求信號(hào)亦存在,阻塞指令讀操作r_block的作用在于阻塞該指令的數(shù)據(jù)請(qǐng)求信號(hào)。命令操作狀態(tài)機(jī)在時(shí)鐘上升沿被觸發(fā),當(dāng)命令操作狀態(tài)機(jī)進(jìn)入指令讀響應(yīng)狀態(tài) INS_READ_RSP時(shí),給出讀指令是否成功信號(hào)r_ins_rsp,指令狀態(tài)機(jī)檢測(cè)到該讀指令是否成功信號(hào)r_ins_rsp,轉(zhuǎn)入指令空閑狀態(tài)INS_IDLE,從而進(jìn)入下一個(gè)指令周期。參見圖6,數(shù)據(jù)狀態(tài)機(jī)在數(shù)據(jù)空閑狀態(tài)DATA_IDLE時(shí),通過調(diào)用數(shù)據(jù)請(qǐng)求子模塊判斷是否有數(shù)據(jù)請(qǐng)求信號(hào)dreq. valid以及數(shù)據(jù)讀信號(hào)read是否為真,若數(shù)據(jù)請(qǐng)求信號(hào)dreq. valid為真且數(shù)據(jù)讀信號(hào)read為真,則轉(zhuǎn)入數(shù)據(jù)讀等待狀態(tài)DATA_READ_WAIT ;通過調(diào)用數(shù)據(jù)請(qǐng)求子模塊判斷是否有數(shù)據(jù)請(qǐng)求信號(hào)dreq. valid以及數(shù)據(jù)寫信號(hào)write是否為真,若數(shù)據(jù)請(qǐng)求信號(hào)dreq. valid為真且數(shù)據(jù)寫信號(hào)write為真,則轉(zhuǎn)入數(shù)據(jù)寫等待狀態(tài)DATA_ WRITE_WAITo當(dāng)命令操作狀態(tài)機(jī)進(jìn)入數(shù)據(jù)讀響應(yīng)狀態(tài)DATA_READ_RSP時(shí),給出讀數(shù)據(jù)是否成功信號(hào)r_data_read_rSp,數(shù)據(jù)狀態(tài)機(jī)檢測(cè)到讀數(shù)據(jù)是否成功信號(hào)r_data_read_rSp,轉(zhuǎn)入數(shù)據(jù)空閑狀態(tài)DATA_IDLE ;當(dāng)命令操作狀態(tài)機(jī)進(jìn)入數(shù)據(jù)寫響應(yīng)狀態(tài)DATA_WRITE_RSP時(shí),給出寫數(shù)據(jù)是否成功信號(hào)r_data_Write_rSp,數(shù)據(jù)狀態(tài)機(jī)檢測(cè)到寫數(shù)據(jù)是否成功信號(hào)r_data_ write_rsp,轉(zhuǎn)入數(shù)據(jù)空閑狀態(tài)DATA_IDLE。命令操作狀態(tài)機(jī)使用虛擬部件接口 VCI的標(biāo)準(zhǔn)協(xié)議以控制指令集仿真器ISS的指令和數(shù)據(jù)分別與總線的交互。參見圖7,展示了作為VCI發(fā)起者的C*C0RE310處理器與作為VCI接收者的總線,通過兩次握手進(jìn)行通信的例子。握手協(xié)議的目的是通過在兩個(gè)方向上傳輸控制信息來同步VCI發(fā)起者和VCI接收者。在請(qǐng)求方向上,握手信號(hào)被稱為CMDVAL 和CMDACK,而在響應(yīng)方向上,握手信號(hào)被稱為RSPVAL和RSPACK。參見圖8,當(dāng)命令操作狀態(tài)機(jī)在命令空閑狀態(tài)CMD_IDLE時(shí),接收到數(shù)據(jù)寫請(qǐng)求信號(hào)r_data_write_req,轉(zhuǎn)入數(shù)據(jù)寫命令狀態(tài)DATA_WRITE_CMD,在時(shí)鐘的下降沿作為VCI 發(fā)起者的C*C0RE310處理器給作為VCI接收者的總線發(fā)送握手信號(hào)p_vci. cmdval以及寫數(shù)據(jù)和地址等信息;在下一個(gè)時(shí)鐘的上升沿,判斷總線是否有返回的握手信號(hào)P_vci. cmdack,若有,則進(jìn)入數(shù)據(jù)寫響應(yīng)狀態(tài)DATA_WRITE_RSP ;在時(shí)鐘的下降沿,VCI發(fā)起者的 C*C0RE310處理器發(fā)出數(shù)據(jù)請(qǐng)求成功信號(hào)p_vci. rspack ;在時(shí)鐘的上升沿,判斷總線是否有返回的握手信號(hào)p_vci.rSpVal,若有,則進(jìn)入命令空閑狀態(tài)CMD_IDLE,此時(shí),完成了一個(gè)完整的寫操作。綜上所述,本發(fā)明實(shí)施例提供了一種嵌入式微處理器的周期精確和位精確系統(tǒng)級(jí)模型,本發(fā)明實(shí)施例針對(duì)C*C0RE310嵌入式微處理器,采用新興的ESL設(shè)計(jì)方法在不同的抽象層次上建立C*C0RE310處理器的周期精確和位精確的系統(tǒng)級(jí)模型,該抽象模型包括周期精確和位精確的C*C0RE310處理器的ISS和SystemC Wrapper等,可輔助設(shè)計(jì)者完成以 C*C0RE310處理器為核心的SoC功能驗(yàn)證與性能評(píng)測(cè);同時(shí)也為基于C*C0RE310處理器的 SoC產(chǎn)品的順利推廣提供技術(shù)支持與保障;將所建立的周期精確和位精確的系統(tǒng)級(jí)模型與傳統(tǒng)的RTL級(jí)模型比較,實(shí)驗(yàn)表明所建立的系統(tǒng)級(jí)模型可以獲得與RTL級(jí)模型相似的精確度。本領(lǐng)域技術(shù)人員可以理解附圖只是一個(gè)優(yōu)選實(shí)施例的示意圖,上述本發(fā)明實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。以上所述僅為本發(fā)明的較佳實(shí)施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.一種嵌入式微處理器的周期精確和位精確系統(tǒng)級(jí)模型,所述嵌入式微處理器為 C*C0RE310處理器,其特征在于,所述系統(tǒng)級(jí)模型包括指令集仿真器和SystemC Wrapper, 所述SystemC Wrapper運(yùn)用系統(tǒng)級(jí)語言在抽象層次上封裝所述指令集仿真器,調(diào)用指令集仿真器的運(yùn)行函數(shù),對(duì)指令進(jìn)行取指、譯碼、執(zhí)行和相應(yīng)寄存器寫回操作,通過VCI接口方法實(shí)現(xiàn)指令集仿真器與總線的指令和數(shù)據(jù)的交互;所述C*C0RE310處理器包括用戶編程模式和管理員編程模式,在所述用戶編程模式下,訪問16個(gè)32位通用寄存器和進(jìn)位標(biāo)志位;在所述管理員編程模式下,訪問16個(gè)32位通用寄存器、16個(gè)替換寄存器以及特殊功能單元寄存器。
2.根據(jù)權(quán)利要求1所述的一種嵌入式微處理器的周期精確和位精確系統(tǒng)級(jí)模型,其特征在于,通過所述SystemC Wrapper調(diào)用所述指令集仿真器中的運(yùn)行函數(shù)來控制所述指令集仿真器進(jìn)行取指、譯碼、執(zhí)行和所述相應(yīng)寄存器寫回操作。
3.根據(jù)權(quán)利要求2所述的一種嵌入式微處理器的周期精確和位精確系統(tǒng)級(jí)模型, 其特征在于,所述SystemC Wrapper包括transition()進(jìn)程和genMooreO進(jìn)程,所述 transition ()進(jìn)程在時(shí)鐘上升沿被觸發(fā),實(shí)現(xiàn)指令狀態(tài)機(jī)、數(shù)據(jù)狀態(tài)機(jī)和命令操作狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換,根據(jù)所述相應(yīng)寄存器的現(xiàn)有值和輸入信號(hào)來計(jì)算所述相應(yīng)寄存器下一狀態(tài)的值;所述genMoore ()進(jìn)程在時(shí)鐘下降沿被觸發(fā),通過所述VCI接口方法實(shí)現(xiàn)所述指令集仿真器的命令、數(shù)據(jù)和地址分別與總線的通信;根據(jù)所述相應(yīng)寄存器的現(xiàn)有值和輸入信號(hào)來產(chǎn)生所述相應(yīng)寄存器的輸出值。
4.根據(jù)權(quán)利要求3所述的一種嵌入式微處理器的周期精確和位精確系統(tǒng)級(jí)模型,其特征在于,所述指令集仿真器包括請(qǐng)求取指子模塊、指令響應(yīng)子模塊、譯碼子模塊、指令執(zhí)行子模塊、數(shù)據(jù)請(qǐng)求子模塊和數(shù)據(jù)響應(yīng)子模塊,所述請(qǐng)求取值子模塊用于請(qǐng)求所述指令集仿真器的指令信息;所述指令響應(yīng)子模塊用于獲取指令;所述譯碼子模塊用于執(zhí)行指令譯碼操作;所述指令執(zhí)行子模塊用于完成相應(yīng)的指令執(zhí)行操作;所述數(shù)據(jù)請(qǐng)求子模塊用于請(qǐng)求所述指令集仿真器的數(shù)據(jù);所述數(shù)據(jù)響應(yīng)子模塊將從存儲(chǔ)器中取得的數(shù)據(jù)賦給所述通用寄存器。
5.根據(jù)權(quán)利要求1所述的一種嵌入式微處理器的周期精確和位精確系統(tǒng)級(jí)模型,其特征在于,所述系統(tǒng)級(jí)模型采用多級(jí)索引進(jìn)行譯碼操作,將16字長(zhǎng)的指令平均分為4段,每一個(gè)字段長(zhǎng)4位,在內(nèi)存中建立多級(jí)索引表。
6.根據(jù)權(quán)利要求5所述的一種嵌入式微處理器的周期精確和位精確系統(tǒng)級(jí)模型,其特征在于,所述系統(tǒng)級(jí)模型采用多級(jí)索引進(jìn)行譯碼操作具體為以指令的第一個(gè)字段為地址在第一級(jí)索引表中尋找,判斷查找成功標(biāo)志是否為真,若為真,則譯碼成功;否則該行給出第二級(jí)索引表的起始地址;以指令的第二個(gè)字段為地址在第二級(jí)索引表中尋找,判斷所述查找成功標(biāo)志是否為真,若為真,則譯碼成功;否則該行給出第三級(jí)索引表的起始地址;以指令的第三個(gè)字段為地址在第三級(jí)索引表尋找,判斷所述查找成功標(biāo)志是否為真,若為真,則譯碼成功;否則該行給出第四級(jí)索引表的起始地址; 依此類推,最終完成譯碼操作。
7.根據(jù)權(quán)利要求4所述的一種嵌入式微處理器的周期精確和位精確系統(tǒng)級(jí)模型,其特征在于,當(dāng)所述指令狀態(tài)機(jī)在指令空閑狀態(tài)時(shí),通過調(diào)用所述指令請(qǐng)求子模塊判斷是否有指令請(qǐng)求信號(hào)以及阻塞指令讀操作是否為假,若所述指令請(qǐng)求信號(hào)為真且所述阻塞指令讀操作為假,則轉(zhuǎn)入指令等待狀態(tài);當(dāng)同時(shí)存在所述指令請(qǐng)求信號(hào)和數(shù)據(jù)請(qǐng)求信號(hào)時(shí),所述命令操作狀態(tài)機(jī)的空狀態(tài)先響應(yīng)所述指令請(qǐng)求信號(hào),直到取到指令之后響應(yīng)所述數(shù)據(jù)請(qǐng)求信號(hào);所述命令操作狀態(tài)機(jī)在時(shí)鐘的上升沿被觸發(fā),當(dāng)所述命令操作狀態(tài)機(jī)進(jìn)入指令讀響應(yīng)狀態(tài)時(shí),給出讀指令是否成功信號(hào),所述指令狀態(tài)機(jī)檢測(cè)到所述讀指令是否成功信號(hào),轉(zhuǎn)入所述指令空閑狀態(tài),進(jìn)入下一個(gè)指令周期;當(dāng)所述數(shù)據(jù)狀態(tài)機(jī)在數(shù)據(jù)空閑狀態(tài)時(shí),通過調(diào)用所述數(shù)據(jù)請(qǐng)求子模塊判斷是否有所述數(shù)據(jù)請(qǐng)求信號(hào)以及數(shù)據(jù)讀信號(hào)是否為真,若所述數(shù)據(jù)請(qǐng)求信號(hào)為真且所述數(shù)據(jù)讀信號(hào)為真,則轉(zhuǎn)入數(shù)據(jù)讀等待狀態(tài);通過調(diào)用所述數(shù)據(jù)請(qǐng)求子模塊判斷是否有所述數(shù)據(jù)請(qǐng)求信號(hào)以及數(shù)據(jù)寫信號(hào)是否為真,若所述數(shù)據(jù)請(qǐng)求信號(hào)為真且所述數(shù)據(jù)寫信號(hào)為真,則轉(zhuǎn)入數(shù)據(jù)寫等待狀態(tài);當(dāng)所述命令操作狀態(tài)機(jī)進(jìn)入數(shù)據(jù)讀響應(yīng)狀態(tài)時(shí),給出讀數(shù)據(jù)是否成功信號(hào),所述數(shù)據(jù)狀態(tài)機(jī)檢測(cè)到所述讀數(shù)據(jù)是否成功信號(hào),轉(zhuǎn)入所述數(shù)據(jù)空閑狀態(tài);當(dāng)所述命令操作狀態(tài)機(jī)進(jìn)入數(shù)據(jù)寫響應(yīng)狀態(tài)時(shí),給出寫數(shù)據(jù)是否成功信號(hào),所述數(shù)據(jù)狀態(tài)機(jī)檢測(cè)到所述寫數(shù)據(jù)是否成功信號(hào),轉(zhuǎn)入所述數(shù)據(jù)空閑狀態(tài);當(dāng)所述命令操作狀態(tài)機(jī)在命令空閑狀態(tài)時(shí),接收到數(shù)據(jù)寫請(qǐng)求信號(hào),轉(zhuǎn)入數(shù)據(jù)寫命令狀態(tài),在時(shí)鐘的下降沿所述C*C0RE310處理器給總線發(fā)送所述數(shù)據(jù)請(qǐng)求信號(hào)以及寫數(shù)據(jù)和地址等信息;在下一個(gè)時(shí)鐘的上升沿,所述命令操作狀態(tài)機(jī)判斷總線是否有返回的握手信號(hào),若有,則進(jìn)入數(shù)據(jù)寫響應(yīng)狀態(tài);在此時(shí)鐘的下降沿,所述C*C0RE310處理器發(fā)出數(shù)據(jù)請(qǐng)求成功信號(hào);在時(shí)鐘的上升沿,判斷總線是否有返回的握手信號(hào),若有,則進(jìn)入所述命令空閑狀態(tài)。
全文摘要
本發(fā)明公開了一種嵌入式微處理器的周期精確和位精確的系統(tǒng)級(jí)模型,涉及嵌入式處理器設(shè)計(jì)技術(shù)領(lǐng)域,嵌入式微處理器為C*CORE310處理器,系統(tǒng)級(jí)模型包括指令集仿真器和SystemC Wrapper,SystemC Wrapper運(yùn)用系統(tǒng)級(jí)語言在抽象層次上封裝指令集仿真器,調(diào)用指令集仿真器的運(yùn)行函數(shù),對(duì)指令進(jìn)行取指、譯碼、執(zhí)行和相應(yīng)寄存器寫回操作,通過VCI接口方法實(shí)現(xiàn)指令集仿真器與總線的指令和數(shù)據(jù)的交互;處理器的模式包括用戶編程模式和管理員編程模式,在用戶編程模式下,訪問16個(gè)32位通用寄存器和進(jìn)位標(biāo)志位;在管理員編程模式下,訪問16個(gè)32位通用寄存器、16個(gè)替換寄存器以及特殊功能單元寄存器。
文檔編號(hào)G06F17/50GK102184290SQ20111011665
公開日2011年9月14日 申請(qǐng)日期2011年5月6日 優(yōu)先權(quán)日2011年5月6日
發(fā)明者周紅月, 郭煒, 魏繼增, 魯超 申請(qǐng)人:天津大學(xué)