《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于FPGA的PCI總線串口卡設計
基于FPGA的PCI總線串口卡設計
來源:電子技術應用2010年第8期
高曉青, 楊瑞峰
中北大學 信息與通信工程學院, 山西 太原030051
摘要: 為了方便外部設備與計算機進行串口通信,提出一種基于FPGA的PCI總線串口卡設計。利用Altera公司的FPGA芯片EP1C6SQ240實現了串口和PCI總線的連接。介紹了用FPGA實現PCI接口、UART的方法,將PCI接口、UART的核心功能集中在FPGA上,使整個設計緊湊、小巧。該設計符合PCI 2.2規范,傳輸速率高,可廣泛應用于各類測試設備、工廠自動化、有線通信等領域。
中圖分類號: TP336
文獻標識碼: A
文章編號: 0258-7998(2010)08-0134-04
Design of PCI bus serial port card based on FPGA
GAO Xiao Qing, YANG Rui Feng
School of Information and Communication Engineering, North University of China, Taiyuan 030051, China
Abstract: In order to facilitate the serial communication of external devices and computers, a design of serial port card of PCI bus based on FPGA is presented in the paper. The serial port and PCI bus are connected by the FPGA chip EP1C6SQ240 of Altera Corporation. The introduced a method of design the PCI interface, UART in the same FPGA. FPGA is used to embed the core function of PCI interface and UART into it,so that the whole design is compact. The design is up to PCI Rev.2.2. And the serial port’s transmission rate is very high. Therefore, it can widely be applied in such fields as test equipments, shop automation,wire-line communication, etc.
Key words : PCI bus;FPGA;serial ports;UART;WinDriver

    隨著計算機測試技術的飛速發展,越來越多的外部設備通過串口與計算機進行通信,實現信息共享以及設備的集中控制和管理。利用串口進行通信具有結構簡單、傳輸距離遠、成本低廉等優點,被廣泛應用于各個領域[1]。同時,PCI(Peripheral Component Interconnect)總線是一種高性能32/64位局部總線,最大數據傳輸速率為132 Mb/s,可同時支持多組外設,數據吞吐量大,是目前應用最廣泛、最流行的一種高速同步總線[2]。因此,利用PCI總線實現上位機與外部設備的串口通信,可以提高通信能力。
 由于大部分I/O 設備沒有PCI總線功能,要實現設備與PCI總線的連接,需要PCI接口芯片、通用異步收發器UART(Universal Asynchronous Receiver Transmitter)等。而目前開發PCI總線與外部設備的串口通信大體上有兩種方式:(1)使用專用的芯片,如:PCI專用接口芯片S5920、S5933等;UART專用芯片8250、8251、16450、16550等。使用廠家提供的專用接口芯片,用戶可能只使用到它的部分功能,會造成一定的資源浪費,而且專用芯片價格高。(2)使用可編程器件FPGA。使用FPGA較使用專用芯片具有以下優點:一方面用戶可以根據需要進行設計,不會浪費資源;另一方面可以將PCI接口、UART都做在一片FPGA內,這樣就不需要外接專門的芯片,簡化了電路、縮小了體積、提高了系統的可靠性。
1系統硬件設計
 本設計中選用Altera公司的FPGA芯片EP1C6SQ240作為核心器件,完成PCI接口以及UART的設計,實現PCI總線與串口的連接。選用美信公司的MAX490芯片作為電平轉換電路。系統的硬件連接框圖如圖1所示。

 數據傳輸過程:上位機通過PCI總線發送并行數據到UART的數據緩存器中,然后數據經UART的數據緩存器進入UART的移位寄存器進行并串轉換后,通過串口傳到下位機。反之,下位機通過串口將數據傳送到UART的移位寄存器中,進行串并轉換,然后進入UART的數據緩存器中,最后傳到上位機。
 設計中采用,傳輸距離長、抗干擾能力強的RS422串口。但是規定RS422:邏輯1的電平為-6 V~-2 V;邏輯0的電平為+2 V~+6 V。而FPGA的I/O電平一般為0~3.3 V,二者之間的電平不兼容。為了使二者之間的供電電壓保持一致,必須加入電平轉換電路。為此選用美信公司的MAX490芯片來實現二者之間的電平轉換,其電路原理圖如圖2所示。

1.1  PCI總線接口
 PCI總線接口的功能是將一個不支持 PCI 協議的后端設備接口到PCI 總線上。為了實現PCI總線接口的基本功能,必須完成如下模塊的設計:PCI空間配置模塊、偶校驗模塊、地址譯碼和命令譯碼模塊、設備狀態機模塊等。PCI總線接口原理框圖如圖3所示。

