基于FPGA的PCI總線(xiàn)串口卡設計
接收模塊通過(guò)狀態(tài)機來(lái)完成數據接收,其狀態(tài)機包含4個(gè)狀態(tài):空閑狀態(tài)(idle)、移位狀態(tài)(shift)、奇偶校驗狀態(tài)(parity)和停止位狀態(tài)(stop),如圖6所示。其工作過(guò)程如下:當系統復位時(shí),狀態(tài)機進(jìn)入空閑狀態(tài),等待接收開(kāi)始位;當開(kāi)始位被確定有效后,狀態(tài)機進(jìn)入移位狀態(tài)。在移位狀態(tài)中,接收模塊為每個(gè)數據位的移入等待16個(gè)內部時(shí)鐘周期,接收完特定的數據位后,若奇偶校驗使能有效,則跳轉到奇偶校驗狀態(tài);否則,進(jìn)入停止位狀態(tài),而后進(jìn)入空閑狀態(tài),重復上述過(guò)程。本文引用地址:http://dyxdggzs.com/article/191527.htm
1.2.4 發(fā)送模塊
發(fā)送模塊包括發(fā)送緩存寄存器和發(fā)送移位寄存器。在發(fā)送數據開(kāi)始時(shí),清空發(fā)送緩存寄存器和發(fā)送移位寄存器后,發(fā)送緩存寄存器接收發(fā)送來(lái)的數據,然后從發(fā)送緩存寄存器向發(fā)送移位寄存器發(fā)送數據。首先發(fā)送起始位到發(fā)送移位寄存器,同時(shí)啟動(dòng)發(fā)送數據計數器,記錄發(fā)送數據的個(gè)數,直到發(fā)送移位寄存器接收到滿(mǎn)足需求的數據。若奇偶校驗使能有效,則跳轉到奇偶校驗狀態(tài);否則,進(jìn)入停止位狀態(tài),完成1幀數據的發(fā)送。只要發(fā)送緩存寄存器不為空,則繼續傳輸下一幀數據。其狀態(tài)機的實(shí)現與接收模塊的類(lèi)似。
2 系統軟件設計
2.1 驅動(dòng)程序
WinDriver是一套PCI驅動(dòng)程序開(kāi)發(fā)包。它改變了傳統驅動(dòng)程序開(kāi)發(fā)的方法與思路,極大地簡(jiǎn)化了驅動(dòng)程序的編制。同時(shí),WinDriver又沒(méi)有犧牲驅動(dòng)程序的性能,是一套高效、快捷的PCI驅動(dòng)程序開(kāi)發(fā)軟件包[4]。WinDriver可在VC/C++、Delphi、BC++、VB等多種開(kāi)發(fā)環(huán)境中使用,本設計選用VC++作為驅動(dòng)程序的開(kāi)發(fā)環(huán)境,通過(guò)WinDriver生成VC++代碼,根據設計的需要修改生成的代碼以完成此PCI設備的驅動(dòng)。驅動(dòng)程序流程圖如圖7所示。
2.2 應用程序
應用程序負責調用、連接驅動(dòng)程序,實(shí)現與驅動(dòng)程序的通信。連接到驅動(dòng)程序后,向驅動(dòng)程序注冊,同時(shí)啟動(dòng)串口監測工作線(xiàn)程,等待事件發(fā)生。當驅動(dòng)程序接收到中斷后,通過(guò)發(fā)送消息通知應用程序,處理發(fā)生的事件。處理后退出應用程序,結束等待事件線(xiàn)程。應用程序流程圖如圖8所示。
本文介紹了一種基于FPGA的PCI總線(xiàn)串口卡設計方法,簡(jiǎn)單說(shuō)明了其硬件的設計和驅動(dòng)程序、應用程序的編寫(xiě)方法。該設計符合通用的PCI規范,支持即插即用功能,傳輸速率高,抗干擾能力強??梢詮V泛應用于各類(lèi)測試設備、工廠(chǎng)自動(dòng)化等,具有很高的實(shí)用價(jià)值。
參考文獻
[1] 徐志春.基于PCI總線(xiàn)的多串口通信適配卡設計[J].微計算機信息,2007,23:294-296.
[2] 王友波,劉明業(yè).PCI總線(xiàn)接口控制器的FPGA設計[J].北京理工大學(xué)學(xué)報,2004,24(5): 423-426.
[3] 楊大柱.基于FPGA的UART電路設計與仿真[J]. 微計 算機信息, 2007,23(5-2):212-213.
[4] 劉映杰,張在峰,劉瑋,等.用WinDriver開(kāi)發(fā)PCI設備驅動(dòng)程序[J]. 信息技術(shù),2004, 28 (2):78-80.
評論