<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > PCI總線(xiàn)協(xié)議的FPGA實(shí)現及驅動(dòng)設計

PCI總線(xiàn)協(xié)議的FPGA實(shí)現及驅動(dòng)設計

作者: 時(shí)間:2012-04-14 來(lái)源:網(wǎng)絡(luò ) 收藏

  圖3中,狀態(tài)轉移條件信號a、b、c定義如下:a代表配置空間訪(fǎng)問(wèn)條件,b代表I/O空間或內存空間訪(fǎng)問(wèn)條件,c代表總線(xiàn)傳輸開(kāi)始條件。這三個(gè)條件的實(shí)現由后面的命令譯碼模塊給出。
  
 ?。桑模蹋攀窍到y的缺省狀態(tài),表示總線(xiàn)當前空閑。通常,設備處在IDLE狀態(tài)時(shí),要檢測來(lái)自PCI總線(xiàn)和后級設備的信號,以便設備作出合適的響應。設備處于S_DATA狀態(tài)時(shí)完成第一次數據傳輸,直接無(wú)條件跳到BACKOFF狀態(tài)。設備在BACKOFF狀態(tài)時(shí)進(jìn)行多個(gè)數據傳輸,直至主設備斷開(kāi)訪(fǎng)問(wèn)。需要注意的是:任何對I/O空間、配置空間以及內存空間的突發(fā)傳輸的地址超過(guò)了設備映射地址的范圍時(shí),從設備要在此狀態(tài)建立STOP信號,斷開(kāi)訪(fǎng)問(wèn)。當幀信號無(wú)效或主設備終止傳輸時(shí),設備回到初始的IDLE狀態(tài)。BUS_BUSY狀態(tài)時(shí)總線(xiàn)忙,表示總線(xiàn)正在被其它設備使用。有兩條轉移路徑,若總線(xiàn)仍然被占用,則停留在BUS_BUSY狀態(tài),否則返回空閑狀態(tài)IDLE。
  
 ?。玻?地址譯碼和命令譯碼模塊
  
  地址譯碼模塊主要檢測PCI地址與本PCI卡的基地址是否匹配,可以通過(guò)AD[31:00]信號線(xiàn)上的值與設置的基地址作比較判斷。如果PCI地址落在設置的基地址范圍內,則PCI卡響應當前的總線(xiàn)操作。
  
  命令譯碼模塊指示PCI卡響應不同的總線(xiàn)命令,通過(guò)檢測C/BE[3:0]#信號線(xiàn)上的值,與表1列出的總線(xiàn)命令作比較,完成命令譯碼。
  
 ?。?Windows9x系統下驅動(dòng)程序的設計
  
  對PCI設備而言,驅動(dòng)程序提供了獲?。校茫煽ǖ呐渲每臻g信息、勾掛PCI中斷、總線(xiàn)數據傳輸等功能。本文介紹使用Numega公司的VtoolsD軟件進(jìn)行驅動(dòng)設計的方法。
  
 ?。常?尋找PCI卡并讀取配置空間信息
  
  配置空間包含了系統初始化PCI設備所必需的信息,首先需要遍歷整個(gè)硬件樹(shù)結構來(lái)尋找指定的PCI設備。對于每一個(gè)設備,比較其廠(chǎng)商號(Vendor ID)和設備編號Device ID,如果與設計的PCI卡的信息匹配,則讀取它的配置空間信息。
  
 ?。常?I/O方式下的讀寫(xiě)操作
  
 ?。桑戏绞较碌淖x寫(xiě)比較簡(jiǎn)單。在得到PCI設備基地址信息后,通過(guò)C++語(yǔ)言中的端口讀寫(xiě)函數inpd和outpd即可完成。舉例如下:
  
 ?。裕澹恚穑剑撸椋睿穑洌ǎ纾拢幔螅澹粒洌洌颍澹螅螅澹螅?;// Temp中得到讀出的數據
  
 ?。撸铮酰簦穑洌ǎ纾拢幔螅澹粒洌洌颍澹螅螅澹螈煟模幔簦幔?; //向基地址寫(xiě)入數據
  
  其中,gBaseAddresses為基地址值,Data為寫(xiě)操作時(shí)的數據。
  
 ?。常?內存方式下的讀寫(xiě)
  
  對于內存方式下的讀寫(xiě),一個(gè)重要問(wèn)題就是地址的映射。因為硬件設備讀寫(xiě)的是物理內存,但應用程序讀寫(xiě)的是虛擬地址,所以存在著(zhù)將物理內存地址映射到用戶(hù)程序線(xiàn)性地址的問(wèn)題。
  
  映射功能通過(guò)調用VtoolsD軟件的標準庫函數完成。根據給定的物理地址和所要求的空間大小,在系統內存中分配相應空間。首先,用PageReserve函數分配當前保留頁(yè)的線(xiàn)性地址空間,再利用PageCommitPhys函數的服務(wù)對開(kāi)始的線(xiàn)性地址空間分配相應的物理地址空間。程序如下:
  
 ?。眨蹋希危?nPages=_NPAGES_(PhysAddressSizeInBytes);
  
 ?。蹋椋睿澹幔颍剑校幔纾澹遥澹螅澹颍觯澹ǎ校遥撸樱伲樱裕牛廷煟睿校幔纾澹螈煟校遥撸疲桑兀牛模?;
  
 ?。校幔纾澹茫铮恚恚椋簦校瑁螅ǎ校粒牵牛危眨停ǎ蹋椋睿澹幔颍?,nPagesPAGENUM (PhysAddress),PC_INCR | PC_WRITEABLE | PC_USER);
  
 ?。蹋椋睿校幔纾澹蹋铮悖耄ǎ校粒牵牛危眨停ǎ蹋椋睿澹幔颍?,nPages0);
  
  其中,PhysAddress為給定的物理地址,SizeInBytes為需要的空間大小。
  
  建立了物理RAM到系統內存的映射后,就可以利用C++語(yǔ)言中的文件操作基類(lèi)CFile類(lèi)完成數據的讀寫(xiě)。首先使用CFile類(lèi)的成員函數Open打開(kāi)文件,為保證數據讀寫(xiě)的準確無(wú)誤,必須使用二進(jìn)制方式打開(kāi);接下來(lái)使用Read和Write成員函數進(jìn)行文件讀寫(xiě);完畢后用Close成員函數關(guān)閉文件。
  
 ?。常?中斷的勾掛和處理
  
  首先在ON_DEVICE_INIT函數中完成中斷的初始化。即通過(guò)前面讀取的PCI設備的中斷號,使用VPICD_Virtualize_IRQ函數進(jìn)行中斷勾掛,并調用VPICD_Physically_Unmask函數開(kāi)中斷。
  
 ?。遥裕茫桑遥眩龋幔睿洌欤澹剑郑校桑茫模撸郑椋颍簦酰幔欤椋澹撸桑遥眩ǎΓ桑遥眩洌澹螅悖?;

 ?。郑校桑茫模撸校瑁螅椋悖幔欤欤撸眨睿恚幔螅耄ǎ遥裕茫桑遥眩龋幔睿洌欤澹?;
  然后在RTCInt_Handler函數中進(jìn)行中斷處理,可以進(jìn)行各種操作,例如向應用程序發(fā)送自定義的消息來(lái)通知中斷的發(fā)生。
  
 ?。常?與應用程序的通信
  
  一般地,應用程序通過(guò)CreateFile函數調用VxD驅動(dòng)程序,得到一個(gè)VxD的文件句柄。使用如下的語(yǔ)句可以打開(kāi)一個(gè)名為mydriver.VXD的文件,得到的句柄保存在hVxD中。
  
 ?。瑁郑模剑茫颍澹幔簦澹疲椋欤澹ā澹埽埽埽埽埽埽恚洌颍椋觯澹颍郑兀摹澧煟?,0,0,CREATE-NEW,FILE-FLAG-DELETE-ON-CLOSE,0);
  
  通過(guò)句柄hVxD和DeviceIoControl函數就可以與驅動(dòng)程序進(jìn)行數據傳輸。
  
  本文采用ALTERA公司的FLEX6000系列芯片,型號為EPF6016TC144-3,實(shí)現了簡(jiǎn)化的從設備模式PCI協(xié)議,并在Windows9x系統下實(shí)現驅動(dòng)程序的設計。整個(gè)系統工作良好。資源占用情況如下:可用I/O引腳113根,占用51根,占用率45%;可用邏輯單元數1320個(gè),占用151個(gè),占用率11%。
  
  簡(jiǎn)化的PCI協(xié)議的實(shí)現占用較少的邏輯資源,可以靈活方便地進(jìn)行功能添加和改進(jìn),同時(shí)可以在同一塊芯片中集成其他用戶(hù)模塊,實(shí)現不同功能,以降低成本。目前,本系統已經(jīng)應用在數據采集和處理、圖像處理等方面。


上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: PCI總線(xiàn) FPGA 虛擬設備

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>