張子明, 許劭晟2, 周勇軍, 李珊珊, 李金猛, 張小輝
(1.中國人民解放軍第5720工廠 航空設(shè)備測控與逆向工程實驗室,安徽 蕪湖 241007; 2.安徽師范大學(xué),安徽 蕪湖 241002)
隨著電子技術(shù)的飛速發(fā)展,大量的可編程邏輯器件(如GAL、CPLD、FPGA等)取代邏輯門芯片應(yīng)用于機載電路板,受限于技術(shù)資料封鎖等因素,空軍修理企業(yè)無法獲得這些器件各輸出引腳與各輸入引腳的組合邏輯關(guān)系,既難以分析電路板的工作原理,也不能對其內(nèi)部軟件進(jìn)行備份,給航空機載設(shè)備電路板的維修保障工作帶來一定的難度。
傳統(tǒng)意義上在制造業(yè)領(lǐng)域的反求工程,具體是指在設(shè)計理論和技術(shù)等支持下,相關(guān)人員通過一定的手段對設(shè)計出的新產(chǎn)品進(jìn)行透徹的分析和改進(jìn),這既是對原始設(shè)計的一種提升,也可以成為再設(shè)計[1]。結(jié)合快速發(fā)展的激光技術(shù)和數(shù)控技術(shù),反求工程正在成為汽車、航空航天、模具、玩具、船舶等工業(yè)領(lǐng)域產(chǎn)品設(shè)計制造的重要手段[2]。另外在維修領(lǐng)域,反求工程已應(yīng)用于飛機導(dǎo)管[3]、水輪機轉(zhuǎn)輪[4]的維修以及1553B總線信號接口定義反求[5-6]中。但是在制造和維修領(lǐng)域,反求工程主要應(yīng)用在機械產(chǎn)品,電子產(chǎn)品尤其是芯片級的應(yīng)用相對較少。
數(shù)據(jù)的精簡、篩選與優(yōu)化是反求工程的關(guān)鍵技術(shù)[7-9],筆者提供了一種基于輸入遍歷得到大數(shù)據(jù)的反求工程方法。組合邏輯反求模塊通過一套硬件裝置,遍歷目標(biāo)邏輯芯片的各種輸入情況,采集對應(yīng)的輸出后傳輸?shù)缴衔粰C,研究設(shè)計反求算法,再通過上位機將反求算法用高級語言編寫為可執(zhí)行程序解析采集到的海量數(shù)據(jù),從而求出芯片內(nèi)的大規(guī)模組合邏輯關(guān)系。
所研制的組合邏輯反求裝置包括上位機軟件和下位機兩個部分,其功能如下。
(1) 上位機軟件。
① 基于C語言編寫的組合邏輯反求算法軟件,用于根據(jù)輸入遍歷獲取的輸出數(shù)據(jù)來求解并輸出內(nèi)部組合邏輯關(guān)系。
② 基于VC++編寫的串口軟件,用于發(fā)送指令和獲取輸入遍歷,而對應(yīng)的輸出數(shù)據(jù)并保存為文本文件形式。
(2) 下位機。
① 被測板即各種PLD的測試夾具,被測板測試各種主流可編程邏輯器件,包括GAL、CPLD、FPGA等,為了方便邏輯注入,被測板還搭建好了邏輯器件的最小系統(tǒng)。
② 測試板由FPGA為控制器產(chǎn)生各種輸入情況,在提供被測板輸入后采集相應(yīng)的輸出,再由FPGA和RS232協(xié)議芯片搭建的串口模塊將采集到的數(shù)據(jù)上傳到上位機以供進(jìn)一步處理。
本反求裝置包括上位機和下位機兩個部分,其中下位機包括測試板和被測板以及連接器,遍歷所有的輸入情況并將輸出結(jié)果傳輸給上位機以提供進(jìn)一步處理;上位機為邏輯反求程序,具體包括反求算法程序和串口通信程序,裝置結(jié)構(gòu)框圖如圖1所示。
測試板采用FPGA作為控制器,型號為Altera公司的EP3C5E144。產(chǎn)生對目標(biāo)邏輯芯片的輸入信號,并且接收目標(biāo)邏輯芯片的輸出信號,同時提供可以上傳輸出結(jié)果的串口通信模塊,具體來說分為以下幾個部分。
圖1 裝置結(jié)構(gòu)框圖
(1) 電源電路。
在本裝置中,EP3C5E144工作需要3.3 V、2.5 V、1.2 V三種電壓,所以電源方案為外接輸入5V直流電,在此基礎(chǔ)上設(shè)計電源轉(zhuǎn)換電路。分別為使用LMS1117-3.3、LMS1117-2.5、LMS1117-1.2芯片搭建3.3 V、2.5 V、1.2 V電路。
(2) 復(fù)位電路。
復(fù)位電路提供EP3C5E144的工作開始觸發(fā),采用MAX706SESA芯片外接復(fù)位按鈕,按下按鈕時即產(chǎn)生下降沿復(fù)位信號。
(3) 時鐘電路。
時鐘電路提供EP3C5E144芯片的工作頻率基準(zhǔn),采用50 MHz有源晶振。
(4) JTAG電路和CONFIG電路。
其中,JTAG電路實現(xiàn)在線調(diào)試功能,CONFIG電路實現(xiàn)下載固化功能。
(5) LED指示燈電路。
因為本裝置處理大規(guī)模數(shù)據(jù),其遍歷和傳送需要一定時間,因此設(shè)置了LED指示燈電路用于顯示其工作狀態(tài)。
(6) 串口通信模塊。
串口通信模塊用于將遍歷輸入而得到的輸出序列傳送到上位機以進(jìn)行下一步處理。采用RS232串口協(xié)議完成與上位機的交互,硬件設(shè)計為使用SP3232EEN芯片進(jìn)行通信信號電平的轉(zhuǎn)換,波特率設(shè)置為115200 bit/s。
被測板包括各種可編程邏輯器件的安裝插座(插針),方便其裝卸;同時含有相應(yīng)的電源、時鐘、復(fù)位、配置芯片、JTAG調(diào)試口等電路和資源,使目標(biāo)器件在上電之后可以正常進(jìn)入工作狀態(tài),同時也可以在被測板上給目標(biāo)器件編程注入程序。
本裝置下位機以Verilog 硬件描述語言編寫FPGA運行的代碼,實現(xiàn)的功能包括遍歷所有輸入并獲取其相應(yīng)的輸出、接收上位機指令以及向上位機傳送輸出數(shù)據(jù)等。
下位機的主流程框圖如圖2所示。
圖2 下位機主軟件流程框圖
下位機編寫了串口通信模塊用于上下位機的數(shù)據(jù)交互,具體方法為:用FPGA自帶的PLL構(gòu)建了波特率發(fā)生器,在接收時以6倍波特率頻率采集RXD信號,一旦檢測其有下降沿,則等待3個時鐘,以便于在每個波特率中部采集信號,然后每隔6個時鐘采集一次RXD信號,采集8次后組成為接收到的一個字節(jié)數(shù)據(jù);發(fā)送時則直接采用波特率頻率作為時鐘,首先將TXD置為高電平,在接收到發(fā)送指令時將TXD置為低電平,然后每到一個時鐘發(fā)送一位數(shù)據(jù),直到將一個字節(jié)的8位數(shù)據(jù)全部發(fā)出后,再將TXD拉回高電平。接收和發(fā)送一個字節(jié)數(shù)據(jù)的軟件流程如圖3所示。
為防止數(shù)據(jù)誤傳、提高傳輸可靠性,設(shè)計了數(shù)據(jù)幀,其格式如表1所示。
反求算法是本文的核心內(nèi)容,是本裝置的關(guān)鍵部分。算法的主要思想是運用廣義上的動態(tài)規(guī)劃方法,將先前得到的輸出總序列按照自頂向下的順序確定頂層邏輯和分離邏輯左右支,然后遞歸繼續(xù)求解左右支序列的邏輯關(guān)系。具體過程如下:
圖3 RS232串口接收和發(fā)送軟件流程
類型上→下下→上幀頭0xaa0xee0xbb0xff輸入通道數(shù)/指令0x01N輸入信號(每個字節(jié)代表8通道)—N~N-7通道…15~8通道7~0通道輸出序列(每個字節(jié)代表8通道)—…15~8通道7~0通道
① 將輸入信號和輸出信號編號,然后類似于存儲器模式將輸入信號看作地址總線,將輸出信號看作數(shù)據(jù)總線,按照地址遞增順序讀取輸出數(shù)據(jù)。
② 選擇待分離輸入(組),置于地址大端,通過置換調(diào)整輸出數(shù)據(jù),得到相對應(yīng)的輸出信號序列。
③ 檢測輸出信號是否滿足邏輯對稱性,若不滿足,則重新執(zhí)行步驟②;若滿足則分離頂層邏輯(∪或∩),并且得出邏輯左右支的輸入(組)以及對應(yīng)的輸出信號序列,并將輸出信號序列代入步驟②,進(jìn)行遞歸操作。
反求算法流程如圖4所示。
圖4 反求算法流程
以邏輯式:OUT=(A∩B)∪(C∩D)為例對以上算法進(jìn)行補充說明:
① 在步驟②中,若發(fā)現(xiàn)輸出序列的規(guī)模縮小為2,則根據(jù)輸出序列的情況返回4種邏輯關(guān)系,見表2。
表2 輸出序列規(guī)模為2時的對應(yīng)邏輯情況
② 邏輯對稱性的說明:對于M路總輸入,待分離的N路輸入(組)時,將輸出序列劃分為規(guī)模為2N的2M-N個輸出組,如果這些輸出組只有兩種序列,其中有一組為全1或全0,則稱為該輸出具備邏輯對稱性。如表3所示,待分離的輸入為A和B兩路,總輸入為4路,因此輸出序列劃分為規(guī)模為4的4個輸出組,這些輸出組只有0001和1111兩種序列,因此具備邏輯對稱性。
③ 頂層邏輯和左右支序列的確定:如果出現(xiàn)全1項的邏輯對稱性,則頂層邏輯為“并”;如果出現(xiàn)全0項,則頂層邏輯為“交”。左支序列規(guī)模為2N,規(guī)則為如果對應(yīng)的序列有全1項,則全1項對應(yīng)的輸出為1,其他對應(yīng)的輸出為0;如果對應(yīng)的序列有全0項,則全0項對應(yīng)的輸出為0,其他對應(yīng)的輸出為1。右支序列的確定更為簡單,直接選取除全0或全1項之外的那一組輸出序列即可。如表3所示,最下方的輸出塊為全1,則頂層邏輯為“并”(第5列交叉線單元格);另外前三塊輸出為相同的非全1項,左支序列對應(yīng)為000(第5列左斜線單元格),加上最后的全1輸出,左支序列對應(yīng)為1,因此左支序列為0001(第6列所示);右支序列直接選擇非全1項,即第5列左斜線框中的序列,為0001。
④ 在分離頂層邏輯時,也可以排除無效輸入,加快求解速度。
表3 OUT=(A∩B)∪(C∩D)真值表相關(guān)
使用開發(fā)環(huán)境編寫串口工具,具備RS232協(xié)議通信功能的同時,還可將接收到的數(shù)據(jù)保存為TXT文件,用來提供給4.1節(jié)的算法作為數(shù)據(jù)源進(jìn)行邏輯反求。
使用所設(shè)計的裝置對PLD進(jìn)行邏輯反求主要分為以下步驟,如圖5所示。
① 根據(jù)需要操作的PLD芯片選擇相應(yīng)的夾具,將器件安裝在夾具上,并且完成測試板與夾具的安裝使其連接起來。圖6為測試ispLSI1048(CPLD)時夾具與測試板連接的情況。
② 根據(jù)目標(biāo)器件在電路板中的使用情況,分析確定出該芯片哪些引腳是輸入引腳,哪些引腳是輸出引腳,另外本文只針對組合邏輯的反求,所以要排除時序邏輯的情況。
③ 根據(jù)目標(biāo)器件的輸入輸出數(shù)量確定數(shù)據(jù)規(guī)模,并編寫下位機FPGA的遍歷程序,另外根據(jù)目標(biāo)器件的輸入輸出情況確定下位機FPGA的引腳方向配置。
圖5 裝置操作步驟流程框圖
圖6 測試ispLSI1048及其夾具
④ 將裝置與上位機的串口相連,裝置上電,打開相應(yīng)的上位機RS232端口。
⑤ 上位機發(fā)送握手指令,若收到回復(fù)則握手成功,可以進(jìn)行下一步操作,否則反復(fù)握手直至收到回復(fù)。
⑥ 上位機發(fā)送遍歷開始指令,裝置開始逐一給出所有的輸入組合,并且將得到的輸出結(jié)果發(fā)送到上位機。
⑦ 數(shù)據(jù)接收完畢后,將數(shù)據(jù)保存為文本文件的形式,然后將該文件與邏輯反求軟件存放在相同路徑下。
⑧ 運行反求軟件,開始邏輯關(guān)系求解,并且以文本文件的形式輸出最終結(jié)果供用戶分析。
GAL器件的特點是小巧靈活,引腳數(shù)較少,一般實現(xiàn)較簡單的組合邏輯功能,可以用人工手段反求其邏輯關(guān)系,但是耗時較長。
現(xiàn)針對一款4輸入4輸出的GAL器件進(jìn)行邏輯反求,使用所設(shè)計的反求裝置進(jìn)行自動求解,僅用時2 s即可完成全部解算工作。將輸入代入邏輯式驗證結(jié)果正確,反求成功。但是在引腳配置、器件安裝等環(huán)節(jié)需要耗去一定時間。因此在小規(guī)模的邏輯反求中優(yōu)勢尚不明顯。
CPLD器件引腳數(shù)較多,實現(xiàn)的組合邏輯關(guān)系比較復(fù)雜,例如本次測試選擇的CPLD擁有18輸入和16輸出,其數(shù)據(jù)規(guī)模達(dá)到218×16=4194304個,因此是無法使用人工方法求解其邏輯關(guān)系的。
將該器件按照以上方法進(jìn)行邏輯反求,求解時間大約為180 s,最后得出了其內(nèi)部的邏輯關(guān)系。圖7列出了各輸出對應(yīng)的邏輯關(guān)系。
圖7 求解出的邏輯關(guān)系
將求解出的邏輯關(guān)系使用Verilog語言編寫后燒入另一片CPLD中,再將該CPLD遍歷得到相應(yīng)的輸出數(shù)據(jù),將該數(shù)據(jù)文件與原器件得到的數(shù)據(jù)文件進(jìn)行比較,如圖8所示,一共262145行數(shù)據(jù)無任何差異,完全相同,驗證了反求正確率達(dá)到100%。
本次測試可以看出,其反求用時較短,結(jié)果準(zhǔn)確,可靠性和可用性高,相比人工方法具有不可比擬的優(yōu)勢。
在進(jìn)行了兩款PLD器件的反求測試后,將本裝置應(yīng)用于實際板件的維修中:某機型飛控產(chǎn)品某部件出現(xiàn)故障,經(jīng)過故障定位該產(chǎn)品電路板的D1芯片(GAL)存在問題。但是由于普通商用編程器無法讀取芯片內(nèi)的代碼,該芯片無法替換,嚴(yán)重影響該產(chǎn)品的修復(fù)進(jìn)程。
該芯片設(shè)計為9輸入、8輸出的組合邏輯功能。使用本反求裝置,對無故障產(chǎn)品的正常D1芯片進(jìn)行遍歷反求,在15 s內(nèi)即求解出該芯片的內(nèi)部邏輯關(guān)系
圖8 數(shù)據(jù)對比驗證
式。得出邏輯關(guān)系式后通過正向編程的方法對空白的D1芯片燒寫操作,再將此芯片替換掉故障芯片,重新對產(chǎn)品上電測試,產(chǎn)品工作正常,故障排除。
針對目前無法使用計算機自動反求機載PLD內(nèi)部組合邏輯關(guān)系這一現(xiàn)狀,基于輸入遍歷運用大數(shù)據(jù)技術(shù)研制了一款機載PLD內(nèi)部組合邏輯關(guān)系反求裝置。實驗結(jié)果表明,該裝置操作簡單便捷,性能穩(wěn)定可靠,可以快速反求出機載PLD的內(nèi)部邏輯關(guān)系,從而應(yīng)用于含PLD的航空電子產(chǎn)品原理分析及產(chǎn)品維修中。