Xilinx FPGA通过FLASH加载程序的时序
盡管FPGA的配置模式各不相同,但整個配置過程中FPGA的工作流程是一致的,分為三個部分:設置、加載、啟動。
復位結束配置開始
有多種方式使FPGA的配置進入這一過程。在上電時,電壓達到FPGA要求之前,FPGA的上電復位模塊將使FPGA保持在復位狀態;外部控制PROG_B引腳出現一個低脈沖也可以使FPGA保持在復位狀態。
清除配置存儲內容
這一步稱為初始化,當FPGA復位結束,配置存儲器的內容會被自動清除。在這個步驟中,除配置專用接口外,FPGA I/O均被置于高阻態。在整個初始化過程中,INIT_B引腳被置低并在初始化結束后恢復高電平。如果INIT_B信號在外部被拉低,FPGA將一直停留在初始化狀態。注意PROG_B信號的脈寬不能太窄。
采樣控制信號
初始化結束后,INIT_B信號回到高電平。FPGA開始采集模式選擇引腳M[1:0]和變量選擇引腳VS。如果為主動模式,FPGA很快就會給出有效的CCLK。VS信號只在主動BPI及其SPI模式中生效。此時,FPGA開始在配置時鐘的上升沿對配置數據進行采樣。
同步化
每一個FPGA配置數據流都有一個同步頭,它是一段特殊的同步字。同步字主要用于幫助FPGA確定正確的數據位置。同步字之前的配置數據都會被FPGA忽略,也就是FPGA僅僅在同步化之后才正式開始接收配置數據。一般而言,同步字都是由0/1數目相同的二進制數組成的,如Spartan3為AA995566。
ID檢查
FPGA同步化后,會自動檢測配置流中的器件ID和目標器件ID是否一致。這一步確保了FPGA不會被錯誤的配置流誤配置。
32位的ID中包含了28位的特征值和4位掩碼。特征值包括廠商信息,器件族,器件規模等。當器件ID檢查遇到問題時,FPGA會將內部寄存器的第一位ID_Err置高,軟件也會顯示錯誤信息。
載入配置內容
在ID檢查順利通過后,FPGA開始加載配置數據。
CRC校驗
在加載數據過程中,FPGA會對每一幀數據進行CRC校驗。如果失敗,FPGA會將INIT_B信號拉低并終止配置過程。
啟動序列
FPGA配置數據加載完后,FPGA進入啟動序列。啟動序列事件的默認順序為先釋放DONE引腳,然后激活I/O,最后啟動寫使能。實際使用中,可以通過BitGen參數對啟動順序進行設置來滿足不同的需求。
、---------------------------------------------------
摘要:提出了由于FPGA容量的攀升和配置時間的加長,采用常規設計會導致系統功能失效的觀點。通過詳細描述Xilinx FPGA各種配置方式及其在電路設計中的優缺點,深入分析了FPGA上電時的配置步驟和工作時序以及各階段I/O 管腳狀態,說明了FPGA上電配置對電路功能的嚴重影響,最后針對不同功能需求的FPGA外圍電路提出了有效的設計建議。
1 引言
隨著半導體和芯片技術的飛速發展,現在的FPGA集成了越來越多的可配置邏輯資源、各種各樣的外部總線接口以及豐富的內部RAM資源,使其在國防、醫療、消費電子等領域得到了越來越廣泛的應用。但是FPGA 大多數是基于SRAM工藝的,具有易失性,因此FPGA 通常使用外部存儲器件(如PROM)存儲必需的配置信息,防止設備掉電后FPGA丟失自我配置能力。但FPGA配置在一定的條件和時間下才能成功完成,隨著FPGA容量的不斷攀升,配置時間也被大大加長,上電時如不充分考慮FPGA的配置時序以及對其他器件的影響,根據常規經驗設計電路,往往會影響系統其他外圍器件的正常工作,嚴重時會導致整個系統的失效。因此,FPGA的配置方式和上電時序已成為系統設計的重要一環。
2 Xilinx FPGA的配置方式和特點
Xilinx FPGA支持多種配置方式,其中包括串行主模式(Master Serial)、串行從模式(Slave Serial)、并行主模式(Master SelectMAP)、并行8 位從模式(Slave Select MAP8)、并行32 位從模式(Slave Select MAP32),以及邊界掃描模式(JTAG),Virtex5器件后還增加了對SPI和BPI接口Flash的支持。
現在設計中通常用到的是串行主模式和并行主模式兩種配置方式,它們共同的特點是電路硬件設計時不需再接入一個配置時鐘,配置時由FPGA 自身提供時鐘,這樣減小了PCB設計難度以及時鐘帶來的時序干擾。但是它們也有各自的優缺點。并行配置的電路設計相對復雜,需要使用到一些多功能的配置引腳,如果在復雜或高速的配置電路中還要考慮到數據線的阻抗匹配和等長,從而加大了PCB設計難度。因此,在選擇FPGA配置方式時需要根據外圍器件的上電初始化時間和受FPGA配置影響程度以及電路復雜特性等正確選擇,同時也需要對必要的配置管腳做相應處理,后面會進行詳細分析。表1為FPGA 重要的配置管腳和定義,可以看到,有些配置管腳在并行模式下才需要用到。
表1 FPGA重要配置管腳
3 Xilinx FPGA上電配置時
FPGA和CPLD不同,上電不能直接工作,它需要一個配置過程。Xilinx FPGA需要經過8個步驟才能運行正常的運行用戶邏輯,整個流程如圖1所示
圖1 FPGA上電配置步
3.1 FPGA上電啟動
FPGA工作的第一步就是給器件加電。Xilinx要求VCCINT(核心電壓)先動,然后再是VCCO(I/O電壓),最壞情況是它們之間不能相差1s以上。在并行配置模式下,VCCO_2 要求參考電壓必須和PROM參考電壓相同,上電的過程如圖2所示。其中,TPOR(Power-on-Reset)為5~30ms,T(PL)(Program Latency)為Max 4ms,T(icck)(CCLK (output delay)為Min500ns。
圖2 FPGA上電時序
在系統正常上電或者PROG-B是一個低脈沖時,FPGA開始配置寄存器空間。這段時間除定義好的配置管腳外,其他I/O 管腳均被設置為高阻態(High-Z)。經多次測試,這個階段需要30ms左右的時間。
FPGA啟動階段最后一步就是配置啟動模式。在PROG-B變高時,FPGA 開始采集配置方式引腳(M3、M2、M1),并同時驅動CCLK輸出。在這個階段,有兩種方法可以延遲FPGA的配置時序,一種是拉低INIT-B管腳,這是由于FPGA檢測到自身還沒有初始化完畢,不會進行接下來的操作步驟,直到INIT-B管腳變高。另一種就是拉低PROG-B管腳,使FPGA還處于等待配置狀態。
3.2 FPGA數據加載
FPGA 正常數據加載前,需要做一個器件與PROM之間的同步檢查。方法是傳輸一個特殊的32位數值(0xAA995566)到FPGA中,提示FPGA下面開始傳輸的是配置數據。這個步驟對用戶來說是透明的,因為在Xilinx ISE Bitstream Generator 中生成的.bit文件中已經自動加入了這個校驗碼。
在做完配置前的通信同步后,FPGA 與PROM之間還無法識別相互間是個什么器件,于是Xilinx 就給每一個型號的FPGA 設計了一個唯一的器件ID號,這個ID號可以在Xilinx 配置手冊中查到。如上述例子中用到的XC4VS35,其ID 號為0x02088093。FPGA需要從PROM中讀出這個器件號和自身比對,如果相同就繼續下面的步驟,不同的話,配置失敗,并打印出配置故障信息。
所有準備工作正常完成后,FPGA 開始載入配置文件。這一步對大多數用戶也是透明的,由器件自行完成。這也是配置過程中最耗時的步驟,時間從100ms到幾秒不等。這個過程中,FPGA 的所有可配置I/O根據HSWAPEN管腳的設置變為弱上拉(HSWAPE=1)或者高阻態(HSWAPE=0)。這個階段的I/O管腳還沒有變為用戶需要的狀態,也最有可能影響到其他外圍電路的上電時序和運行。設計硬件電路時要特別注意并采取必要措施,如加入上下拉電阻,改變器件加電順序等來盡量避免或減少FPGA配置時對電路其他器件的影響。
配置文件載入完成后,為了驗證數據的正確性,FPGA還自動設置了CRC校驗(這個在ISE配置選項中也可以去掉,但是為了確保載入數據的正確性,這個是必須選擇的)。如果CRC 校驗不正確,FPGA會自動把INIT-B拉低,放棄這次配置。用戶必須把PROG-B引腳拉低,才能進行重新配置。
3.3 啟動序列
CRC校驗正確后,FPGA不會馬上執行用戶的邏輯,它還要進行一些自身內部電路的配置,如DCM鎖定(DCMs to Lock)、全局寫信號使能(Global Write Enable)等,這些信號的啟動順序也是在ISE配置選項中設置的。必須的啟動序列為:釋放DONE引腳;釋放GTS信號,激活IO管腳;設置全局讀寫使能,使能內部RAM和FIFOAssert;結束上電配置。
從上面論述可知,整個FPGA 的上電配置正常時序如圖3所示。
圖3 FPGA配置時序
4 FPGA配置外圍電路設計沖突與解決方法
FPGA上電配置整個過程大約需要200ms~2s,這段時間其他外圍電路器件絕大部分都已經上電并正常工作了,而FPGA 的通用I/O 管腳還處于弱上拉(HSWAPEN=0)或者不定態(HSWAPEN=1),設計時就需要考慮到這些器件上電初始化和FPGA通用I/O管腳有無時序沖突。例如:上電時,外圍器件要求I/O管腳都為低電平,而FPGA默認是弱上拉,初始化電平產生了沖突;外圍器件要求在上電復位后馬上采集配置管腳進行初始化,而FPGA還處在配置狀態,沒法正確上拉或下拉I/O管腳,器件初始化錯誤;外圍器件要求上電初始化前需要時鐘鎖相,FPGA配置時產生不了時鐘,導致器件初始化失敗等。解決這些沖突大致有3 種方法,但前提都是要正確配置HSWAPEN管腳。因為在FPGA執行“器件上電”步驟后(5~30ms時間),它輸出的I/O管腳狀態是可以通過HSWAPEN設定的。
方法1:在FPGA 的I/O 管腳外加上下拉電阻,阻值在1~10kΩ之間,根據實際需要確定。FPGA在上電后10ms內能通過上下拉電阻把I/O 管腳拉到用戶需要的電平上,這樣能解決上電較慢但是又要求固定電平的外圍電路,如功放發射開關和保護開關等。
方法2:FPGA可以在配置完成后產生一個全局復位信號,使外圍電路硬件復位,再進行一次初始化操作。這樣能解決PowrerPC、ARM這種上電初始化很快(在100ms內就能完成),而FPGA沒有配置完成,導致PowrerPC 初始化錯誤的問題。而且這種方式不用外接多余的上下拉電阻,減少了電路設計復雜性。
方法3:FPGA可以在配置完成后產生一個Power Good信號,系統根據此標志再給外圍其他有時序要求的器件上電,這樣能解決DSP或者高速AD 這種需要時鐘鎖定后再進行初始化的器件。
這三種方法也可根據具體情況混合使用,能達到更好的效果。
5 結論
通過上述分析可知,FPGA上電是一個短暫而復雜的過程,設計時需要充分考慮FPGA上電配置時序和在這過程中I/O管腳的各種狀態對外圍電路的影響。根據系統設計的具體情況,通過選用最合理的配置方式以及外圍電路連接,達到了既不影響其他器件性能和整個系統功能,同時又簡化和完善了整個電路設計的效果。
總結
以上是生活随笔為你收集整理的Xilinx FPGA通过FLASH加载程序的时序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件项目管理作业随笔之一:记我完成的一个
- 下一篇: [ElasticSearch]Sugge