<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • 查看: 12818|回復: 2
    打印 上一主題 下一主題

    如何使用寄存器級讀&寫控制基于PXI平臺的FPGA?

    [復制鏈接]
    跳轉到指定樓層
    樓主
    發表于 2017-9-27 20:48:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
    關鍵詞: FPGA , Quartus , PCI , PXI
    閱讀帶圖完整版: 使用寄存器級讀&寫控制基于PXI平臺的FPGA-無廣告.pdf (1018.45 KB)



    目錄
    簡介
    設計實例概覽
       地址譯碼(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的操作如何對寄存器進行讀和寫。
                                  
    圖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引腳讀。≧E[x])功能。
    圖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控制信號訪問輸出寄存器兩個階段的數據和三態控制寄存器從而進行讀操作。
    圖3:引腳控制邏輯單元(圖4中的Port_Control)
    通過RE_SamplePortIO控制信號可實現四組I/O引腳(128路通道)的所有通道同時被采樣,采樣數據被儲存在鎖存寄存器中以用于后續的數據檢索。分別通過RE_PortIO 控制信號實現數據檢索。因為每組I/O引腳的三態控制信號可以被讀,所以可以推斷出GX3500或UUT是否處于采樣輸入狀態(讀狀態)。
    寄存器映象(RegisterMapping)
    下面是控制四組I/O引腳(A組、B組、C組、D組)的讀和寫寄存器偏移地址:
      
    寫功能:
      
      
    偏移量
      
      
    (HEX)
      
      
    功能
      
      
    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組)
      
      
    讀功能:
      
      
    偏移量
      
      
    (HEX)
      
      
    功能
      
      
    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組)同步采樣到輸入鎖存器
      

    圖4:I/O引腳(A~D組)的讀和寫控制
    GX3500靜態I/O設計文件和SVF文件下載:  here.
    軟件控制
    為了控制本文中的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驅動)
    dwDataWord[4] ! Contains output state for 32-bit ports A- D
    dwTristateWord[4] ! Contains tristate control for 32-bit ports A-D
    dwInputWord[4] ! Contains data read from four latches A-D
    iong ! 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例程中層疊順序結構的幀0
    圖7: LabView例程中層疊順序結構的幀1
    圖8: LabView例程中層疊順序結構的幀2
    圖9: LabView例程中層疊順序結構的幀3
    圖10: LabView例程中層疊順序結構的幀4
    關鍵字:GX3500,FPGA,Altera,Quartus,FPGA Design tools,Static I/O,PCI,PXI
    若需要關于編程軟件、例程調試運行、文件下載等更多幫助,請聯系我。

    沙發
     樓主| 發表于 2017-9-27 20:49:44 | 只看該作者
    板凳
    發表于 2017-10-27 16:12:57 | 只看該作者
    你是否有以下情況:
    1.花了大量時間自學,學了一大堆,卻不知道有沒有用?!
    2.一點小問題就卡住學習進程,浪費了寶貴的學習時間?!
    2.能看懂別人的代碼,到自己設計時卻不知道先從哪里下手?!
    3.找不到工作,面試難?!看別人有10K+薪水,而自己只有幾K?!
    不要猶豫了,趕緊來報班培訓吧,自學沒個幾年根本達不到就業水平,時間就是金錢,早掌握早賺錢。
    明德揚專業FPGA培訓,帶你擺脫上面的三種情況,一對一輔導教學,您完全掌握了老師才開始下一個知識點的教學,不用擔心大班教學跟不上其他學員進度,明德揚承諾能真正讓你擁有獨立完成任意FPGA項目的能力。
    就業班:10800
    周末班:7999
    網絡班(線上真人教學):5999
    20000以下找對手,歡迎對比,了解更多請Q我821219077,竭誠為您服務。

    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規則

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