基于FPGA的PCIE總線擴展卡的設(shè)計
控制區(qū)域中含有一些控制信息,其中第16位用來控制傳輸方向,為O是DMA寫,為1是DMA讀,這里的讀/寫是以主機端為參考的,如果以PCIE核為參考,方向剛好相反。第18位用來使能DMA傳輸計數(shù),如果該位使能為1,那么在DMA傳輸過程中,PCIE核每完成1次DMA操作,都會進行1次計數(shù)操作,然后把這個計數(shù)結(jié)果傳送給主機,主機把這個結(jié)果填寫到描述符表的RCLAST字段中。
表大小是指本次鏈式DMA操作對應(yīng)的描述符個數(shù),每個描述符對應(yīng)一次DMA操作。
RCLAST是一個計數(shù)單元,它有兩個作用,在鏈式DMA傳輸前,表示還有多少個DMA操作等待傳輸,由于它是從0開始計數(shù)的,所以這個值等于表大小減1。還有一個重要作用是在鏈式DMA傳輸過程中,用來表示鏈式DMA傳輸?shù)臓顟B(tài)。如上所述,如果控制區(qū)域的第18位設(shè)置為1,那么每完成1次DMA操作,主機都會更新這個計數(shù)器。當(dāng)計數(shù)器的數(shù)值(也是從O開始計數(shù)的)等于前面設(shè)置的期望傳輸?shù)腄MA次數(shù),就表示鏈式DMA傳輸操作結(jié)束。開發(fā)人員可以用這個狀態(tài)單元來察看本次傳輸是否結(jié)束,從而開始一個新的傳輸周期。
DMA長度用來設(shè)置本描述符對應(yīng)的DMA傳輸?shù)拈L度,是以32位為單位的。主機端地址用來指示數(shù)據(jù)存放存放的位置。
3. 2 實現(xiàn)范例
根據(jù)上面介紹的描述符表,下面給出一個鏈式DMA讀的驅(qū)動程序例子。首先生成一個描述符表,然后把描述符表表頭的4個字段的內(nèi)容分別寫入BAR2地址偏移量為0x0,0x4,0x8和0xC寄存器中。寫完后即開始此次鏈式DMA讀傳輸,while循環(huán)用于等待鏈式DMA結(jié)束。從下面的代碼可以看出,2個描述符對應(yīng)2次DMA操作。
評論