1.1.1 PCI空間配置模塊
 PCI協議支持3種地址空間:I/O空間、內存空間和配置空間。配置空間是PCI所特有的一種空間,其大小為256 B,前64 B是必需的,記錄了PCI串口設備的基本信息。PCI設備的一些主要的信息如下:
 (1) VendorID、DeviceID:分別表示設備的生產廠商和設備編號。
 (2) Command:命令寄存器,包含設備控制位,包括允許存儲器讀寫響應等。
 (3) Status:狀態寄存器,記錄PCI總線的相關事件信息。
 (4) Base Adress Register:基地址寄存器,指示此PCI設備按I/O方式還是按內存方式進行讀寫以及需要的地址空間大小。
 (5) Interrupt Line、Interrupt Pin:為設備使用的中斷號和中斷引腳。
1.1.2 偶校驗模塊
 PCI總線的偶校驗用于檢驗數據傳輸是否正確。在PCI總線上,利用偶校驗模塊檢查每次傳輸中主設備是否正確地尋址到目標設備,以及它們之間的數據是否正確地傳輸。
1.1.3 地址譯碼和命令譯碼模塊
 地址譯碼模塊主要用于檢測地址與此PCI串口設備的基地址是否匹配,如果匹配,則PCI串口設備響應當前的總線操作。
 命令譯碼模塊表示PCI串口設備響應不同的總線命令,通過檢測PCI-cbe[3:0]信號線上的值,完成命令譯碼。
1.1.4 設備狀態機模塊
 PCI總線接口電路是時序復雜的接口電路,它的復雜性由PCI總線操作的多樣性決定。根據PCI的總線操作類型和總線操作時序關系,在這里抽象出一種簡潔明了,符合總線時序、更易于硬件描述語言實現的狀態機。總線接口狀態機示意圖如圖4所示。狀態機的設計是整個設計的核心部分,利用該狀態機可以完成配置寄存器、存儲器、I/O的讀寫操作。

 狀態機包括4個狀態:空閑(idle)狀態、配置讀寫(con)狀態、存儲器或I/O讀寫(rw)狀態、傳輸中止(backoff)狀態。系統復位后,狀態機轉入空閑狀態,在空閑狀態中采樣總線,并根據總線的變化來決定狀態機即將轉入的狀態。如果此時命令總線上是配置寄存器讀寫命令,判斷PCI-irdy信號是否有效來決定下一可能的狀態。如果信號無效,則狀態機轉入傳輸中止狀態,然后返回空閑狀態;如果信號有效,則狀態機轉入配置讀寫狀態。如果此時命令總線上是存儲器或者I/O的讀寫命令,則判斷PCI-frame信號是否有效來決定下一可能的狀態。如果信號無效,狀態機轉入傳輸中止狀態,然后返回空閑狀態;如果信號有效,狀態機轉入存儲器或I/O讀寫狀態。
1.2  UART模塊
 PCI總線傳輸的是并行數據,而串口傳輸的是串行數據,要想實現PCI總線與串口的數據傳輸,必須通過UART完成數據的串并/并串轉換。本文設計的基于FPGA的UART由4個模塊組成:波特率發生器模塊、寄存器控制模塊、接收模塊以及發送模塊。UART的總體框圖如圖5所示。

1.2.1 波特率發生器模塊
 波特率發生器實際上就是一個分頻器,用來產生和串行通信所采用的波特率同步的時鐘,這樣才能按照串行通信的時序要求進行數據接收或發送[3]。本設計中UART收發的每一個數據寬度都是波特率發生器輸出時鐘周期的16倍,即假定當前按照9 600 b/s進行收發,那么波特率發生器輸出的時鐘頻率應為9 600×16 Hz。
1.2.2 寄存器控制模塊
 設計的UART包括:2個數據緩沖寄存器(接收、發送緩沖寄存器);2個狀態寄存器(中斷識別、線路狀態寄存器);2個控制寄存器(中斷使能、線路控制寄存器);2個移位寄存器(接收、發送移位寄存器)。寄存器控制模塊完成除了移位寄存器外的所有寄存器的讀寫控制。
