亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于SystemC的計算機組成與結(jié)構(gòu)課程總線仿真方法

        2025-03-05 00:00:00程知何立新胡春玲張新張琛
        電腦知識與技術(shù) 2025年3期

        關(guān)鍵詞:計算機組成與結(jié)構(gòu);SystemC;總線仿真;系統(tǒng)級建模;硬件模擬

        中圖分類號:G642 文獻標(biāo)識碼:A

        文章編號:1009-3044(2025)03-0131-03 開放科學(xué)(資源服務(wù)) 標(biāo)識碼(OSID) :

        0引言

        計算機組成與結(jié)構(gòu)作為計算機系統(tǒng)類課程的基礎(chǔ),是學(xué)生全面了解計算機各個部件工作原理和主要功能的課程,也是集成電路相關(guān)領(lǐng)域的直接相關(guān)核心課程。該課程中近1/2的內(nèi)容圍繞中央處理器CPU展開,包括運算方法、指令系統(tǒng)、CPU的組成與結(jié)構(gòu)、控制系統(tǒng)、中斷系統(tǒng)等章節(jié),1/4的課程圍繞存儲器展開,包括存儲器芯片的基本單元電路,存儲器與CPU 的連接,存儲器的校驗等。由于這門課難度較大,理論性較強,且涉及大量硬件知識,學(xué)生感覺到抽象、難以理解,因此采用合適的實踐方式,對于增強學(xué)生對課程的深入理解尤為關(guān)鍵。

        傳統(tǒng)硬件實驗箱[1]的方式主要靠插拔電線完成,學(xué)生根據(jù)不同仿真部件的電路圖,利用杜邦線連接各個電路接口,并通過可視化界面觀察模型機的實驗數(shù)據(jù)通路圖。這種實驗方式將計算機的主要模塊封裝成為黑匣子,學(xué)生難以看到模塊內(nèi)部的細(xì)節(jié),不容易理解計算機各個模塊的基本工作原理,逐漸被其他方式所取代。近些年,Logisim [2-3]仿真軟件和FPGA硬件實驗箱的方式[4-5]已成為該課程的主要實踐平臺,其中Logisim仿真軟件是一個用于設(shè)計和模擬數(shù)字邏輯電路的仿真工具箱,該軟件提供了各種邏輯門(AND、OR、NOT) 和多種復(fù)雜的組合邏輯電路,借助于各種邏輯門和組合邏輯電路,可以進行加減法器、CPU、存儲器和總線等不同計算機模塊的設(shè)計。但是Logisim仿真需要學(xué)生對數(shù)字邏輯電路基本知識和仿真組件有扎實的基礎(chǔ),能夠靈活地利用各種組件搭建復(fù)雜電路。FPGA方式盡管能夠較好地與實驗原理相結(jié)合,但前提是必須要有較強的FPGA動手能力,通常電子專業(yè)的學(xué)生有較強的FPGA開發(fā)能力,但是對于計算機專業(yè)的學(xué)生而言,往往較為欠缺。

        對于計算機相關(guān)專業(yè)的學(xué)生,由于系統(tǒng)地學(xué)習(xí)了C/C++語言,使得他們已具備該語言的扎實編程能力。為了充分利用計算機專業(yè)學(xué)生較強的C/C++專業(yè)基礎(chǔ)和編程實踐能力,采用C++類庫的仿真方式不失為一種更好地調(diào)動學(xué)生積極性和能動性的方式。盡管SystemC仿真已應(yīng)用到相關(guān)領(lǐng)域[6-7],文獻[8-9]也提到了基于SystemC的一些總線仿真方案,但是將SystemC 引入到計算機組成相關(guān)課程的教學(xué)設(shè)計和教學(xué)實踐中的相關(guān)研究較少。

        在現(xiàn)有計算機語言中,不同語言所能夠建模的計算機層次并不相同,圖1給出了不同語言在計算機軟件、硬件中的應(yīng)用范圍。從這幅圖可以看出,不同的開發(fā)語言適合不同的開發(fā)層級,對于門電路層、RTL層、IP驗證層和Soc[10]驗證層而言,Verilog比較適合,VHDL 一般不用于Soc驗證層的開發(fā),而SystemC Verilog[11]能夠用于從門電路層到行為層的所有層次開發(fā)。相比而言,SystemC適用于從RTL層一直到算法架構(gòu)層的開發(fā),對于偏頂層的需求層以及算法和架構(gòu)層開發(fā),高級語言如C/C++、Matlab、Python和Java則比較適合。

        從圖1可以看出,SystemC涵蓋了從RTL層到算法和架構(gòu)層的所有系統(tǒng)層級,因此在系統(tǒng)級建模和開發(fā)上具有較大的優(yōu)勢。

        SystemC作為C++類庫, 在C/C++語言基礎(chǔ)上引入了時間概念和并發(fā)概念,時間概念的引入有助于事件先后次序的仿真,并發(fā)概念則契合了硬件內(nèi)部的并發(fā)性特征。因此,基于SystemC的語言特點,SystemC可以完成以下幾種硬件仿真:1) 軟件算法的周期精確模型;2) 硬件架構(gòu)探索;3) 片上系統(tǒng)的接口設(shè)計;4) 系統(tǒng)級設(shè)計;5) 執(zhí)行過程驗證。

        為此,本課程采用了SystemC[12-13]的仿真手段輔助本課程的實踐環(huán)節(jié),通過SystemC的項目實踐,一方面讓學(xué)生深入體會如何利用軟件語言搭建硬件組件,另一方面也能夠進一步增強學(xué)生的代碼編寫能力。

        1總線仿真分析

        系統(tǒng)總線是計算機各個部件的傳輸介質(zhì),所有系統(tǒng)部件之間的數(shù)據(jù)傳輸和通信都需要系統(tǒng)總線實現(xiàn)。如何讓學(xué)生直觀地體會總線的傳輸特性對于學(xué)生理解并深刻認(rèn)識總線的基本特性至關(guān)重要。

        本課程在進行系統(tǒng)總線的理論講解時,分別講述了單總線結(jié)構(gòu)、雙總線結(jié)構(gòu)、多總線結(jié)構(gòu)以及PCI Ex?press總線結(jié)構(gòu)??紤]到學(xué)生對總線的直觀理解以及仿真的難度,開展實踐設(shè)計時,側(cè)重要求學(xué)生仿真單總線的結(jié)構(gòu),但是針對不同的學(xué)生層次,提供如下兩種總線的設(shè)計方案:單總線-單主從設(shè)備仿真和單總線-多主從設(shè)備仿真。其中單總線-單主從設(shè)備仿真為必做項,單總線-多主從設(shè)備仿真為選做項。圖2 和圖3分別為單總線-單主從設(shè)備仿真示意圖以及單總線-多主從設(shè)備仿真示意圖。其中單總線-單主從設(shè)備仿真只需模擬總線與總從設(shè)備的數(shù)據(jù)通信,單總線-多設(shè)備仿真在考慮數(shù)據(jù)通信的前提下,還需要考慮設(shè)備之間相互競爭時的判優(yōu)方式。在判優(yōu)方式的選擇上,建議學(xué)生使用先來先服務(wù)的輪轉(zhuǎn)優(yōu)先級判優(yōu)方法,該方法比教材[14]中的鏈?zhǔn)讲樵兏鼮橛行?,并且也比計時器定時方式和獨立請求方式簡單。該判優(yōu)方式的基本思想是:根據(jù)不同主設(shè)備請求的先后次序,將其放入到一個先進先出的隊列中,依次進行響應(yīng),每次請求入隊前,要先進行判滿,請求出隊前先要進行判空。但是總線判優(yōu)的這部分不作為必做項。因為判優(yōu)的前提要保證所有的主從設(shè)備保持時鐘和進程的同步,對于剛?cè)腴TSystemC系統(tǒng)級建模的初學(xué)者而言,這部分的難度較大,因此只作為選做內(nèi)容供學(xué)有余力的同學(xué)進行實踐。

        在總線仿真設(shè)計時,無論是采用上述圖2和圖3 中的哪一種仿真方案,都需要學(xué)生先考慮如下一些問題:1) 如何建??偩€仿真模塊?2) 主設(shè)備、從設(shè)備和總線模塊之間的接口連接方式該如何設(shè)計?3) 每個模塊的必要結(jié)構(gòu)應(yīng)該包含哪些?這些前置問題的深入思考,有助于仿真過程的順利開展。

        2基于SystemC的總線仿真實現(xiàn)

        2.1 SystemC語言概述

        SystemC作為一種系統(tǒng)級的仿真建模語言,既能夠進行周期精確級(CABA) [15]建模,又可以進行事務(wù)級(TLM) [16]建模,周期精確級建模需要仿真出每個周期的狀態(tài),只能在全部的硬件設(shè)計完成之后才能進行軟件的測試和系統(tǒng)的集成,無法進行早期的系統(tǒng)架構(gòu)設(shè)計。而事務(wù)級建模能夠在更高抽象層次上對芯片進行分析,從而讓設(shè)計人員快速地構(gòu)建原型平臺。該方法不僅能夠進行硬件系統(tǒng)的架構(gòu)探索和嵌入式軟件程序的開發(fā),而且系統(tǒng)仿真速度很快。本課程著重向?qū)W生講述計算機各大部件系統(tǒng)級的功能,因此選擇事務(wù)級建模方法較為合適。

        SystemC在對系統(tǒng)進行建模時,針對系統(tǒng)運行的要素,分別抽象出模塊、接口、端口、通道、進程等組件。從硬件角度來看,模塊是一個特定的功能單元,比如存儲器、總線、CPU均可以作為模塊,一個接口轉(zhuǎn)換電路也可以作為模塊。SystemC中的模塊除了具有C++類中必備的構(gòu)造函數(shù)和析構(gòu)函數(shù)以外,還需要在構(gòu)造函數(shù)里面指定敏感表,比如可以指定模塊對clk 的上升沿敏感。在進行總線建模時,總線本身,以及與總線互連的主設(shè)備和從設(shè)備都可以抽象為一個SystemC的模塊。

        在SystemC 中,接口實際上是一個C++抽象類,所有的接口都直接或間接繼承于sc-interface,接口用來定義模塊之間的通信方法。比如在總線建模時,需要定義讀接口和寫接口。

        端口是一個對象,它是模塊的一個組成部分,它將模塊內(nèi)部的行為與外部環(huán)境相連接。端口綁定到一個接口上后,就可以使用該接口定義的方法來進行通信。在SystemC中,有3種基本的端口:sc-in 、sc-out與sc-inout ,它們都從基類sc-port繼承而來,每一種端口都提供接口方法,如read()與 write() 等。比如總線建模時,需要將端口分別與讀寫接口綁定。

        通道實現(xiàn)一個或多個接口,可視為一個通信容器,通道必須繼承一個或多個接口,這些接口中定義的抽象方法必須在通道中實現(xiàn)。通過端口,模塊中的進程可以連接到通道并使用通道提供的方法。在端口、接口與通道都定義完成后,模塊能夠使自己的端口與實現(xiàn)了相應(yīng)接口的通道互連。在SystemC中,通道用于實現(xiàn)模塊間的異步通信,模塊通過通道將數(shù)據(jù)在發(fā)送方和接收方之間傳遞。

        進程具有并發(fā)性,SystemC中的進程有如下特征:1) 一個進程不能包含或者調(diào)用0其他進程;2) 進程可以調(diào)用非進程的函數(shù)和方法;3) 進程通常會有一個敏感表,當(dāng)敏感表中的信號上有事件發(fā)生時,進程就會被激活。在總線建模時,每個主從設(shè)備仿真模塊都需要有相應(yīng)的進程。

        2.2總線仿真設(shè)計

        根據(jù)SystemC的仿真思想,可將主設(shè)備建模為主模塊,從設(shè)備建模為從模塊,總線建模為總線模塊,那么主要仿真要素如表1所示。需要定義主模塊、從模塊、總線模塊和頂層模塊。在主模塊內(nèi)定義一個寫端口、從模塊內(nèi)定義一個寫端口,并且要在主從模塊中分別設(shè)置進程敏感表,并將時鐘上升沿作為敏感表中的事件,而總線判優(yōu)設(shè)定為選做模塊。

        下面對表1中的主模塊、從模塊、總線通道、頂層模塊分別做簡單介紹。

        1) 主模塊:主模塊定義為一個SC_MODULE 的C++類,類中需定義輸出端口,端口類型為寫接口類型,用于向總線模塊里寫入數(shù)據(jù)。定義自己的時鐘信號clk和構(gòu)造函數(shù),構(gòu)造函數(shù)中除了實現(xiàn)一些初始化功能,還需指定進程和敏感表。進程采用SC_THREAD線性進程,敏感表使用sensitive指定,設(shè)置為對時鐘上升沿敏感,主模塊的main函數(shù)中使用rand函數(shù)模擬隨機寫入,使用wait函數(shù)實現(xiàn)模擬寫入頻率。

        2) 從模塊:與主模塊類似,只需將端口類型改為讀接口類型,用于讀取數(shù)據(jù)。

        3) 總線模塊:總線模塊也定義為一個SC_MODULE的C++類,該類中需定義傳輸?shù)臄?shù)據(jù)數(shù)組,讀寫事件、定義讀寫接口,用于主從模塊對總線的讀寫操作;由于該模塊主要用于數(shù)據(jù)傳輸,因此寫入數(shù)據(jù)還需要判滿,讀取數(shù)據(jù)判空等。若總線需要連接多個主從模塊,需要增加判優(yōu)方法。

        4) 頂層模塊:用于主從模塊和總線模塊之間的綁定,需要實例化這三個類的對象,再將先前定義的端口綁定在一起即可。最后在main函數(shù)定義時鐘信號,將主從模塊的時鐘與之綁定,并啟動仿真。

        表1中的總線判優(yōu)為選做項,仿真難度較大。若考慮總線判優(yōu),那么學(xué)生在仿真中首先必須實例化多個主設(shè)備模塊和從設(shè)備模塊,并且每個主設(shè)備模塊和從設(shè)備模塊必須預(yù)留多個輸入輸出端口。然后在此基礎(chǔ)上,需要實現(xiàn)不同的判優(yōu)方法,每次總線在傳輸數(shù)據(jù)時,需要選出優(yōu)先級最高的設(shè)備進行響應(yīng)。

        圖4給出了總線仿真各個模塊及其相互連接示意圖。主設(shè)備(Master)、從設(shè)備(Slave)、總線(Bus)和頂層模塊(Top)分別為4個SC_MODULE的類,在這4個類中,SC_MODULE(Master)和SC_MODULE(Slave)都需要定義一個SC_THREAD的進程。在主設(shè)備類中,需要定義寫接口與總線模塊進行端口綁定。在從設(shè)備類中,需要定義讀接口與總線模塊進行端口綁定。在總線類中,需要同時定義寫接口和讀接口,分別與主設(shè)備和從設(shè)備進行端口綁定。所有端口綁定的過程需要在頂層類中進行實現(xiàn)。當(dāng)所有的模塊包括頂層模塊均已經(jīng)定義完成,啟動sc_start 便可以進行仿真啟動。

        3學(xué)生仿真中存在問題及原因分析

        通過在仿真過程中對學(xué)生的引導(dǎo),發(fā)現(xiàn)在建模方面,學(xué)生基本能夠抽象出主模塊、從模塊和總線模塊,但是存在如下突出問題:1) 仿真初期無法回歸到總線信息傳輸這一根本任務(wù),難以建構(gòu)清晰的仿真框架,比如學(xué)生在缺乏引導(dǎo)時,較難想到將主從設(shè)備以及總線建模為一個SystemC模塊;2) 頂層模塊之間的互聯(lián)機制理解不清,比如如何進行端口的綁定,如何進行時鐘的設(shè)置;3) 僅能夠?qū)崿F(xiàn)單總線-單主從設(shè)備的仿真,總線判優(yōu)方法難以實現(xiàn)。

        以上問題的出現(xiàn)主要歸結(jié)為以下一些原因:1) 用軟件仿真硬件,需要對軟件的仿真思想有比較深刻的認(rèn)識,而這方面可查閱的中文資料較少,學(xué)生普遍感到難以入門;2) SystemC有一套嚴(yán)謹(jǐn)?shù)姆抡孢壿嫞M管在課程中為學(xué)生梳理了相關(guān)知識要點,但學(xué)生還需要花一些時間深入思考;3) 多設(shè)備仿真時的判優(yōu)邏輯較為復(fù)雜,既要考慮到多個端口之間的相互綁定,又要考慮到不同設(shè)備之間的進程統(tǒng)一,對初學(xué)者難度較大,因此這一部分作為選做內(nèi)容也較為合適。

        為了改善這一情況,課程計劃采用如下解決方案:1) 建立一些優(yōu)秀的案例庫,以案例學(xué)習(xí)帶動學(xué)生對理論的理解;2) 錄制一些優(yōu)秀視頻,輔助學(xué)生對SystemC基礎(chǔ)理論知識的理解。

        4結(jié)論

        由于計算機組成與結(jié)構(gòu)課程現(xiàn)有實踐方式不能充分培養(yǎng)學(xué)生的系統(tǒng)級建模和開發(fā)能力,結(jié)合計算機專業(yè)學(xué)生在C/C++程序設(shè)計方面的扎實基本功,引導(dǎo)學(xué)生利用系統(tǒng)級建模語言SystemC對總線傳輸過程進行仿真實踐。詳細(xì)闡述了總線仿真方案與思路,仿真實現(xiàn)的關(guān)鍵要素與相關(guān)細(xì)節(jié),并對學(xué)生仿真中存在的問題進行了具體討論,下一步將深入研究如何利用SystemC進行更復(fù)雜模塊的建模,比如CPU和存儲器,研究這些復(fù)雜模塊的建模和設(shè)計方法,從而更好地指導(dǎo)課程教學(xué)。

        国产一区二区在线观看我不卡| 日本成人久久| 国产区精品| 午夜无码一区二区三区在线| 日韩中文字幕精品免费一区| 久久av一区二区三区下| 亚洲中文字幕一区高清在线 | 亚洲av日韩av女同同性| 日韩精品一区二区三区免费观影| 日韩精品资源在线观看免费| 久久精品亚洲熟女av蜜謦| 中国女人内谢69xxxxxa片| 久久视频在线| 色偷偷久久一区二区三区| 国产精品久免费的黄网站| 亚洲人成18禁网站| 国产女主播视频一区二区三区| 国产色视频在线观看了| 色吧噜噜一区二区三区| 精品少妇人妻av无码久久| 午夜亚洲www湿好大| 国产自产c区| 日韩久久免费精品视频| 日本午夜理论一区二区在线观看| 国产精品人人做人人爽人人添| 欧美人与动牲交a欧美精品| 亚洲天堂成人在线| 中文字幕人妻系列一区尤物视频| 蜜桃一区二区三区在线视频| 国产精品偷窥熟女精品视频| 让少妇高潮无乱码高清在线观看| 欧美丰满熟妇aaaaa片| 成人无码网www在线观看| 日本一区二区三区高清视 | 亚洲av无码一区二区二三区下载| 久久亚洲精品一区二区| 人妻少妇中文字幕在线观看| 波多野结衣av手机在线观看| 草莓视频一区二区精品| 亚洲成a人片77777kkkkk| 视频在线亚洲视频在线|