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