高速數字記錄系統中光纖下載卡的邏輯設計
所用Xilinx的RocketIO核其實(shí)為aurora 核,這是一個(gè)雙向串行數據通信鏈路控制器,能將反壓信號隨數據一起發(fā)往對端。其接口相對簡(jiǎn)單,有兩種模式,一種是幀模式,另一種是流模式,可以根據應用靈活選擇。在本項目中采用的是幀模式。
主DMA處理的軟硬件流程
在DMA處理中,采用內存乒乓操作來(lái)提高系統的吞吐量。軟件中的驅動(dòng)采用Windriver開(kāi)發(fā),其工作主要分三部分。
1 初始化,包括申請內存,配置DMA列表,配置DMA相關(guān)寄存器,啟動(dòng)邏輯開(kāi)始工作。
2 中斷處理函數。在此函數中,屏蔽中斷,并啟動(dòng)DPC處理。
3 DPC(延遲過(guò)程調用),根據邏輯提供的狀態(tài)標識,將相應的內存塊的數據搬移至硬盤(pán)中,然后取消中斷屏蔽,復位狀態(tài)標識,使系統可以接收下一個(gè)中斷。
數據的搬移不在中斷處理函數中完成,是由于中斷處理函數具有較高的優(yōu)先級,如果將耗時(shí)的數據搬移放在這里進(jìn)行,會(huì )明顯降低系統的響應時(shí)間。而DPC的優(yōu)先級在所有的外部中斷之下,不會(huì )因此而降低對其他外部中斷的響應速度。
主DMA邏輯的主要工作是讀取驅動(dòng)配置的DMA列表,根據列表中的內存地址和長(cháng)度,對內存進(jìn)行主DMA寫(xiě)操作。操作完成后,通過(guò)置位狀態(tài)標識,通知驅動(dòng)來(lái)讀取數據。狀態(tài)機轉移如圖4所示。
圖4 DMA主狀態(tài)機轉移圖
● IDLE狀態(tài):在此狀態(tài)下,等待軟件的使能信號。使能信號有效則進(jìn)入JUDGE狀態(tài),否則等待。
● JUDGE狀態(tài):在此狀態(tài)下,判斷乒乓標志。根據乒乓標志決定本次處理應該選擇哪一個(gè)內存塊。
● RD_TBL狀態(tài): 發(fā)出讀DMA列表的地址信息。然后進(jìn)行GET_TBL狀態(tài)接收列表數據。
● GET_TBL狀態(tài):在此狀態(tài)下,讀取DMA列表數據,并將列表中的內存地址和長(cháng)度信息寫(xiě)入相應的寄存器中。然后進(jìn)入REQ狀態(tài)。
● REQ狀態(tài):在此狀態(tài)下,對異步FIFO的空信號進(jìn)行判斷。如果非空,則進(jìn)入PROCESS狀態(tài),否則在REQ狀態(tài)等待。
● PROCESS狀態(tài):在此狀態(tài)下,進(jìn)行數據傳輸。由于PCI主DMA對burst長(cháng)度有限制,當傳輸完預定長(cháng)度的數據后,首先對本次長(cháng)度進(jìn)行判斷。如果未完則進(jìn)入REQ狀態(tài)等待,否則判斷本列表是否最后一個(gè)列表。如果是,則進(jìn)行IDLE狀態(tài)。否則進(jìn)入RD_TBL狀態(tài)讀取下一條DMA列表表項的數據,繼續處理。
評論