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