電子工程網(wǎng)
標(biāo)題: 如何使用寄存器級(jí)讀&寫控制基于PXI平臺(tái)的FPGA? [打印本頁(yè)]
作者: Stone_Mei 時(shí)間: 2017-9-27 20:48
標(biāo)題: 如何使用寄存器級(jí)讀&寫控制基于PXI平臺(tái)的FPGA?
閱讀帶圖完整版:
使用寄存器級(jí)讀&寫控制基于PXI平臺(tái)的FPGA-無廣告.pdf
(1018.45 KB)
2017-9-27 20:48 上傳
點(diǎn)擊文件名下載附件
如何使用寄存器級(jí)讀&寫控制基于PXI平臺(tái)的FPGA?
下載積分: 積分 -1
目錄
簡(jiǎn)介
設(shè)計(jì)實(shí)例概覽
地址譯碼(AddressDecoding)
引腳控制
寄存器映象(RegisterMapping)
軟件控制
ATEasy 例程 (使用ATEasy GX3500驅(qū)動(dòng))
“C” 例程
LabView例程
摘要:本文以基于PXI平臺(tái)的Marvin TestSolutions 3U FPGA板卡GX3500為設(shè)計(jì)對(duì)象,通過設(shè)計(jì)實(shí)例講解如何使用寄存器級(jí)讀&寫控制FPGA,并提供FPGA設(shè)計(jì)相關(guān)文件(如SVF)和軟件控制例程。
簡(jiǎn)介
為了更好地理解如何訪問GX3500 FPGA的寄存器,需要有一個(gè)使用寄存器的設(shè)計(jì)。本篇文章分為兩部分內(nèi)容:第一部分,以讀者已經(jīng)熟練使用AlteraQuartus II設(shè)計(jì)工具為前提(參考《GX3500 User’s Guide: GXFPGA Tutorialand Examples》的第五章),概述了如何使用GX3500設(shè)計(jì)128通道的靜態(tài)I/O。此設(shè)計(jì)實(shí)例配置為4組32通道雙向引腳,雙緩沖結(jié)構(gòu)支持同步更新128通道邏輯狀態(tài)的讀和寫。
本篇文章的第二部分講述了如何向GX3500 FPGA內(nèi)加載設(shè)計(jì)文件,如何連接GX3500 I/O引腳,為了實(shí)現(xiàn)FPGA靜態(tài)數(shù)字I/O的操作如何對(duì)寄存器進(jìn)行讀和寫。
圖1 MTS-GX3500FPGA板卡
設(shè)計(jì)實(shí)例概覽
地址譯碼(Address Decoding)
GX3500支持對(duì)兩種類型的PCI總線讀和寫操作:一類是針對(duì)寄存器,使用PCI BAR 1;另一類是針對(duì)RAM,使用PCI BAR 2。靜態(tài)數(shù)字I/O設(shè)計(jì)實(shí)例使用寄存器控制對(duì)I/O引腳的讀和寫,所以使用PCI BAR 1片選信號(hào)進(jìn)行地址譯碼 — 與ChipSelect 1 (CS[1])同意。BAR 1信號(hào)可以訪問的地址范圍為1024 byte(0x400),訪問時(shí)必須以4-byte為準(zhǔn)對(duì)齊。 圖2為地址譯碼邏輯單元,將5路地址信號(hào)(Addr[6..2]))譯碼后,可提供32路“寫使能”信號(hào)(WE[31..0])和32路“讀使能”信號(hào)(RE[31..0]),這些信號(hào)用于控制鎖存寄存器的向I/O引腳寫入(WE[x]) )和從I/O引腳讀取(RE[x])功能。
圖2:寄存器地址譯碼
引腳控制
本設(shè)計(jì)實(shí)例中有四組完全相同的I/O引腳(見圖4),每組有32路通道。每路通道都支持雙向傳輸,并可以獨(dú)立配置傳輸方向。輸出寄存器為雙緩沖結(jié)構(gòu),支持四組I/O引腳(128路通道)同步更新。第一階段,通過WE_Data控制信號(hào),將輸出數(shù)據(jù)使用寫入第一級(jí)數(shù)據(jù)寄存器,通過WE_Tristate寫入三態(tài)控制信號(hào)。以上這些信號(hào)來自于WE[31..0]信號(hào),并且這些信號(hào)在每組I/O引腳間獨(dú)立。第二階段,通過WE_UpdatePort控制信號(hào),將第一級(jí)輸出的數(shù)據(jù)和三態(tài)控制信號(hào)寫入第二級(jí)寄存器。以上這些信號(hào)也來自于WE[31..0]信號(hào),但是四組I/O引腳共用以實(shí)現(xiàn)四組I/O引腳數(shù)據(jù)的同步更新。使用RE_Tristatelatch,RE_DataLatch,RE_TristatePort和RE_DataPort控制信號(hào)訪問輸出寄存器兩個(gè)階段的數(shù)據(jù)和三態(tài)控制寄存器從而進(jìn)行讀操作。
圖3:引腳控制邏輯單元(圖4中的Port_Control)
通過RE_SamplePortIO控制信號(hào)可實(shí)現(xiàn)四組I/O引腳(128路通道)的所有通道同時(shí)被采樣,采樣數(shù)據(jù)被儲(chǔ)存在鎖存寄存器中以用于后續(xù)的數(shù)據(jù)檢索。分別通過RE_PortIO 控制信號(hào)實(shí)現(xiàn)數(shù)據(jù)檢索。因?yàn)槊拷MI/O引腳的三態(tài)控制信號(hào)可以被讀,所以可以推斷出GX3500或UUT是否處于采樣輸入狀態(tài)(讀狀態(tài))。
寄存器映象(RegisterMapping)
下面是控制四組I/O引腳(A組、B組、C組、D組)的讀和寫寄存器偏移地址:
寫功能: | | |
偏移量 | (HEX) | 功能 |
0 | (0x0) | WE[0]: 向I/O引腳(A組)鎖存器中寫入數(shù)據(jù) |
4 | (0x4) | WE[1]: 向I/O引腳(B組)鎖存器中寫入數(shù)據(jù) |
8 | (0x8) | WE[2]: 向I/O引腳(C組)鎖存器中寫入數(shù)據(jù) |
12 | (0xC) | WE[3]: 向I/O引腳(D組)鎖存器中寫入數(shù)據(jù) |
16 | (0x10) | WE[4]: 向I/O引腳(A組)鎖存器中寫入三態(tài)控制信號(hào) |
20 | (0x14) | WE[5]: 向I/O引腳(B組)鎖存器中寫入三態(tài)控制信號(hào) |
24 | (0x18) | WE[6]: 向I/O引腳(C組)鎖存器中寫入三態(tài)控制信號(hào) |
28 | (0x1C) | WE[7]: 向I/O引腳(D組)鎖存器中寫入三態(tài)控制信號(hào) |
80 | (0x50) | WE[20]: 同步更新I/O引腳(A~D組) |
讀功能: | | |
偏移量 | (HEX) | 功能 |
0 | (0x0) | WE[0]: 從I/O引腳(A組)鎖存器中讀取數(shù)據(jù) |
4 | (0x4) | WE[1]: 從I/O引腳(B組)鎖存器中讀取數(shù)據(jù) |
8 | (0x8) | WE[2]: 從I/O引腳(C組)鎖存器中讀取數(shù)據(jù) |
12 | (0xC) | WE[3]: 從I/O引腳(D組)鎖存器中讀取數(shù)據(jù) |
16 | (0x10) | WE[4]: 從I/O引腳(A組)鎖存器中讀取三態(tài)控制信號(hào) |
20 | (0x14) | WE[5]: 從I/O引腳(B組)鎖存器中讀取三態(tài)控制信號(hào) |
24 | (0x18) | WE[6]: 從I/O引腳(C組)鎖存器中讀取三態(tài)控制信號(hào) |
28 | (0x1C) | WE[7]: 從I/O引腳(D組)鎖存器中讀取三態(tài)控制信號(hào) |
32 | (0x20) | WE[8]: 讀取I/O引腳(A組)的輸出數(shù)據(jù) |
36 | (0x24) | WE[9]: 讀取I/O引腳(B組)的輸出數(shù)據(jù) |
40 | (0x28) | WE[10]: 讀取I/O引腳(C組)的輸出數(shù)據(jù) |
44 | (0x2C) | WE[11]: 讀取I/O引腳(D組)的輸出數(shù)據(jù) |
48 | (0x30) | WE[12]: 讀取I/O引腳(A組)的三態(tài)控制信號(hào) |
52 | (0x34) | WE[13]: 讀取I/O引腳(B組)的三態(tài)控制信號(hào) |
56 | (0x38) | WE[14]: 讀取I/O引腳(C組)的三態(tài)控制信號(hào) |
60 | (0x3C) | WE[15]: 讀取I/O引腳(D組)的三態(tài)控制信號(hào) |
64 | (0x40) | WE[16]: 從I/O引腳(A組)輸入鎖存器中讀取采樣數(shù)據(jù) |
68 | (0x44) | WE[17]: 從I/O引腳(B組)輸入鎖存器中讀取采樣數(shù)據(jù) |
72 | (0x48) | WE[18]: 從I/O引腳(C組)輸入鎖存器中讀取采樣數(shù)據(jù) |
76 | (0x4C) | WE[19]: 從I/O引腳(D組)輸入鎖存器中讀取采樣數(shù)據(jù) |
80 | (0x50) | WE[20]: 對(duì)I/O引腳(A~D組)同步采樣到輸入鎖存器 |
圖4:I/O引腳(A~D組)的讀和寫控制
GX3500靜態(tài)I/O設(shè)計(jì)文件和SVF文件下載:
here.
軟件控制
為了控制本文中的GX3500設(shè)計(jì)實(shí)例,首先要初始化儀器驅(qū)動(dòng),然后加載SVF文件,然后寫和讀本設(shè)計(jì)實(shí)例中使用的寄存器地址。GX3500 API,包含用于訪問內(nèi)存的函數(shù)、使能或旁路擴(kuò)展板卡繼電器的函數(shù)和其他函數(shù)。參考《GX3500 User’s Guide》獲取API函數(shù)詳細(xì)列表和調(diào)用語(yǔ)法。
本文提供的控制GX3500 FPGA靜態(tài)I/O的代碼,支持三種不同的編程環(huán)境:ATEasy,“C” 和LabView。這些例程假設(shè)GX3500安裝在PXI機(jī)箱的第12槽中、使用Altera Quartus II 設(shè)計(jì)軟件生成SVF文件“Static_IO.svf”、SVF文件在應(yīng)用程序可讀入的目錄下。
ATEasy 例程 (使用ATEasy GX3500驅(qū)動(dòng))
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 (tristateand data)
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); \\ SimultaneousSample 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
}
圖5: LabView例程用戶控制界面
圖6: LabView例程中層疊順序結(jié)構(gòu)的幀0
圖7: LabView例程中層疊順序結(jié)構(gòu)的幀1
圖8: LabView例程中層疊順序結(jié)構(gòu)的幀2
圖9: LabView例程中層疊順序結(jié)構(gòu)的幀3
圖10: LabView例程中層疊順序結(jié)構(gòu)的幀4
關(guān)鍵字:GX3500,F(xiàn)PGA,Altera,Quartus,F(xiàn)PGA Design tools,Static I/O,PCI,PXI
若需要關(guān)于編程軟件、例程調(diào)試運(yùn)行、文件下載等更多幫助,請(qǐng)聯(lián)系我。
作者: Stone_Mei 時(shí)間: 2017-9-27 20:49

