新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 業(yè)界動態(tài) > 基于SystemC的通用嵌入式存儲器模型設(shè)計

基于SystemC的通用嵌入式存儲器模型設(shè)計

作者: 時間:2014-11-14 來源:網(wǎng)絡(luò) 收藏

  1引言

本文引用地址:http://www.butianyuan.cn/article/265385.htm

  建立芯片模型是在早期進(jìn)行芯片架構(gòu)決策的有效方法,通過建模不僅可以對芯片的性能做出分析,還可以在硬件沒有完成之前開發(fā)軟件,不僅提高了產(chǎn)品成功率,而且縮短了研發(fā)周期。設(shè)計人員早期采用C/C++語言進(jìn)行硬件建模。但是隨著軟硬件復(fù)雜度的提高,C/C++語言難以再滿足要求。OSCI適時推出了語言來適應(yīng)新的需求。如今已經(jīng)被廣泛應(yīng)用于SoC軟硬件建模中。

  目前大部分建模方面的文獻(xiàn)是作者對自己所設(shè)計芯片整體模型的描述,這種針對特定芯片設(shè)計的文獻(xiàn)雖然都有參考價值,但是其模型本身借鑒性有限。另一方面,構(gòu)成SoC硬件的基本組件因?yàn)榭芍赜玫木壒?,其模型設(shè)計具有更好的可借鑒性。這方面的研究成果相對較少,而且集中在總線建模方面,也可以看到多核設(shè)計方面的建模方法。

  除了上述總線、CPU架構(gòu)外,片內(nèi)或片外同樣是系統(tǒng)關(guān)鍵模塊,對系統(tǒng)性能有著至關(guān)重要的影響。文獻(xiàn)[6]對SystemClick框架做了擴(kuò)展,從而通過模型能夠分析共享對性能的影響。文獻(xiàn)[7]針對多通道DRAM做了建模,并且分析了不同的配置和使用情況對性能的影響。這兩篇文獻(xiàn)都對所設(shè)計的模型做了詳盡的分析,具有很好的參考價值,但是兩者的通用性欠佳。本文提出了一個可配置的通用存儲器SystemC模型。

  2 SystemC

  SystemC可被視作C++硬件建模和仿真的擴(kuò)展庫,特別適合集成電路的建模,但它事實(shí)上可以用來描述更多的系統(tǒng)。SystemC通過確定仿真核心(simulation kernel)算法定義了處理并行事件和仿真時間的機(jī)制。SystemC還定義了模塊、端口、接口、通道等概念來組成一個復(fù)雜SoC的連接關(guān)系和層次結(jié)構(gòu)。因此,它解決了標(biāo)準(zhǔn)C++語言用于復(fù)雜硬件建模時的難題。

  3存儲器的建模

  3.1存儲器模型概述

  為了能幫助設(shè)計人員分析系統(tǒng)性能并選擇最合適的存儲器構(gòu)造,存儲器模型需要反映出對性能造成影響的關(guān)鍵參數(shù),即帶寬、延時和仲裁機(jī)制。而這些參數(shù)又是由存儲器的結(jié)構(gòu)以及其它參數(shù)決定的。另一方面,本文希望提出一個通用的存儲器模型,因此會有更多的參數(shù)用于配置存儲器以模擬某種特定類型的存儲器特征,比如多端口SRAM.

  圖1給出了所設(shè)計的存儲器模型的結(jié)構(gòu)。它包括三個部分:一是模型接口;二是端口及bank可配置的存儲器;三是由讀寫通路及仲裁機(jī)制構(gòu)成的存儲器控制器。接口部分采用了事務(wù)級建模,而內(nèi)部模塊采用了時鐘精準(zhǔn)的建模,這樣在保證時間精度的同時,方便了接口連接以及提高了仿真速度。

  

 

  圖1可配置存儲器模型結(jié)構(gòu)

  3.2存儲器接口

  基于SystemC的存儲器模型接口,由SystemC定義的接口基類派生而來。整個存儲器模型是一個SystemC模塊,由于實(shí)現(xiàn)了所定義的存儲器模型接口,它成為SystemC概念中的hierarchal channel.因此,該存儲器模型將如同其它SystemC定義的通道,比如FIFO,一樣作為基本組件來連接其它的模塊從而構(gòu)造出SoC硬件系統(tǒng)。所設(shè)計存儲器具有如下所述事務(wù)級SystemC接口。

  阻塞讀接口:該接口用來讀取給定地址的給定大小的數(shù)據(jù),當(dāng)數(shù)據(jù)沒有讀出時,調(diào)用這個接口的模塊線程將被堵塞,直到數(shù)據(jù)讀出為止。除了地址和數(shù)據(jù),該接口還包含調(diào)用者的標(biāo)志信息。

  非阻塞讀接口:與阻塞讀接口不同的是,如果在調(diào)用時讀指令不能被接受,則返回失敗。否則,不等待數(shù)據(jù)返回便成功退出。這樣調(diào)用接口的模塊線程可以在等待時間做其它事情。調(diào)用者通過監(jiān)聽存儲器模型廣播的當(dāng)前讀出數(shù)據(jù)多對應(yīng)調(diào)用者標(biāo)記來在之后讀出數(shù)據(jù)。

  阻塞寫接口:該接口用來向存儲器給定地址寫入給定大小的數(shù)據(jù)。當(dāng)指令或?qū)憯?shù)據(jù)不能被存儲器模型接收時,調(diào)用的線程被堵塞直到接受為止。除了地址和數(shù)據(jù),該接口還包含調(diào)用者的標(biāo)志信息。

  非阻塞寫接口:與阻塞寫接口不同的是,當(dāng)指令或數(shù)據(jù)不能被接受時,返回失敗而不等待。否則返回成功。

  復(fù)位接口:用于復(fù)位存儲器模型。

  為了不強(qiáng)制要求外部提供存儲器模型需要的時鐘,存儲器模型接口中不包含時鐘輸入。模型內(nèi)部有一個專門的時鐘產(chǎn)生線程。

  3.3存儲器實(shí)體

  存儲器模型中的存儲器實(shí)體可以由多個bank組成,并構(gòu)成一個子模塊。根據(jù)bank的數(shù)量和種類,該存儲器子模塊具有不同數(shù)量的只讀端口、只寫端口和讀寫端口。為了能盡可能模擬不同的存儲器類型,存儲器子模塊可配置參數(shù)如表1所示。

  

 

  表1存儲器配置參數(shù)

  3.4存儲器控制器

  存儲器控制器由指令隊(duì)列、數(shù)據(jù)緩存、以及仲裁器構(gòu)成。這一部分對系統(tǒng)的性能有重要影響。讀指令隊(duì)列和寫指令隊(duì)列用來分別緩存讀寫指令。當(dāng)它們寫滿時,新的讀寫操作將失敗或堵塞。指令隊(duì)列的數(shù)量取決于訪問存儲器模型的模塊有幾個優(yōu)先級。相同優(yōu)先級的指令會被放到同一個隊(duì)列。讀仲裁器和寫仲裁器分別根據(jù)隊(duì)列中的讀地址和寫地址,讀寫數(shù)據(jù)緩存器的狀態(tài),以及指令優(yōu)先級來決定發(fā)送哪個指令到哪個端口。而如果讀指令和寫指令指向了相同的讀寫端口,讀寫仲裁器將再一次做出仲裁。這里的每個仲裁器除了上述功能外,具體的仲裁機(jī)制以虛函數(shù)的形式由具體的實(shí)現(xiàn)來決定。在該存儲器模型中實(shí)現(xiàn)了默認(rèn)的基于優(yōu)先級的輪詢算法。存儲器控制器的配置參數(shù)如表2所示。

  

 

  表2存儲器控制器的配置參數(shù)

c++相關(guān)文章:c++教程


存儲器相關(guān)文章:存儲器原理




關(guān)鍵詞: SystemC 存儲器

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