基于FPGA的PCI總線串口卡設計

1.1.1 PCI空間配置模塊
PCI協(xié)議支持3種地址空間:I/O空間、內(nèi)存空間和配置空間。配置空間是PCI所特有的一種空間,其大小為256 B,前64 B是必需的,記錄了PCI串口設備的基本信息。PCI設備的一些主要的信息如下:
(1) VendorID、DeviceID:分別表示設備的生產(chǎn)廠商和設備編號。
(2) Command:命令寄存器,包含設備控制位,包括允許存儲器讀寫響應等。
(3) Status:狀態(tài)寄存器,記錄PCI總線的相關事件信息。
(4) Base Adress Register:基地址寄存器,指示此PCI設備按I/O方式還是按內(nèi)存方式進行讀寫以及需要的地址空間大小。
(5) Interrupt Line、Interrupt Pin:為設備使用的中斷號和中斷引腳。
1.1.2 偶校驗模塊
PCI總線的偶校驗用于檢驗數(shù)據(jù)傳輸是否正確。在PCI總線上,利用偶校驗模塊檢查每次傳輸中主設備是否正確地尋址到目標設備,以及它們之間的數(shù)據(jù)是否正確地傳輸。
1.1.3 地址譯碼和命令譯碼模塊
地址譯碼模塊主要用于檢測地址與此PCI串口設備的基地址是否匹配,如果匹配,則PCI串口設備響應當前的總線操作。
命令譯碼模塊表示PCI串口設備響應不同的總線命令,通過檢測PCI-cbe[3:0]信號線上的值,完成命令譯碼。
1.1.4 設備狀態(tài)機模塊
PCI總線接口電路是時序復雜的接口電路,它的復雜性由PCI總線操作的多樣性決定。根據(jù)PCI的總線操作類型和總線操作時序關系,在這里抽象出一種簡潔明了,符合總線時序、更易于硬件描述語言實現(xiàn)的狀態(tài)機。總線接口狀態(tài)機示意圖如圖4所示。狀態(tài)機的設計是整個設計的核心部分,利用該狀態(tài)機可以完成配置寄存器、存儲器、I/O的讀寫操作。
狀態(tài)機包括4個狀態(tài):空閑(idle)狀態(tài)、配置讀寫(con)狀態(tài)、存儲器或I/O讀寫(rw)狀態(tài)、傳輸中止(backoff)狀態(tài)。系統(tǒng)復位后,狀態(tài)機轉(zhuǎn)入空閑狀態(tài),在空閑狀態(tài)中采樣總線,并根據(jù)總線的變化來決定狀態(tài)機即將轉(zhuǎn)入的狀態(tài)。如果此時命令總線上是配置寄存器讀寫命令,判斷PCI-irdy信號是否有效來決定下一可能的狀態(tài)。如果信號無效,則狀態(tài)機轉(zhuǎn)入傳輸中止狀態(tài),然后返回空閑狀態(tài);如果信號有效,則狀態(tài)機轉(zhuǎn)入配置讀寫狀態(tài)。如果此時命令總線上是存儲器或者I/O的讀寫命令,則判斷PCI-frame信號是否有效來決定下一可能的狀態(tài)。如果信號無效,狀態(tài)機轉(zhuǎn)入傳輸中止狀態(tài),然后返回空閑狀態(tài);如果信號有效,狀態(tài)機轉(zhuǎn)入存儲器或I/O讀寫狀態(tài)。
1.2 UART模塊
PCI總線傳輸?shù)氖遣⑿袛?shù)據(jù),而串口傳輸?shù)氖谴袛?shù)據(jù),要想實現(xiàn)PCI總線與串口的數(shù)據(jù)傳輸,必須通過UART完成數(shù)據(jù)的串并/并串轉(zhuǎn)換。本文設計的基于FPGA的UART由4個模塊組成:波特率發(fā)生器模塊、寄存器控制模塊、接收模塊以及發(fā)送模塊。UART的總體框圖如圖5所示。
1.2.1 波特率發(fā)生器模塊
波特率發(fā)生器實際上就是一個分頻器,用來產(chǎn)生和串行通信所采用的波特率同步的時鐘,這樣才能按照串行通信的時序要求進行數(shù)據(jù)接收或發(fā)送[3]。本設計中UART收發(fā)的每一個數(shù)據(jù)寬度都是波特率發(fā)生器輸出時鐘周期的16倍,即假定當前按照9 600 b/s進行收發(fā),那么波特率發(fā)生器輸出的時鐘頻率應為9 600×16 Hz。
1.2.2 寄存器控制模塊
設計的UART包括:2個數(shù)據(jù)緩沖寄存器(接收、發(fā)送緩沖寄存器);2個狀態(tài)寄存器(中斷識別、線路狀態(tài)寄存器);2個控制寄存器(中斷使能、線路控制寄存器);2個移位寄存器(接收、發(fā)送移位寄存器)。寄存器控制模塊完成除了移位寄存器外的所有寄存器的讀寫控制。
1.2.3 接收模塊
接收模塊包括接收緩沖寄存器和接收移位寄存器。在接收數(shù)據(jù)開始時,為了能夠準確地傳輸數(shù)據(jù),先要清空接收緩沖寄存器和接收移位寄存器,然后接收移位寄存器等待檢測數(shù)據(jù)的起始位。檢測到有效的起始位后開始接收數(shù)據(jù),同時啟動接收數(shù)據(jù)計數(shù)器,統(tǒng)計接收數(shù)據(jù)的位數(shù),直到接收到滿足需求的數(shù)據(jù)位。如果需要奇偶校驗,則產(chǎn)生校驗位。最后接收停止位,完成1幀數(shù)據(jù)(起始位+數(shù)據(jù)位+奇偶校驗位+停止位)的接收,將數(shù)據(jù)存入接收緩沖寄存器,進行下一幀數(shù)據(jù)的接收,并通知上位機讀取數(shù)據(jù)。
評論