閱讀帶圖完整版:
使用寄存器級讀&寫控制基于PXI平臺的FPGA-無廣告.pdf
(1018.45 KB)
2017-9-27 17:31 上傳
點擊文件名下載附件
下載積分: 積分 -1
目錄 簡介 設計實例概覽 地址譯碼(AddressDecoding) 引腳控制 寄存器映象(RegisterMapping) 軟件控制 ATEasy 例程 (使用ATEasy GX3500驅動) “C” 例程 LabView例程 摘要:本文以基于 PXI平臺的Marvin TestSolutions 3U FPGA板卡GX3500為設計對象,通過設計實例講解如何使用寄存器級讀&寫控制FPGA,并提供FPGA設計相關文件(如SVF)和軟件控制例程。 簡介 為了更好地理解如何訪問GX3500 FPGA的寄存器,需要有一個使用寄存器的設計。本篇文章分為兩部分內容:第一部分,以讀者已經熟練使用 AlteraQuartus II設計工具為前提(參考《GX3500 User’s Guide: GXFPGA Tutorialand Examples》的第五章),概述了如何使用GX3500設計128通道的靜態I/O。此設計實例配置為4組32通道雙向引腳,雙緩沖結構支持同步更新128通道邏輯狀態的讀和寫。 本篇文章的第二部分講述了如何向GX3500 FPGA內加載設計文件,如何連接GX3500 I/O引腳,為了實現FPGA靜態數字I/O的操作如何對寄存器進行讀和寫。 file:///C:/Users/10395/AppData/Local/Temp/msohtmlclip1/01/clip_image001.jpg 圖1 MTS-GX3500FPGA板卡 設計實例概覽 地址譯碼(Address Decoding) GX3500支持對兩種類型的PCI 總線讀和寫操作:一類是針對寄存器,使用PCI BAR 1;另一類是針對RAM,使用PCI BAR 2。靜態數字I/O設計實例使用寄存器控制對I/O引腳的讀和寫,所以使用PCI BAR 1片選信號進行地址譯碼 — 與ChipSelect 1 (CS[1])同意。BAR 1信號可以訪問的地址范圍為1024 byte(0x400),訪問時必須以4-byte為準對齊。 圖2為地址譯碼邏輯單元,將5路地址信號(Addr[6..2]))譯碼后,可提供32路“寫使能”信號(WE[31..0])和32路“讀使能”信號(RE[31..0]),這些信號用于控制鎖存寄存器的向I/O引腳寫入(WE[x]) )和從I/O引腳讀取(RE[x])功能。 file:///C:/Users/10395/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg 圖2:寄存器地址譯碼 引腳控制 本設計實例中有四組完全相同的I/O引腳(見圖4),每組有32路通道。每路通道都支持雙向傳輸,并可以獨立配置傳輸方向。輸出寄存器為雙緩沖結構,支持四組I/O引腳(128路通道)同步更新。第一階段,通過WE_Data控制信號,將輸出數據使用寫入第一級數據寄存器,通過WE_Tristate寫入三態控制信號。以上這些信號來自于WE[31..0]信號,并且這些信號在每組I/O引腳間獨立。第二階段,通過WE_UpdatePort控制信號,將第一級輸出的數據和三態控制信號寫入第二級寄存器。以上這些信號也來自于WE[31..0]信號,但是四組I/O引腳共用以實現四組I/O引腳數據的同步更新。使用RE_Tristatelatch,RE_DataLatch,RE_TristatePort和RE_DataPort控制信號訪問輸出寄存器兩個階段的數據和三態控制寄存器從而進行讀操作。 file:///C:/Users/10395/AppData/Local/Temp/msohtmlclip1/01/clip_image003.jpg 圖3:引腳控制邏輯單元(圖4中的Port_Control) 通過RE_SamplePortIO控制信號可實現四組I/O引腳(128路通道)的所有通道同時被采樣,采樣數據被儲存在鎖存寄存器中以用于后續的數據檢索。分別通過RE_PortIO 控制信號實現數據檢索。因為每組I/O引腳的三態控制信號可以被讀,所以可以推斷出GX3500或UUT是否處于采樣輸入狀態(讀狀態)。 寄存器映象(RegisterMapping) 下面是控制四組I/O引腳(A組、B組、C組、D組)的讀和寫寄存器偏移地址: | | | | | | 0 | (0x0) | WE[0]: 向I/O引腳(A組)鎖存器中寫入數據 | 4 | (0x4) | WE[1]: 向I/O引腳(B組)鎖存器中寫入數據 | 8 | (0x8) | WE[2]: 向I/O引腳(C組)鎖存器中寫入數據 | 12 | (0xC) | WE[3]: 向I/O引腳(D組)鎖存器中寫入數據 | 16 | (0x10) | WE[4]: 向I/O引腳(A組)鎖存器中寫入三態控制信號 | 20 | (0x14) | WE[5]: 向I/O引腳(B組)鎖存器中寫入三態控制信號 | 24 | (0x18) | WE[6]: 向I/O引腳(C組)鎖存器中寫入三態控制信號 | 28 | (0x1C) | WE[7]: 向I/O引腳(D組)鎖存器中寫入三態控制信號 | 80 | (0x50) | WE[20]: 同步更新I/O引腳(A~D組) | | | | | | | 0 | (0x0) | WE[0]: 從I/O引腳(A組)鎖存器中讀取數據 | 4 | (0x4) | WE[1]: 從I/O引腳(B組)鎖存器中讀取數據 | 8 | (0x8) | WE[2]: 從I/O引腳(C組)鎖存器中讀取數據 | 12 | (0xC) | WE[3]: 從I/O引腳(D組)鎖存器中讀取數據 | 16 | (0x10) | WE[4]: 從I/O引腳(A組)鎖存器中讀取三態控制信號 | 20 | (0x14) | WE[5]: 從I/O引腳(B組)鎖存器中讀取三態控制信號 | 24 | (0x18) | WE[6]: 從I/O引腳(C組)鎖存器中讀取三態控制信號 | 28 | (0x1C) | WE[7]: 從I/O引腳(D組)鎖存器中讀取三態控制信號 | 32 | (0x20) | WE[8]: 讀取I/O引腳(A組)的輸出數據 | 36 | (0x24) | WE[9]: 讀取I/O引腳(B組)的輸出數據 | 40 | (0x28) | WE[10]: 讀取I/O引腳(C組)的輸出數據 | 44 | (0x2C) | WE[11]: 讀取I/O引腳(D組)的輸出數據 | 48 | (0x30) | WE[12]: 讀取I/O引腳(A組)的三態控制信號 | 52 | (0x34) | WE[13]: 讀取I/O引腳(B組)的三態控制信號 | 56 | (0x38) | WE[14]: 讀取I/O引腳(C組)的三態控制信號 | 60 | (0x3C) | WE[15]: 讀取I/O引腳(D組)的三態控制信號 | 64 | (0x40) | WE[16]: 從I/O引腳(A組)輸入鎖存器中讀取采樣數據 | 68 | (0x44) | WE[17]: 從I/O引腳(B組)輸入鎖存器中讀取采樣數據 | 72 | (0x48) | WE[18]: 從I/O引腳(C組)輸入鎖存器中讀取采樣數據 | 76 | (0x4C) | WE[19]: 從I/O引腳(D組)輸入鎖存器中讀取采樣數據 | 80 | (0x50) | WE[20]: 對I/O引腳(A~D組)同步采樣到輸入鎖存器 |
file:///C:/Users/10395/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg 圖4:I/O引腳(A~D組)的讀和寫控制 軟件控制 為了控制本文中的GX3500設計實例,首先要初始化儀器驅動,然后加載SVF文件,然后寫和讀本設計實例中使用的寄存器地址。GX3500 API,包含用于訪問內存的函數、使能或旁路擴展板卡 繼電器的函數和其他函數。參考《GX3500 User’s Guide》獲取API函數詳細列表和調用語法。 本文提供的控制GX3500 FPGA靜態I/O的代碼,支持三種不同的編程環境:ATEasy,“C” 和LabView。這些例程假設GX3500安裝在PXI機箱的第12槽中、使用Altera Quartus II 設計軟件生成SVF文件“Static_IO.svf”、SVF文件在應用程序可讀入的目錄下。 ATEasy 例程 (使用ATEasy GX3500驅動) dwData  Word[4] ! Contains output state for 32-bit ports A- D
dwTristate  Word[4] ! Contains tristate control for 32-bit ports A-D
dwInput  Word[4] ! Contains data read from four latches A-D
i  ong ! Index counter
Driver Initialize (12) ! Initialize driver for instrument in slot #12
FPGA Load (".\\Static_IO.svf",TARGET_VOLATILE,MODE_SYNC) ! Load SVFfile to volatile FPGA memory
FPGA Set ExpansionBoardBypass(0b1111) ! Set the expansion bypass – signals route from theFPGA to the connectors
For i=0 to 3 ! Repeat for port A - D
FPGA Write Register(i*4,4,dwData ) ! Write to DataLatch WE
FPGA Write Register((i+4)*4,4,dwTristate) ! Write toTristate Latch WE[i+4]
Next
FPGA Write Register(80,4,0) ! Simultaneous Update all 128 I/O pins (tristate anddata)
FPGA Read Register(80,4,dwData) ! Simultaneous Sample all 128 I/O pins
For i=0 to 3 ! Repeat for port A-D
FPGA Read Register(i*4,4,dwInput) ! Read sampledstate from Latch RE
Next“C” 例程 int nHandle, nStatus, i;
DWord dwData[4], dwTristate[4], dwInput[4];
GxFpgaInitialize (12, nHandle, nStatus); \\ Initialize driver forinstrument in slot #12
GxFpgaLoad (nHandle, 0, "Static_IO.svf" ,0,, pnStatus); \\Load SVF file to volatile FPGA memory
GxFpgaSetExpansionBoardBypass (nHandle , 0xF, pnStatus); \\ Set theexpansion bypass
for(i=0;i<4;i++){ \\ Repeat for port A - D
GxFpgaWriteRegister (nHandle ,i*4, dwData, 4,nStatus); \\ Write to Data Latch WE
GxFpgaWriteRegister (nHandle ,(i+4)*4, dwTristate,4, nStatus); \\ Write to Tristate Latch WE[i+4]
}
GxFpgaWriteRegister (nHandle ,80, 0, 4, nStatus); \\ SimultaneousUpdate all 128 I/O pins (tristate and data)
GxFpgaReadRegister (nHandle, 80, dwInput[0], 4, nStatus); \\Simultaneous Sample all 128 I/O pins
for(i=0;i<4;i++){ \\ Repeat for port A - D
GxFpgaReadRegister (nHandle, i*4, dwInput, 4,nStatus); \\ Read sampled state from Latch RE
} file:///C:/Users/10395/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg 圖5: LabView例程用戶控制界面 file:///C:/Users/10395/AppData/Local/Temp/msohtmlclip1/01/clip_image007.jpg 圖6: LabView例程中層疊順序結構的幀0 file:///C:/Users/10395/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg 圖7: LabView例程中層疊順序結構的幀1 file:///C:/Users/10395/AppData/Local/Temp/msohtmlclip1/01/clip_image009.jpg 圖8: LabView例程中層疊順序結構的幀2 file:///C:/Users/10395/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg 圖9: LabView例程中層疊順序結構的幀3 file:///C:/Users/10395/AppData/Local/Temp/msohtmlclip1/01/clip_image011.jpg 圖10: LabView例程中層疊順序結構的幀4 關鍵字:GX3500,FPGA,Altera,Quartus,FPGA Design tools,Static I/O,PCI,PXI 若需要關于編程軟件、例程調試運行、文件下載等更多幫助,請聯系我。
|