国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

簡化PCI總線協議的實現以及FPGA驅動設計

發布時間:2010-8-16 11:49    發布者:lavida
關鍵詞: FPGA , PCI , 驅動 , 總線協議
目前,許多公司都提出了新型的計算機高速總線,如Arapahoe總線標準和HyperTransport技術,但各協議互不兼容,沒有形成統一標準。作為傳統的通用局部總線,PCI總線仍然占據著主流個人電腦市場,具有頑強的生命力。  

現在市面上存在著各種PCI接口芯片,如AMCC公司的S5933,PLX的9080系列等。專用芯片可以實現完整的PCI主設備與從設備模式的接口功能,將復雜的PCI總線接口轉化相對簡單的用戶接口,但系統結構受接口芯片的限制,不能靈活地設計目標系統,且成本較高。本文使用符合PCI電氣特性的FPGA芯片進行簡化的PCI接口邏輯設計,實現了33MHz、32位數據寬度的PCI從設備模塊的接口功能,節約了系統的邏輯資源,且可以將其它用戶邏輯集成在同一塊芯片,降低了成本,增加了設計的靈活性。另外,還給出了Windows9x系統下的設備驅動程序,可以與應用程序接口,形成一個完整的系統。目前,本系統已經被印染企業應用在數據采集和處理等方面。  

1 系統構成與功能描述  

系統的總體框圖如圖1所示。  


  
由圖1可見,系統的硬件平臺為一塊PCI卡。此卡的結構十分簡潔,主要由FPGA芯片、RAM芯片和輸出接口三部分組成。其中,FPGA芯片集成了PCI接口模塊和數據處理模塊。PCI接口模塊實現了33MHz工作時鐘、32位總線寬度的接口功能,支持I/O空間、內存空間及配置空間的讀寫和PCI中斷功能。由于簡化的PCI接口占用的邏輯資源較少,可在同一塊芯片中集成其他用戶邏輯。作為一個應用實例,本文加入了一個數據處理模塊,對PCI接口傳送來的數據進行處理,通過片外的輸出接口輸出到下位機。RAM芯片為數據處理提供緩存功能。  

2 從設備模式下的簡化PCI協議的實現  

為了實現PCI接口的基本功能,必須完成以下幾個模塊:  

(1)PCI配置空間設置。PCI協議支持三種地址空間:I/O空間、內存空間和配置空間。配置空間提供了支持PCI設備自動配置的機制,是必需的。  

(2)PCI從設備狀態機。PCI總線狀態機是具有PCI總線的計算機系統狀態流,是由一個已知狀態到另一個狀態的條件、時序的描述。這是PCI接口設計中最基本也是最重要的部分。  

(3)地址譯碼和命令譯碼。地址譯碼用來確定PCI設備是否應當響應當前總線的操作;命令譯碼則用來指示PCI設備根據不同的總線命令作出相應的動作。  

本文采用ALTERA公司的Max+PlusII軟件平臺,硬件描述語言使用ALTERA HDL語言,也可以方便地轉換民VHDLVerilogHDL語言。在此之前,先引入PCI總線信號的定義。  

2.1 總線信號定義  

根據PCI總線協議2.2版,從設備模式下PCI接口至少包含47根引腳。圖2給出了按功能劃分的引腳分布,左邊是必需引腳。右邊是可選引腳。為簡化起見,本文采用了如下引腳,其他引腳均不使能或置為高阻態。  


  
(1)由系統提供的33MHz的同步時鐘信號CLK和復位信號RST#(#表示低電平有效);  

(2)關于數據傳輸的核心信號:32位地址/數據復用線AD[31:0]、總線命令/字節使能復用線C/BE[3:0]#和偶校驗信號PAR;  

(3)接口控制信號FRAME#、TRDY#、IRDY#、STOP#、DEVSEL#和IDSEL。其中,FRAME#為數據傳輸起止信號,TRDY#為主設備準備好信號,IRDY#為從設備準備好信號,STOP#為從設備停止請求信號,DEVSEL#為設備選擇信號,IDSEL為配置空間讀寫時的片選信號;  

(4)中斷引腳INTA#。  

為簡化PCI協議,本文只實現了最重要的總線命令,表1給出了所支持的總線命令對應的C/BE[3:0]#編碼值。  

表1 支持的總線命令
C/BE[3:0]#命令類型說明
0010
  

0011  

0110  

0111  

1010  

1011  
I/O讀
  

I/O寫  

