一、摘要
明德?lián)P(MDY)在某個(gè)XILINX項(xiàng)目中,偶然性出現(xiàn)開(kāi)機(jī)后通信出錯(cuò)的情形,具體表現(xiàn)為反復(fù)開(kāi)機(jī)測(cè)試400次后,約有1~2次通信異常,數(shù)據(jù)發(fā)不出去。經(jīng)過(guò)定位,是某個(gè)FIFO出現(xiàn)異常,時(shí)鐘正常、復(fù)位無(wú)效、寫(xiě)使能有效的情況,空信號(hào)empty一直為1,即一直保持為空的問(wèn)題。
二、項(xiàng)目背景
FIFO是FPGA項(xiàng)目中使用最多的IP核,一個(gè)項(xiàng)目使用幾個(gè),甚至是幾十個(gè)FIFO都是很正常的。通常情況下,每個(gè)FIFO的參數(shù),特別是位寬和深度,是不同的。如果按照通常做法,每種位寬和參數(shù),都要打開(kāi)FIFO IP核界面、命名(命名不好不好分辨需要的FIFO)、設(shè)置參數(shù)、生成并編譯IP核,工作量可以想象出來(lái)是非常多的。
明德?lián)P(MDY)在2021年承擔(dān)了多個(gè)基于XILINX芯片的研發(fā)項(xiàng)目,包括VPX網(wǎng)絡(luò)透明傳輸項(xiàng)目(芯片為XC7K325T-2FBG900)、某高端測(cè)試儀項(xiàng)目(芯片為XCKU060-FFVA1156)、某網(wǎng)閘設(shè)備項(xiàng)目(芯片為XC7Z030-FBG676)等,另外,明德?lián)P自研了基于XC7K325T-2FBG900和基于XC7K410T-2FBG900芯片的核心板,在XILINX研發(fā)領(lǐng)域擁有豐富的經(jīng)驗(yàn)。
對(duì)于我們專門(mén)承接項(xiàng)目的團(tuán)隊(duì),絕不可忍受如此重復(fù)、枯燥、容易出錯(cuò)的工作。經(jīng)過(guò)精心研究,終于發(fā)現(xiàn)XILINX的原語(yǔ):xpm_fifo_async,是可以可參數(shù)化FIFO的位寬和深度的。即在設(shè)計(jì)時(shí),不用生成FIFO IP,直接例化xpm_fifo_async,例化時(shí)定義好位寬和深度,就可以使用了。關(guān)于具體的使用方法,可以留意我們新出的文章教程。
本問(wèn)題的出現(xiàn),就是在使用這個(gè)xpm_fifo_async時(shí)出現(xiàn)的。
三、問(wèn)題現(xiàn)象
FPGA問(wèn)題都不好定位,特別是偶然性出錯(cuò)的問(wèn)題,即使復(fù)現(xiàn)問(wèn)題都要花大量精力。本問(wèn)題出現(xiàn)的概率小于1%,即使概率如此之低,也是不得不去定位去做的工作。
在花費(fèi)了一個(gè)月的時(shí)間,才定位到某個(gè)FIFO出現(xiàn)異常。為更加細(xì)致地確認(rèn)是FIFO哪里出錯(cuò),使用ILA抓取FIFO的信號(hào),包括寫(xiě)使能、復(fù)位、空指示信號(hào)等。
如上圖所示,在FIFO寫(xiě)使能有效時(shí),empty信號(hào)仍然保持為空狀態(tài),導(dǎo)致數(shù)據(jù)無(wú)法傳輸。更奇怪的是,即使復(fù)位了這個(gè)FIFO,仍然是同樣現(xiàn)象。
四、問(wèn)題分析
該問(wèn)題非常之奇怪,從邏輯角度講,時(shí)序是正確的,那么IP核就應(yīng)該正確,是不應(yīng)該出現(xiàn)此問(wèn)題的。
懷疑是FIFO使用不正確,如FIFO滿后還在寫(xiě),或者FIFO空后仍在讀。特意在ILA觸發(fā)寫(xiě)使能、寫(xiě)滿信號(hào)同時(shí)為1,看兩者是否有同時(shí)有效,沒(méi)有觸發(fā)到,說(shuō)明沒(méi)有問(wèn)題。
懷疑是寫(xiě)時(shí)序不正確:為此,我們還反反復(fù)復(fù)地觀測(cè)寫(xiě)時(shí)序,捕捉開(kāi)機(jī)后的第一個(gè)寫(xiě)時(shí)序,也是沒(méi)問(wèn)題的。
懷疑處于復(fù)位狀態(tài):為此觀測(cè)復(fù)位信號(hào),發(fā)現(xiàn)沒(méi)有處于復(fù)位狀態(tài),沒(méi)有問(wèn)題。
在思考了多種辦法后,問(wèn)題沒(méi)有解決。為此,不得不認(rèn)真查閱xpm_fifo_async的官方資料,查看步驟:
vivodo-PROJECT?MANAGER-Language?Templates-Verilog-Xilinx?Parameterized?Macros(XPM)-XPM-XPM_FIFO-Asynchronous?FIFO?(xpm_?fifo?async)。
通過(guò)調(diào)閱vivado中有關(guān)FIFO的說(shuō)明,終于發(fā)現(xiàn)了問(wèn)題。
如上圖所示,復(fù)位信號(hào)rst要求同步于WR_CLK時(shí)鐘。而我們的復(fù)位信號(hào)是異步信號(hào),不滿足要求。
五、解決方法
對(duì)?FIFO中的復(fù)位信號(hào)進(jìn)行異步信號(hào)同步化處理,即對(duì)復(fù)位信號(hào)進(jìn)行延遲兩拍處理,如下圖所示:
上圖中,aclr是異步復(fù)位信號(hào),經(jīng)過(guò)上圖中的148~153行的代碼,將該信號(hào)同步化,同步化后的rst_ff3可以認(rèn)為同步于寫(xiě)時(shí)鐘。將該信號(hào)連接到rst中,如圖中的第142行。
每3分鐘重啟一次,經(jīng)過(guò)三天的嚴(yán)苛測(cè)試,再?zèng)]有出現(xiàn)通信異常問(wèn)題,問(wèn)題得到解決?。?!
明德?lián)P(MDY)除了承接項(xiàng)目外,還可為客戶提供FPGA芯片、電源芯片、AD芯片等元器件,可找我們了解。
審核編輯:湯梓紅
評(píng)論