您當前的位置:首頁 > 書法

DDR3讀寫資料除錯

作者:由 Thomas 發表于 書法時間:2020-06-05

本文對 Xilinx Vivado 中提供的 DDR3

控制器

IP 核模組進行例化,實現基本的 DDR3讀寫操作。並使用線上邏輯分析儀檢視有規律變化的 DDR3 資料讀寫時序。

1。DDR3控制器IP介面時序

DDR3 控制器 IP 核用於銜接 DDR3 晶片和 FPGA 的使用者邏輯,DDR3 控制器與 FPGA 使用者邏輯之間有一套簡單易用的介面,以下為User Interface 的基本時序。

1.1 Command 時序

首先,關於 User Interface 的 Command 時序,Xilinx 的使用者手冊中只給出如圖所示的波形。簡單的來講,app_cmd 和

app_addr

有效,且 app_en 拉高,app_rdy 拉高,則該命令成功傳送給 DDR3 控制器;若是在

app_cmd

、app_addr 和 app_en 都有效時,app_rdy為低,那麼必須保持 app_cmd、app_addr 和 app_en 的有效狀態直到 app_rdy 拉高,那麼該命令才算是成功傳送給DDR3控制器。

DDR3讀寫資料除錯

User Interface 的 Command 時序波形

1.2資料寫入時序

對於單次的資料寫入 DDR3 控制器,使用者手冊中給出如圖所示的時序波形。這裡對應寫入 command 發起的前後有 1、2 和 3 不同時間的 Data Write 時序,也就是說,資料比 command 早一點或晚一點寫入都是可以的。

DDR3讀寫資料除錯

User Interface 的寫資料時序波形

對於“資料比 command 早一點或晚一點寫入都是可以的”這句話,使用者手冊中提到,

command 以及 data 都有各自的 FIFO,因此他們是需要同步的,換句話說,如果讓我設計這個 controller 的 User Interface,並且和目前的機制一樣,command 和 data 都有 FIFO,那麼很簡單,我會根據 command FIFO 中的新命令,對應取一個 data FIFO 中的寫入資料,也不用管它們誰先被送到各自的 FIFO 中。當然了,command FIFO 有命令是 data FIFO 取資料的先決條件。至於兩個 FIFO 萬一不同步,那麼怎麼辦?沒辦法,使用者必須保證它們同步。

前面說 command 時關注介面 app_cmd、app_addr、app_en 和 app_rdy,這裡寫資料則需要關注介面 app_wdf_data、app_wdf_wren、app_

wdf_end

和 app_wdf_rdy。

先說 app_wdf_end,DDR3 實際讀寫的 Burst =8,舉例來說,DDR3 的資料位寬為 16bit,

Burst 為 8,就是說每次對 DDR3 執行讀寫,必須是連續的 8*16bit 資料。那麼在 User

Interface 這端,如果

邏輯時鐘

為 DDR3 時鐘的 4 分頻,且資料位寬為 128bit,那麼單個

時鐘週期

就對應 Burst=8 的一次讀寫操作;而如果資料位寬為 64bit,那麼必須執行 2 次資料操作才能夠完成一次 Burst=8 的讀寫。對於前者,app_wdf_end 始終為 1 就可以了;而對於後者,app_wdf_end 每 2 個寫

資料時鐘週期

內,前一次拉低,後一次拉高。

餘下3個訊號app_wdf_data、app_wdf_wren和app_wdf_rdy,他們的工作原理和

command時序

類似。app_wdf_data 有效,且 app_wdf_wren 拉高,必須 app_

wdf_rdy

也為高,才表示當前資料寫入 DDR3 控制器。

注意:執行寫資料 command 和執行寫資料操作,它們是一一對應的,雖然控制時序可以分開實現。

1.3讀資料時序

寫時序和讀時序它們本質上是一樣的。每個資料的讀操作,也需要先有讀 command 的發起,當有效讀 command 發起後,若干個時鐘週期後,app_rd_data_valid 拉高,此時 app_

rd_data

有效,使用者邏輯據此讀出資料即可,非常簡單。

對於連續讀取也是一樣的。User Interface 可以送一大堆讀 command,注意這些讀command 必須都是有效 command,隨後就等著 app_rd_data_valid 拉高接收app_rd_data 即可。使用者手冊給出的讀資料時序波形如圖所示。

DDR3讀寫資料除錯

DDR3讀寫資料除錯

User Interface 的讀資料時序波形

程式碼解析

該工程例項的模組層次:

● ddr.v 模組是工程頂層模組,例化子模組並申明埠。

● clk_wiz_0.v 模組例化 PLL IP 核,產生 DDR3 的時鐘。

●DDR ip 模組例化 DDR3 控制器 IP 核。

● data_source.v 模組產生 DDR3 的讀寫控制命令,實現 DDR3 控制器和 DDR3 晶片的讀

寫測試功能。其下例化的 dist_mem_gen_0.v 是片內 RAM 的 IP 核,用於儲存每次讀出DDR3 晶片的資料;

ila_0.v 模組則是線上邏輯分析儀的例化。

2。線上邏輯分析儀除錯

連線好開發板、下載器並且給板子供電。開啟工程,點選“Program and Debug 、Open Hardware Manager 、Open Target”按鈕,彈出選單中點選“Auto Connect”。

DDR3讀寫資料除錯

DDR3讀寫資料除錯

此時“Program Device”選項高亮,點選它。

DDR3讀寫資料除錯

DDR3讀寫資料除錯

在 Program Device 頁面中,Bitstream file 為當前工程路徑下的 。bit 檔案,Debug probes file 為當前工程路徑下的 debug_

nets。ltx

檔案。設定好以後,點選“Program”按鈕。

DDR3讀寫資料除錯

在 Trigger Setup 頁面中,可以點選左側的“+”號新增作為觸發訊號的介面,如這裡找到 timer_wrreq 作為觸發訊號。

DDR3讀寫資料除錯

完成觸發訊號、觸發條件設定,並且新增好觀察訊號後,可以點選頁面按鈕開始執行線上邏輯分析儀。

DDR3讀寫資料除錯

下圖為觸發一次的取樣,捕獲到了

DDR3 控制器資料寫入操作的時序

同樣的,若是我們將 timer_rdreq 訊號新增到 Trigger Setup 頁面中作為觸發訊號,那麼接下來執行線上

邏輯分析儀

則會抓到

DDR3 控制器讀資料的操作時序

DDR3讀寫資料除錯

標簽: APP  DDR3  時序  Command  wdf