0064]5.在【發(fā)起FPGA配置啟動信號】狀態(tài),“主狀態(tài)機(jī)”需向被配置FPGA發(fā)出配置啟動控制信號,來通知被配置FPGA進(jìn)行配置啟動準(zhǔn)備工作。然后“主狀態(tài)機(jī)”進(jìn)入【監(jiān)控FPGA配置啟動完成信號】狀態(tài)。
[0065]6.在【監(jiān)控FPGA配置啟動完成信號】狀態(tài),“主狀態(tài)機(jī)”監(jiān)控被配置FPGA的用于標(biāo)識配置啟動完成狀態(tài)的信號,來判斷被配置FPGA的配置啟動準(zhǔn)備工作是成功完成還是失敗。若配置啟動成功完成,則“主狀態(tài)機(jī)”進(jìn)入【啟動配置數(shù)據(jù)傳輸】狀態(tài),并轉(zhuǎn)入階段7 ;若配置啟動失敗,則“主狀態(tài)機(jī)”進(jìn)入【判斷是否進(jìn)行重試配置】狀態(tài),并轉(zhuǎn)入階段13。
[0066]7.在【啟動配置數(shù)據(jù)傳輸】狀態(tài),“主狀態(tài)機(jī)”向“DMA控制器”發(fā)出啟動配置數(shù)據(jù)傳輸?shù)拿钚盘?,并給出配置數(shù)據(jù)文件的基址和長度。隨后“主狀態(tài)機(jī)”轉(zhuǎn)入【監(jiān)控配置結(jié)果】狀態(tài)。
[0067]8.“DMA控制器”在收到“主狀態(tài)機(jī)”發(fā)出的啟動配置數(shù)據(jù)傳輸?shù)拿顣r(shí),根據(jù)其提供的配置文件基址和長度,從配置存儲器中讀取配置數(shù)據(jù)并將之寫入“緩沖FIFO”。
[0068]9.“配置接口控制器”在“緩沖FIFO”中有數(shù)據(jù)時(shí)從中讀取配置數(shù)據(jù),并發(fā)送到外部被配置FPGA的配置接口中。在配置數(shù)據(jù)發(fā)送完畢后,“配置接口控制器”監(jiān)控外部被配置FPGA的用于表示配置完成狀態(tài)的信號,并把配置結(jié)果反饋給“主狀態(tài)機(jī)”。
[0069]10.“主狀態(tài)機(jī)”在【監(jiān)控配置結(jié)果】狀態(tài)監(jiān)控“配置接口控制器”反饋的配置結(jié)果。若配置成功,則“主狀態(tài)機(jī)”進(jìn)入【發(fā)送被配置FPGA復(fù)位信號】狀態(tài),并轉(zhuǎn)入階段11 ;若配置失敗,則“主狀態(tài)機(jī)”進(jìn)入【判斷是否進(jìn)行重試配置】狀態(tài),并轉(zhuǎn)入階段13。
[0070]11.在【發(fā)送被配置FPGA復(fù)位信號】狀態(tài),“主狀態(tài)機(jī)”向被配置FPGA的重配置過的邏輯發(fā)送復(fù)位信號,然后回到【空閑】狀態(tài)。
[0071]12.被配置FPGA在收到復(fù)位信號后,對重配置后的邏輯進(jìn)行復(fù)位,待重配置后的邏輯就緒后,向被配置FPGA向配置控制電路的“寄存器及中斷模塊”發(fā)送邏輯狀態(tài)就緒信號。處理器可通過中斷或者查詢的方式從“寄存器及中斷模塊”獲知被配置FPGA的重配置后的邏輯已就緒(詳見后文“處理器監(jiān)控控制器工作狀態(tài)過程”)。完成整個(gè)重配置過程。
[0072]13.如果在上述階段6發(fā)生配置啟動失敗或者在階段10發(fā)生配置失敗,則“主狀態(tài)機(jī)”進(jìn)入【判斷是否進(jìn)行重試配置】狀態(tài)。如果還未超過允許的最大重試配置次數(shù),則“主狀態(tài)機(jī)”進(jìn)入【發(fā)起FPGA配置啟動信號】狀態(tài)重新進(jìn)行配置過程,并轉(zhuǎn)入階段5 ;如果已經(jīng)超過了允許的最大重試配置次數(shù),則不再進(jìn)行重試配置,“主狀態(tài)機(jī)”進(jìn)入【配置錯(cuò)誤】狀態(tài),并轉(zhuǎn)入階段14。
[0073]14.在【配置錯(cuò)誤】狀態(tài),記錄配置錯(cuò)誤信息后,“主狀態(tài)機(jī)”回到【空閑】狀態(tài)。
[0074]四.軟件設(shè)置重配置過程:
[0075]1.若想讓控制器對處理器發(fā)來的軟件重配置命令信號進(jìn)行響應(yīng),需首先使能控制器的軟件重配置功能。處理器可通過“局部總線”對“寄存器及中斷模塊”中的重配置使能寄存器進(jìn)行讀寫,來使能軟件重配置功能(注,通常硬件重配置功能和軟件重配置功能不會同時(shí)進(jìn)行使能,以免發(fā)生沖突。)。然后處理器再通過“局部總線”對“寄存器及中斷模塊”中的軟件重配置命令寄存器進(jìn)行讀寫,來發(fā)出軟件重配置命令。
[0076]2.當(dāng)控制器處于工作狀態(tài),軟件重配置功能使能并且“主狀態(tài)機(jī)”處于【空閑】狀態(tài)時(shí),若“主狀態(tài)機(jī)”收到“寄存器及中斷模塊”傳來的軟件重配置命令,則“主狀態(tài)機(jī)”進(jìn)入【啟動】狀態(tài),開始重配置工作。
[0077]3.其余過程與上述“硬件觸發(fā)重配置過程”的3到14階段一致。
[0078]五.處理器監(jiān)控控制器工作狀態(tài)過程
[0079]1.當(dāng)控制器發(fā)生某些事件時(shí),例如接收到外部硬件重配置命令信號,配置過程失敗后重試、配置錯(cuò)誤、配置過程成功等等,“主狀態(tài)機(jī)”可將事件與相應(yīng)信息告知“寄存器及中斷模塊”(見附圖1中的“當(dāng)前配置狀態(tài)”信號)。
[0080]2.“寄存器及中斷模塊”在獲知事件與相關(guān)信息后,可將其存儲在相應(yīng)的寄存器中,并對其中某些事件以中斷的形式告知處理器。
[0081]3.處理器可以在收到中斷后做出響應(yīng),根據(jù)中斷信息通過“局部總線”讀取“寄存器及中斷模塊”中的相應(yīng)寄存器來獲知控制器的當(dāng)前狀態(tài)。處理器也可以主動讀取這些寄存器來主動查詢控制器的當(dāng)前狀態(tài)。
[0082]下面對本發(fā)明做進(jìn)一步詳細(xì)說明。分別介紹各個(gè)硬件組成模塊各自的實(shí)現(xiàn)方式。
[0083]1.主狀態(tài)機(jī)
[0084]“主狀態(tài)機(jī)”的內(nèi)部狀態(tài)變迀及輸入輸出信號詳見附圖2?!爸鳡顟B(tài)機(jī)”在控制器處于工作狀態(tài)時(shí)收到“寄存器及中斷模塊”的軟件重配置命令或者外部的硬件重配置命令信號后,開始重配置工作,包括配置啟動工作、配置文件信息獲取、發(fā)起配置數(shù)據(jù)傳輸、監(jiān)控配置結(jié)果,以及在配置完成后對被配置FPGA發(fā)送復(fù)位信號等等工作。它的工作方式已在本控制器工作流程部分的“硬件觸發(fā)重配置過程”和“軟件設(shè)置重配置過程”中進(jìn)行了詳細(xì)闡述,在此不再贅述。
[0085]2.寄存器及中斷模塊
[0086]“寄存器及中斷模塊”用于與外部處理器之間進(jìn)行交互,由兩部分功能組成:一部分是控制寄存器和狀態(tài)寄存器,用于外部處理器對控制器進(jìn)行控制和狀態(tài)查詢;另一部分是中斷功能電路,用于控制器向外部處理器告知需其處理或知悉的中斷事件。
[0087]2.1控制寄存器和狀態(tài)寄存器
[0088]控制寄存器用于外部處理器對本控制器進(jìn)行控制,例如設(shè)置控制器為維護(hù)狀態(tài)或者工作狀態(tài),設(shè)置控制器為硬件重配置使能或者軟件重配置使能(詳見工作流程部分的“硬件觸發(fā)重配置過程”和“軟件設(shè)置重配置過程”)等等。
[0089]狀態(tài)寄存器用于外部處理器查詢本控制器的各種狀態(tài),例如控制器當(dāng)前是處于空閑狀態(tài)還是正在進(jìn)行重配置,重配置過程是否曾出現(xiàn)錯(cuò)誤及錯(cuò)誤的相關(guān)信息等等。另外,被配置FPGA的重配置后邏輯狀態(tài)是否就緒也可以通過狀態(tài)寄存器進(jìn)行查詢。
[0090]2.2中斷功能電路
[0091]中斷功能電路用于本控制器向外部處理器告知需其處理或知悉的中斷事件,例如當(dāng)控制器接收到外部硬件重配置命令信號開始重配置、配置成功、配置錯(cuò)誤等事件發(fā)生時(shí),“主狀態(tài)機(jī)”可將事件與相應(yīng)信息告知中斷功能電路,中斷功能電路將這些事件和信息存儲在相應(yīng)的寄存器中,并以中斷信號的形式告知處理器。另外,各種中斷事件均可通過中斷使能寄存器進(jìn)行中斷使能或中斷禁止。
[0092]3.存儲器讀寫控制接口
[0093]“存儲器讀寫控制接口”負(fù)責(zé)管理配置控制電路對于配置存儲器的訪問。對于配置存儲器的訪問有三種情況,分別是:a.控制器處于維護(hù)狀態(tài)時(shí),外部處理器通過局部總線對于配置存儲器內(nèi)容的讀寫;b.控制器處于工作狀態(tài)時(shí),“主狀態(tài)機(jī)”在收到重配置命令后對配置管理信息的讀取(即根據(jù)配置命令I(lǐng)D獲取配置文件的基址、長度、相關(guān)信息等);c.控制器處于工作狀態(tài)時(shí),“DMA控制器”在配置數(shù)據(jù)傳輸階段對配置數(shù)據(jù)的讀取。其中第一種情況為維護(hù)狀態(tài)時(shí)外部處理器對配置文件的寫入和管理,后兩種情況為工作狀態(tài)時(shí)重配置的不同階段對配置文件和相關(guān)管理信息的讀取,這些訪問都由“存儲器讀寫控制接口”進(jìn)行控制和管理。
[0094]4.DMA 控制器
[0095]“DMA控制器”負(fù)責(zé)在收到“主狀態(tài)機(jī)”的啟動配置數(shù)據(jù)傳輸命令時(shí),根據(jù)其提供的配置文件基址和長度,從配置存儲器中讀取配置數(shù)據(jù)并將之寫入“緩沖FIFO”。這種數(shù)據(jù)的自動搬運(yùn)無需外部處理器參與讀寫,降低了處理器的負(fù)擔(dān)。“DMA控制器”在進(jìn)行配置文件數(shù)據(jù)傳輸?shù)耐瑫r(shí),還需自行為數(shù)據(jù)增加文件頭和文件尾信息,來讓數(shù)據(jù)傳輸后端的“配置接口控制器”可以識別出配置文件的始末。
[0096]5.緩沖 FIFO
[0097]“緩沖FIFO”在為配置數(shù)據(jù)傳輸做緩沖的同時(shí),還可以起到時(shí)鐘域隔離的作用?!芭渲媒涌诳刂破鳌钡膮⒖紩r(shí)鐘頻率往往需要受到FPGA的具體配置接口的約束,而這不應(yīng)該影響到配置控制電路的其他部分的參考時(shí)鐘頻率?!熬彌_FIFO”對寫端口和讀端口采用不同時(shí)鐘可以很好的解決這個(gè)問題,起到了對“配置接口控制器”的參考時(shí)鐘域的隔離作用,使其時(shí)鐘頻率可以單獨(dú)進(jìn)行設(shè)置。
[0098]6.配置接口控制器
[0099]“配置接口控制器”負(fù)責(zé)對于待配置FPGA的直接配置工作,主要有兩部分功能:
1.在“緩沖FIFO”中有數(shù)據(jù)時(shí)從中讀取配置數(shù)據(jù),并發(fā)送到外部被配置FPGA的配置接口中;
2.在配置數(shù)據(jù)發(fā)送完畢之后,監(jiān)控被配置FPGA的配置結(jié)果,并將結(jié)果反饋回“主狀態(tài)機(jī)”。
[0100]“配置接口控制器”需遵循待配置FPGA的配置接口的接口規(guī)范和相應(yīng)時(shí)序要求,這就決定了針對不同的FPGA配置接口,需設(shè)計(jì)相對應(yīng)的專屬“配置接口控制器”。“配置接口控制器”有很好的獨(dú)立性和可更換性,這使得本控制器可以適用于各種FPGA配置接口,例如對于Xilinx FPGA既可使用Slave SelectMAP配置接口,也可使用Slave Serial配置接口等,僅需要針對不同應(yīng)用對“配置接口控制器”做相應(yīng)的更換即可。
[0101]7.配置存儲器
[0102]“配置存儲器”負(fù)責(zé)存儲配置文件和相應(yīng)的配置管理信息,其內(nèi)部的數(shù)據(jù)組織結(jié)構(gòu)如附圖3所示,它其中所存儲的信息及這些信息的維護(hù)方式和工作方式在前文中均已有詳細(xì)描述。
[0103]“配置存儲器”采用非易失存儲器芯片進(jìn)行實(shí)現(xiàn),但當(dāng)具體應(yīng)用對于重配置