1.2.3 接收模塊
 接收模塊包括接收緩沖寄存器和接收移位寄存器。在接收數據開始時,為了能夠準確地傳輸數據,先要清空接收緩沖寄存器和接收移位寄存器,然后接收移位寄存器等待檢測數據的起始位。檢測到有效的起始位后開始接收數據,同時啟動接收數據計數器,統計接收數據的位數,直到接收到滿足需求的數據位。如果需要奇偶校驗,則產生校驗位。最后接收停止位,完成1幀數據(起始位+數據位+奇偶校驗位+停止位)的接收,將數據存入接收緩沖寄存器,進行下一幀數據的接收,并通知上位機讀取數據。
 接收模塊通過狀態機來完成數據接收,其狀態機包含4個狀態:空閑狀態(idle)、移位狀態(shift)、奇偶校驗狀態(parity)和停止位狀態(stop),如圖6所示。其工作過程如下:當系統復位時,狀態機進入空閑狀態,等待接收開始位;當開始位被確定有效后,狀態機進入移位狀態。在移位狀態中,接收模塊為每個數據位的移入等待16個內部時鐘周期,接收完特定的數據位后,若奇偶校驗使能有效,則跳轉到奇偶校驗狀態;否則,進入停止位狀態,而后進入空閑狀態,重復上述過程。


1.2.4 發送模塊
 發送模塊包括發送緩存寄存器和發送移位寄存器。在發送數據開始時,清空發送緩存寄存器和發送移位寄存器后,發送緩存寄存器接收發送來的數據,然后從發送緩存寄存器向發送移位寄存器發送數據。首先發送起始位到發送移位寄存器,同時啟動發送數據計數器,記錄發送數據的個數,直到發送移位寄存器接收到滿足需求的數據。若奇偶校驗使能有效,則跳轉到奇偶校驗狀態;否則,進入停止位狀態,完成1幀數據的發送。只要發送緩存寄存器不為空,則繼續傳輸下一幀數據。其狀態機的實現與接收模塊的類似。
2  系統軟件設計
2.1  驅動程序

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

2.2  應用程序
 應用程序負責調用、連接驅動程序,實現與驅動程序的通信。連接到驅動程序后,向驅動程序注冊,同時啟動串口監測工作線程,等待事件發生。當驅動程序接收到中斷后,通過發送消息通知應用程序,處理發生的事件。處理后退出應用程序,結束等待事件線程。應用程序流程圖如圖8所示。
 本文介紹了一種基于FPGA的PCI總線串口卡設計方法,簡單說明了其硬件的設計和驅動程序、應用程序的編寫方法。該設計符合通用的PCI規范,支持即插即用功能,傳輸速率高,抗干擾能力強。可以廣泛應用于各類測試設備、工廠自動化等,具有很高的實用價值。
參考文獻
[1]     徐志春.基于PCI總線的多串口通信適配卡設計[J].微計算機信息,2007,23:294-296.
[2]     王友波,劉明業.PCI總線接口控制器的FPGA設計[J].北京理工大學學報,2004,24(5): 423-426.
[3]     楊大柱.基于FPGA的UART電路設計與仿真[J]. 微計 算機信息, 2007,23(5-2):212-213.
[4]     劉映杰,張在峰,劉瑋,等.用WinDriver開發PCI設備驅動程序[J]. 信息技術,2004, 28 (2):78-80.

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 男人把女人靠到爽痛视频 | 国产精品国产三级国产an不卡 | 国产精品资源在线观看网站 | 日韩一级特黄毛片在线看 | 亚洲阿v天堂最新版2021 | 麻豆69堂免费视频 | 精品亚洲视频在线 | 九九综合视频 | 国产a一级 | 国产尤物视频在线 | 手机看片高清国产日韩片 | 日日拍夜夜嗷嗷叫视频 | 日本人与亚洲人hd | 五月婷婷丁香在线视频 | 新久草| 国产区精品福利在线观看精品 | 欧美一区二区三区免费播放 | 国产又色又爽又黄的视频在线观看 | 在线看www免费看 | 欧美成人免费xxx大片 | 亚洲高清毛片 | 亚洲首页国产精品丝袜 | 色综合a怡红院怡红院首页 色综合久久久久久888 | 在线波多野结衣 | 永久免费在线播放 | 亚洲欧美日韩国产精品26u | 欧美日韩综合视频 | 欧美91视频| 精品国产日韩亚洲一区在线 | 成年人免费在线播放 | 亚洲视频一 | 男人把女人靠到爽痛视频 | 亚洲一区天堂 | 清清草视频在线 | 99精品视频在线观看免费 | 国产精品日韩欧美在线 | 欧美成人a级在线视频 | 久久国产高清视频 | 91精品国产高清久久久久久 | 男女男在线观看视频网站 | 97国产品香蕉在线观看 |