李 卿,惠 鋒,董志丹
(無(wú)錫中微億芯有限公司,江蘇無(wú)錫 214072)
隨著 FPGA(Field-Programmable Gate Array)的發(fā)展,芯片的性能越來(lái)越強(qiáng)、規(guī)模越來(lái)越大、開(kāi)發(fā)周期越來(lái)越長(zhǎng),使得芯片設(shè)計(jì)面臨一系列新的問(wèn)題,如設(shè)計(jì)質(zhì)量難以控制,設(shè)計(jì)成本越來(lái)越高等,IP(Intelligence Property)技術(shù)則解決了芯片設(shè)計(jì)所面臨的難題。IP是指用來(lái)生成ASIC和PLD的邏輯功能塊,又稱IP核(IP Core)[1]。設(shè)計(jì)者可以重復(fù)使用已經(jīng)設(shè)計(jì)并經(jīng)過(guò)驗(yàn)證的IP核,從而更專注于整個(gè)系統(tǒng)的設(shè)計(jì),提高設(shè)計(jì)的效率和正確性,降低成本。因此,IP核在電子設(shè)計(jì)自動(dòng)化(Electronic Design Automation,EDA)工具推廣和使用中扮演著舉足輕重的角色。該文重點(diǎn)講述IP核圖形用戶界面(GUI)的實(shí)現(xiàn)。
友好、易用的圖形用戶界面在產(chǎn)品推廣時(shí)起著至關(guān)重要的作用。目前,編程人員多使用VC++、JAVA、Qt等語(yǔ)言實(shí)現(xiàn)Windows下的GUI應(yīng)用[2]。但是作者在程序開(kāi)發(fā)過(guò)程中發(fā)現(xiàn),IP Core種類繁多,每個(gè)IP對(duì)應(yīng)一個(gè)界面,功能雖類似但又有獨(dú)特性,且需進(jìn)行文件處理,此時(shí)完全使用代碼編寫(xiě)來(lái)實(shí)現(xiàn)GUI設(shè)計(jì)與開(kāi)發(fā)并非明智之舉。一方面編程人員代碼編寫(xiě)任務(wù)比較繁瑣,每個(gè)界面都需要大量代碼來(lái)實(shí)現(xiàn);另一方面,界面響應(yīng)處理完全由代碼實(shí)現(xiàn),無(wú)論是修改界面外觀還是響應(yīng)處理都需要重新編譯代碼再發(fā)布,不利于維護(hù);此外,文件的處理并非上述編程語(yǔ)言的優(yōu)勢(shì)。因此,根據(jù)項(xiàng)目特點(diǎn)選擇合適的開(kāi)發(fā)語(yǔ)言與實(shí)現(xiàn)方式是一個(gè)關(guān)鍵,有助于提高開(kāi)發(fā)效率并減少維護(hù)成本。
本文采用工具命令語(yǔ)言(Tool Command Language,TCL)實(shí)現(xiàn)與Qt GUI的交互,將界面控件的狀態(tài)信息等放置在TCL文件中配置,當(dāng)用戶想修改控件之間的邏輯關(guān)系時(shí),只需修改TCL控制文件即可,不需要修改程序代碼,靈活方便,極大地減少了代碼維護(hù)工作,從而達(dá)到動(dòng)態(tài)配置的效果。
TCL指工具命令語(yǔ)言,功能強(qiáng)大,基礎(chǔ)結(jié)構(gòu)和語(yǔ)法非常簡(jiǎn)單,易于學(xué)習(xí)和掌握,主要有如下特點(diǎn)[3]:(1)TCL是一種解釋執(zhí)行的腳本語(yǔ)言,支持變量、循環(huán)、過(guò)程等使用的編程元素;(2)TCL提供了豐富的C語(yǔ)言調(diào)用接口,可以很容易地嵌入至C語(yǔ)言程序中;(3)TCL是一個(gè)開(kāi)放式的開(kāi)發(fā)工具,提供了豐富的功能擴(kuò)展函數(shù),允許用戶編寫(xiě)新的命令解釋程序,加入TCL的解釋器中。
Qt是一個(gè)多平臺(tái)的C++圖形用戶界面應(yīng)用程序框架,主要有如下特點(diǎn)[4]:(1)Qt提供了一組強(qiáng)大、容易理解的GUI類,運(yùn)行得更快;(2)Qt特有的信號(hào)和槽機(jī)制構(gòu)造了一個(gè)強(qiáng)大的部件編程機(jī)制,更易使用;(3)Qt圖形設(shè)計(jì)器(Qt Designer)是一個(gè)所見(jiàn)即所得的全方位GUI構(gòu)造器,利用該設(shè)計(jì)器,開(kāi)發(fā)者可以擺放各種Qt控件構(gòu)造圖形用戶界面,而不需要編寫(xiě)一行代碼。
由于TCL提供了與C的接口函數(shù),所以可以在Qt應(yīng)用程序中調(diào)用TCL庫(kù)函數(shù),執(zhí)行TCL的命令或腳本,具體流程如圖1所示[5]。
圖1 TCL執(zhí)行流程
每個(gè)IP對(duì)應(yīng)一個(gè)界面,因此,為達(dá)到設(shè)計(jì)的簡(jiǎn)潔性與靈活性,摒棄傳統(tǒng)的編寫(xiě)代碼實(shí)現(xiàn)界面功能的方式,采用Qt與TCL交互的方式來(lái)實(shí)現(xiàn)。每個(gè)IP設(shè)計(jì)對(duì)應(yīng)的界面文件(.ui)和控制文件(.tcl),其中界面文件用于IP界面顯示,控制文件管理界面控件的屬性、邏輯關(guān)系、IP文件生成,它們之間通過(guò)Qt程序代碼進(jìn)行管控,根據(jù)用戶需求執(zhí)行相應(yīng)代碼文件。此種設(shè)計(jì)方式可以將文件設(shè)計(jì)與Qt代碼編寫(xiě)相分離,分配給不同的工程師負(fù)責(zé),術(shù)業(yè)有專攻,各司其職。當(dāng)界面設(shè)計(jì)修改時(shí)只需修改界面文件和控制文件,無(wú)需修改程序代碼,方便快捷地響應(yīng)用戶需求,從而將開(kāi)發(fā)人員從繁瑣的編碼修改工作中解脫出來(lái)。Qt與各文件之間的關(guān)系如圖2所示。
圖2 Qt與各文件之間的關(guān)系
整個(gè)IP Core主要分為UI界面文件設(shè)計(jì)、TCL控制文件設(shè)計(jì)、Qt程序代碼,下面分模塊進(jìn)行闡述。
UI文件采用Qt圖形設(shè)計(jì)器進(jìn)行設(shè)計(jì),它為用戶提供可視化的界面設(shè)計(jì),簡(jiǎn)單、方便、快捷,不需編寫(xiě)代碼即可實(shí)現(xiàn)界面的設(shè)計(jì),生成對(duì)應(yīng)的.ui文件。若想修改外觀界面,直接更改該UI文件即可,不需更改程序代碼,達(dá)到動(dòng)態(tài)配置的效果,極大地減少代碼的編程工作。
UI界面主要由兩部分組成:QStacked Widget和QTab Widget。QStacked Widget主要用于顯示控件界面,可以分多頁(yè)展示,設(shè)計(jì)師根據(jù)需要擺放控件;QTab Widget主要用于顯示IP模型圖和總結(jié)信息,模型圖在Qt代碼中進(jìn)行繪制。此外,UI中控件通過(guò)名稱與TCL文件中控制信息進(jìn)行關(guān)聯(lián),因此設(shè)計(jì)UI時(shí)控件名稱要與TCL文件中的一致。
為保證界面大小的自適應(yīng),所有控件放置在布局管理器中,如圖3所示(以DCM為例)。
圖3 UI設(shè)計(jì)界面
TCL是一個(gè)開(kāi)放式的腳本語(yǔ)言,功能強(qiáng)大、可快速學(xué)習(xí)、快速開(kāi)發(fā),因此控制文件采用TCL編寫(xiě),通過(guò)該文件可實(shí)現(xiàn)動(dòng)態(tài)響應(yīng)用戶配置、生成模塊代碼。每個(gè)IP核有自己對(duì)應(yīng)的TCL控制文件,響應(yīng)不同的IP即調(diào)用不同的控制文件。當(dāng)用戶想修改控件之間的邏輯關(guān)系時(shí),只需修改TCL控制文件即可,不需要修改程序代碼,靈活方便。
TCL控制文件與UI界面文件中的控件通過(guò)名稱進(jìn)行關(guān)聯(lián),從而達(dá)到動(dòng)態(tài)控制界面狀態(tài)的效果。TCL控制文件主要包括控件屬性設(shè)置、Pin屬性設(shè)置、控制函數(shù)、IP文件生成等。
(1)控件屬性設(shè)置,主要用于UI界面中控件屬性值的初始化,如設(shè)置控件的值、值類型、使能狀態(tài)、是否顯示、參數(shù)值列表等,格式如下:
(2)Pin屬性設(shè)置,主要用于繪制IP模型圖,屬性值主要包括Pin名稱、方向、類型、使能狀態(tài)、是否顯示、寬度范圍等,格式如下:
圖4 Qt代碼流程
(3)控制函數(shù),用于設(shè)置各控件值、控制UI界面各控件之間的邏輯關(guān)系等,從而達(dá)到動(dòng)態(tài)控制界面狀態(tài)的效果。主要包括各控件的更新函數(shù)、校驗(yàn)函數(shù)以及管腳更新函數(shù) (update_pins)、最終狀態(tài)函數(shù)(finalize)。
(4)IP文件生成,根據(jù)用戶配置生成對(duì)應(yīng)的IP文件。
此外TCL文件還定義了控件的Get與Set方法,Get方法用于獲取界面控件值,Set方法用于設(shè)置界面控件值,從而實(shí)現(xiàn)TCL與界面的交互。
Qt代碼將UI界面文件和TCL控制文件有效地連通起來(lái)。Qt加載UI文件用于顯示UI界面,執(zhí)行TCL控制文件用于配置界面參數(shù)信息。所有的參數(shù)都在程序中集中管理,用戶操作UI界面時(shí)首先更改Qt的參數(shù)信息,然后執(zhí)行TCL中的函數(shù)更改相應(yīng)參數(shù)值與邏輯關(guān)系,TCL文件中通過(guò)Get方法獲取參數(shù)數(shù)據(jù),而TCL文件中若更改參數(shù)信息,則通過(guò)Set方法與程序中的參數(shù)信息同步,最后更新UI界面,從而實(shí)現(xiàn)動(dòng)態(tài)響應(yīng)用戶配置參數(shù)。整體工作流程如圖4所示。
IP界面主要由兩部分組成,一部分為模型圖顯示,一部分為控件顯示。Qt程序加載設(shè)計(jì)好的UI文件,首先查找QTab Widget控件,若該控件存在則根據(jù)獲取的所有Pin信息繪制IP模型圖,若該控件不存在則不需繪制IP模型圖;其次根據(jù)TCL控制文件中各控件屬性值顯示與配置QStacked Widget控件,從而實(shí)現(xiàn)界面初始化,在更新TCL控制文件數(shù)據(jù)時(shí),調(diào)用各控件的 update_xx、finalize_xx、validate_xx 函數(shù) (xx對(duì)應(yīng)控件的名稱),以及update_pins、finalize函數(shù),界面顯示流程如圖5所示。
而當(dāng)用戶操作UI界面時(shí),控件響應(yīng)用戶綁定的信號(hào)槽,更新參數(shù)數(shù)據(jù),并調(diào)用TCL函數(shù)更新數(shù)據(jù)與邏輯關(guān)系,最后重新繪制UI界面,如圖6所示。
圖5 界面顯示流程
圖6 響應(yīng)用戶界面流程
Qt程序代碼設(shè)計(jì)完畢即可執(zhí)行該程序。用戶選擇要查看的IP,程序自動(dòng)加載該IP的配置文件,即UI界面文件和TCL控制文件,并顯示該IP圖形界面。用戶根據(jù)需求配置該IP屬性并生成對(duì)應(yīng)的IP核,程序執(zhí)行界面如圖7所示(以DCM為例)。
圖7 程序執(zhí)行界面
該文實(shí)現(xiàn)了一種Qt+TCL的界面實(shí)現(xiàn)方式,由于IP核種類繁多且又有獨(dú)特性,因此摒棄傳統(tǒng)編寫(xiě)代碼實(shí)現(xiàn)的方式,采用配置文件的方式,每個(gè)IP設(shè)計(jì)對(duì)應(yīng)的界面文件和控制文件,通過(guò)Qt代碼進(jìn)行管控。當(dāng)用戶想修改界面設(shè)計(jì)時(shí),只需修改界面文件和控制文件即可,不需要修改與編譯程序代碼;此外,當(dāng)擴(kuò)展用戶IP時(shí),也只需編寫(xiě)對(duì)應(yīng)的界面文件與控制文件,非常靈活方便,易于擴(kuò)展與維護(hù)工作,從而達(dá)到動(dòng)態(tài)配置的效果。
[1]P Chauhan,EM Clarke,Y Lu,D Wang.Verifying IP-core based system-on-chip designs[C].IEEE International Asic/soc Conference,1999:27-31.
[2]萬(wàn)連文.基于XML的圖形用戶界面構(gòu)建平臺(tái)的研究與實(shí)現(xiàn)[D].中國(guó)地質(zhì)大學(xué),2008.
[3]John K,Ousterhout Ken Jones.Tcl/Tk入門(mén)經(jīng)典 (第2版)[M].北京:清華大學(xué)出版社,2010.
[4]蔡志明,盧傳富,李立夏.精通Qt4編程(第2版)[M].北京:電子工業(yè)出版社,2010.
[5]楊怡玲,王換招,管旭東.利用Tcl/Tk實(shí)現(xiàn)X Windows下的GUI[J].微電子學(xué)與計(jì)算機(jī),1999,1.
[6]李杰.IP核驗(yàn)收平臺(tái)搭建與圖形用戶界面開(kāi)發(fā)[D].哈爾濱:哈爾濱工業(yè)大學(xué),2015.