1引言
現(xiàn)代電子信息設備往往需要保存和處理大量的數字信息,一個高性能的memory控制器可以大大提高系統(tǒng)的性能。在進行sdram控制器的設計時,需要考慮很多因素,設計完成以后還要進行多項測試看是否完全滿足所要求的各項性能,為此我們設計了一個pdma(programmable direct mem o ry access)用于測試sdram控制器的性能。在soc中,sdram控制器往往跟多個ip模塊(圖形處理單元,音頻處理單元等)交換數據,采用多個pdma通道同時訪問memory可以真實模擬sdram控制器在soc環(huán)境中被多個ip隨機訪問的情形。
2 pdma的結構及工作原理
pdma是可編程直接存儲器存取的簡稱。圖1 虛中框內是pdma的內部模塊結構,它主要由寄存器組和控制器兩大部分構成,寄存器組用于保存配置參數和pdma對sdrma控制器訪問后的狀態(tài)信息及接收、啟動、停止等控制信息。圖2是 pdma寄存器組的內部結構。
寄存器組模塊里包含了一個同步模塊、控制寄存器、狀態(tài)寄存器和各通道的寄存器組。每一個子通道的寄存器組又包含訪問基址寄存器、訪問模式寄存器、周期計數器等三個寄存器。各寄存器的功能描述如表1所示。
pdma的控制器主要由:產生寫數據的狀態(tài)機、地址譯碼模塊、fifo以及讀數據校驗模塊四部分構成。各模塊的功能由表2描述。
pdma控制器的結構如圖3所示,其核心邏輯是一個狀態(tài)機,我們采用一個兩層嵌套的狀態(tài)機來實現(xiàn)控制功能,如圖4所示。
3 測試系統(tǒng)的結構和工作原理
在本設計中,pdma用于仿真多個ip核對sdram控制器進行讀寫訪問以驗證sdram控制器的設計是否高效合理,性能是否穩(wěn)定等指標。
pdma整個測試系統(tǒng)由pci接口模塊、pdma 以及sdram控制器三大部分構成(見圖1)。pci接口模塊與pdma之間以內部io總線相連接。 pdma與sdram控制器之間以內部memory總線連接。pci接口模塊連接外部pci總線與內部的 pdma,轉換由外部發(fā)起的pci io訪問對pdma進行參數配置以及對命令、狀態(tài)等寄存器進行讀寫。pdma在得到了配置參數及啟動訪問的命令信息后啟動對sdram控制器的訪問(寫然后讀),并把測試的結果反映到pdma的狀態(tài)寄存里。
測試用pdma的具體工作過程如下:
(1)pci接口模塊對pdma各通道進行參數配置(如訪問長度、訪問基址、訪問方式等);
(2)pci接口模塊寫pdma的控制寄存器,啟動對sdram的讀寫;
(3)pci接口模塊讀pdma的狀態(tài)寄存器,探測訪問是否完成,如完成,則讀取完成后的狀態(tài)信息(如錯誤位,發(fā)生錯誤的地址)。
4 rtl仿真
完成rtl級的設計后,我們利用cadence公司的仿真工具verilogxl對設計進行了功能仿真。仿真的環(huán)境是基于pci的,所以其仿真順序如下:
(1)配置pci配置空間的io base 及 mem o ry base寄存器;
(2)寫pci配置空間54h,58h等寄存器,配置sdram 控制器及sdram芯片的參數;
(3)寫pci配置空間的命令寄存器(offset==04h),使能該設備;
(4)訪問pci io空間中的pdma配置寄存器,設定各個pdma通道的配置參數;
(5)寫入相應的命令,啟動pdma訪問內新路子sdram控制器;
(6)檢測pdma的狀態(tài)寄存器,根據設定的條件(正常結束或者發(fā)生錯誤)退出仿真程序;
(7)打開波形文件,檢查是否有錯誤發(fā)生。
圖5是由pci發(fā)起的一次寫io寄存器訪問的仿真波形,pdma的配置數據就是通過若干這樣的操作完成的。
相對而言,我們更關注pdma是如何訪問memory的。圖6是由一個pdma發(fā)起的寫讀模式下的訪問時序。group1