存儲器讀  

存儲器寫  

配置空間讀  

配置空間寫  

2.2 配置空間設置  

配置空間大小為256字節,前64字節必需,記錄了PCI設備的基本住處,比較重要的有:  

(1)VendorID、DeviceID和Class Code域:分別表示設備的生產廠商、設備編號和類型;  

(2)Command和Status域:分別給出了對PCI設備的控制命令和當前狀態;  

(3)Base Adress Register域:指示此PCI設備按I/O方式還是內存方式進行讀寫以及需要的地址空間大小;  

(4)Interrupt Line和Interrupt Pin域:分別指明了設備使用的斷號和中斷引腳。  

在對配置空間的訪問中,用AD[7:2]尋址一個雙字DWORD。在本設計中,配置空間設置如表2所示。  

2.3 簡化的從設備狀態機  

在PCI協議中,標準的從設備狀態機包含五種狀態,而且各狀態的跳轉條件比較復雜。本文在不違反PCI協議的前提下,簡化了從設備的狀態機,如圖3所示。  


  
圖3中,狀態轉移條件信號a、b、c定義如下:a代表配置空間訪問條件,b代表I/O空間或內存空間訪問條件,c代表總線傳輸開始條件。這三個條件的實現由后面的命令譯碼模塊給出。  

表2 配置空間設置(均為十六進制)
字段值或含義字段值或含義
VendorID1172Class Code040000,即視頻卡
DeviceID8901Base Adress Register映射到I/O空間
Command0082Interrupt Line中斷號A
Status0400Interrupt Pin使用INTA中斷引腳
  
IDLE是系統的缺省狀態,表示總線當前空閑。通常,設備處在IDLE狀態時,要檢測來自PCI總線和后級設備的信號,便設備作出合適的響應。設備處于S_DATA狀態時完成第一次數據傳輸,直接無條件跳到BACKOFF狀態。設備在BACKOFF狀態時進行多個數據傳輸,直到主設備斷開訪問。需要注意的是:任何對I/O空間、配置空間以及內存空間的突發傳輸的地址超過了設備映射地址的范圍時,從設備要在此狀態建立STOP信號,斷開訪問。當幀信號無效或主設備終止傳輸時,設備回到初始的IDLE狀態。BUS_BUSY狀態時總線忙,表示總線正在被其它設備使用。有兩條轉移路徑,若總線仍然被占用,則停留在BUS_BUSY狀態,否則返回空頭狀態IDLE。  

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

地址譯碼模塊主要檢測PCI地址與本PCI卡的基地址是否匹配,可以通過AD[31:00]信號線上的值與設備的基地址作比較判斷。如果PCI地址落在設置的基地址范圍內,則PCI卡響應當前的總線操作。  

命令譯碼模塊指示PCI卡響應不同的總線命令,通過檢測C/BE[3:0]#信號線上的值,與表1列出的總線命令作比較,完成命令譯碼。  

3 Windows9x系統下驅動程序的設計  

對PCI設備而言,驅動程序提供了獲取PCI卡的配置空間信息、勾掛PCI中斷、總線數據傳輸等功能。本文介紹使用Numega公司的VtooIsD軟件進行驅動設計的方法。  

3.1 尋找PCI卡并讀取配置空間信息  

配置空間包含了系統初始化PCI設備所必需的信息,首先需要遍歷整個硬件樹結構來尋找指定的PCI設備。對于每一個設備,比較其廠商號(Vendor ID)和設備編號(Device ID),如果與設計的PCI卡的信息匹配,則讀取它的配置空間信息。  

3.2 I/O方式下的讀寫操作  

I/O方式下的讀寫比較簡單。在得到PCI設備基地址信息后,通過C++語言中的端口讀寫函數inpd和outpd即可完成。舉例如下:  

Temp=_inpd(gBaseAddresses);//Temp中得到讀出的數據  

_outpd(gBaseAddresses,Data);//向基地址寫入數據  

其中,gBaseAddresses為基地址值,Data為寫操作時的數據。  

3.3 內存方式下的讀寫  

對于內存方式下的讀寫,一個重要問題就是地址的映射。因為硬件設備讀寫的是物理內存,但應用程序讀寫的是虛擬地址,所以存在著將物理內存地址映射到用戶程序線性地址的問題。  

映射功能通過調用VtoolsD軟件的標準庫函數完成。根據給定的物理地址和所要求的空間大小,在系統內存中分配相應空間。首先,用PageReserve函數分配當前保留頁的線性地址空間,再利用PageCommitPhys函數的服務對開始的線性地址空間分配相應的物理地址空間。程序如下:  

