利用PCI局部總線(xiàn)實(shí)現BIade Server的數據交換
3 基于FPGA的PCI數據交換實(shí)現
通常PC都是采用本地硬盤(pán)來(lái)引導操作系統,完成設備的驅動(dòng),Blade則通過(guò)網(wǎng)絡(luò )啟動(dòng)系統,所以網(wǎng)絡(luò )配置要先于操作系統引導,并完成初始化和驅動(dòng)裝載。為了解決這個(gè)難點(diǎn),我們采用“PCI+FPGA+Flash”結構,在Flash中燒錄雙端口千兆網(wǎng)卡PCI設備的初始化和驅動(dòng)裝載程序,由CPU在系統上電時(shí)加載Flash中的程序到系統內存。由于數據傳輸是PCI總線(xiàn),而Flash是標準的數據總線(xiàn),這就存在數據總線(xiàn)轉換的
問(wèn)題,問(wèn)題解決的方案是通過(guò)FPGA完成PCI設備與Flash之間的通信,下面將詳細介紹如何利用FPGA來(lái)完成PCI接口和Flash之間的通信。
3.1 FPGA系統邏輯與實(shí)現
整個(gè)FPGA系統設計基于PCI2.2從設備設計思想,PCI主設備為PCI橋芯片,用FPGA來(lái)完成PCI從設備功能,終端為Flash芯片。在FPGA系統中,PCI總線(xiàn)接口部分的設計參數為:PCI時(shí)鐘為33 MHz(CLK),32位I/O接口(AD[31..0]),終端接口可以提供20位或32位數據線(xiàn)。PCI主設備與終端Flash間的通信采用PCI從設備(FPGA)來(lái)實(shí)現的。在FPGA的邏輯設計中,終端是兼有Memory空間和I/O空間的抽象設備,在實(shí)際的設計中終端Flash,只有對應的Memory空間。
根據FPGA的模塊設計思想,采用Verilog語(yǔ)言將整個(gè)系統按功能進(jìn)行分塊設計,每個(gè)模塊的輸出可以為其他功能模塊提供輸入,各模塊功能和設計思想如下:
“PCI頂層模塊”是系統頂層模塊,完成系統端口各使能開(kāi)關(guān)的定義和調用其他5個(gè)功能模塊。
“配置模塊”完成PCI從設備配置寄存器的設置。
“基址模塊”實(shí)現兩個(gè)功能:1)配置I/O空間和存儲空間(memory空間)的基地址;2)告知PCI從設備狀態(tài)機(The State Machine)。
“狀態(tài)機模塊”是整個(gè)設計的核心,控制PCI主設備到終端的所有數據傳輸。在PCI地址傳送階段,通過(guò)采樣C/BE[3..0]和IDSEL來(lái)決定是配置讀寫(xiě)、存儲空間讀寫(xiě)還是I/O空間讀寫(xiě)。
“校驗模塊”對AD[31..0]和C/BE[3..0]#信號作奇偶校驗,以保證數據的有效性。
“重入模塊”若PCI從設備進(jìn)行一個(gè)讀寫(xiě)操作,則必須在6個(gè)時(shí)鐘周期內(定義PCI從設備為slow=10 b,慢速設備)使能DEVSEL。若PCI從設備進(jìn)行數據傳送(已經(jīng)使能DEVSEL),終端在9個(gè)時(shí)鐘周期內沒(méi)有使能READY#,則將告知:“The State Machine模塊”,終端暫時(shí)中止當前的數據傳送,直到傳送條件滿(mǎn)足后,才重新啟動(dòng)數據傳送。
3.2 FPGA系統邏輯功能仿真與結論
完成了各功能模塊程序的編輯和編譯過(guò)程,即可采用xilinx ISE11.2自帶的HDL Bencher來(lái)生成測試激勵文件,而后就可以調用Model Sim進(jìn)行仿真了,該仿真也叫前仿真(邏輯功能仿真),布線(xiàn)后的仿真稱(chēng)為后仿真,也叫延時(shí)仿真,布線(xiàn)后的仿真包含門(mén)延時(shí)和線(xiàn)延時(shí)。
下面給出memory寫(xiě)操作功能仿真的詳細步驟,并對結果進(jìn)行分析。
I/O、memory空間讀寫(xiě)過(guò)程非常相似,現對memory空間猝發(fā)方式寫(xiě)操作進(jìn)行詳細的說(shuō)明。在圖4中,通過(guò)測試文件生成pci_rst#=1,不產(chǎn)生復位動(dòng)作,地址節拍pci_ad=0x2000_0000,表示PCI主設備從系統地址0x2000_0000地址開(kāi)始寫(xiě)到終端0x00000地址開(kāi)始的數據空間,可在“PCI頂層模塊”定義(bkend_ad[19..0]=pci_ad[19..0]),終端只取系統地址的低20位地址。pci_cbe#[3..0]=0111,表示是memory空間寫(xiě)操作,在idle狀態(tài)pci_frame#使能,irdy#、devsel#、stop#先不使能,PCI主設備將地址送到終端地址線(xiàn)上,data_stop#=1,表示終端支持猝發(fā)方式數據寫(xiě)操作。在下個(gè)時(shí)鐘周期,進(jìn)入到rw_wait狀態(tài),base_regionl#(memory片選)使能,告訴終端準備執行memory寫(xiě)操作,同時(shí)打開(kāi)I/O、memory空間寫(xiě)操作使能。在下個(gè)時(shí)鐘周期,進(jìn)入到rw_wait2狀態(tài),如果終端使能ready#,表示終端準備好接收數據,使能devsel#、tr dy#、date_write#,其中date_write#使能,是讓終端產(chǎn)生寫(xiě)使能信號。irdy#、trdy#使能。表示PCI主設備和終端數據可以有效傳輸,通過(guò)測試文件在PCI主設備的對應地址(0x2000_0000)下產(chǎn)生數據cdef0000,在該狀態(tài),寫(xiě)入終端第一個(gè)數據cdef0000。在下個(gè)時(shí)鐘周期,進(jìn)入到rw狀態(tài),如果在該狀態(tài)下pci_frame#=0還使能,表示PCI主設備想支持猝發(fā)寫(xiě),繼續使能devsel#、trdy#信號,stop#不能使能,因為PCI主設備準備猝發(fā)寫(xiě)操作,在該狀態(tài)下,只要pci_frame#=0(使能),循環(huán)寫(xiě)入數據cdef0001、cdef0002、cdef0003、cdef0004,上文已經(jīng)介紹,下一個(gè)數據對應的地址自動(dòng)加一,地址都是線(xiàn)性增加的。圖4中,PCI主設備準備發(fā)送cdef0005數據時(shí),irdy#=1(不使能),表示PCI主設備正在取數據,data_write#(終端寫(xiě)使能)不使能,告訴終端等待PCI主設備取數據,插入等待周期。在下個(gè)時(shí)鐘周期,irdy#重新使能,date_wri te#也重新使能,繼續寫(xiě)數據cdef0005,這樣可以一直寫(xiě)數據。pci_frame#=1,表示進(jìn)入最后一個(gè)周期的寫(xiě)數據操作,關(guān)閉irdy#、devsel#、base_regionl#使能。在下個(gè)時(shí)鐘周期,進(jìn)入到backoff狀態(tài),在下個(gè)時(shí)鐘周期進(jìn)入到idel狀態(tài),一個(gè)完整的memory猝發(fā)寫(xiě)就完成了。
伺服電機相關(guān)文章:伺服電機工作原理
評論