用CPLD實現DSP與PLX9054之間的連接
CPLD為設計任務從最簡單的PAL綜合設計到先進的實時硬件現場升級提供了全套的解決方法。本文討論如何使用Xilinx公司的CPLD器件XC9500LV實現PLX9054的局部總線 (local bus)和DSP的HPI口之間的實時通信。采用這種設計可以以單字或DMA方式完成主機與DSP之間的高速數據傳輸,傳輸速率達到16Mb/s??梢詰糜趯崟r的圖形、圖像及動畫處理場合。
設計需求
local bus接口要求
PLX9054是PCI接口專用主從器件,包括通信、網絡、磁盤控制、多媒體等高性能接口功能
。PLX9054可以以多種方式實現從pci總線端到局部總線端的數據轉移,如直接傳輸,DMA控制傳輸等。pci總線和局部總線之間以6個可編程FIFO連接,可實現突發(fā)并行傳輸。通過串行EEPROM或PCI主控設備對PLX9054內部的配置寄存器進行設置。通過配置EEPROM,設置PLX9054作為PCI總線的從設備,工作在C模式下(數據、地址總線非復用),局部總線數據寬度為16bit,并使能外部設備就緒信號READY,禁止無限爆發(fā)操作(屏蔽BTERM bit)。
局部總線端的讀、寫時序基本相同。以寫周期為例說明。首先,PLX9054通過置LHOLD信號有效來申請局部總線的主控權,在收到局部總線仲裁的響應信號LHOLDA之后,PLX9054成為局部總線的主控。隨后置ADS#信號為低,使得地址總線信號LA[31:2]、字節(jié)使能信號LBE[3:0]和讀寫選擇信號LW/R#進入有效狀態(tài)。一個LCLK周期之后,PLX9054停止驅動ADS#。這時,地址總線LA[31:2]上的地址信號將保持有效,直至數據線上的數據有效,并保持一個LCLK周期。數據線LD[15:0]上的數據信號由READY#驅動,在讀、寫操作周期,READY#分別表示局部總線設備已經準備好發(fā)送或者接收數據。BLAST#信號由PLX9054提供,BLAST#信號為低,表示一次傳輸的最后一個字節(jié),BLAST#的上升沿標志一次數據傳輸完成。一個LCLK周期之后,PLX9054拉低LHOLD,放棄對局部總線的主控權。局部總線仲裁響應PLX9054的LHOLD信號,拉低LHOLDA,收回局部總線主控權,這時的局部總線置于閑置狀態(tài)。這里,PLX9054作為局部總線主控權的唯一申請者,只要提出總線申請,局部總線仲裁就立即響應該申請。
HPI設計要求
HPI是一種數據寬度為16bit的并行端口,通過HPI,主機可以直接對CPU的存儲器空間進行操作。HPI內部加入了兩個8級深度的讀寫緩沖,可以執(zhí)行地址自增的讀寫操作,提高了讀寫操作的吞吐量。HPI為內部CPU提供了標準32bit的數據接口,而它為外部主機提供了一個經濟的16bit接口,所以對外部主機而言,每次讀寫必須執(zhí)行成對的16bit操作。
HPI內部有3個寄存器,分別是控制寄存器(HPIC),地址寄存器(HPIA)和數據寄存器(HPID)。這3個寄存器可以直接被主機訪問,主機每執(zhí)行一次對CPU內部存儲空間的訪問,都必須先對控制寄存器和地址寄存器寫入相應的值,然后才能對數據寄存器進行讀寫操作。HPI的外部接口由數據總線HD[15:0]以及一部分用于描述和控制HPI的控制信號組成,這些控制信號包括:
HCNTL[1:0]:控制HPI的操作類型。
HHWIL:半字確認輸入,“0”,“1”分別表示一次字傳輸的第一個半字和第二個半字。
HR/W#:讀/寫選擇。
HRDY#:就緒狀態(tài)標志。
HINT#:中斷標志,DSP向主機提中斷。
HAS#:區(qū)別地址/數據復用總線的數據與地址。
HDS1#,HDS2#,HCS#:數據選通輸入,共同作用產生一個HPI內部選通信號HSTROBE#:
HSTROBE# = [NOT(HDS1# XOR HDS2#)] OR HCS#。
對于一個寫HPI的操作,首先使能HCS#,變化HDS1#或HDS2#,使得HSTROBE#信號產生一個下降沿。HPI這個下降沿采樣控制信號HCNTL[1:0]、HHWIL和HR/W#,使能HCS#的同時,扇出HRDY#。主機進入等待狀態(tài),直到HRDY#產生下降沿,表明HPID已清空,可以接收新的數據。這時HSTROBE#產生一個上升沿,采樣HD[15:0]上的數據送入HPID,完成第一個半字的寫入。對于第二個半字的寫入,由于32bit的HPID已經清空,可以直接寫入數據,不會出現未準備好的情況,所以HRDY#一直保持為低。與第一個字節(jié)的寫入相同,在HSTROBE#的下降沿采樣控制信號,HSTROBE#的上升沿采樣數據總線HD[15:0]的數據送入HPID,完成一個32bit的寫入操作。
對于讀HPI的操作,當HCS#變成有效,在主機不采用地址自增方式從HPID執(zhí)行讀操作時(case1),HPI會向內部地址產生硬件送一個讀請求。HCS#的下降沿使得HRDY#變?yōu)楦唠娖?,直到內部地址產生硬件將請求的數據裝載進HPID,HRDY#變?yōu)橛行顟B(tài)。數據線上的數據為讀出的數據,該數據保持有效,直到HSTROBE#上升沿采樣數據后的10ns左右。在第二次讀操作開始時,數據已經出現在HPID上了,因此,第二個半字的讀操作將不會遇到未準備好的情況 。在HPID以地址自增的方式進行讀操作時,HCS#在整個多個字節(jié)的傳輸過程中始終保持有效,一旦完成現在的讀操作,下一地址的數據馬上被取出。因此,完成現在讀操作的第二個半字的傳輸之后(在HSTROBE#的第二個上升沿),由HSTROBE#的下降沿(通過變化HDS1#或者HDS2#來產生)扇出HRDY#信號,用于指示HPI正忙于數據的預讀取。
設計實現
CPLD的功能是要完成局部總線端和HPI端口之間控制信號和數據總線的連接,并保證數據傳輸的可靠性。通過以上對局部總線和HPI的讀寫時序的分析得知,一些關鍵信號,例如HCS#、READY#和HRDY#的時序設計很重要,整個CPLD設計的主要任務也是圍繞這幾個信號的設計展開的。
由HCS#、HDS1#和HDS2#共同作用產生的HPI口內部信號HSTROBE#的上升沿和下降沿直接控制著送入HPI端口的數據信號和控制信號,并且HSTROBE#變化的速率決定了數據傳輸的速率,因此它是一個非常關鍵的信號。這里,HCS#信號作為字節(jié)傳輸標志信號,在一次數據傳輸的過程中始終保持有效。數據傳輸結束之后,將HCS#拉高,從而控制HRDY#信號恢復到初始狀態(tài),為下一次讀寫操作做好準備。HDS1#或者HDS2#中的一個固定接高電平,變化另外一個來控制HSTROBE#產生上升沿和下降沿。這里將HDS1#固定接高電平,由ADS#和HRDY#信號產生邏輯來控制HDS2#信號。當HRDY#處于無效狀態(tài),即HPI端口未準備就緒時,HDS2#信號不變,不采樣任何信號;當HRDY#有效時,HCS2#信號同ADS#信號保持一致,在ADS#的下降沿采樣控制信號,上升沿采樣數據信號。另外,在一次傳輸開始之前和結束之后,HDS2#都要保持為高電平。
評論