ULONG nPages=_NPAGES_(PhysAddress,SizeInByte);  

Linear=PageReserve(PR_SYSTEM,nPages,PR_FIXED);  

PageCommitPhys(PAGENUM(Linear),nPages,PAGENUM  

(PhysAddress),PC_INCR|PC_WRITEABLE|PC_USER);  

LinPageLock(PAGENUM(Linear),nPages,0);  

其中,PhysAddress為給定的物理地址,SizeInBytes為需要的空間大小。  

建立了物理RAM到系統內存的映射后,就可以利用C++語言中的文件操作基類CFile類完成數據的讀寫。首先使用CFile類的成員函數Open打開文件,為保證數據讀寫的準確無誤,必須使用二進制方式打開;接下來使用Read和Write成員函數進行文件讀寫;完畢后用Close成員函數關閉文件。  

3.4 中斷的勾掛和處理  

首先在ON_DEVICE_INIT函數中完成中斷的初始化。即通過前面讀取的PCI設備的中斷號,使用VPICD_Virtualize_IRQ函數進行中斷勾掛,外調用VPICD_Physically_Unmask函數開中斷。  

RTCIRQHandle=VPICD_Virtualize_IRQ(&IRQdesc);  

VPICD_Physically_Unmask(RTCIRQHandle);  

然后在RTCInt_Handler函數中進行中斷處理,可以進行各種操作,例如向應用程序發送自定義的消息來通知中斷的發生。  

3.5 與應用程序的通信  

一般地,應用程序通過CreateFile函數調用VxD驅動程序,得到一個VxD的文件句柄。使用如下的語句可以打開一個名為mydriver.VXD的文件,得到的句柄保存在hVxD中。  

hVxD=CreateFile(.mydriver.VXD,0,0,0,CREATE-NEW,FILE-FLAG-DELETE-ON-CLOSE,0);  

通過句柄hVxD和DeviceIoControl函數就可以與驅動程序進行數據傳輸。  

本文采用ALTERA公司的FLEX6000系列芯片,型號為EPF6016TC144-3,實現了簡化的從設備模式PCI協議,并在Windows9x系統下實現驅動程序的設計。整個系統工作良好。資源占用情況如下:可用I/O引腳113根,占用51根,占用率45%;可用邏輯單元數1320個,占用151個,占用率11%。  

簡化的PCI協議的實現占用較少的邏輯資源,可以靈活方便地進行功能添加和改進,同時可以在同一塊芯片中集成其他用戶模塊,實現不同功能,以降低成本。目前,本系統已經應用在數據采集處理、圖像處理等方面。
本文地址:http://www.qingdxww.cn/thread-21486-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 基于CEC1712實現的處理器SPI FLASH固件安全彈性方案培訓教程
  • 安靜高效的電機控制——這才是正確的方向!
  • 無線充電基礎知識及應用培訓教程3
  • 為何選擇集成電平轉換?
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 456亚洲人成影视在线观看 | 手机看片一区二区 | 日本亚洲天堂 | 久久机热这里只有精品 | 99在线观看国产 | 午夜影院色 | 国产69精品久久久久999 | 欧美日本在线播放 | 国产乱老熟视频胖女人 | 二级片在线| 色综合久久久高清综合久久久 | 在线播放黄色片 | 国产在线一区二区三区在线 | 伊人色综合久久天天网 | 久久夜色精品国产噜噜小说 | 精品一区二区三区四区五区六区 | 有人有在线观看的片吗www | 国产亚洲一区二区三区在线 | 久久久久久9 | 日韩欧美亚洲国产高清在线 | 国产日韩欧美91 | 亚洲欧美小视频 | 欧美日本在线播放 | 亚洲人成一区二区三区 | yy6080韩国日本三理论免费 | 人皮交易在线观看高清 | 日韩网新片免费 | 中文一区二区视频 | 久久99热这里只有精品免费看 | 性视频福利在线看 | 99re这里有精品 | 美女一级毛片免费不卡视频 | 香蕉成人福利片视频在线下载 | 亚洲视频一区 | 午夜精品国产 | 国产麻豆成91 | 国产原创麻豆精品视频 | 久久99久久99精品免观看动漫 | 久久综合精品视频 | 欧美亚洲精品在线 | 国产精品免费视频一区一 |