基于jtag接口的宇航fpga通用刷新電路及其實現方法
【專利摘要】本發(fā)明涉及基于JTAG接口的宇航FPGA通用刷新電路,該刷新電路設計有7個輸入管腳、8個輸出管腳,分別與PROM與FPGA的管腳連接,通過JTAG接口對SRAM型FPGA進行回讀操作,確定FPGA型號并校驗回讀數據,若發(fā)生錯誤則從正確的數據源讀取碼流,從碼流中截取有效部分,并通過JTAG接口將有效碼流重新寫入FPGA的內部配置位,從而完成配置存儲器的刷新,通過本發(fā)明中的刷新電路,能夠及時檢測并糾正宇航用FPGA的單粒子翻轉,消除宇航用FPGA發(fā)生空間單粒子翻轉導致的功能故障,提高宇航FPGA空間應用可靠性。
【專利說明】基于JTAG接口的宇航FPGA通用刷新電路及其實現方法
【技術領域】
[0001]本發(fā)明涉及基于JTAG接口的宇航FPGA通用刷新電路及其實現方法,特別是用于檢測并恢復宇航用SRAM型FPGA發(fā)生的空間單粒子翻轉故障,屬于集成電路【技術領域】。
【背景技術】
[0002]SRAM型FPGA的基本結構如圖5,其中主要的功能模塊包括:四周一圈的輸入輸出模塊(Ι0Β)、邊沿兩列塊存儲器(Block RAM)、內部的可編程邏輯塊陣列(CLB),除此以外,還有遍布整個電路連接各個模塊的互聯資源。上述邏輯資源和互聯資源都由下層SRAM配置位控制。大量的遍布FPGA電路的SRAM配置位決定了 FPGA電路的具體功能,這些配置位的碼流集合即被稱為碼流(bit stream)ο
[0003]當SRAM型FPGA在空間環(huán)境應用時,空間高能粒子會穿透FPGA器件內部并在路徑上產生電離,從而引起電路節(jié)點上瞬時電流干擾而導致電路錯誤。典型的6管SRAM單元由兩個交叉連接的反相器以及兩個用于讀寫控制的門控管組成,如圖6所示為SRAM型FPGA的配置存儲器單粒子翻轉的原理。當高能粒子打在SRAM單元的靈敏區(qū)域時(以反偏η管的漏區(qū)為例),電荷在結區(qū)的收集產生了一個瞬態(tài)電流脈沖,導致該單元存儲的信息由“I”變成了 “0”,狀態(tài)出現了翻轉。這種效應就是空間單粒子翻轉效應,配置位狀態(tài)的翻轉可能導致嚴重的功能故障,導致內部功能錯亂、連線短路、斷路等。這種配置位翻轉導致的故障是永久性的故障,只能通過重新加載碼流來消除。
【發(fā)明內容】
[0004]本發(fā)明的目的在于克服現有技術的上述缺陷,提供基于JTAG接口的宇航FPGA通用刷新電路,該電路能夠消除單粒子翻轉效應對SRAM型FPGA造成的不利影響,提高宇航FPGA空間應用可靠性。
[0005]本發(fā)明的另外一個目的在于提供基于JTAG接口的宇航FPGA通用刷新電路的實現方法。
[0006]本發(fā)明的上述目的主要是通過如下技術方案予以實現的:
[0007]基于JTAG接口的宇航FPGA通用刷新電路,該刷新電路連接PROM和FPGA,所述刷新電路包括15個功能管腳,其中輸入管腳7個,分別為:時鐘管腳elk、暫停管腳pause、配置完成管腳done_fpga、初始化完成管腳initial_fpga、配置時鐘管腳cclk_fpga、JTAG數據輸出管腳tdo_fpga、PROM數據管腳data_prom,輸出管腳8個,分別為:復位管腳prog_fpga、FPGA第O配置數據位管腳din_fpga、JTAG時鐘管腳tck_fpga、JTAG數據輸入管腳tdi_fpga、JTAG 模式管腳 tms_fpga、PR0M 時鐘管腳 clk_prom、PR0M輸出使能管腳 oe_prom、PROM片選管腳ce_prom,其中:
[0008]刷新電路的clk_prom管腳連接PROM的時鐘管腳CLK,刷新電路的ce_prom管腳連接PROM的片選管腳CE,刷新電路的oe_prom管腳連接PROM的輸出使能管腳0E,刷新電路的data_prom管腳連接PROM的數據管腳DATA,刷新電路的cclk_fpga管腳連接FPGA的配置時鐘管腳CCLK,刷新電路的done_fpga管腳連接FPGA的配置完成管腳DONE,刷新電路的initial_fpga管腳連接到FPGA的初始化完成管腳initial,刷新電路的din_fpga管腳連接到FPGA的第O配置數據位管腳Din,刷新電路的tck_fpga管腳連接到FPGA的JTAG時鐘管腳TCK,刷新電路的tms_fpga管腳連接到FPGA的JTAG模式管腳TMS,刷新電路的tdi_fpga管腳連接到FPGA的JTAG數據輸入管腳TDI,刷新電路的tdo_fpga管腳連接到FPGA的JTAG數據輸出管腳TDO,刷新電路的prog_fpga管腳連接到FPGA的復位管腳program,刷新電路通過elk管腳接收外部時鐘信號,刷新電路通過pause管腳接收外部的暫?;騿有盘?。
[0009]基于JTAG接口的宇航FPGA通用刷新電路的實現方法中,包括如下步驟:
[0010](I)、上電后,刷新電路初始態(tài)為空閑狀態(tài),空閑狀態(tài)下若通過pause管腳從外部輸入的pause信號為“I”電平,則判斷done_fpga管腳從FPGA接收的done_fpga信號,若所述done_fpga信號為“I”電平則進入回讀校驗狀態(tài),進入步驟(3),若所述done_fpga信號為“O”電平則進入配置狀態(tài),進入步驟(2);
[0011](2)、刷新電路從PROM中讀取碼流,并通過cclk_fpga管腳和din_fpga管腳將碼流配置到FPGA (103)中,同時判斷done_fpga管腳從FPGA接收的done_fpga信號,若所述done_fpga信號為“I”電平則配置完成,進入回讀校驗狀態(tài),進入步驟(3),若所述done_fpga信號為“O”電平則繼續(xù)保持配置狀態(tài),重復步驟(2);
[0012](3 )、刷新電路對FPGA進行碼流回讀,通過CRC校驗判斷回讀的FPGA碼流是否正確,若不正確,則進入碼流處理狀態(tài),進入步驟(4),若正確,則仍保持回讀校驗狀態(tài),重復步驟(3);
[0013](4)、刷新電路讀取PROM中的碼流文件進行碼流處理,形成可刷新數據,并自動跳轉到刷新狀態(tài),進入步驟(5);
[0014](5)、刷新電路對FPGA的碼流進行刷新,刷新過程中檢測FPGA的done信號,若檢測到done_fpga管腳為“O”電平,則回到步驟(2),進入配置狀態(tài),若檢測到done_fpga管腳為“I”電平,則完成刷新后回到步驟(3),進入回讀校驗狀態(tài);
[0015]上述步驟(I)?(5)中任何時刻刷新電路檢測到外部輸入的pause信號為“O”電平,則進入空閑狀態(tài)。
[0016]在上述基于JTAG接口的宇航FPGA通用刷新電路的實現方法中,步驟(3)中刷新電路對FPGA進行碼流回讀,通過CRC校驗判斷回讀的FPGA碼流是否正確的具體步驟如下:
[0017](I)、刷新電路通過 tck_fpga 管腳、tdi_fpga 管腳、tms_fpga 管腳、tdo_fpga 管腳對FPGA的CRC寄存器的值進行回讀,設所述CRC寄存器的值為CRC_reg ;
[0018](2)、刷新電路通過 tck_fpga 管腳、tdi_fpga 管腳、tms_fpga 管腳、tdo_fpga 管腳對FPGA (103)的碼流進行回讀,采用CRC16算法計算碼流CRC值,設所述碼流CRC值為CRC_stream ;
[0019](3)、刷新電路將CRC_reg和CRC_stream進行對比,若一致說明回讀碼流正確,若不一致說明回讀碼流不正確。
[0020]在上述基于JTAG接口的宇航FPGA通用刷新電路的實現方法中,步驟(4)中刷新電路讀取PROM中的碼流文件進行碼流處理,形成可刷新數據的具體步驟如下:
[0021](I)、刷新電路通過 clk_prom 管腳、ce_prom 管腳、oe_prom 管腳向 PROM (101)發(fā)送讀取數據的信號,通過data_pr0m管腳讀取PROM的碼流數據,并將PROM輸出的碼流數據分解為4個部分,分別為頭部、配置命令、CLB型碼流和RAM型碼流;
[0022](2)、濾除對刷新無意義的頭部;
[0023](3)、修改配置命令中的配置字節(jié)數和配置起始地址,使得形成的可刷新數據包括CLB型碼流,不包括RAM型碼流。
[0024]在上述基于JTAG接口的宇航FPGA通用刷新電路的實現方法中,步驟(5)中刷新電路對FPGA的碼流進行刷新的具體步驟如下:
[0025](I)、刷新電路通過tck_fpga管腳、tdi_fpga管腳、tms_fpga管腳向FPGA輸入步驟(4)得到的修改配置字節(jié)數和配置起始地址后的配置命令;
[0026](2)、刷新電路繼續(xù)通過tck_fpga管腳、tdi_fpga管腳、tms_fpga管腳向FPGA輸入CLB型碼流;
[0027](3)、完成CLB型碼流輸入后,刷新電路停止刷新,不再繼續(xù)輸入完整碼流中跟隨CLB型碼流后的RAM型碼流。
[0028]在上述基于JTAG接口的宇航FPGA通用刷新電路的實現方法中,空閑狀態(tài)時,刷新電路實現連接PROM與FPGA的相關管腳的功能,PROM的CLK管腳通過刷新電路連接FPGA的CCLK管腳,PROM的CE管腳通過刷新電路連接FPGA的DONE管腳,PROM的OE管腳通過刷新電路連接FPGA的initial管腳,PROM的DATA管腳通過刷新電路連接FPGA的Din管腳,刷新電路的tck_fpga管腳、tms_fpga管腳、tdi_fpga管腳、prog_fpga管腳均輸出高阻。
[0029]本發(fā)明與現有技術相比具有如下有益效果:
[0030](I)、本發(fā)明針對現有宇航用FPGA可能出現的單粒子翻轉問題,倉Il新性的設計一種連接在PROM與FPGA之間的通用刷新電路,該刷新電路設計有7個輸入管腳、8個輸出管腳,分別與PROM與FPGA的管腳連接,通過從PROM中讀取正確的數據,刷新FPGA中的故障區(qū)域,可恢復空間單粒子翻轉造成的SRAM型FPGA功能故障,能夠有效消除單粒子翻轉效應對SRAM型FPGA造成的不利影響,提高宇航FPGA空間應用可靠性;
[0031](2)、本發(fā)明宇航FPGA通用刷新電路芯片連接簡單,對用戶系統(tǒng)設計僅新增加兩個外部引腳,使用方便;
[0032](3 )、本發(fā)明宇航FPGA通用刷新電路通過回讀可以自動識別FPGA器件型號,適用于各種FPGA器件型號,適用范圍廣、通用性強;
[0033](4 )、本發(fā)明宇航FPGA通用刷新電路的刷新頻率由用戶決定,用戶通過接到CLK上的時鐘的頻率可以自由調節(jié)刷新的頻率,適用于各種任務需求;
[0034](5)、本發(fā)明宇航FPGA通用刷新電路,用戶可以通過PAUSE信號暫?;蜷_啟刷新功能,應用方式靈活多樣,實用性強;
[0035](6)、本發(fā)明宇航FPGA通用刷新電路的實現方法通過狀態(tài)機實現,為全同步時序電路,狀態(tài)完備,流程簡單清晰,提高了電路可靠性;
[0036](7 )、本發(fā)明宇航FPGA通用刷新電路通過“回讀檢測、碼流處理、重新加載”等幾個步驟完成了對FPGA單粒子翻轉的修復,在刷新過程中,通用智能刷新電路對碼流進行篩選處理,不影響用戶正常功能。
【專利附圖】
【附圖說明】[0037]圖1為本發(fā)明刷新電路與PROM、FPGA連接示意圖;
[0038]圖2為本發(fā)明刷新電路實現方法流程圖;
[0039]圖3為本發(fā)明刷新電路在空閑狀態(tài)下內部連線和引腳電平示意圖;
[0040]圖4為本發(fā)明SRAM型FPGA的碼流結構示意圖;
[0041 ]圖5為SRAM型FPGA的體系結構圖;
[0042]圖6為SRAM型FPGA的配置存儲器單粒子翻轉的原理。
【具體實施方式】
[0043]下面結合附圖和具體實施例對本發(fā)明作進一步詳細的描述:
[0044]如圖1所示為本發(fā)明刷新電路與PROM、FPGA連接示意圖,由圖可知刷新電路102連接PR0M101和FPGA103,該刷新電路(102)包括15個功能管腳,其中輸入管腳7個,分別為:時鐘管腳elk、暫停管腳pause、配置完成管腳done_fpga、初始化完成管腳initial_fpga、配置時鐘管腳cclk_fpga、JTAG數據輸出管腳tdo_fpga、PROM數據管腳data_prom,輸出管腳8個,分別為:復位管腳prog_fpga、FPGA第O配置數據位管腳din_fpga、JTAG時鐘管腳tck_fpga、JTAG數據輸入管腳tdi_fpga、JTAG模式管腳tms_fpga、PROM時鐘管腳clk_prom、PROM輸出使能管腳oe_prom、PROM片選管腳ce_prom,其中具體連接關系如下:
[0045]刷新電路102的clk_prom管腳連接PR0M101的時鐘管腳CLK,刷新電路102的ce_prom管腳連接PR0M101的片選管腳CE,刷新電路102的oe_prom管腳連接PR0M101的輸出使能管腳0E,刷新電路102的data_prom管腳連接PR0M101的數據管腳DATA,刷新電路102的cclk_fpga管腳連接FPGA103的配置時鐘管腳CCLK,刷新電路102的done_fpga管腳連接FPGA103的配置完成管腳DONE,刷新電路102的initial_fpga管腳連接到FPGA103的初始化完成管腳initial,刷新電路102的din_fpga管腳連接到FPGA103的第O配置數據位管腳Din,刷新電路102的tck_fpga管腳連接到FPGA103的JTAG時鐘管腳TCK,刷新電路102的tms_fpga管腳連接到FPGA103的JTAG模式管腳TMS,刷新電路102的tdi_fpga管腳連接到FPGA103的JTAG數據輸入管腳TDI,刷新電路102的tdo_fpga管腳連接到FPGA103的JTAG數據輸出管腳TD0,刷新電路102的pix)g_fpga管腳連接到FPGA103的復位管腳program,刷新電路102通過elk管腳接收外部時鐘信號,刷新電路(102)通過pause管腳接收外部的暫停或啟動信號。
[0046]應用時,刷新電路102通過FPGA103的JTAG管腳(TCK、TMS、TD1、TD0)進行配置碼流刷新;應用時,刷新電路102通過FPGA103的JTAG管腳(TCK、TMS、TD1、TD0)回讀FPGA的IDcode,判斷被刷新FPGA的型號;應用時,刷新電路102通過elk管腳接收外部時鐘信號,并進入工作狀態(tài)。
[0047]如圖2所示為本發(fā)明刷新電路實現方法流程圖,本發(fā)明刷新電路102包括5種工作狀態(tài),包括空閑狀態(tài)201、配置狀態(tài)202、碼流處理狀態(tài)204、回讀校驗狀態(tài)203、刷新狀態(tài)205,本發(fā)明刷新電路102的實現方法通過狀態(tài)機實現,具體實現過程如下:
[0048]步驟(一)、上電后刷新電路102初始態(tài)為空閑狀態(tài),空閑狀態(tài)下若通過pause管腳從外部輸入的pause信號為“I”電平,則判斷done_fpga管腳從FPGA103接收的done_fpga信號,若所述done_fpga信號為“I”電平則進入步驟(三)的回讀校驗狀態(tài),,若所述done_fpga信號為“O”電平則進入步驟(二)的配置狀態(tài);[0049]步驟(二)、刷新電路102從PR0M101中讀取碼流,并通過cclk_fpga管腳和din_fpga管腳將碼流配置到FPGA103中,同時判斷done_fpga管腳從FPGA103接收的done_fpga信號,若所述done_fpga信號為“I”電平則配置完成,進入步驟(三)的回讀校驗狀態(tài),若所述done_fpga信號為“O”電平則繼續(xù)保持配置狀態(tài),重復步驟(二);
[0050]步驟(三)、刷新電路102對FPGA103進行碼流回讀,通過CRC校驗判斷回讀的FPGA碼流是否正確,若不正確,則進入步驟(四)的碼流處理狀態(tài),若正確,則仍保持回讀校驗狀態(tài),重復步驟(三);
[0051]其中:刷新電路102對FPGA103進行碼流回讀,通過CRC校驗判斷回讀的FPGA碼流是否正確的具體步驟如下:
[0052](I)刷新電路 102 通過 tck_fpga 管腳、tdi_fpga 管腳、tms_fpga 管腳、tdo_fpga管腳對FPGA103的CRC寄存器的值進行回讀,設所述CRC寄存器的值為CRC_reg ;
[0053](2)刷新電路 102 通過 tck_fpga 管腳、tdi_fpga 管腳、tms_fpga 管腳、tdo_fpga管腳對FPGA103的碼流進行回讀,采用CRC16算法計算碼流CRC值,設所述碼流CRC值為CRC_stream ;
[0054](3)刷新電路102將CRC_reg和CRC_stream進行對比,若一致說明回讀碼流正確,若不一致說明回讀碼流不正確。
[0055]步驟(四)、刷新電路102讀取PR0M101中的碼流文件進行碼流處理,形成可刷新數據,并自動跳轉到步驟(五)的刷新狀態(tài)。
[0056]如圖4所示為本發(fā)明SRAM型FPGA的基本碼流結構,其中需要進行刷新處理的是配置命令402和CLB型碼流403,而頭部401、RAM型碼流404則不能被刷新,否則會導致用戶寫入的RAM值發(fā)生變化,影響用戶正常功能。不同型號FPGA的碼流規(guī)模不同,為了正確地對碼流進行篩選,刷新電路可以通過回讀IDcode獲取被刷FPGA的型號,相應地調整碼流篩選的參數。刷新電路的刷新時序符合IEEEl 149.1協(xié)議的要求。
[0057]刷新電路102讀取PR0M101中的碼流文件進行碼流處理,形成可刷新數據的具體步驟如下:
[0058](I)刷新電路 102 通過 clk_prom 管腳、ce_prom 管腳、oe_prom 管腳向 PR0M101 發(fā)送讀取數據的信號,通過data_prom管腳讀取PR0M101的碼流數據,并將PR0M101輸出的碼流數據分解為4個部分,分別為頭部401、配置命令402、CLB型碼流403和RAM型碼流404 ;
[0059](2)濾除對刷新無意義的頭部401 ;
[0060](3)修改配置命令402中的配置字節(jié)數和配置起始地址,使得形成的可刷新數據包括CLB型碼流403,不包括RAM型碼流404。
[0061]步驟(五)、刷新電路102對FPGA103的碼流進行刷新,刷新過程中檢測FPGA103的done信號,若檢測到done_fpga管腳為“O”電平,則回到步驟(二),進入配置狀態(tài),若檢測到done_fpga管腳為“I”電平,則完成刷新后回到步驟(三),進入回讀校驗狀態(tài);
[0062]刷新電路102對FPGA103的碼流進行刷新的具體步驟如下:
[0063](I)刷新電路 102 通過 tck_fpga 管腳、tdi_fpga 管腳、tms_fpga 管腳向 FPGA103輸入上述步驟(四)得到的修改配置字節(jié)數和配置起始地址后的配置命令;
[0064](2)刷新電路102繼續(xù)通過tck_fpga管腳、tdi_fpga管腳、tms_fpga管腳向FPGA103輸入CLB型碼流;[0065](3)完成CLB型碼流輸入后,刷新電路102停止刷新,不再繼續(xù)輸入完整碼流中跟隨CLB型碼流后的RAM型碼流。
[0066]上述步驟(一)?(五)中任何時刻刷新電路102檢測到外部輸入的pause信號為“O”電平,則進入空閑狀態(tài)??臻e狀態(tài)時,刷新電路102實現連接PR0M101與FPGA103配置相關管腳的功能,PR0M101的CLK管腳通過刷新電路102連接到FPGA103的CCLK管腳,PR0M101的CE管腳通過刷新電路102連接到FPGA103的DONE管腳,PR0M101的OE管腳通過刷新電路102連接至IJ FPGA (103)的initial管腳,PR0M101的DATA管腳通過刷新電路102連接到FPGA103的Din管腳,刷新電路102的tck_fpga管腳、tms_fpga管腳、tdi_fpga管腳、prog_fpga管腳均輸出高阻。
[0067]實施例1
[0068]上電后,將刷新電路102的pause管腳接“O”電平,則刷新電路102暫停工作,進入且保持在空閑狀態(tài)201 ;刷新電路在空閑狀態(tài)下,如圖3,連通內部連線301、302、303、304,將PR0M101和FPGA103的對應管腳連接到一起,即PR0M101的CLK管腳接FPGA103的CCLK管腳、PR0M101 的 CE 管腳接 FPGA103 的 Done 管腳、PR0M101 的 OE 管腳接 FPGA103 的 Initial管腳、PR0M101的DATA管腳接FPGA103的Din管腳;同時,刷新電路102的tck_fpga、tdi_fpga、tms_fpga、prog_fpga輸出為高阻態(tài)。此時,刷新電路102對PR0M101和FPGA103均無影響,可看作刷新電路102被旁路。
[0069]實施例2
[0070]上電后,將刷新電路102的pause管腳接“I”電平,elk管腳接固定頻率的時鐘信號,開始檢測done_fpga管腳的輸入信號。若刷新電路102檢測到done_fpga電平為“O”電平,則刷新電路102將進入配置狀態(tài)202否則直接跳轉到回讀校驗狀態(tài)203。在配置狀態(tài)202下,如圖3,刷新電路102連通內部連線301、302、303、304 JfPROMlOl和FPGA103的對應管腳連接到一起,即PR0M101的CLK管腳接FPGA103的CCLK管腳、PR0M101的CE管腳接 FPGA103 的 Done 管腳、PR0M101 的 OE 管腳接 FPGA103 的 Initial 管腳、PR0M101 的 DATA管腳接FPGA103的Din管腳;在FPGA配置過程中,未完成配置的FPGA103的Done管腳輸出為“O”電平,CCLK管腳將輸出固定頻率的方波,Initial管腳為“I”電平,刷新電路102通過ce_prom管腳驅動PR0M101的CE管腳為“O”電平、通過clk_prom管腳輸出與FPGA103的CCLK管腳同步的時鐘信號驅動PR0M101的CLK管腳、通過oe_prom管腳驅動PR0M101的OE管腳為“I”電平,PR0M101將通過DATA管腳輸出配置碼流;刷新電路102將DATA管腳的輸入碼流轉發(fā)到FPGA103的Din管腳;全部碼流轉發(fā)完成后,FPGA103配置完成,DONE管腳被上拉為“I”電平,CCLK管腳的時鐘停止輸出。刷新電路102檢測到done_fpga為“I”電平,貝1J進入回讀校驗狀態(tài)203,刷新電路102通過tck_fpga管腳、tdi_fpga管腳、tms_fpga管腳、tdo_fpga管腳對FPGA103的CRC寄存器的值進行回讀,設此值為CRC_reg,隨后刷新電路 102 通過 tck_fpga 管腳、tdi_fpga 管腳、tms_fpga 管腳、tdo_fpga 管腳對 FPGA103 的碼流進行回讀,并通過CRC16算法計算CRC值,設此值為CRC_stream,對比CRC_reg和CRC_stream,若一致說明回讀碼流正確,刷新電路102繼續(xù)在回讀校驗狀態(tài)203下進行回讀檢測,若不一致說明發(fā)生了單粒子翻轉,刷新電路102進入碼流處理狀態(tài)204。在碼流處理狀態(tài)204下,刷新電路102通過ce_prom管腳驅動PR0M101的CE管腳為“O”電平、通過clk_prom管腳輸出與CLK管腳同步的時鐘信號驅動PR0M101的CLK管腳、通過oe_prom管腳驅動PR0M101的OE管腳為“I”電平,PROMlOI將通過DATA管腳輸出配置碼流,刷新電路102從data_prom管腳讀取碼流數據,并將PR0M101輸出的碼流數據分解為如圖4的4個部分,分別為頭部401、配置命令402、CLB型碼流403、RAM型碼流404,濾除對刷新無意義的頭部401,修改配置命令402中的配置字節(jié)數和配置起始地址,完成上述操作后,刷新電路102進入刷新狀態(tài)205。在刷新狀態(tài)下205,刷新電路102通過tck_fpga管腳、tdi_fpga管腳、tms_fpga管腳向FPGA103輸入修改后的配置命令,隨后繼續(xù)通過tck_fpga管腳、tdi_fpga管腳、tms_fpga管腳向FPGA103輸入CLB型碼流403,完成CLB型碼流403輸入后,停止刷新,刷新電路102再次進入回讀校驗狀態(tài)203。刷新電路102在Done信號為“I”電平,且pause信號也為“I”電平的情況下,將一直在回讀校驗203、碼流處理204、刷新205這三個狀態(tài)之間循環(huán)操作。
[0071]以上所述,僅為本發(fā)明最佳的【具體實施方式】,但本發(fā)明的保護范圍并不局限于此,任何熟悉本【技術領域】的技術人員在本發(fā)明揭露的技術范圍內,可輕易想到的變化或替換,都應涵蓋在本發(fā)明的保護范圍之內。
[0072]本發(fā)明說明書中未作詳細描述的內容屬于本領域專業(yè)技術人員的公知技術。
【權利要求】
1.基于JTAG接口的宇航FPGA通用刷新電路,其特征在于:所述刷新電路(102)連接PROM (101)和FPGA (103),所述刷新電路(102)包括15個功能管腳,其中輸入管腳7個,分別為:時鐘管腳elk、暫停管腳pause、配置完成管腳done_fpga、初始化完成管腳initial_fpga、配置時鐘管腳cclk_fpga、JTAG數據輸出管腳tdo_fpga、PROM數據管腳data_prom,輸出管腳8個,分別為:復位管腳prog_fpga、FPGA第O配置數據位管腳din_fpga、JTAG時鐘管腳tck_fpga、JTAG數據輸入管腳tdi_fpga、JTAG模式管腳tms_fpga、PROM時鐘管腳clk_prom、PROM輸出使能管腳oe_prom、PROM片選管腳ce_prom,其中: 刷新電路(102)的clk_prom管腳連接PROM (101)的時鐘管腳CLK,刷新電路(102)的ce_prom管腳連接PROM (101)的片選管腳CE,刷新電路(102)的oe_prom管腳連接PROM(101)的輸出使能管腳0E,刷新電路(102)的data_prom管腳連接PROM(101)的數據管腳DATA,刷新電路(102)的cclk_fpga管腳連接FPGA (103)的配置時鐘管腳CCLK,刷新電路(102)的done_fpga管腳連接FPGA(103)的配置完成管腳DONE,刷新電路(102)的initial_fpga管腳連接到FPGA (103)的初始化完成管腳initial,刷新電路(102)的din_fpga管腳連接到FPGA (103)的第O配置數據位管腳Din,刷新電路(102)的tck_fpga管腳連接到FPGA (103)的JTAG時鐘管腳TCK,刷新電路(102)的tms_fpga管腳連接到FPGA (103)的JTAG模式管腳TMS,刷新電路(102)的tdi_fpga管腳連接到FPGA (103)的JTAG數據輸入管腳TDI,刷新電路(102)的tdo_fpga管腳連接到FPGA (103)的JTAG數據輸出管腳TD0,刷新電路(102)的prog_fpga管腳連接到FPGA (103)的復位管腳program,刷新電路(102)通過elk管腳接收外部時鐘信號,刷新電路(102)通過pause管腳接收外部的暫停或啟動信號。
2.根據權利要求1所述的基于JTAG接口的宇航FPGA通用刷新電路的實現方法,其特征在于:包括如下步驟: (1)、上電后,刷新電路(102)初始態(tài)為空閑狀態(tài),空閑狀態(tài)下若通過pause管腳從外部輸入的pause信號為“I”電平,則判斷done_fpga管腳從FPGA (103)接收的done_fpga信號,若所述done_fpga信號為“I”電平則進入回讀校驗狀態(tài),進入步驟(3),若所述done_fpga信號為“O”電平則進入配置狀態(tài),進入步驟(2); (2)、刷新電路(102)從PROM(101)中讀取碼流,并通過cclk_fpga管腳和din_fpga管腳將碼流配置到FPGA(103)中,同時判斷done_fpga管腳從FPGA (103)接收的done_fpga信號,若所述done_fpga信號為“I”電平則配置完成,進入回讀校驗狀態(tài),進入步驟(3),若所述done_fpga信號為“O”電平則繼續(xù)保持配置狀態(tài),重復步驟(2); (3)、刷新電路(102)對FPGA(103)進行碼流回讀,通過CRC校驗判斷回讀的FPGA碼流是否正確,若不正確,則進入碼流處理狀態(tài),進入步驟(4),若正確,則仍保持回讀校驗狀態(tài),重復步驟(3); (4)、刷新電路(102)讀取PROM(101)中的碼流文件進行碼流處理,形成可刷新數據,并自動跳轉到刷新狀態(tài),進入步驟(5); (5)、刷新電路(102)對FPGA(103)的碼流進行刷新,刷新過程中檢測FPGA (103)的done信號,若檢測到done_fpga管腳為“O”電平,則回到步驟(2),進入配置狀態(tài),若檢測到done_fpga管腳為“I”電平,則完成刷新后回到步驟(3),進入回讀校驗狀態(tài); 上述步驟(1)~(5)中任何時刻刷新電路(102)檢測到外部輸入的pause信號為“O”電平,則進入空閑狀態(tài)。
3.根據權利要求2所述的基于JTAG接口的宇航FPGA通用刷新電路的實現方法,其特征在于:所述步驟(3)中刷新電路(102)對FPGA (103)進行碼流回讀,通過CRC校驗判斷回讀的FPGA碼流是否正確的具體步驟如下: (O、刷新電路(102)通過 tck_fpga 管腳、tdi_fpga 管腳、tms_fpga 管腳、tdo_fpga 管腳對FPGA (103)的CRC寄存器的值進行回讀,設所述CRC寄存器的值為CRC_reg ; (2)、刷新電路(102)通過tck_fpga 管腳、tdi_fpga 管腳、tms_fpga 管腳、tdo_fpga 管腳對FPGA (103)的碼流進行回讀,采用CRC16算法計算碼流CRC值,設所述碼流CRC值為CRC_stream ; (3)、刷新電路(102)將CRC_reg和CRC_stream進行對比,若一致說明回讀碼流正確,若不一致說明回讀碼流不正確。
4.根據權利要求2所述的基于JTAG接口的宇航FPGA通用刷新電路的實現方法,其特征在于:所述步驟(4)中刷新電路(102)讀取PROM (101)中的碼流文件進行碼流處理,形成可刷新數據的具體步驟如下: (I )、刷新電路(102)通過 clk_prom 管腳、ce_prom 管腳、oe_prom 管腳向 PROM (101)發(fā)送讀取數據的信號,通過data_prom管腳讀取PROM (101)的碼流數據,并將PROM (101)輸出的碼流數據分解為4個部分,分別為頭部、配置命令、CLB型碼流和RAM型碼流; (2)、濾除對刷新無意 義的頭部; (3)、修改配置命令中的配置字節(jié)數和配置起始地址,使得形成的可刷新數據包括CLB型碼流,不包括RAM型碼流。
5.根據權利要求4所述的基于JTAG接口的宇航FPGA通用刷新電路的實現方法,其特征在于:所述步驟(5)中刷新電路(102)對FPGA (103)的碼流進行刷新的具體步驟如下: (1)、刷新電路(102)通過tck_fpga 管腳、tdi_fpga 管腳、tms_fpga 管腳向 FPGA (103)輸入步驟(4)得到的修改配置字節(jié)數和配置起始地址后的配置命令; (2)、刷新電路(102)繼續(xù)通過tck_fpga管腳、tdi_fpga管腳、tms_fpga管腳向FPGA(103)輸入CLB型碼流; (3)、完成CLB型碼流輸入后,刷新電路(102)停止刷新,不再繼續(xù)輸入完整碼流中跟隨CLB型碼流后的RAM型碼流。
6.根據權利要求2所述的基于JTAG接口的宇航FPGA通用刷新電路的實現方法,其特征在于:空閑狀態(tài)時,刷新電路(102)實現連接PROM (101)與FPGA (103)的相關管腳的功能,PROM (101)的CLK管腳通過刷新電路(102)連接FPGA (103)的CCLK管腳,PROM (101)的CE管腳通過刷新電路(102)連接FPGA (103)的DONE管腳,PROM (101)的OE管腳通過刷新電路(102)連接FPGA (103)的initial管腳,PROM (101)的DATA管腳通過刷新電路(102)連接 FPGA (103)的 Din 管腳,刷新電路(102)的 tck_fpga 管腳、tms_fpga 管腳、tdi_fpga管腳、prog_fpga管腳均輸出高阻。
【文檔編號】H03K19/177GK103840823SQ201410051652
【公開日】2014年6月4日 申請日期:2014年2月14日 優(yōu)先權日:2014年2月14日
【發(fā)明者】張帆, 陳雷, 趙元富, 文治平, 李學武, 張彥龍, 孫華波, 王碩, 尚祖賓, 馮長磊, 王嵐施, 林彥君, 鄭咸建 申請人:北京時代民芯科技有限公司, 北京微電子技術研究所