• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于FPGA的PCI總線串口卡設(shè)計(jì)

      2010-03-15 01:08:08高曉青楊瑞峰
      電子技術(shù)應(yīng)用 2010年8期
      關(guān)鍵詞:狀態(tài)機(jī)驅(qū)動(dòng)程序寄存器

      高曉青,楊瑞峰

      (中北大學(xué) 信息與通信工程學(xué)院,山西 太原030051)

      隨著計(jì)算機(jī)測試技術(shù)的飛速發(fā)展,越來越多的外部設(shè)備通過串口與計(jì)算機(jī)進(jìn)行通信,實(shí)現(xiàn)信息共享以及設(shè)備的集中控制和管理。利用串口進(jìn)行通信具有結(jié)構(gòu)簡單、傳輸距離遠(yuǎn)、成本低廉等優(yōu)點(diǎn),被廣泛應(yīng)用于各個(gè)領(lǐng)域[1]。 同時(shí) ,PCI(Peripheral Component Interconnect)總線是一種高性能32/64位局部總線,最大數(shù)據(jù)傳輸速率為132 Mb/s,可同時(shí)支持多組外設(shè),數(shù)據(jù)吞吐量大,是目前應(yīng)用最廣泛、最流行的一種高速同步總線[2]。因此,利用PCI總線實(shí)現(xiàn)上位機(jī)與外部設(shè)備的串口通信,可以提高通信能力。

      由于大部分I/O設(shè)備沒有PCI總線功能,要實(shí)現(xiàn)設(shè)備與PCI總線的連接,需要PCI接口芯片、通用異步收發(fā)器UART(Universal Asynchronous Receiver Transmitter)等。而目前開發(fā)PCI總線與外部設(shè)備的串口通信大體上有兩種方式:(1)使用專用的芯片,如:PCI專用接口芯片S5920、S5933 等;UART 專用芯片 8250、8251、16450、16550等。使用廠家提供的專用接口芯片,用戶可能只使用到它的部分功能,會(huì)造成一定的資源浪費(fèi),而且專用芯片價(jià)格高。(2)使用可編程器件FPGA。使用FPGA較使用專用芯片具有以下優(yōu)點(diǎn):一方面用戶可以根據(jù)需要進(jìn)行設(shè)計(jì),不會(huì)浪費(fèi)資源;另一方面可以將PCI接口、UART都做在一片F(xiàn)PGA內(nèi),這樣就不需要外接專門的芯片,簡化了電路、縮小了體積、提高了系統(tǒng)的可靠性。

      1 系統(tǒng)硬件設(shè)計(jì)

      本設(shè)計(jì)中選用 Altera公司的 FPGA芯片EP1C6SQ240作為核心器件,完成PCI接口以及UART的設(shè)計(jì),實(shí)現(xiàn)PCI總線與串口的連接。選用美信公司的MAX490芯片作為電平轉(zhuǎn)換電路。系統(tǒng)的硬件連接框圖如圖1所示。

      數(shù)據(jù)傳輸過程:上位機(jī)通過PCI總線發(fā)送并行數(shù)據(jù)到UART的數(shù)據(jù)緩存器中,然后數(shù)據(jù)經(jīng)UART的數(shù)據(jù)緩存器進(jìn)入U(xiǎn)ART的移位寄存器進(jìn)行并串轉(zhuǎn)換后,通過串口傳到下位機(jī)。反之,下位機(jī)通過串口將數(shù)據(jù)傳送到UART的移位寄存器中,進(jìn)行串并轉(zhuǎn)換,然后進(jìn)入U(xiǎn)ART的數(shù)據(jù)緩存器中,最后傳到上位機(jī)。

      設(shè)計(jì)中采用,傳輸距離長、抗干擾能力強(qiáng)的RS422串口。但是規(guī)定RS422:邏輯1的電平為-6 V~-2 V;邏輯 0的電平為+2 V~+6 V。而 FPGA的 I/O電平一般為 0~3.3 V,二者之間的電平不兼容。為了使二者之間的供電電壓保持一致,必須加入電平轉(zhuǎn)換電路。為此選用美信公司的MAX490芯片來實(shí)現(xiàn)二者之間的電平轉(zhuǎn)換,其電路原理圖如圖2所示。

      圖1 系統(tǒng)硬件連接框圖

      圖2 RS422串口電路原理圖

      1.1 PCI總線接口

      PCI總線接口的功能是將一個(gè)不支持 PCI協(xié)議的后端設(shè)備接口到PCI總線上。為了實(shí)現(xiàn)PCI總線接口的基本功能,必須完成如下模塊的設(shè)計(jì):PCI空間配置模塊、偶校驗(yàn)?zāi)K、地址譯碼和命令譯碼模塊、設(shè)備狀態(tài)機(jī)模塊等。PCI總線接口原理框圖如圖3所示。

      圖3 PCI總線接口原理框圖

      1.1.1 PCI空間配置模塊

      PCI協(xié)議支持3種地址空間:I/O空間、內(nèi)存空間和配置空間。配置空間是PCI所特有的一種空間,其大小為 256 B,前 64 B是必需的,記錄了PCI串口設(shè)備的基本信息。PCI設(shè)備的一些主要的信息如下:

      (1)VendorID、DeviceID:分別表示設(shè)備的生產(chǎn)廠商和設(shè)備編號。

      (2)Command:命令寄存器,包含設(shè)備控制位,包括允許存儲(chǔ)器讀寫響應(yīng)等。

      (3)Status:狀態(tài)寄存器,記錄PCI總線的相關(guān)事件信息。

      (4)Base Adress Register: 基 地址寄存器,指示此PCI設(shè)備按I/O方式還是按內(nèi)存方式進(jìn)行讀寫以及需要的地址空間大小。

      (5)Interrupt Line、Interrupt Pin:為設(shè)備使用的中斷號和中斷引腳。

      1.1.2 偶校驗(yàn)?zāi)K

      PCI總線的偶校驗(yàn)用于檢驗(yàn)數(shù)據(jù)傳輸是否正確。在PCI總線上,利用偶校驗(yàn)?zāi)K檢查每次傳輸中主設(shè)備是否正確地尋址到目標(biāo)設(shè)備,以及它們之間的數(shù)據(jù)是否正確地傳輸。

      1.1.3 地址譯碼和命令譯碼模塊

      地址譯碼模塊主要用于檢測地址與此PCI串口設(shè)備的基地址是否匹配,如果匹配,則PCI串口設(shè)備響應(yīng)當(dāng)前的總線操作。

      命令譯碼模塊表示PCI串口設(shè)備響應(yīng)不同的總線命令,通過檢測 PCI-cbe[3:0]信號線上的值,完成命令譯碼。

      1.1.4 設(shè)備狀態(tài)機(jī)模塊

      PCI總線接口電路是時(shí)序復(fù)雜的接口電路,它的復(fù)雜性由PCI總線操作的多樣性決定。根據(jù)PCI的總線操作類型和總線操作時(shí)序關(guān)系,在這里抽象出一種簡潔明了,符合總線時(shí)序、更易于硬件描述語言實(shí)現(xiàn)的狀態(tài)機(jī)??偩€接口狀態(tài)機(jī)示意圖如圖4所示。狀態(tài)機(jī)的設(shè)計(jì)是整個(gè)設(shè)計(jì)的核心部分,利用該狀態(tài)機(jī)可以完成配置寄存器、存儲(chǔ)器、I/O的讀寫操作。

      狀態(tài)機(jī)包括 4個(gè)狀態(tài):空閑(idle)狀態(tài)、配置讀寫(con)狀態(tài)、存儲(chǔ)器或I/O讀寫 (rw)狀態(tài)、傳輸中止(backoff)狀態(tài)。系統(tǒng)復(fù)位后,狀態(tài)機(jī)轉(zhuǎn)入空閑狀態(tài),在空閑狀態(tài)中采樣總線,并根據(jù)總線的變化來決定狀態(tài)機(jī)即將轉(zhuǎn)入的狀態(tài)。如果此時(shí)命令總線上是配置寄存器讀寫命令,判斷PCI-irdy信號是否有效來決定下一可能的狀態(tài)。如果信號無效,則狀態(tài)機(jī)轉(zhuǎn)入傳輸中止?fàn)顟B(tài),然后返回空閑狀態(tài);如果信號有效,則狀態(tài)機(jī)轉(zhuǎn)入配置讀寫狀態(tài)。如果此時(shí)命令總線上是存儲(chǔ)器或者I/O的讀寫命令,則判斷PCI-frame信號是否有效來決定下一可能的狀態(tài)。如果信號無效,狀態(tài)機(jī)轉(zhuǎn)入傳輸中止?fàn)顟B(tài),然后返回空閑狀態(tài);如果信號有效,狀態(tài)機(jī)轉(zhuǎn)入存儲(chǔ)器或I/O讀寫狀態(tài)。

      圖4 總線接口狀態(tài)機(jī)示意圖

      1.2 UART模塊

      PCI總線傳輸?shù)氖遣⑿袛?shù)據(jù),而串口傳輸?shù)氖谴袛?shù)據(jù),要想實(shí)現(xiàn)PCI總線與串口的數(shù)據(jù)傳輸,必須通過UART完成數(shù)據(jù)的串并/并串轉(zhuǎn)換。本文設(shè)計(jì)的基于FPGA的UART由4個(gè)模塊組成:波特率發(fā)生器模塊、寄存器控制模塊、接收模塊以及發(fā)送模塊。UART的總體框圖如圖5所示。

      圖5 UART的總體框圖

      1.2.1 波特率發(fā)生器模塊

      波特率發(fā)生器實(shí)際上就是一個(gè)分頻器,用來產(chǎn)生和串行通信所采用的波特率同步的時(shí)鐘,這樣才能按照串行通信的時(shí)序要求進(jìn)行數(shù)據(jù)接收或發(fā)送 。本設(shè)計(jì)中UART收發(fā)的每一個(gè)數(shù)據(jù)寬度都是波特率發(fā)生器輸出時(shí)鐘周期的16倍,即假定當(dāng)前按照9 600 b/s進(jìn)行收發(fā),那么波特率發(fā)生器輸出的時(shí)鐘頻率應(yīng)為9 600×16 Hz。

      1.2.2 寄存器控制模塊

      設(shè)計(jì)的UART包括:2個(gè)數(shù)據(jù)緩沖寄存器 (接收、發(fā)送緩沖寄存器);2個(gè)狀態(tài)寄存器(中斷識(shí)別、線路狀態(tài)寄存器);2個(gè)控制寄存器(中斷使能、線路控制寄存器);2個(gè)移位寄存器(接收、發(fā)送移位寄存器)。寄存器控制模塊完成除了移位寄存器外的所有寄存器的讀寫控制。

      1.2.3 接收模塊

      接收模塊包括接收緩沖寄存器和接收移位寄存器。在接收數(shù)據(jù)開始時(shí),為了能夠準(zhǔn)確地傳輸數(shù)據(jù),先要清空接收緩沖寄存器和接收移位寄存器,然后接收移位寄存器等待檢測數(shù)據(jù)的起始位。檢測到有效的起始位后開始接收數(shù)據(jù),同時(shí)啟動(dòng)接收數(shù)據(jù)計(jì)數(shù)器,統(tǒng)計(jì)接收數(shù)據(jù)的位數(shù),直到接收到滿足需求的數(shù)據(jù)位。如果需要奇偶校驗(yàn),則產(chǎn)生校驗(yàn)位。最后接收停止位,完成1幀數(shù)據(jù)(起始位+數(shù)據(jù)位+奇偶校驗(yàn)位+停止位)的接收,將數(shù)據(jù)存入接收緩沖寄存器,進(jìn)行下一幀數(shù)據(jù)的接收,并通知上位機(jī)讀取數(shù)據(jù)。

      接收模塊通過狀態(tài)機(jī)來完成數(shù)據(jù)接收,其狀態(tài)機(jī)包含 4個(gè)狀態(tài):空閑狀態(tài)(idle)、移位狀態(tài)(shift)、奇偶校驗(yàn)狀態(tài)(parity)和停止位狀態(tài)(stop),如圖6所示。其工作過程如下:當(dāng)系統(tǒng)復(fù)位時(shí),狀態(tài)機(jī)進(jìn)入空閑狀態(tài),等待接收開始位;當(dāng)開始位被確定有效后,狀態(tài)機(jī)進(jìn)入移位狀態(tài)。在移位狀態(tài)中,接收模塊為每個(gè)數(shù)據(jù)位的移入等待16個(gè)內(nèi)部時(shí)鐘周期,接收完特定的數(shù)據(jù)位后,若奇偶校驗(yàn)使能有效,則跳轉(zhuǎn)到奇偶校驗(yàn)狀態(tài);否則,進(jìn)入停止位狀態(tài),而后進(jìn)入空閑狀態(tài),重復(fù)上述過程。

      1.2.4 發(fā)送模塊

      發(fā)送模塊包括發(fā)送緩存寄存器和發(fā)送移位寄存器。在發(fā)送數(shù)據(jù)開始時(shí),清空發(fā)送緩存寄存器和發(fā)送移位寄存器后,發(fā)送緩存寄存器接收發(fā)送來的數(shù)據(jù),然后從發(fā)送緩存寄存器向發(fā)送移位寄存器發(fā)送數(shù)據(jù)。首先發(fā)送起始位到發(fā)送移位寄存器,同時(shí)啟動(dòng)發(fā)送數(shù)據(jù)計(jì)數(shù)器,記錄發(fā)送數(shù)據(jù)的個(gè)數(shù),直到發(fā)送移位寄存器接收到滿足需求的數(shù)據(jù)。若奇偶校驗(yàn)使能有效,則跳轉(zhuǎn)到奇偶校驗(yàn)狀態(tài);否則,進(jìn)入停止位狀態(tài),完成1幀數(shù)據(jù)的發(fā)送。只要發(fā)送緩存寄存器不為空,則繼續(xù)傳輸下一幀數(shù)據(jù)。其狀態(tài)機(jī)的實(shí)現(xiàn)與接收模塊的類似。

      2 系統(tǒng)軟件設(shè)計(jì)

      2.1 驅(qū)動(dòng)程序

      WinDriver是一套PCI驅(qū)動(dòng)程序開發(fā)包。它改變了傳統(tǒng)驅(qū)動(dòng)程序開發(fā)的方法與思路,極大地簡化了驅(qū)動(dòng)程序的編制。同時(shí),WinDriver又沒有犧牲驅(qū)動(dòng)程序的性能,是一套高效、快捷的PCI驅(qū)動(dòng)程序開發(fā)軟件包[4]。Win-Driver可在 VC/C++、Delphi、BC++、VB 等多種開發(fā)環(huán)境中使用,本設(shè)計(jì)選用VC++作為驅(qū)動(dòng)程序的開發(fā)環(huán)境,通過WinDriver生成VC++代碼,根據(jù)設(shè)計(jì)的需要修改生成的代碼以完成此PCI設(shè)備的驅(qū)動(dòng)。驅(qū)動(dòng)程序流程圖如圖7所示。

      圖7 驅(qū)動(dòng)程序流程圖

      2.2 應(yīng)用程序

      應(yīng)用程序負(fù)責(zé)調(diào)用、連接驅(qū)動(dòng)程序,實(shí)現(xiàn)與驅(qū)動(dòng)程序的通信。連接到驅(qū)動(dòng)程序后,向驅(qū)動(dòng)程序注冊,同時(shí)啟動(dòng)串口監(jiān)測工作線程,等待事件發(fā)生。當(dāng)驅(qū)動(dòng)程序接收到中斷后,通過發(fā)送消息通知應(yīng)用程序,處理發(fā)生的事件。處理后退出應(yīng)用程序,結(jié)束等待事件線程。應(yīng)用程序流程圖如圖8所示。

      圖8 應(yīng)用程序流程圖

      本文介紹了一種基于FPGA的PCI總線串口卡設(shè)計(jì)方法,簡單說明了其硬件的設(shè)計(jì)和驅(qū)動(dòng)程序、應(yīng)用程序的編寫方法。該設(shè)計(jì)符合通用的PCI規(guī)范,支持即插即用功能,傳輸速率高,抗干擾能力強(qiáng)??梢詮V泛應(yīng)用于各類測試設(shè)備、工廠自動(dòng)化等,具有很高的實(shí)用價(jià)值。

      [1]徐志春.基于PCI總線的多串口通信適配卡設(shè)計(jì)[J].微計(jì)算機(jī)信息,2007,23:294-296.

      [2]王友波,劉明業(yè).PCI總線接口控制器的FPGA設(shè)計(jì)[J].北京理工大學(xué)學(xué)報(bào),2004,24(5):423-426.

      [3]楊大柱.基于FPGA的UART電路設(shè)計(jì)與仿真[J].微計(jì)算機(jī)信息,2007,23(5-2):212-213.

      [4]劉映杰,張?jiān)诜?劉瑋,等.用 WinDriver開發(fā) PCI設(shè)備驅(qū)動(dòng)程序[J].信息技術(shù),2004,28(2):78-80.

      猜你喜歡
      狀態(tài)機(jī)驅(qū)動(dòng)程序寄存器
      Lite寄存器模型的設(shè)計(jì)與實(shí)現(xiàn)
      基于有限狀態(tài)機(jī)的交會(huì)對接飛行任務(wù)規(guī)劃方法
      分簇結(jié)構(gòu)向量寄存器分配策略研究*
      高速數(shù)模轉(zhuǎn)換器AD9779/AD9788的應(yīng)用
      FPGA設(shè)計(jì)中狀態(tài)機(jī)安全性研究
      基于反熔絲FPGA的有限狀態(tài)機(jī)加固設(shè)計(jì)
      一種可重構(gòu)線性反饋移位寄存器設(shè)計(jì)
      基于VHDL的一個(gè)簡單Mealy狀態(tài)機(jī)
      驅(qū)動(dòng)程序更新與推薦
      驅(qū)動(dòng)程序更新與推薦
      靖江市| 阳泉市| 昭觉县| 温宿县| 望江县| 高雄市| 米易县| 肃北| 潼南县| 益阳市| 余庆县| 浮山县| 饶阳县| 越西县| 石门县| 威远县| 探索| 江口县| 普定县| 安顺市| 拉萨市| 浮梁县| 新疆| 寿宁县| 梁山县| 连城县| 钦州市| 建水县| 南通市| 吴江市| 平泉县| 富蕴县| 静宁县| 舞阳县| 广州市| 昌宁县| 江西省| 班玛县| 谢通门县| 克拉玛依市| 四川省|