基于Xilinx Virtex-6的高速DMA讀寫(xiě)設計
摘要 本設計在基于Xilinx Virtex-6 FPGA內嵌PCI Express Core的基礎上,實(shí)現了由PCI Express板卡主動(dòng)發(fā)起的DMA讀寫(xiě),可完成PC和PCI Express板卡之間數據的高速傳輸。該設計已經(jīng)在Xilinx評估板ML605上完成調試驗證,DMA寫(xiě)內存速度穩定可達1 520 MB/s,滿(mǎn)足了高速存儲系統的要求。
本文引用地址:http://dyxdggzs.com/article/246382.htm隨著(zhù)相控陣雷達、超寬帶雷達、數字陣列雷達相繼地出現,雷達的回波數據量在不斷地增加,因此對高速采集和大容量數據傳輸提出了越來(lái)越高的要求。早期基于PCI總線(xiàn)的高速數據采集系統在帶寬、流量控制和數據傳送質(zhì)量上存在一定缺陷,在某種程度上并不能完全適應高速大容量數據存儲的要求。相比較而言,PCI Expres總線(xiàn)具有鮮明的技術(shù)優(yōu)勢,不僅完全兼容PCI總線(xiàn),而且全面解決了PCI總線(xiàn)所面臨的帶寬、流量控制和數據傳送質(zhì)量方面問(wèn)題,由于使用高速差分總線(xiàn),時(shí)鐘頻率可以達到較高水平,其總線(xiàn)帶寬較PCI總線(xiàn)也有大幅度提升,目前X16的PCI Express峰值帶寬可以達到80 GT/s。PCI Express技術(shù)的逐步成熟,為高速數據數據傳輸提供了較好的解決方案。
1 DMA控制邏輯設計
DMA控制邏輯設計如圖1所示,主要有PCIExpress Core、接收引擎、發(fā)送引擎、DMA控制狀態(tài)寄存器和中斷控制等關(guān)鍵模塊。

1.1 PCI Express Core
主要特點(diǎn)如下:(1)符合PCI Express Base Specification 2.0規范。(2)支持X1、X2、X4或X8模式。(3)片上GTP/GTX收發(fā)器實(shí)現PHY。(4)具有訪(fǎng)問(wèn)PCI Express配置空間和內部配置的管理接口。(5)支持最大的有效載荷(128~4 096 Byte)。(6)可針對存儲器或I/O進(jìn)行配置的基地址寄存器(BAR)。
1.2 接收引擎
在PCI Express系統邏輯結構中,接收引擎主要是在接口時(shí)鐘的控制下,按照基本TLP接收時(shí)序,解析存儲器讀寫(xiě)請求并從TLP中提取所需信息并將其傳送到存儲器訪(fǎng)問(wèn)控制器,存儲器訪(fǎng)問(wèn)控制器處理存儲器寫(xiě)TLP中寫(xiě)入存儲器的數據,并使用存儲器中的數據讀來(lái)響應存儲器讀TLP;此外接受引擎主要還負責處理存儲器讀完成TLP,響應板卡發(fā)起的DMA讀操作。
1.3 發(fā)送引擎
在PCI Express系統邏輯結構中,發(fā)送引擎主要是在接口時(shí)鐘的控制下,按照基本TLP發(fā)送時(shí)序,為接收到的存儲器讀TLP生成完成包,生成該完成包所需的信息會(huì )由存儲控制器傳送到發(fā)送引擎;此外發(fā)送引擎還負責發(fā)起存儲器讀寫(xiě)請求TLP,實(shí)現與PC之間數據的DMA讀寫(xiě)。
1.4 DMA狀態(tài)控制寄存器
在PCI Express系統邏輯結構中,DMA狀態(tài)控制寄存器主要是實(shí)現PCI Express Core與Root Complex之間數據的傳遞。Windows GUI軟件配置DMA控制狀態(tài)寄存器控制DMA操作。DMA控制狀態(tài)寄存器映射于PCI Express Memory BAR0空間,Windows GUI軟件通過(guò)Memory Write和Read周期訪(fǎng)問(wèn)寄存器。Windows GUI軟件初始化DMA控制寄存器發(fā)起DMA傳輸,而通過(guò)狀態(tài)寄存器,以中斷方式通知Root Complex DMA傳輸完成。
1.5 中斷控制
當DMA傳輸結束時(shí),為及時(shí)通知PC響應并處理中斷,中斷控制部分使用核的配置層接口信號產(chǎn)生中斷。PCI Express支持兩種中斷:消息信號中斷(MSI)和傳統中斷(Legacy INT)。在PCI Express設備枚舉過(guò)程中,跟聯(lián)合體會(huì )根據自身對中斷支持的能力設置配置空間中的命令寄存器和消息信號中斷能力寄存器,來(lái)決定使用何種中斷。
2 PCI Express Masfer DMA讀寫(xiě)設計驗證
2.1 DMA寫(xiě)設計驗證
數據流向:上行FIFO數據→PCI Express Master DMA Write→PC內存→PC硬盤(pán)。
整個(gè)DMA寫(xiě)過(guò)程如下:(1)復位FPGA邏輯,延時(shí)1 ms;去除FPGA邏輯,延時(shí)1 ms。(2)檢測硬件鏈路初始化。(3)開(kāi)啟DMA寫(xiě)完成中斷。(4)設置DMA寫(xiě)目的地址寄存器,設置DMA寫(xiě)傳輸長(cháng)度寄存器。(5)啟動(dòng)DMA寫(xiě)操作,選擇記錄路徑。(6)等待DMA寫(xiě)完成中斷。(7)清除中斷,內存數據轉到硬盤(pán)。(8)DMA寫(xiě)是否結束,是則轉至步驟(9);否則轉至步驟(4)。(9)終止DMA寫(xiě),關(guān)閉DMA寫(xiě)完成中斷,斷開(kāi)記錄路徑。
下面給出從PCI Express Core到系統內存的DMA寫(xiě)時(shí)序,圖2是用ChipScope截取的時(shí)序圖。

