本發(fā)明屬于通信技術領域,具體涉及遠程升級現(xiàn)場可編程門陣列的系統(tǒng)及方法。
背景技術:
很多通信設備都會使用FPGA芯片進行高速接口的設計,用于實現(xiàn)相關接口協(xié)議和數(shù)據(jù)轉發(fā)等功能。那么如何對FPGA進行鏡像文件的遠程更新,對于整個設備就顯得尤為重要。
目前,F(xiàn)PGA鏡像文件的遠程更新主要采用CPU模擬FPGA芯片的被動式加載方式。采用這種遠程更新方式不僅會占用過多的CPU相關進程,而且還會因為CPU的GPIO管腳模擬被動加載時序出現(xiàn)誤差,導致FPGA鏡像文件被動加載不成功的情況。采用CPU模擬被動加載接口時序時,時鐘頻率都比較低,如果FPGA芯片的鏡像文件較大,就會使得加載過程非常緩慢。如果采用CPU直接模擬FPGA芯片的被動加載接口時序,每次上電后,CPU都需要消耗相應的進程對FPGA芯片進行鏡像更新。
技術實現(xiàn)要素:
針對現(xiàn)有技術中的缺陷,本發(fā)明提出了遠程升級現(xiàn)場可編程門陣列的系統(tǒng)及方法,利用CPLD模擬FPGA芯片的被動加載接口時序,穩(wěn)定性高,大大提高了對FPGA芯片配置的成功率;輸出的時鐘頻率較高,減少了對FPGA芯片進行配置的時間,減少了對CPU資源的占用。
具體的,本發(fā)明提出了一種遠程升級現(xiàn)場可編程門陣列的系統(tǒng),包括:
一種遠程升級現(xiàn)場可編程門陣列的系統(tǒng),其特征在于,該系統(tǒng)包括:現(xiàn)場可編程門陣列器件FPGA、中央處理器CPU、復雜可編程邏輯器件CPLD及閃存;
所述CPLD分別與所述CPU、所述FPGA和所述閃存通過對應的接口電性連接;
所述閃存,用于存儲所述FPGA的鏡像文件;
所述CPU,用于接收遠端發(fā)送過來的所述FPGA的待升級鏡像文件,并將所述待升級鏡像文件發(fā)送至所述CPLD;
所述CPLD,用于模擬所述閃存的數(shù)據(jù)寫操作時序,將所述待升級鏡像文件寫入所述閃存;還用于模擬所述閃存的數(shù)據(jù)讀操作時序,讀取所述閃存中存儲的鏡像文件至所述CPLD中;還用于模擬所述FPGA的被動加載配置接口時序,將所述CPLD中的鏡像文件發(fā)送至所述FPGA,還用于各種不同數(shù)據(jù)類型轉換。
進一步地,所述CPLD與所述CPU之間的電性連接包括通過SPI、I2C、UART和PCI總線來進行的連接。
進一步地,所述數(shù)據(jù)類型轉換包括串行并行轉換、數(shù)據(jù)位寬轉換。
本發(fā)明還提出了一種現(xiàn)場可編程門陣列升級的方法,該方法包括:
CPLD接收CPU發(fā)送過來的FPGA的鏡像文件;
所述CPLD將接收到所述FPGA的鏡像文件數(shù)據(jù)轉化為閃存接口所需的相關數(shù)據(jù);
所述CPLD模擬所述閃存的數(shù)據(jù)寫操作時序,將所述相關數(shù)據(jù)寫入所述閃存。
進一步地,“CPLD接收CPU發(fā)送過來的FPGA的鏡像文件”具體包括:
所述CPLD在時鐘信號的上升沿處,對數(shù)據(jù)信號進行采樣,實現(xiàn)對鏡像文件的接收。
進一步地,“將所述相關數(shù)據(jù)寫入所述閃存”具體包括:
所述CPLD每收到一次數(shù)據(jù),就啟動一次數(shù)據(jù)寫入操作,從閃存的0地址開始寫入;
在寫入鏡像數(shù)據(jù)前,依次拉低所述閃存的使能信號與寫使能信號,以將所述數(shù)據(jù)賦值給數(shù)據(jù)信號;
待保持100ns的時長后,拉高使能信號與寫使能信號,以完成一段鏡像數(shù)據(jù)的寫入。
進一步地,在“所述CPLD模擬所述閃存的數(shù)據(jù)寫操作時序,將所述相關數(shù)據(jù)寫入所述閃存”之后,還包括:
鏡像數(shù)據(jù)效驗;
鏡像數(shù)據(jù)效驗具體包括:
所述CPU將通過CPLD回讀閃存得到的鏡像文件與遠端發(fā)送的鏡像文進行比對效驗;
當效驗不一致時,CPU會發(fā)起重寫閃存的請求。
本發(fā)明還提出了一種現(xiàn)場可編程門陣列加載的方法,該方法包括:
一種現(xiàn)場可編程門陣列加載的方法,其特征在于,該方法包括:
CPLD接收加載請求指令;
所述CPLD模擬閃存的數(shù)據(jù)讀操作時序,讀取所述閃存中的鏡像文件數(shù)據(jù);
所述CPLD將讀取到的鏡像文件數(shù)據(jù)轉化為FPGA接口所需的相關數(shù)據(jù);
所述CPLD模擬所述FPGA的被動加載配置接口時序,將所述相關數(shù)據(jù)發(fā)送至所述FPGA。
進一步地,所述CPLD模擬所述FPGA的被動加載配置接口時序的流程具體包括:
所述CPLD拉低配置信號至少2us,對所述FPGA進行被動加載;
當所述配置信號被拉高后,等待狀態(tài)信號拉高,當所述狀態(tài)信號被拉高時進行數(shù)據(jù)的加載;
所述CPLD控制時鐘信號的頻率,發(fā)送時鐘信號和數(shù)據(jù),將所述數(shù)據(jù)通過數(shù)據(jù)信號端口傳送至所述FPGA;
所述CPLD檢測配置完成信號,當檢測到所述配置完成信號被拉高后,停止數(shù)據(jù)的發(fā)送;
當檢測到所述配置完成信號被拉高后,繼續(xù)發(fā)送超過100個周期的時鐘信號,使得FPGA芯片完成初始化。
進一步地,所述加載請求指令包括:CPU通過GPIO接口發(fā)送給CPLD的加載請求指令,以及CPLD上電時,電源模塊發(fā)送給所述CPLD的加載請求指令。
采用本發(fā)明的技術方案,與已有的公知技術相比,具有如下有益效果:
(1)利用CPLD模擬FPGA芯片的被動加載接口時序,穩(wěn)定性高,大大提高了對FPGA芯片配置的成功率。
(2)輸出的時鐘頻率較高,減少了對FPGA芯片進行配置的時間。
(3)減少了對CPU資源的占用。
附圖說明
為了更清楚地說明本發(fā)明實施例的技術方案,下面將對實施例中所需要使用的附圖作簡單地介紹,應當理解,以下附圖僅示出了本發(fā)明的某些實施例,因此不應被看作是對范圍的限定,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他相關的附圖。
圖1為本發(fā)明實施例提出的遠程升級現(xiàn)場可編程門陣列的系統(tǒng)示意圖;
圖2為本發(fā)明實施例提出的現(xiàn)場可編程門陣列升級的方法流程示意圖;
圖3為本發(fā)明實施例提出的現(xiàn)場可編程門陣列加載的方法流程示意圖;
圖4為本發(fā)明具體實施例中CPLD模擬FPGA的被動加載配置接口時序的連接關系圖。
主要元件符號說明:
100、FPGA;200、CPU;300、CPLD;400、閃存;501、nCONFIG配置信號;502、nSTAUS狀態(tài)信號;503、DCLK時鐘信號;504、DATA數(shù)據(jù)信號;505、CONF_DONE配置完成信號。
具體實施方式
下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。通常在此處附圖中描述和出示的本發(fā)明實施例的組件可以以各種不同的配置來布置和設計。因此,以下對在附圖中提供的本發(fā)明的實施例的詳細描述并非旨在限制要求保護的本發(fā)明的范圍,而是僅僅表示本發(fā)明的選定實施例?;诒景l(fā)明的實施例,本領域技術人員在沒有做出創(chuàng)造性勞動的前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
如圖1所示,遠程升級現(xiàn)場可編程門陣列的系統(tǒng)包括:FPGA(Field-Programmable Gate Array,現(xiàn)場可編程門陣列)100、CPU 200、CPLD(Complex Programmable Logic Device,復雜可編程邏輯器件)300和閃存400。
CPLD 300分別與CPU 200、FPGA 100和閃存400通過對應的接口實現(xiàn)電性連接;
CPLD 300與CPU 200之間可以通過SPI、I2C、UART或PCI接口連接,優(yōu)選SPI接口連接。
閃存400,用于FPGA 100所需的鏡像文件。
閃存400可以是常見Flash芯片,例如可以包括Nand Flash以及Nor Flash,在一個優(yōu)選的實施例中,可以選擇Nor Flash。
CPU 200,用于接收遠端發(fā)送過來的FPGA 100的待升級鏡像文件,并在將所述待升級鏡像文件發(fā)送至CPLD 300;
CPLD 300,用于模擬閃存400的數(shù)據(jù)寫操作時序,將所述待升級鏡像文件寫入閃存400;還用于模擬閃存400的數(shù)據(jù)讀操作時序,讀取閃存400中存儲的鏡像文件至CPLD 300中;還用于模擬FPGA 100的被動加載配置接口時序,將CPLD 300中的鏡像文件發(fā)送至FPGA 100,還用于各種不同數(shù)據(jù)類型轉換。
現(xiàn)場可編程門陣列升級的方法用于升級更新內存400中的鏡像文件。如圖2所示,該方法包括如下步驟:
S101:CPLD接收CPU發(fā)送的FPGA的鏡像文件;
CPU 200可以通過SPI、I2C、UART、PCI等接口,實現(xiàn)CPU 200與CPLD300間的通信。在本實施例中優(yōu)選SPI接口通信。
CPU 200啟動響應后,將FPGA 100鏡像的數(shù)據(jù),按照SPI接口時序,發(fā)送給CPLD 300。CPLD 300作為Slave模塊,進行串行數(shù)據(jù)的接收。具體操作流程,如下所示:
CPU 200依次使能片選信號,使能SPI接口,觸發(fā)時鐘信號,開始進行進行數(shù)據(jù)傳送。
CPLD 300在時鐘信號的上升沿處,對MOSI(master output slave input)信號進行采樣,實現(xiàn)對鏡像數(shù)據(jù)的接收。
S102:所述CPLD將接收到所述FPGA的鏡像文件數(shù)據(jù)轉化為閃存接口所需的相關數(shù)據(jù);
在本實施例中,以一個具體的例子來進行說明,例如閃存400采用數(shù)據(jù)位寬為16bits的Nor Flash芯片。SPI接口的數(shù)據(jù)位寬為1bit,那么需要將SPI接口收到的串行數(shù)據(jù),轉換成16bits的并行數(shù)據(jù)。具體需要轉換的數(shù)據(jù)位寬,根據(jù)Flash芯片而定。詳細流程如下所示:
通過SPI接口接收到1bits數(shù)據(jù)后,將該數(shù)據(jù)放入移位寄存器中。
完成16次移位后,即接收到了16bits的數(shù)據(jù),每接收完成16bits數(shù)據(jù),便傳送給Flash接口,準備進行數(shù)據(jù)寫入。
S103:所述CPLD模擬所述閃存的數(shù)據(jù)寫操作時序,將所述相關數(shù)據(jù)寫入所述閃存。
CPLD 300每收到一次突發(fā)數(shù)據(jù)(16bits)后,就需要將數(shù)據(jù)寫入Flash,用于數(shù)據(jù)的存儲。
CPLD 300進行Flash芯片寫操作時序的模擬,將收到的數(shù)據(jù)寫入Nor Flash中。利用CPLD 300模擬Flash芯片的寫操作時序,更為穩(wěn)定,而且可以支持多種Flash芯片。
CPLD 300每收到16bits數(shù)據(jù),就啟動一次數(shù)據(jù)寫入操作,從閃存400的0地址開始寫入;以后的每次寫入都是在上次寫入的結束位置開始。
寫入鏡像數(shù)據(jù)前,依次拉低所述閃存的使能信號與寫使能信號;將所述相關數(shù)據(jù)賦值給數(shù)據(jù)信號;保持100ns的時長后,拉高所述閃存的使能信號與寫使能信號,即完成16bits鏡像數(shù)據(jù)的寫入Nor Flash芯片。由于Flash芯片是非易失性的存儲器,因此,如果需要更新FPGA芯片的鏡像文件,只需要進行一次Flash數(shù)據(jù)的升級更新即可。
現(xiàn)場可編程門陣列升級的方法還包括鏡像數(shù)據(jù)校驗。
為了確保鏡像數(shù)據(jù)的正確,CPU可以通過SPI接口,回讀Flash里的數(shù)據(jù)內容,以用于校驗數(shù)據(jù)的正確性。具體的流程如下:
CPU 200使能片選信號,使能SPI接口,同時,觸發(fā)時鐘信號。
CPLD 300模擬Flash接口的讀數(shù)據(jù)時序,一次讀回16bits的數(shù)據(jù)內容。
CPLD 300對16bits的數(shù)據(jù)進行并串轉換,在時鐘信號的下降沿處,將1bit的數(shù)據(jù)信息,通過MISO信號回送給CPU 200,連續(xù)16個時鐘下降沿,即完成一次16bits的數(shù)據(jù)傳送。
CPU 200將讀回的數(shù)據(jù)信息進行校驗,根據(jù)校驗碼,與原本的鏡像數(shù)據(jù)校驗碼進行對比,從而檢驗Flash里的FPGA鏡像內容是否正確。數(shù)據(jù)效驗可以采用CRC32、MD5、SHA1等校驗算法。
如果當效驗不一致時,CPU 200會發(fā)起重寫閃存的請求。
現(xiàn)場可編程門陣列加載的方法用于對FPGA 100進行配置。如圖3所示,該方法包括如下步驟:
S201:CPLD接收加載請求指令;
CPU 200與CPLD 300之間,可以使用一根GPIO來模擬加載使能控制信號,CPU 200可通過該信號發(fā)送加載請求,讓CPLD 300完成FPGA 100鏡像的加載。
也可以在CPLD 300上電過程后,自動對FPGA 100進行一次鏡像文件加載。
S202:所述CPLD模擬閃存的數(shù)據(jù)讀操作時序,讀取所述閃存中的鏡像文件數(shù)據(jù)。
利用CPLD 300模擬Flash芯片的數(shù)據(jù)讀操作時序。采用CPLD 300模擬Flash芯片的讀操作時序,使得數(shù)據(jù)讀取更為穩(wěn)定。同時,利用CPLD 300連接Flash芯片,能夠支持多種不同類型的芯片。
S203:所述CPLD將讀取到的鏡像文件數(shù)據(jù)轉化為FPGA接口所需的相關數(shù)據(jù)。
從Flash中獲取到數(shù)據(jù)信息后,由于Flash接口和FPGA 100的被動加載接口數(shù)據(jù)位寬不一致,為此,在CPLD 300內部需要做數(shù)據(jù)的轉換,同時,完成本次數(shù)據(jù)發(fā)送后,才能夠去讀取Flash中的下一個數(shù)據(jù)。
在本實施例中,F(xiàn)lash接口的數(shù)據(jù)位寬為16bits,F(xiàn)PGA 100的被動加載接口的數(shù)據(jù)位寬為1bit。一次從Flash中,能夠獲取16bits的數(shù)據(jù),但FPGA的被動加載接口一次只能傳送1bit的數(shù)據(jù)。
在CPLD 300內部,需要進行16bits到1bit的并串轉換,同時,完成16bits數(shù)據(jù)的并轉轉換后,才能夠發(fā)起下一次Flash數(shù)據(jù)的讀取。
S204:所述CPLD模擬所述FPGA的被動加載配置接口時序,將所述相關數(shù)據(jù)發(fā)送至所述FPGA。
利用CPLD 300模擬FPGA 100的被動加載配置接口時序,時鐘頻率可達到50MHz,從而使得加載速率更快,而且加載成功更為穩(wěn)定。同時,由于不同的FPGA芯片被動加載配置的接口時序不同,使用CPLD 300模擬時序,靈活性更高。
在本實施例中FPGA 100的被動加載配置接口數(shù)據(jù)位寬為1bit,則CPLD 300每次向FPGA 100傳送1bit的Flash鏡像數(shù)據(jù),確定FPGA 100反饋回來配置完成信號,便可終止配置數(shù)據(jù)的傳送。
如圖4所示CPLD模擬FPGA的被動加載配置接口時序時需要使用到以下端口:nCONFIG配置信號501、nSTAUS狀態(tài)信號502、DCLK時鐘信號503、DATA數(shù)據(jù)信號504和CONF_DONE配置完成信號505。
具體的流程如下:
CPLD 300拉低nCONFIG配置信號501至少2us,表明開始對所述FPGA進行被動加載;
當nCONFIG配置信號501被拉高后,等待nSTAUS狀態(tài)信號502拉高,當nSTAUS狀態(tài)信號502被拉高表明FPGA 100完成響應,可以進行數(shù)據(jù)的加載;
CPLD 300控制DCLK時鐘信號503的頻率,開始發(fā)送DCLK時鐘信號503和DATA數(shù)據(jù)信號504,將相關數(shù)據(jù)通過DATA數(shù)據(jù)信號504傳送至所FPGA 100;DCLK時鐘信號503的頻率最大為50MHz,這樣可以極大提高加載的速度。
CPLD 300檢測CONF_DONE配置完成信號505,當檢測到CONF_DONE配置完成信號505被拉高后,表明FPGA 100數(shù)據(jù)接收完成,可停止數(shù)據(jù)的發(fā)送;
CONF_DONE配置完成信號505拉高后,仍需進行DCLK時鐘信號503的發(fā)送,至少發(fā)送100個周期的DCLK時鐘信號503,以使得FPGA 100完成初始化。
設備每次上電后,CPLD 300都會自動對FPGA 100進行被動配置的加載。如果需要進行設備的FPGA 100鏡像更新,只需要更新一次Flash芯片中的數(shù)據(jù)便可完成FPGA 100鏡像文件的更新。
本領域技術人員可以理解附圖只是一個優(yōu)選實施場景的示意圖,附圖中的模塊或流程并不一定是實施本發(fā)明所必須的。
本領域技術人員可以理解實施場景中的裝置中的模塊可以按照實施場景描述進行分布于實施場景的裝置中,也可以進行相應變化位于不同于本實施場景的一個或多個裝置中。上述實施場景的模塊可以合并為一個模塊,也可以進一步拆分成多個子模塊。
上述本發(fā)明序號僅僅為了描述,不代表實施場景的優(yōu)劣。以上公開的僅為本發(fā)明的幾個具體實施場景,但是,本發(fā)明并非局限于此,任何本領域的技術人員能思之的變化都應落入本發(fā)明的保護范圍。