亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于XC6SLX45T平臺的PCIe數(shù)據(jù)卡設計

        2017-11-24 11:53:07,,,
        關鍵詞:設備

        ,,,

        (南京南瑞集團公司,南京 211100)

        基于XC6SLX45T平臺的PCIe數(shù)據(jù)卡設計

        朱孟江,王元強,聶云杰,洪昊

        (南京南瑞集團公司,南京 211100)

        為提升數(shù)據(jù)傳輸速率、提高數(shù)據(jù)處理靈活性,提出一種基于FPGA的的PCIe數(shù)據(jù)卡設計方法。該方案選用Xilinx公司的XC6SLX45T平臺,采用IP核的方式設計了一款PCIe數(shù)據(jù)卡。該卡采用DMA傳輸模式,通過DMA讀寫提高傳輸速率,其數(shù)據(jù)傳輸速率可達到400 Mbps。

        FPGA;IP核;PCIe;DMA

        引 言

        PCI-Express(簡稱PCIe)總線的出現(xiàn),完全地改變了原本的PCI總線的并行技術,PCIe采用的是新型的串行點對點技術,改善了PCI總線傳輸速度以及系統(tǒng)帶寬方面的本質問題。PCIe總線的提出,彌補了PCI總線的不足之處,PCIe總線將發(fā)展成為取代PCI總線的新型數(shù)據(jù)總線[1]。

        目前電力行業(yè)業(yè)務復雜、數(shù)據(jù)繁多,根據(jù)電監(jiān)會5號令《電力二次系統(tǒng)安全防護規(guī)定》的要求,各發(fā)電企業(yè)、電網(wǎng)企業(yè)、供電企業(yè)內部基于計算機和網(wǎng)絡技術的業(yè)務系統(tǒng)在安全區(qū)I和安全區(qū)II之間以密文的方式進行通信。軟件密碼算法不僅消耗硬件CPU資源,且存在較大安全隱患,速度也受硬件資源的限制,這就需要設計一款高效、快速的硬件數(shù)據(jù)加密卡。目前市場上數(shù)據(jù)對稱加解密速度均在400 Mbps左右, SPI、UART等串行接口性能遠遠不夠,USB和以太網(wǎng)又不方便集成到服務器,因此選用Xilinx PCIe解決方案,同時FPGA在數(shù)據(jù)處理方面也具有很大的靈活性。

        本文將以Xilinx公司的Spartan-6為平臺,闡述PCIe IP Core的方案及其優(yōu)化策略,并著重描述其DMA和傳統(tǒng)終端模式,配合上位機測試程序進行相關數(shù)據(jù)測試。該方案具有方便、可集成性、速度快等優(yōu)點,已在電力調度系統(tǒng)中得到廣泛的應用。系統(tǒng)集成示意圖如圖1所示。

        圖1 系統(tǒng)集成示意圖

        1 PCIe原理

        1.1 PCIe簡介

        與PCI總線不同,PCIe總線使用端到端的連接方式,在一條PCIe鏈路的兩端只能各連接一個設備,這兩個設備互為數(shù)據(jù)發(fā)送端和數(shù)據(jù)接收端。PCIe總線除了總線鏈路外,還具有多個層次,發(fā)送端發(fā)送數(shù)據(jù)時將通過這些層次,而總線接收端接收數(shù)據(jù)時也使用這些層次。PCIe總線使用的層次結構與網(wǎng)絡協(xié)議棧較為類似,由事物層、數(shù)據(jù)鏈路層和物理層組成。PCIe發(fā)送端和接收端中都含有TX(發(fā)送邏輯)和RX(接收邏輯),其結構如圖2 所示。

        圖2 PCIe總線物理鏈路

        1.2 PCIe IP核

        用FPGA實現(xiàn)PCIe功能,簡單地說就是完成TLP包的處理,即事物層數(shù)據(jù)協(xié)議的處理。TLP由三部分組成:幀頭、數(shù)據(jù)、Digest段。

        TLP幀頭長為3或者4個DW,格式和內容隨事物類型變化。數(shù)據(jù)段為TLP 幀頭定義下的數(shù)據(jù)段,如果該TLP不攜帶數(shù)據(jù),則該段為空。Digest段(Optional)是基于幀頭、數(shù)據(jù)字段計算出來的CRC,又稱為ECRC,一般Digest段由IP 核填充,所以PCIe的處理在用戶層表現(xiàn)為處理TLP中幀頭和數(shù)據(jù)段。TLP包中各個字段含義不再一一解釋,可參照《PCI Express體系結構導讀》一書。TLP格式如圖3所示。

        圖3 TLP格式

        1.3 PCIe接口空間配置

        PCIe通信是靠發(fā)送TLP包完成的,讀寫包里都有地址信息。如果板卡向PC發(fā)送TLP包,例如MWr包,那很好理解,地址信息就是PC的物理地址;如果是MRd包,則PC收到后回復一個完成包,板卡從完成包分析出數(shù)據(jù)即得到MRd讀取地址的數(shù)據(jù)。那PC如何讀寫板卡的數(shù)據(jù)呢? PC啟動時BIOS探測所有的外設。對PCIe設備來說,BIOS檢測到板卡有多少個BAR(Base Address Register)空間,每個空間有多大,然后對應為這些BAR空間的分配地址。對PC設備來說,它能“看”到PCIe板卡的空間只有BAR空間,只能訪問這些BAR空間。板卡可以發(fā)送合法的PCIe TLP包,并得到PC端的響應,但是PC端訪問板卡被局限在BAR空間。本方案PCIe BAR空間僅設置為BAR0空間,配置如圖4所示。

        圖4 BAR0空間設置

        2 程序設計

        2.1 PCIe設備驅動

        PCIe設備驅動與PCI一樣,與普通設備驅動沒有太大差別,具備open、close、ioctl、read、write等接口函數(shù),實現(xiàn)方式大同小異。與普通字符設備驅動的區(qū)別主要在probe函數(shù)上,PCIe設備驅動比普通字符設備驅動多了一個probe探測函數(shù),該函數(shù)主要有如下功能:

        ◆ 驅動加載時,將PCIe的BAR0空間映射到主機并為DMA申請內存空間;

        ◆ 為PCIe設備申請中斷,并分配中斷號;

        ◆ 初始化驅動讀寫隊列。

        PCIe設備驅動代碼如下:

        static int __devinit fpga_probe(struct pci_dev *pdev, const struct pci_device_id *id){

        ……

        pci_enable_device(pdev);//enable PCIe

        pci_set_master(pdev); //設置成總線主DMA模式

        ……

        PhysicalBase0Addr=pci_resource_start(pdev,BAR_0);

        PhysicalBase0len=pci_resource_len(pdev,BAR_0); //將PCIe內存空間映射到主機

        fpga_priv.PCI_Base0_Addr=ioremap( PhysicalBase0Addr, PhysicalBase0len);

        fpga_priv.dma_buf = pci_alloc_consistent(pdev,PKT_LEN,&fpga_priv.dma_buf_t);

        if(fpga_priv.dma_buf==NULL)

        return ERROR;

        init_waitqueue_head(&fpga_priv.read_wait);//初始化讀隊列

        init_waitqueue_head(&fpga_priv.write_wait); //初始化寫隊列

        fpga_priv.irq = pdev->irq;//為PCIe設備申請中斷號

        request_irq(fpga_priv.irq, fpga_interrupt,IRQF_SHARED,"FPGA",& fpga_priv);

        ……

        }

        2.2 DMA驅動程序

        圖5 DMA操作流程

        DMA(Direct Memory Access,直接內存訪問)不需要處理器的干預,處理器只需將讀/寫數(shù)據(jù)首地址和數(shù)據(jù)長度告訴DMA控制器,啟動DMA讀/寫即可[2]。本設計在FPGA內部設置了DMA讀寫寄存器和DMA地址寄存器,其操作過程如圖5所示。

        DMA程序實現(xiàn)如下[3]:

        int DMA_operation (int len, int i){

        int val;

        PCIe_InitiatorReset();

        //對FPGA軟復位

        TLP_cnt = (len%TLP_SIZE) ? (len/TLP_SIZE+1) : len/TLP_SIZE;

        TLP_cnt += 1;

        //計算PCIe傳輸TLP包大小

        PCIe_WriteReg(DMA_LEN_REG, len);

        //設置DMA數(shù)據(jù)長度,地址為默認地址

        PCIe_WriteReg(RDMATLPC, TLP_cnt);

        //設置TLP傳輸包數(shù)

        PCIe_WriteReg(BUFCONTROL1, 0x101);

        //使能DMA讀/寫操作

        PCIe_WriteReg(DMACR, 0x10000);

        do {

        val = PCIe_ReadReg(BUFSTATE1);

        } while(val==0x0);

        //等待DMA完成

        PCIe_WriteReg(BUFCONTROL1, 0);

        //disable讀/寫操作

        return 0;

        }

        2.3 FPGA中斷狀態(tài)機設計

        PCIe可以發(fā)出兩種中斷,一種是虛擬INTx信號線的,另一種是MSI的。過去PCI板卡發(fā)送中斷通過拉低INTx(INTA#、INTB#、INTC#、INTD#)來申請中斷,PC檢測到INTx的中斷,就跳轉執(zhí)行INTx對應的中斷驅動程序。MSI是基于消息機制的,PC啟動后為PCIe板卡分配一個或多個消息地址,板卡發(fā)送中斷只需要向對應的地址內發(fā)送消息,消息內容中包含消息號,每個消息號對應在PC 端的某一地址。需要注意的是,Windows XP是不支持MSI的,到了WinNT和Win7才支持,因此本方案采取INTx傳統(tǒng)中斷方式。

        中斷程序采用狀態(tài)機控制,正常情況下處于等待狀態(tài),當用戶應用程序提交中斷申請時,將request信號傳遞給狀態(tài)機,觸發(fā)中斷;當PC收到PCIe中斷時,必須在中斷服務程序給FPGA一個確認信號,并在讀/寫完成之后清除該確認信號,以便FPGA可以進入下一次中斷請求。

        用戶中斷請求信號intr_req,當讀/寫完成時,提交中斷請求,如下:

        assign intr_req = ((rd_done=1'b1) || (wr_done==1'b1)) ? 1'b1 : 1'b0;

        intr_req信號傳遞到中斷程序狀態(tài)機,如下:

        always @(posedge clk ) begin

        case (crypt_intr_state)/*狀態(tài)機狀態(tài)*/

        `BMD_INTR_CRYPT_RST : begin

        if(intr_req )//用戶應用的中斷請求

        next_crypt_intr_state = `BMD_INTR_CRYPT_ACT0;

        end

        `BMD_INTR_CRYPT_ACT0 : begin

        ……

        end

        `BMD_INTR_CRYPT_ACT1 : begin

        if (cfg_interrupt_ack)//等待PC確認收到中斷請求

        next_crypt_intr_state = `BMD_INTR_CRYPT_ACT2;

        end

        `BMD_INTR_CRYPT_ACT2 : begin

        ……

        end

        `BMD_INTR_CRYPT_DUN : begin

        //等待PC清除確認標志,否則不能進入下一中斷

        if((!cfg_interrupt_ack)||(timeout_cnt == TIMEOUT))

        next_crypt_intr_state = `BMD_INTR_CRYPT_RST;

        end

        default:

        next_crypt_intr_state = `BMD_INTR_CRYPT_RST;

        endcase

        end

        整個狀態(tài)機操作如下:

        ① 在BMD_INTR_CRYPT_ACT0狀態(tài)下,用戶應用將cfg_interrupt_n和cfg_interrupt_assert_n置為有效,從而將中斷置為有效。

        ② 然后,核將cfg_interrupt_rdy_n置為有效,表示已接受中斷請求。在BMD_INTR_CRYPT_ACT1狀態(tài),用戶應用將cfg_interrupt_n置為無效;此時如果PCI命令寄存器中的中斷禁用位設置為 0,則核發(fā)出將中斷置為有效的消息。

        ③ 在BMD_INTR_CRYPT_ACT2狀態(tài),用戶應用一旦確定中斷請求已被接收,就會將cfg_interrupt_n置為有效,同時將 cfg_interrupt_assert_n置為無效,從而將中斷置為無效。必須通過 cfg_interrupt_di[7:0]來指示相應的中斷。

        ④ 核將cfg_interrupt_rdy_n置為有效,表示已接收中斷的無效置位。在BMD_INTR_CRYPT_DUN,用戶應用將cfg_interrupt_n置為無效,而核發(fā)出將中斷置為無效的消息。

        以一次數(shù)據(jù)寫為例,其信號時序仿真如圖6所示。

        圖6 傳統(tǒng)中斷時序圖

        通過對IP Core的中斷配置接口操作,PC就會接到相關中斷信息,使主機進入中斷服務程序進行處理。本設計采用狀態(tài)機的方式產(chǎn)生中斷信號,在FPGA內部設計中斷寄存器,正常情況下FPGA中斷處于等待狀態(tài),當FPGA處理完數(shù)據(jù)后將中斷寄存器置位,要求PC去讀數(shù)據(jù),此時狀態(tài)機處于中斷程序狀態(tài),當PC接收到中斷并進入到中斷服務程序時,清除該中斷寄存器,狀態(tài)機再次恢復到等待狀態(tài),可以進行下一次中斷。

        3 實驗測試

        實驗主機為DELL臺式機,CPU為奔騰D處理器,主頻2.80 GHz,內存2 GB,操作系統(tǒng)為Ubuntu9.10,內核版本2.6.31。

        測試方法1如下:

        將PCIe卡插到臺式機主板插槽,在Linux下加載PCIe卡驅動程序;系統(tǒng)產(chǎn)生2048字節(jié)隨機數(shù),向PCIe卡中寫入隨機數(shù),卡接收到隨機數(shù)并緩存到FPGA的雙口RAM中進行存儲;從PCIe卡的雙口RAM讀數(shù)據(jù),數(shù)據(jù)長度與寫入保持一致;將讀出數(shù)據(jù)與寫入數(shù)據(jù)進行比對,若一致,則讀寫正確,否則錯誤。

        數(shù)據(jù)正確性驗證測試如圖7所示。

        圖7 數(shù)據(jù)正確性驗證測試

        測試方法2如下:

        將PCIe卡插到臺式機主板插槽,在Linux下加載PCIe卡驅動程序;系統(tǒng)產(chǎn)生2 048字節(jié)隨機數(shù);系統(tǒng)計時,向PCIe卡中寫入隨機數(shù),卡接收到隨機數(shù)并緩存到FPGA的雙口RAM中進行存儲;從PCIe卡的雙口RAM讀數(shù)據(jù),數(shù)據(jù)長度與寫入保持一致;循環(huán)上兩步10萬次,待結束計算所用時間;根據(jù)時間與所寫數(shù)據(jù)量,計算PCIe卡讀寫速度。

        PCIe卡傳輸速度測試如圖8所示。由于傳輸速度測試采用雙向先寫后讀方式,因此實際單向讀或寫的速度應為實測速度的兩倍左右,遠大于400 Mbps。

        結 語

        [1] 李木國,黃影,劉于之.基于FPGA的PCIe總線接口的DMA傳輸設計[J].計算機測量與控制,2013,21(1):233-235.

        [2] 王曉慶,周曉波,趙強.PCIE高速數(shù)據(jù)采集系統(tǒng)的驅動及上位機軟件開發(fā)[J].計算機應用與軟件,2013(9):331-333.

        [3] 李晃,鞏峰,陳彥化.基于PCIE驅動程序的數(shù)據(jù)傳輸卡DMA傳輸[J].電子科技,2014,27(1):117-120.

        朱孟江、王元強、聶云杰、洪昊,主要研究方向為電力系統(tǒng)信息安全設計開發(fā)。

        DesignofPCIeDataCardBasedonXC6SLX45TPlatform

        ZhuMengjiang,WangYuanqiang,NieYunjie,HongHao

        (NARI Group Corporation,Nanjing 211100,China)

        To improve the transmission rate and the flexibility of data processing,a design method of PCIe data card based on FPGA is proposed in the paper.The scheme adopts the way of IP core on Xilinx XC6SLX45T platform.The card transmission mode uses the DMA mode,which can enhance the transmission speed,which is as high as 400 Mbps.

        FPGA;IP Core;PCIe;DMA

        TP336

        A

        2017-08-07)

        圖8 PCIe卡傳輸速度測試

        猜你喜歡
        設備
        諧響應分析在設備減振中的應用
        調試新設備
        當代工人(2020年13期)2020-09-27 23:04:20
        基于VB6.0+Access2010開發(fā)的設備管理信息系統(tǒng)
        基于MPU6050簡單控制設備
        電子制作(2018年11期)2018-08-04 03:26:08
        廣播發(fā)射設備中平衡輸入與不平衡輸入的轉換
        電子制作(2018年10期)2018-08-04 03:24:48
        食之無味,棄之可惜 那些槽點滿滿的可穿戴智能設備
        500kV輸變電設備運行維護探討
        HTC斥資千萬美元入股虛擬現(xiàn)實設備商WEVR
        IT時代周刊(2015年8期)2015-11-11 05:50:37
        Automechanika Shanghai 2014 之“看” 汽保設備篇
        如何在設備采購中節(jié)省成本
        国产内射一级一片高清内射视频 | 奶头又大又白喷奶水av| 人妻av中文字幕无码专区| 久久久久亚洲精品美女| 亚洲 欧美 唯美 国产 伦 综合| 中文字幕无码高清一区二区三区| 国产精品亚洲一区二区三区久久 | 欧美激情一区二区三区成人 | 日韩中文字幕一区二区高清 | 亚洲成a人片在线| 人妻丝袜中文字幕久久| 中文字字幕在线中文乱码解| 乱中年女人伦av一区二区| 精品无码国产污污污免费网站| 亚洲成AV人片无码不卡| 一区二区三区四区亚洲免费| 少女韩国电视剧在线观看完整| 欧美色aⅴ欧美综合色| 少妇av免费在线播放| 成人麻豆视频免费观看| 久久精品无码一区二区三区免费| 国产鲁鲁视频在线播放| 人妻风韵犹存av中文字幕 | 亚洲乱码国产乱码精品精| 久久天天躁夜夜躁狠狠躁2022| 69搡老女人老妇女老熟妇| 日本a级免费大片网站| 国产精品情侣呻吟对白视频| 亚洲一线二线三线写真| 亚洲av乱码专区国产乱码| 女优av性天堂网男人天堂| 亚洲av精品一区二区三区| 国产做a爱片久久毛片a片 | 99久久久精品免费| 91精品人妻一区二区三区水蜜桃| 免费黄色影片| 永久无码在线观看| h视频在线观看视频在线| 国产精品久久久亚洲| 国产精品久久久久久久久鸭| 亚洲视频一区二区久久久|