作者: chunfen26341612 時(shí)間: 2017-10-27 16:12
你是否有以下情況:
1.花了大量時(shí)間自學(xué),學(xué)了一大堆,卻不知道有沒有用?!!
2.一點(diǎn)小問題就卡住學(xué)習(xí)進(jìn)程,浪費(fèi)了寶貴的學(xué)習(xí)時(shí)間?!!
2.能看懂別人的代碼,到自己設(shè)計(jì)時(shí)卻不知道先從哪里下手?!
3.找不到工作,面試難?!!看別人有10K+薪水,而自己只有幾K?。
不要猶豫了,趕緊來報(bào)班培訓(xùn)吧,自學(xué)沒個(gè)幾年根本達(dá)不到就業(yè)水平,時(shí)間就是金錢,早掌握早賺錢。
明德?lián)P專業(yè)FPGA培訓(xùn),帶你擺脫上面的三種情況,一對(duì)一輔導(dǎo)教學(xué),您完全掌握了老師才開始下一個(gè)知識(shí)點(diǎn)的教學(xué),不用擔(dān)心大班教學(xué)跟不上其他學(xué)員進(jìn)度,明德?lián)P承諾能真正讓你擁有獨(dú)立完成任意FPGA項(xiàng)目的能力。
就業(yè)班:10800
周末班:7999
網(wǎng)絡(luò)班(線上真人教學(xué)):5999
20000以下找對(duì)手,歡迎對(duì)比,了解更多請(qǐng)Q我821219077,竭誠(chéng)為您服務(wù)。
歡迎光臨 電子工程網(wǎng) (http://www.qingdxww.cn/) |
Powered by Discuz! X3.4 |
主站蜘蛛池模板:
欧美高清一区二区三
|
国产一区二
|
四虎免费永久在线播放
|
欧美成人免费网站
|
日韩精品中文字幕视频一区
|
亚洲一区二区三区免费
|
国产91在线免费观看
|
日本激情视频网站
|
在线观看国内自拍
|
欧美亚洲国产精品久久蜜芽
|
中国女人特级毛片
|
亚洲精品蜜桃久久久久久
|
久久精品影院永久网址
|
www.日本精品
|
最新一本大道香蕉综合
|
日韩精品网
|
全免费毛片在线播放
|
国产精品成人免费福利
|
91免费版网站
|
麻豆一区
|
深夜福利国产精品亚洲尤物
|
免费看va
|
欧美三级免费网站
|
国产精品欧美一区二区在线看
|
精品三级在线观看
|
国产精品永久在线
|
免费人成黄页网站在线观看
|
羞羞视频在线免费观看
|
窝窝人体色|
免费观看四虎精品成人
|
色www永久免费网站国产
|
午夜丁香婷婷
|
青青青视频在线
|
欧美另类在线观看
|
日本一二三不卡视频
|
天美麻豆国产传媒免费视频
|
91香蕉国产亚洲一区二区三区
|
正在播放国产精品
|
亚洲福利一区二区三区
|
成人看片黄a在线看
|
ww欧洲ww在线视频免费观看
|