基于SystemC的異構(gòu)多核通信模塊設(shè)計(jì)
該模塊用來專門處理各個(gè)核之間的通信指令,對(duì)其進(jìn)行解釋翻譯,并將最終行為直觀的 告訴總線,達(dá)到核間通信的目的。新架構(gòu)設(shè)計(jì)按照SystemC 交易級(jí)建模(TLM)原則,為以后 多核功能的擴(kuò)展性提供可能性。
3.2 通信機(jī)制
為了異構(gòu)多核通信的實(shí)現(xiàn),需要向多核仿真器的每個(gè)模擬器內(nèi)核擴(kuò)展三條訪問共享存儲(chǔ) 區(qū)的指令,分別是:申請(qǐng)空間、讀取和寫入。
在內(nèi)核代碼中對(duì)共享存儲(chǔ)區(qū)訪問指令進(jìn)行譯碼之后,需要對(duì)共享存儲(chǔ)區(qū)發(fā)出操作請(qǐng)求, 與操作請(qǐng)求一起發(fā)送的是操作的信息,對(duì)于申請(qǐng)、讀取和寫入三種操作,各自的操作信息如 下表所示:
當(dāng) CMCCtrl 受到接收到來自Core1/Core2 的訪問請(qǐng)求,模塊觸發(fā)。同時(shí)隨著請(qǐng)求一起接 收下來的其他信息,包括指令編碼、請(qǐng)求的數(shù)據(jù)類型、地址偏移等等。CMCCtrl 對(duì)這些請(qǐng)求 信息進(jìn)行分析,當(dāng)判斷出核間需要數(shù)據(jù)通信后,將需要的信息提取發(fā)送至總線模塊。具體模 塊描述如下:
SC_MODULE(CMCCtrl)
{ sc_inout isCore1, isCore2; //來自Core1/Core2 的訪問請(qǐng)求,是本模塊的觸發(fā)信號(hào)
sc_out core1_latency, core2_latency; //返回給Core1/Core2 的延時(shí)信息
sc_inout data_value; //需要傳遞的數(shù)據(jù)
sc_port bus_port; //通信總線模塊接口
/*返回給Core1/Core2 的應(yīng)答信號(hào),表明CORE1/Core2 獲得了共享存儲(chǔ)區(qū)的訪問權(quán),并
且可以繼續(xù)執(zhí)行下一個(gè)周期的操作*/
sc_inout ackCore1, ackCore2;
/*隨著isCore1/isCore2 請(qǐng)求一起接收下來的請(qǐng)求信息,包括指令編碼、請(qǐng)求的數(shù)據(jù)類型、
地址移等等*/
sc_inout data_type, array_capacity, data_index, data_id;
/*隨著is Core1/isCore2 請(qǐng)求一起接收下來的,表明當(dāng)前Core1/Core2 運(yùn)行的周期數(shù),用
于進(jìn)行內(nèi)核調(diào)度判斷和訪存沖突分析*/
sc_in core1_cycle, core2_cycle;
/*對(duì)isCore1 或者isCore2 的上升沿敏感的響應(yīng)函數(shù),它被定義為線程類型,是CMCCtrl
類的實(shí)現(xiàn)函數(shù)。函數(shù)內(nèi)部需要對(duì)兩個(gè)內(nèi)核的訪問請(qǐng)求進(jìn)行判斷、控制,并調(diào)用相應(yīng)的其它成員函數(shù)。
評(píng)論