天天看點

基于SystemC的存儲器模型設計

作者:凱利訊商城

您在閱讀前請點選上面的“關注”二字,後續會第一時間為您提供更多有價值的相關内容,感謝您的支援。

建立晶片模型是在早期進行晶片架構決策的有效方法,通過模組化不僅可以對晶片的性能做出分析,還可以在硬體沒有完成之前開發軟體,不僅提高了産品成功率,而且縮短了研發周期。設計人員早期采用C/C++語言進行硬體模組化。但是随着軟硬體複雜度的提高,C/C++語言難以再滿足要求。OSCI适時推出了SystemC語言來适應新的需求。如今SystemC已經被廣泛應用于SoC軟硬體模組化中。本文提出了一個可配置的通用存儲器SystemC模型,可以作為構造SoC的通用IP模型。

1.SystemC

SystemC可被視作C++硬體模組化和仿真的擴充庫,特别适合內建電路的模組化,但它事實上可以用來描述更多的系統。SystemC通過确定仿真(simulation kernel)算法定義了處理并行事件和仿真時間的機制。SystemC還定義了子產品、端口、接口、通道等概念來組成一個複雜SoC的連接配接關系和層次結構。是以,它解決了标準C++語言用于複雜硬體模組化時的難題。

2.存儲器模組化

2.1存儲器模型概述

為了能幫助設計人員分析系統性能并選擇合适的存儲器構造,存儲器模型需要反映出對性能造成影響的關鍵參數,即帶寬、延時和仲裁機制。而這些參數又是由存儲器的結構以及其它參數決定的。另一方面,本文希望提出一個通用的存儲器模型,是以會有更多的參數用于配置存儲器以模拟某種特定類型的存儲器特征,比如多端口SRAM。

圖1給出了所設計的存儲器模型的結構。它包括三個部分:一是模型接口;二是端口及bank可配置的存儲器;三是由讀寫通路及仲裁機制構成的存儲器控制器。接口部分采用了事務級模組化,而内部子產品采用了時鐘精準的模組化,這樣在保證時間精度的同時,友善了接口連接配接以及提高了仿真速度。

基于SystemC的存儲器模型設計

圖1 可配置存儲器模型結構

2.2存儲器接口

基于SystemC的存儲器模型接口,由SystemC定義的接口基類派生而來。整個存儲器模型是一個SystemC子產品,由于實作了所定義的存儲器模型接口,它成為SystemC概念中的hierarchal channel。是以,該存儲器模型将如同其它SystemC定義的通道,比如FIFO,一樣作為基本元件來連接配接其它的子產品進而構造出SoC硬體系統。所設計存儲器具有如下所述事務級SystemC接口。

阻塞讀接口:該接口用來讀取給定位址的給定大小的資料,當資料沒有讀出時,調用這個接口的子產品線程将被堵塞,直到資料讀出為止。除了位址和資料,該接口還包含調用者的标志資訊。

非阻塞讀接口:與阻塞讀接口不同的是,如果在調用時讀指令不能被接受,則傳回失敗。否則,不等待資料傳回便成功退出。這樣調用接口的子產品線程可以在等待時間做其它事情。調用者通過監聽存儲器模型廣播的目前讀出資料多對應調用者标記來在之後讀出資料。

阻塞寫接口:該接口用來向存儲器給定位址寫入給定大小的資料。當指令或寫資料不能被存儲器模型接收時,調用的線程被堵塞直到接受為止。除了位址和資料,該接口還包含調用者的标志資訊。

非阻塞寫接口:與阻塞寫接口不同的是,當指令或資料不能被接受時,傳回失敗而不等待。否則傳回成功。

複位接口:用于複位存儲器模型。

為了不強制要求外部提供存儲器模型需要的時鐘,存儲器模型接口中不包含時鐘輸入。模型内部有一個專門的時鐘産生線程。

2.3存儲器實體

存儲器模型中的存儲器實體可以由多個bank組成,并構成一個子子產品。根據bank的數量和種類,該存儲器子子產品具有不同數量的隻讀端口、隻寫端口和讀寫端口。為了能盡可能模拟不同的存儲器類型,存儲器子子產品可配置參數如表1所示。

基于SystemC的存儲器模型設計

2.4存儲器控制器

存儲器控制器由指令隊列、資料緩存、以及仲裁器構成。這一部分對系統的性能有重要影響。讀指令隊列和寫指令隊列用來分别緩存讀寫指令。當它們寫滿時,新的讀寫操作将失敗或堵塞。指令隊列的數量取決于通路存儲器模型的子產品有幾個優先級。相同優先級的指令會被放到同一個隊列。讀仲裁器和寫仲裁器分别根據隊列中的讀位址和寫位址,讀寫資料緩存器的狀态,以及指令優先級來決定發送哪個指令到哪個端口。而如果讀指令和寫指令指向了相同的讀寫端口,讀寫仲裁器将再做出仲裁。這裡的每個仲裁器除了上述功能外,具體的仲裁機制以虛函數的形式由具體的實作來決定。在該存儲器模型中實作了預設的基于優先級的輪詢算法。存儲器控制器的配置參數如表2所示。

基于SystemC的存儲器模型設計

2.5參數配置

存儲器模型的衆多參數需要在構造函數中配置完成。在運作階段,不能再更改配置。運作階段的配置更改将是我們下一步的研究内容,可以用于類似于文獻[8]的自演化系統。

3.應用執行個體

圖2所示為一個H.264解碼器子產品框圖。該解碼器共包括四個子產品以流水線方式工作在宏塊級别。其中熵解碼産生運動矢量,變換系數等資訊。殘差恢複子產品通過反量化、反變換操作得到殘差。宏塊預測子產品進行幀内或幀間預測并和殘差一起重建出宏塊資料。去快效應子產品實作H.264去塊效應濾波。這四個子產品通過一個共享的SRAM 來交換資料。RTL設計人員根據設計名額率先完成了各子產品微架構的設計,平均解碼每個子產品所需時間在名額範圍内。

基于SystemC的存儲器模型設計

圖2 H.264解碼器子產品框圖

為了确定共享SRAM 引入的性能損失和确定SRAM 的設計,采用本文存儲器模型進行分析。存儲器的大部分參數已經被确定,需要決定采用幾個bank(每個bank是一個單端口SRAM)。另一方面,各子產品讀寫存儲器的時間也基本确定進而有了可靠地負載模型。通過改變存儲器模型的bank數,得到結果如圖3所示。

基于SystemC的存儲器模型設計

圖3 不同bank數所對應的單個宏塊平均解碼時間占允許時間的比例

由于bank的增加可以減少通路存儲器的沖突,模型仿真得到的處理時間随bank數量的增加而減少。但是可以看到bank數量對所消耗的時間影響不大,這說明各解碼子產品通路存儲器的時間分布已經比較均勻。由于一個bank的情況已經可以滿足要求,是以确定bank數為1。RTL全部完成後的仿真結果所消耗的時間比模型所給出的略少一些,原因是RTL設計對通路共享SRAM 的時間安排做了進一步細化的工作。

結束語

以上就是基于SystemC的存儲器模型設計介紹了。通過一系列的參數配置,該模型能夠幫助設計人員快速實作系統模組化并在存儲器設計和選擇上做出合理判斷。借助其通用性,它還可以幫助保持一緻性和減少重複勞動。該模型被應用于視訊解碼中,成功預測了共享SRAM 的bank數對性能的影響,證明了其有效性。

關注“凱利訊半導體”公衆号,擷取更多電子行業相關資訊。

繼續閱讀