T0~T1之間核接收事務(wù)接口上m_axis_rx_tvalid與m_axis_rx_tlast共同有效了8次,即執行了8次PIO內存讀寫(xiě)操作。其中第6次為PIO讀操作,相應的發(fā)送事務(wù)接口上s_axis_tx_tvalid與s_axis_tx_tlast有效,產(chǎn)生Cpld完成包以回應PIO讀操作。從圖中可以看出,DMA狀態(tài)控制寄存器配置完成后,dma_wr_start信號有效,即啟動(dòng)DMA寫(xiě)操作。此后PCI Express Core開(kāi)始在發(fā)送事務(wù)接口上發(fā)送存儲器寫(xiě)事物包,事物包的地址、大小已經(jīng)在DMA狀態(tài)控制寄存器中配置。
2.2 DMA讀設計驗證
數據流向:PC硬盤(pán)→PC內存→PCI Express Master DMA Read→下行FIFO數據。
整個(gè)DMA讀過(guò)程如下:(1)復位FPGA邏輯,延時(shí)1 ms;去除FPGA邏輯,延時(shí)1 ms。(2)檢測硬件鏈路初始化。(3)開(kāi)啟DMA讀完成中斷。(4)設置DMA讀目的地址寄存器,設置DMA讀傳輸長(cháng)度寄存器。(5)PC硬盤(pán)數據轉到內存。(6)啟動(dòng)DMA讀操作,選擇回放路徑。(7)等待DMA讀完成中斷。(8)清除中斷,硬盤(pán)數據轉到內存。(9)DMA讀是否結束,是則轉至步驟(10);否則轉至步驟(4)。(10)終止DMA讀,關(guān)閉DMA讀完成中斷,斷開(kāi)回放路徑。
下面給出從系統內存到PCI Express Core的DMA讀時(shí)序,圖3是用ChipScope截取的時(shí)序圖。

T1~T2之間核接收事務(wù)接口上m_axis_rx_tvalid與m_axis_rx_tlast共同有效了3次。此處需要說(shuō)明的是DMA讀操作在配置完寄存器后需要先從PC硬盤(pán)將數據轉到內存開(kāi)辟的數據緩沖區,此后才能開(kāi)始DMA讀操作,故T1~T2之間核接收事務(wù)接口上m_axis_rx_tvalid與m_axis_rx_ tlast有效為配置DMA讀地址和啟動(dòng)DMA讀操作。當DMA讀操作啟動(dòng)后,核的發(fā)送事務(wù)接口上s_axis_tx_tvalid與s_axis_tx_tlast有效,發(fā)送存儲器讀請求包,當PC收到PCI Express Core發(fā)出的存儲器讀請求包后會(huì )根據TLP中的信息回復相應的Cpld完成包。根據PCIExpress總線(xiàn)規范中對PCI Express序的規定,允許接收事務(wù)接口在接收Cpld完成包的同時(shí)發(fā)送事務(wù)接口在發(fā)送存儲器讀請求包,見(jiàn)圖中T1~T2之間所示。
存儲器相關(guān)文章:存儲器原理
評論