本發(fā)明涉及集成電路
技術(shù)領(lǐng)域:
,尤其涉及一種基于多核處理器的現(xiàn)場(chǎng)可編程門(mén)陣列(FieldProgrammableGateArray,F(xiàn)PGA)芯片的并行布線方法。
背景技術(shù):
:現(xiàn)場(chǎng)可編程門(mén)陣列FPGA芯片是一種具有豐富硬件資源、強(qiáng)大并行處理能力和靈活可重配置能力的邏輯器件。這些特征使得FPGA在數(shù)據(jù)處理、通信、網(wǎng)絡(luò)等很多領(lǐng)域得到了越來(lái)越多的廣泛應(yīng)用。FPGA的軟件流程可以包括綜合處理、映射、布局和布線。現(xiàn)有技術(shù)的布線算法是基于單處理器單線程進(jìn)行的串行計(jì)算節(jié)點(diǎn)cost值的過(guò)程,即在一個(gè)有向圖中從一個(gè)源節(jié)點(diǎn)到目的節(jié)點(diǎn)的路徑搜索過(guò)程。節(jié)點(diǎn)cost值是指布線時(shí)使用節(jié)點(diǎn)的代價(jià)評(píng)估值,該代價(jià)評(píng)估值包括通過(guò)該節(jié)點(diǎn)的物理延時(shí),當(dāng)前擁擠狀態(tài)、歷史擁擠狀態(tài),該節(jié)點(diǎn)所處線網(wǎng)的關(guān)鍵度等信息。然而,由于COST值涉及的因素較多,因此的計(jì)算量通常比較大。在現(xiàn)有的FPGA芯片的整個(gè)軟件流程中,布線的運(yùn)行時(shí)間通常占用時(shí)間的比例往往在50%以上,也就是說(shuō),現(xiàn)有技術(shù)的布線運(yùn)行時(shí)間較長(zhǎng)。技術(shù)實(shí)現(xiàn)要素:本申請(qǐng)實(shí)施例提供了一種基于多核處理器的現(xiàn)場(chǎng)可編程門(mén)陣列芯片的并行布線方法。該方法流程可以分為主線程和至少一個(gè)子線程。該方法可以減少布線運(yùn)行時(shí)間。第一方面,該方法可以包括:主線程對(duì)FPGA芯片的源節(jié)點(diǎn)進(jìn)行識(shí)別,獲取源節(jié)點(diǎn)關(guān)聯(lián)的第一候選節(jié)點(diǎn);主線程根據(jù)第一候選節(jié)點(diǎn)的數(shù)量和多核處理器的核數(shù),確定子線程的數(shù)量,并啟動(dòng)子線程。主線程向啟動(dòng)后的子線程依次發(fā)送第一候選節(jié)點(diǎn);主線程接收子線程根據(jù)第一候選節(jié)點(diǎn)并行計(jì)算出的相應(yīng)COST值。主線程對(duì)最低的COST值對(duì)應(yīng)的第一候選節(jié)點(diǎn)進(jìn)行識(shí)別,并根據(jù)識(shí)別結(jié)果,對(duì)FPGA芯片進(jìn)行布線。在一個(gè)可選的實(shí)現(xiàn)中,主線程對(duì)FPGA芯片進(jìn)行識(shí)別,獲取源節(jié)點(diǎn)關(guān)聯(lián)的至少一個(gè)第一候選節(jié)點(diǎn)之后,主線程將第一候選節(jié)點(diǎn)存儲(chǔ)在第一隊(duì)列中。主線程向子線程依次發(fā)送第一候選節(jié)點(diǎn),具體包括:主線程接收子線程發(fā)送的布線請(qǐng)求;主線程根據(jù)布線請(qǐng)求,判斷第一隊(duì)列是否為空;若否,則主線程向空閑的子線程發(fā)送所述第一候選節(jié)點(diǎn);若是,則主線程向所有的子線程發(fā)送結(jié)束線程信號(hào),以通知布線結(jié)束。在一個(gè)可選的實(shí)現(xiàn)中,主線程接收至少一個(gè)子線程發(fā)送的布線請(qǐng)求之后,主線程向子線程發(fā)送請(qǐng)求響應(yīng)信號(hào),以指示收到布線請(qǐng)求。在一個(gè)可選的實(shí)現(xiàn)中,當(dāng)主線程識(shí)別出第一候選節(jié)點(diǎn)不是目的節(jié)點(diǎn)時(shí),主線程對(duì)第一候選節(jié)點(diǎn)進(jìn)行識(shí)別,獲取第一候選節(jié)點(diǎn)的第二候選節(jié)點(diǎn),以接收子線程發(fā)送的第二候選節(jié)點(diǎn)的COST值。在一個(gè)可選的實(shí)現(xiàn)中,主線程接收子線程根據(jù)第一候選節(jié)點(diǎn)并行計(jì)算出的COST值之后,主線程將第一候選節(jié)點(diǎn)以及第一候選節(jié)點(diǎn)對(duì)應(yīng)的COST值存儲(chǔ)在第二隊(duì)列中。在一個(gè)可選的實(shí)現(xiàn)中,主線程對(duì)最低的COST值對(duì)應(yīng)的第一候選節(jié)點(diǎn)進(jìn)行識(shí)別具體包括:當(dāng)主線程確定最低的COST值對(duì)應(yīng)的第一候選節(jié)點(diǎn)是目的節(jié)點(diǎn)主線程對(duì)FPGA芯片布線完成;當(dāng)主線程確定最低的COST值對(duì)應(yīng)的第一候選節(jié)點(diǎn)不是目的節(jié)點(diǎn)時(shí),主線程獲取第一候選節(jié)點(diǎn)驅(qū)動(dòng)的第二候選節(jié)點(diǎn),以用于識(shí)別出最低的COST值對(duì)應(yīng)的第二候選節(jié)點(diǎn)是目的節(jié)點(diǎn),完成布線。本發(fā)明實(shí)施例提供的一種基于多核處理器的FPGA的并行布線方法流程可以分為主線程和至少一個(gè)子線程。主線程對(duì)FPGA芯片的源節(jié)點(diǎn)進(jìn)行識(shí)別,獲取源節(jié)點(diǎn)關(guān)聯(lián)的第一候選節(jié)點(diǎn),之后主線程根據(jù)第一候選節(jié)點(diǎn)的數(shù)量,啟動(dòng)與數(shù)量相同的子線程。主線程通過(guò)向子線程依次發(fā)送第一候選節(jié)點(diǎn),接收子線程根據(jù)第一候選節(jié)點(diǎn)并行計(jì)算出的相應(yīng)COST值。主線程對(duì)最低的COST值對(duì)應(yīng)的第一候選節(jié)點(diǎn)進(jìn)行識(shí)別,根據(jù)識(shí)別結(jié)果,對(duì)FPGA芯片進(jìn)行布線。該方法通過(guò)子線程對(duì)候選節(jié)點(diǎn)COST值的并行計(jì)算,有效的降低了布線的運(yùn)行時(shí)間。附圖說(shuō)明為了更清楚地說(shuō)明本發(fā)明實(shí)施例的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其它的附圖。圖1A為現(xiàn)有技術(shù)的布線資源結(jié)構(gòu)示意圖;圖1B為圖1A所示的布線資源的一種結(jié)構(gòu)示意圖;圖2為本發(fā)明實(shí)施例提供的基于多核處理器的FPGA芯片的并行布線方法流程圖;圖3A位本發(fā)明實(shí)施例提供的主線程方法流程示意圖;圖3B位本發(fā)明實(shí)施例提供的子線程方法流程示意圖。具體實(shí)施方式下面通過(guò)附圖和實(shí)施例,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。本發(fā)明下述實(shí)施例中的方法是基于多核處理器的FPGA芯片實(shí)現(xiàn)的。在FPGA芯片的布線資源圖中,布線資源通常都是以多路選擇器(mux)的形式存在于硬件中,通常每個(gè)mux都會(huì)驅(qū)動(dòng)很多個(gè)mux。在圖1A所示的布線資源中每個(gè)mux都是一個(gè)節(jié)點(diǎn)。其中以4選1的多路選擇器mux為例,該布線資源可以包括源節(jié)點(diǎn)muxA0(即開(kāi)始節(jié)點(diǎn))、中間節(jié)點(diǎn)muxB0-muxB2和目的節(jié)點(diǎn)muxC0(即結(jié)束節(jié)點(diǎn)),源節(jié)點(diǎn)muxA0可以驅(qū)動(dòng)中間節(jié)點(diǎn)muxB0-muxB2,中間節(jié)點(diǎn)muxB1-muxB2可以驅(qū)動(dòng)目的節(jié)點(diǎn)muxC0??梢岳斫獾氖牵摬季€資源還可以包括源節(jié)點(diǎn)muxA1,源節(jié)點(diǎn)muxA1可以驅(qū)動(dòng)中間節(jié)點(diǎn)muxB0-muxB2中的至少一個(gè)節(jié)點(diǎn),或驅(qū)動(dòng)中間節(jié)點(diǎn)muxB1-muxB2中的至少一個(gè)節(jié)點(diǎn)和/或目的節(jié)點(diǎn)muxC0。圖1B為圖1A所示的布線資源的一種結(jié)構(gòu)示意圖。A節(jié)點(diǎn)為源節(jié)點(diǎn),B節(jié)點(diǎn)、C節(jié)點(diǎn)和D節(jié)點(diǎn)為中間節(jié)點(diǎn),E節(jié)點(diǎn)為目的節(jié)點(diǎn)。本發(fā)明實(shí)施例通過(guò)多核處理器將布線過(guò)程分為主線程和子線程,由此多個(gè)子線程來(lái)并行計(jì)算節(jié)點(diǎn)的COST值。其中,依據(jù)實(shí)際技術(shù)情況,子線程的個(gè)數(shù)可以根據(jù)多核處理器的核數(shù)而定,也可以根據(jù)源節(jié)點(diǎn)驅(qū)動(dòng)的節(jié)點(diǎn)個(gè)數(shù)而定。下面將對(duì)多核處理器的布線過(guò)程進(jìn)行詳細(xì)描述。圖2為本發(fā)明實(shí)施例提供的基于多核處理器的FPGA芯片的并行布線方法流程圖。如圖2所示,該方法可以包括如下步驟:步驟210、主線程啟動(dòng)子線程。主線程是啟動(dòng)FPGA芯片時(shí),自啟動(dòng)的線程,主線程可以獲取初始化信息。該初始化信息可以包括布線任務(wù)的源節(jié)點(diǎn)和目的節(jié)點(diǎn)??蛇x地,在主線程啟動(dòng)子線程之前,主線程根據(jù)FPGA芯片的源節(jié)點(diǎn),獲取源節(jié)點(diǎn)關(guān)聯(lián)的第一候選節(jié)點(diǎn)。主線程掃描FPGA芯片,鎖定FPGA芯片的源節(jié)點(diǎn),并對(duì)源節(jié)點(diǎn)進(jìn)行識(shí)別,獲取源節(jié)點(diǎn)關(guān)聯(lián)的至少一個(gè)第一候選節(jié)點(diǎn)。主線程根據(jù)第一候選節(jié)點(diǎn)的數(shù)量和多核處理器的核數(shù),確定子線程的數(shù)量,如多核處理器為4核處理器,源節(jié)點(diǎn)關(guān)聯(lián)8個(gè)候選節(jié)點(diǎn),那么主線程只能啟動(dòng)3個(gè)子線程(主線程本身占用一個(gè)核)。由于計(jì)算節(jié)點(diǎn)COST值的計(jì)算量較大,計(jì)算時(shí)間較長(zhǎng),故用第一候選節(jié)點(diǎn)的數(shù)量確定子線程的數(shù)量,可以保證每個(gè)第一候選節(jié)點(diǎn)的COST值均由獨(dú)立的子線程完成或由空閑的子線程完成。回到步驟210,主線程可以通過(guò)向子線程發(fā)送觸發(fā)信號(hào)(如高低電平),以啟動(dòng)子線程,使其進(jìn)入工作狀態(tài)。步驟220、主線程將獲取的第一候選節(jié)點(diǎn)存儲(chǔ)在第一隊(duì)列中。步驟230、子線程向主線程發(fā)送布線請(qǐng)求。步驟240、主線程接收子線程發(fā)送的布線請(qǐng)求。若主線程未接到子線程發(fā)送的布線請(qǐng)求,則主線程將繼續(xù)等待子線程發(fā)送的布線請(qǐng)求。可選地,在主線程接收到子線程發(fā)送的布線請(qǐng)求后,向子線程發(fā)送確認(rèn)接收的響應(yīng)信號(hào),以指示主線程接收到該布線請(qǐng)求。步驟250、主線程判斷第一隊(duì)列是否為空隊(duì)列后,向子線程發(fā)送第一信號(hào)。當(dāng)?shù)谝魂?duì)列不是空隊(duì)列時(shí),主線程向子線程發(fā)送第一信號(hào),第一信號(hào)可以包括從第一隊(duì)列中取出的一個(gè)第一候選節(jié)點(diǎn)后,執(zhí)行步驟240,主線程再次接收子線程發(fā)送的布線請(qǐng)求。可選地,子線程根據(jù)接收的第一候選節(jié)點(diǎn),計(jì)算該節(jié)點(diǎn)的COST值。子線程向主線程發(fā)送第二信號(hào),第二信號(hào)可以包括該節(jié)點(diǎn)的COST值。當(dāng)?shù)谝魂?duì)列是空隊(duì)列時(shí),主線程向子線程發(fā)送第一信號(hào),第一信號(hào)是結(jié)束線程信號(hào),以通知布線結(jié)束。此時(shí)子線程將第一候選節(jié)點(diǎn)及其計(jì)算出的相應(yīng)COST值發(fā)送至主線程。步驟260、主線程將接收的第一候選節(jié)點(diǎn)及其相應(yīng)的COST值存儲(chǔ)在第二隊(duì)列中。步驟270、當(dāng)主線程確定第一候選節(jié)點(diǎn)是目的節(jié)點(diǎn)時(shí),主線程根據(jù)COST值,對(duì)FPGA芯片進(jìn)行布線。若該第一候選節(jié)點(diǎn)是目的節(jié)點(diǎn),則布線成功,即主線程已找到布線時(shí)間最少的布線方案。若該第一候選節(jié)點(diǎn)不是目的節(jié)點(diǎn),則主線程從此時(shí)的第二隊(duì)列中取出最低的COST值對(duì)應(yīng)的第一候選節(jié)點(diǎn),主線程將該第一候選節(jié)點(diǎn)作為源節(jié)點(diǎn):主線程對(duì)該源節(jié)點(diǎn)進(jìn)行識(shí)別,獲取源節(jié)點(diǎn)關(guān)聯(lián)的第二候選節(jié)點(diǎn),返回執(zhí)行步驟230-步驟270,直到主線程從第二隊(duì)列中取出最低的COST值對(duì)應(yīng)的候選節(jié)點(diǎn)為目的節(jié)點(diǎn)為止。需要說(shuō)明的是,主線程從第一隊(duì)列或第二隊(duì)列中取出候選節(jié)點(diǎn)后,第一隊(duì)列或第二隊(duì)列中將不存在該候選節(jié)點(diǎn)。在一個(gè)例子中,結(jié)合圖1B,在圖3A所示的主線程方法流程和圖3B所示的子線程方法流程中,主線程掃描FPGA芯片,鎖定FPGA芯片的源節(jié)點(diǎn)A,并對(duì)源節(jié)點(diǎn)A進(jìn)行識(shí)別,獲取源節(jié)點(diǎn)A關(guān)聯(lián)的第一候選節(jié)點(diǎn)B、C和D,并將獲取的第一候選節(jié)點(diǎn)B、C和D放入如表1所示的第一隊(duì)列中。表1第一候選節(jié)點(diǎn)BCD如表1所示,第一隊(duì)列中存儲(chǔ)主線程獲取的第一候選節(jié)點(diǎn)。啟動(dòng)后的子線程向主線程發(fā)送布線請(qǐng)求,并等待主線程響應(yīng),直到子線程接收到主線程發(fā)送的響應(yīng)信號(hào),才表明主線程接受了該請(qǐng)求。主線程識(shí)別第一隊(duì)列是否為空隊(duì)列,即是否存有第一候選節(jié)點(diǎn):當(dāng)?shù)谝魂?duì)列不是空隊(duì)列時(shí),則主線程從第一隊(duì)列中依次取出一個(gè)第一候選節(jié)點(diǎn)發(fā)送至子線程,以使子線程根據(jù)第一候選節(jié)點(diǎn)計(jì)算出相應(yīng)的COST值,之后再次等待子線程的請(qǐng)求。當(dāng)?shù)谝魂?duì)列是空隊(duì)列時(shí),則主線程向子線程發(fā)送結(jié)束線程信號(hào),以通知布線結(jié)束,此時(shí)子線程將第一候選節(jié)點(diǎn)及其計(jì)算出的相應(yīng)COST值發(fā)送至主線程。主線程將接收的第一候選節(jié)點(diǎn)及其相應(yīng)的COST值存儲(chǔ)在第二隊(duì)列中,如表2所示的第二隊(duì)列可以包括如下內(nèi)容:表2第一候選節(jié)點(diǎn)COST值BxCyDz在表2中,候選節(jié)點(diǎn)B對(duì)應(yīng)的COST值為x;候選節(jié)點(diǎn)C對(duì)應(yīng)的COST值為y;候選節(jié)點(diǎn)D對(duì)應(yīng)的COST值為z。(1)主線程從第二隊(duì)列中取出最低的COST值對(duì)應(yīng)的第一候選節(jié)點(diǎn)C,并識(shí)別出該第一候選節(jié)點(diǎn)C不是目的節(jié)點(diǎn),則主線程獲取當(dāng)前第一候選節(jié)點(diǎn)C驅(qū)動(dòng)的全部節(jié)點(diǎn)D和E,作為第二候選節(jié)點(diǎn)存儲(chǔ)在第一隊(duì)列中,再次執(zhí)行上述步驟,直到在第二隊(duì)列中查詢到目的節(jié)點(diǎn)E為止。(2)主線程從第二隊(duì)列中取出最低的COST值對(duì)應(yīng)的第一候選節(jié)點(diǎn)B,并識(shí)別出該第一候選節(jié)點(diǎn)B并不是目的節(jié)點(diǎn)E,且當(dāng)前第一候選節(jié)點(diǎn)B沒(méi)有驅(qū)動(dòng)的第二候選節(jié)點(diǎn),則主線程將再次從此時(shí)的第二隊(duì)列中取出最低的COST值對(duì)應(yīng)的第一候選節(jié)點(diǎn)C,回到(1)。本發(fā)明實(shí)施了提供的一種基于多核處理器的FPGA的并行布線方法流程可以分為主線程和至少一個(gè)子線程。主線程啟動(dòng)子線程后,對(duì)FPGA芯片的源節(jié)點(diǎn)進(jìn)行識(shí)別,獲取源節(jié)點(diǎn)關(guān)聯(lián)的第一候選節(jié)點(diǎn),之后主線程通過(guò)向子線程依次發(fā)送第一候選節(jié)點(diǎn),接收子線程根據(jù)第一候選節(jié)點(diǎn)并行計(jì)算出的相應(yīng)COST值。當(dāng)主線程識(shí)別出第一候選節(jié)點(diǎn)是結(jié)束節(jié)點(diǎn)時(shí),主線程根據(jù)COST的最小值,對(duì)FPGA芯片進(jìn)行布線。該方法通過(guò)子線程對(duì)候選節(jié)點(diǎn)COST值的并行計(jì)算,有效的降低了布線的運(yùn)行時(shí)間。結(jié)合本文中所公開(kāi)的實(shí)施例描述的方法或算法的步驟可以用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來(lái)實(shí)施。軟件指令可以由相應(yīng)的軟件模塊組成,軟件模塊可以被存放于隨機(jī)存取存儲(chǔ)器、閃存、只讀存儲(chǔ)器、可擦除可編程只讀寄存器(英文:erasableprogrammableread-onlymemory,EPROM)存儲(chǔ)器、電可擦可編程只讀存儲(chǔ)器存儲(chǔ)器(英文:electricallyerasableprogrammableread-onlymemory,EEPROM)、硬盤(pán)、只讀光盤(pán)(英文:compactdiscread-onlymemory,CD-ROM)或者本領(lǐng)域熟知的任何其它形式的存儲(chǔ)介質(zhì)中。一種示例性的存儲(chǔ)介質(zhì)耦合至處理器,從而使處理器能夠從該存儲(chǔ)介質(zhì)讀取信息,且可向該存儲(chǔ)介質(zhì)寫(xiě)入信息。當(dāng)然,存儲(chǔ)介質(zhì)也可以是處理器的組成部分。處理器和存儲(chǔ)介質(zhì)可以位于ASIC中。另外,該ASIC可以位于用戶設(shè)備中。當(dāng)然,處理器和存儲(chǔ)介質(zhì)也可以作為分立組件存在于用戶設(shè)備中。本領(lǐng)域技術(shù)人員應(yīng)該可以意識(shí)到,在上述一個(gè)或多個(gè)示例中,本發(fā)明所描述的功能可以用硬件、軟件、固件或它們的任意組合來(lái)實(shí)現(xiàn)。當(dāng)使用軟件實(shí)現(xiàn)時(shí),可以將這些功能存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)中或者作為計(jì)算機(jī)可讀介質(zhì)上的一個(gè)或多個(gè)指令或代碼進(jìn)行傳輸。以上所述的具體實(shí)施方式,對(duì)本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說(shuō)明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施方式而已,并不用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的技術(shù)方案的基礎(chǔ)之上,所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包括在本發(fā)明的保護(hù)范圍之內(nèi)。當(dāng)前第1頁(yè)1 2 3