基于FPGA的PCI接口設(shè)計(jì)
Pci_t32內(nèi)部功能模塊及周邊信號如圖1所示。
左側(cè)PCI信號是符合PCI規(guī)范的標(biāo)準(zhǔn)信號,在這里不多加解釋。下面重點(diǎn)介紹右側(cè)用戶邏輯接口local信號:
L_aci 31 0 ,local側(cè)地址、數(shù)據(jù)輸入信號。
L_cbeni 3 0 ,local側(cè)命令、字節(jié)使能輸入信號,位定義及時序符合PCI規(guī)范。
L_dato 31 0 ,local側(cè)數(shù)據(jù)輸出信號。
L_adro 31 0 ,local側(cè)地址輸出信號。
L_beno 30 ,local側(cè)字節(jié)使能輸出信號,位定義及時序符合PCI規(guī)范。
L_cmdo30,local側(cè)命令輸出信號,位定義及時序符合PCI規(guī)范。
Lt_rdyn,local側(cè)目標(biāo)設(shè)備準(zhǔn)備好信號(target ready),對pci_t32是輸入信號。
Lt_discn,local側(cè)目標(biāo)設(shè)備通過置低該信號請求pci_t32向PCI 側(cè)主設(shè)備發(fā)出斷開連接信號(disconnect request),對pci_t32是輸入信號。
Lt_abortn,local側(cè)目標(biāo)設(shè)備通過置低該信號來請求pci_t32向PCI 側(cè)主設(shè)備發(fā)出放棄操作信號,對pci_t32是輸入信號。
Lt_irqn,local側(cè)目標(biāo)設(shè)備中斷請求信號,對pci_t32是輸入信號。
Lt_framen,PCI主設(shè)備通過pci_t32讀寫local側(cè)目標(biāo)設(shè)備時,pci_t32置低該信號(輸出信號).
Lt_ackn,當(dāng)為目標(biāo)寫操作時,PCI_t32置低該信號(輸出信號),表示數(shù)據(jù)有效;當(dāng)為目標(biāo)讀操作時,PCI_t32置低該信號(輸出信號),表示已準(zhǔn)備好讀數(shù)。
Lt_dxfrn,輸出信號,表示local 目標(biāo)設(shè)備數(shù)據(jù)傳輸成功。
Lt_tsr 11 0,輸出信號,控制local目標(biāo)設(shè)備狀態(tài)寄存器。
Cmd_reg 5 0,配置命令寄存器輸出信號。Bit0,I/O操作使能;bit1,Memory操作使能;bit2,保留;bit3,memory寫無效使能;bit4,奇偶校驗(yàn)出錯響應(yīng)使能;bit5,系統(tǒng)出錯響應(yīng)使能。
Stat_reg 5 0 ,配置狀態(tài)寄存器輸出信號。
3 讀寫操作時序分析與設(shè)計(jì)要點(diǎn)
pci規(guī)范中定義了兩種讀寫操作,即Memory和I/O的讀寫。Pci_t32的讀寫操作包括:32位的Memory單周期讀寫、Memory猝發(fā)讀寫、I/O單周期讀寫以及配置讀寫。Pci_t32 的Memory讀寫分為單周期和猝發(fā)兩種模式,而I/O的讀寫只有單周期模式。所謂猝發(fā)模式,即在給出首地址后,主設(shè)備連續(xù)讀寫多個數(shù)據(jù),用戶設(shè)備應(yīng)能對首地址自動加1。配置讀寫是指pci主設(shè)備對pci_t32的配置空間寄存器進(jìn)行讀寫操作,pci主設(shè)備與pci_t32之間的接口是無縫連接。本文只分析32位Memory單周期讀寫時序,其它模式的讀寫時序大同小異,此略。
3.1 Memory 讀操作
pci_t32的單周期memory read操作時序如圖2所示。
時序分析及用戶邏輯設(shè)計(jì)要點(diǎn):pci主設(shè)備在第2個clk給出要讀的目標(biāo)地址ad 31 0 和Memory讀命令cben 3 0 =6,pci_t32在第3個clk向用戶設(shè)備給出讀目標(biāo)地址1_adro 31 0和Memory讀命令l_cmdo 3 0 =6。用戶設(shè)備要對l_cmdo 3 0 譯碼來判斷是何種操作,對l_adro 31 0 譯碼來選擇目標(biāo)地址。在lt_framen輸出為低的下個時鐘周期,若用戶設(shè)備邏輯準(zhǔn)備好要輸出的數(shù)據(jù),可以置低lt_rdyn。若用戶邏輯沒有準(zhǔn)備好,可以延遲置低lt_rdyn來產(chǎn)生延時等待周期。當(dāng)lt_dxfrn輸出為低電平時(第6個clk),pci用戶設(shè)備必須將目標(biāo)地址的數(shù)據(jù)D0放到l_adi 31 0 ,用戶邏輯可以用lt_dxfrn來作為存儲單元的輸出使能信號(/Output Enable)。這樣,在第7個clk的上升沿pci_t32可以采樣到數(shù)據(jù)D0。在第8個clk的上升沿pci主設(shè)備可以得到數(shù)據(jù)D0。
評論