本發(fā)明涉及FPGA技術(shù)領(lǐng)域,尤其涉及一種加速布線方法。
背景技術(shù):
傳統(tǒng)的現(xiàn)場(chǎng)可編程門(mén)陣列((Field-Programmable Gate Array,簡(jiǎn)稱FPGA)布線算法中,由于包含高扇出線網(wǎng)。扇出是指模塊直接調(diào)用的下級(jí)模塊的個(gè)數(shù)。而在FPGA中,高扇出,則指的是一個(gè)功能模塊驅(qū)動(dòng)多個(gè)功能模塊。正因?yàn)橛懈呱瘸鼍€網(wǎng)的存在,所以對(duì)于包含高扇出的線網(wǎng)布線一般而言都將花費(fèi)大量的時(shí)間。為了節(jié)省布線的時(shí)間,現(xiàn)有技術(shù)中包含一種Pathfinder算法。Pathfinder是目前最流行的一種布線算法,其核心思想是在中間迭代過(guò)程中允許擁擠的發(fā)生(即2個(gè)或者2個(gè)以上的線網(wǎng)占用同一個(gè)繞線資源),通過(guò)不斷的迭代最終消除擁擠。但是該方法存在的缺點(diǎn)在于:在布線過(guò)程中,如果扇出大的線網(wǎng)和扇出小的線網(wǎng)發(fā)生擁擠時(shí),不會(huì)事先確定哪個(gè)線網(wǎng)是扇出大的線網(wǎng),哪個(gè)是扇出小的線網(wǎng)。那么在拆線后重新繞線時(shí),會(huì)隨機(jī)的對(duì)扇出大的線網(wǎng)和扇出小的線網(wǎng)之一進(jìn)行拆線后重新繞線,或者全部進(jìn)行拆線后重新繞線。那么將會(huì)有很大的幾率會(huì)將扇出大的線網(wǎng)進(jìn)行拆線后重新繞線。如此,則會(huì)浪費(fèi)很多的時(shí)間。但是有時(shí)候則是可以將扇出小的線網(wǎng)進(jìn)行拆線后重新繞線,就可以避免扇出大的線網(wǎng)和扇出小的線網(wǎng)之間擁擠的問(wèn)題。因此,如何盡可能的避免將扇出大的線網(wǎng)進(jìn)行拆線后重新繞線,實(shí)現(xiàn)加速布線是亟待解決的問(wèn)題。
技術(shù)實(shí)現(xiàn)要素:
為了解決上述問(wèn)題,本發(fā)明提供一種加速布線方法。所述方法包括:根據(jù)所有線網(wǎng)的布線順序從先入先出隊(duì)列中取出第一線網(wǎng),其中第一線網(wǎng)為相對(duì)于當(dāng)前的先入先出隊(duì)列中所包含的其他線網(wǎng),布線順序優(yōu)先的線網(wǎng);
當(dāng)確定第一線網(wǎng)存在擁擠,且確定第一線網(wǎng)扇出大于第一預(yù)定閾值時(shí),則判斷當(dāng)前迭代周期是否為特殊迭代周期,其中,從先入先出隊(duì)列中依次按照布線順序取出所有線網(wǎng)中每一個(gè)線網(wǎng),為一個(gè)迭代周期,特殊迭代周期指的是與第一迭代周期存在固定數(shù)值關(guān)系的迭代周期;
當(dāng)確定當(dāng)前迭代周期為特殊迭代周期時(shí),則將第一線網(wǎng)拆線后重新繞線;
判斷當(dāng)前的先入先出隊(duì)列是否為空隊(duì)列,并根據(jù)當(dāng)前的先入先出隊(duì)列是否為空隊(duì)列,執(zhí)行不同的迭代流程。
優(yōu)選的,判斷第一線網(wǎng)是否存在擁擠還包括:當(dāng)確定第一線網(wǎng)不存在擁擠時(shí),判斷當(dāng)前的先入先出隊(duì)列是否為空隊(duì)列;
并根據(jù)當(dāng)前的先入先出隊(duì)列是否為空隊(duì)列,執(zhí)行不同的迭代流程。
優(yōu)選的,當(dāng)確定第一線網(wǎng)存在擁擠之后,該方法還包括:
當(dāng)確定第一線網(wǎng)扇出小于第一預(yù)定閾值時(shí),則直接將第一線網(wǎng)進(jìn)行拆線后重新繞線;
并在將第一線網(wǎng)進(jìn)行拆線后重新繞線之后,判斷當(dāng)前的先入先出隊(duì)列是否為空隊(duì)列;
并根據(jù)當(dāng)前的先入先出隊(duì)列是否為空隊(duì)列,執(zhí)行不同的迭代流程。
優(yōu)選的,判斷當(dāng)前迭代周期是否為特殊迭代周期,還包括:當(dāng)確定當(dāng)前迭代周期為非特殊迭代周期時(shí),判斷當(dāng)前的先入先出隊(duì)列是否為空隊(duì)列;
并根據(jù)當(dāng)前的先入先出隊(duì)列是否為空隊(duì)列,執(zhí)行不同的迭代流程。
進(jìn)一步優(yōu)選的,根據(jù)當(dāng)前的先入先出隊(duì)列是否為空隊(duì)列,執(zhí)行不同的迭代流程,包括:
當(dāng)當(dāng)前的先入先出隊(duì)列為非空隊(duì)列時(shí),從當(dāng)前的先入先出隊(duì)列中取出第二線網(wǎng),重復(fù)執(zhí)行當(dāng)前迭代周期的迭代流程,其中,第二線網(wǎng)的布線順序滯后于第一線網(wǎng),且優(yōu)先于當(dāng)前的先入先出隊(duì)列中其他線網(wǎng)的布線順序;
或者,
當(dāng)當(dāng)前的先入先出隊(duì)列為空隊(duì)列時(shí),結(jié)束當(dāng)前迭代周期的迭代流程。
進(jìn)一步優(yōu)選的,確定當(dāng)前的先入先出隊(duì)列為空隊(duì)列時(shí),結(jié)束當(dāng)前迭代周期的迭代流程之后,該方法還包括:
重新遍歷所有線網(wǎng);
當(dāng)所有線網(wǎng)中的兩個(gè)或者兩個(gè)以上的線網(wǎng)之間存在擁擠時(shí),將所有線網(wǎng)加入到先入先出隊(duì)列,進(jìn)入下一迭代周期;
或者,
當(dāng)所有線網(wǎng)中不存在擁擠時(shí),則布線成功。
進(jìn)一步優(yōu)選的,根據(jù)所有線網(wǎng)的布線順序從先入先出隊(duì)列中取出第一線網(wǎng)之前,該方法還包括:
將所有線網(wǎng)按照布線順序加入到先入先出隊(duì)列中。
本發(fā)明提供的一種加速布線的方法,當(dāng)遇到線網(wǎng)存在擁擠時(shí),首先判斷該線網(wǎng)是否為高扇出線網(wǎng),而在確定該線網(wǎng)為高扇出線網(wǎng)時(shí),則需要判斷當(dāng)前迭代周期是否為特殊迭代周期,只有在特殊迭代周期時(shí),才會(huì)對(duì)高扇出線網(wǎng)進(jìn)行拆線重繞。如果在非特殊迭代周期,則跳過(guò)該線網(wǎng)。如果該線網(wǎng)為非高扇出線網(wǎng),則立即對(duì)該線網(wǎng)進(jìn)行拆線重繞。目的是盡量避免對(duì)高扇出線網(wǎng)進(jìn)行拆線重繞,以便節(jié)省拆線重繞的時(shí)間,提升線網(wǎng)的布線速度,大大縮短了布線的運(yùn)行時(shí)間。
附圖說(shuō)明
圖1為本發(fā)明實(shí)施例提供的一種加速布線方法的流程示意圖;
圖2為本發(fā)明實(shí)施例提供的另一種加速布線方法的流程示意圖。
具體實(shí)施方式
下面通過(guò)附圖和實(shí)施例,對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步的詳細(xì)描述。
圖1本發(fā)明實(shí)施例提供的一種加速布線方法流程示意圖100。如圖所示1,該方法包括:
步驟110,根據(jù)所有線網(wǎng)的布線順序從先入先出隊(duì)列中取出第一線網(wǎng)。
具體的,按照布線順序,從先入先出隊(duì)列中取出第一線網(wǎng)。應(yīng)理解,這里的第一線網(wǎng)指的并非特指按照順序而言第一個(gè)加入到隊(duì)列中的線網(wǎng)。而是,相對(duì)于當(dāng)前的先入先出隊(duì)列中所包含的其他線網(wǎng)而言,布線順序優(yōu)先的線網(wǎng)。
可選的,在步驟110之前,其實(shí)該方法還可以包括步驟105,將所有線網(wǎng)按照布線順序依次加入到先入先出隊(duì)列中。
步驟120,當(dāng)確定第一線網(wǎng)存在擁擠,且確定第一線網(wǎng)扇出大于第一預(yù)定閾值時(shí),則判斷當(dāng)前迭代周期是否為特殊迭代周期。
具體的,當(dāng)確定第一線網(wǎng)存在擁擠時(shí),并非直接將第一線網(wǎng)進(jìn)行拆線后,進(jìn)行重新繞線。而是要判斷第一線網(wǎng)的扇出是否大于第一預(yù)定閾值。該做法的目的是為了判斷第一線網(wǎng)是否為高扇出線網(wǎng)。當(dāng)確定第一線網(wǎng)扇出大于第一預(yù)定閾值時(shí),也即是確定第一線網(wǎng)為高扇出線網(wǎng)后,則需要判斷當(dāng)前迭代周期是否為特殊迭代周期。其中,從先入先出隊(duì)列中按照布線順序依次取出所有線網(wǎng)中每一個(gè)線網(wǎng),為一個(gè)迭代周期。而特殊迭代周期則指的是與第一迭代周期存在固定數(shù)值關(guān)系的迭代周期。這里的固定數(shù)值關(guān)系可以為倍數(shù)關(guān)系、固定差值關(guān)系等等。例如,將第一迭代周期為特殊迭代周期,而第六迭代周期(假設(shè)當(dāng)前迭代周期為特殊迭代周期,間隔四個(gè)迭代周期后的下一個(gè)迭代周期為特殊迭代周期)為特殊迭代周期。又或者,第二迭代周期為特殊迭代周期,而第四迭代周期同樣為特殊迭代周期,即屬于2的倍數(shù)關(guān)系的迭代周期為特殊迭代周期。
步驟130,當(dāng)確定當(dāng)前迭代周期為特殊迭代周期時(shí),則將第一線網(wǎng)拆線后重新繞線。
具體的,在步驟130中,如果確定第一線網(wǎng)為高扇出線網(wǎng),為了避免每一次迭代時(shí),遇到高扇出線網(wǎng)時(shí),都要對(duì)高扇出線網(wǎng)進(jìn)行拆線重繞,以便節(jié)省線網(wǎng)布線的時(shí)間。則可以規(guī)定只有在特殊迭代周期時(shí),才會(huì)將高扇出線網(wǎng)進(jìn)行拆線,然后進(jìn)行重新繞線。否則,暫時(shí)對(duì)該高扇出線網(wǎng)不做任何處理。
步驟140,判斷當(dāng)前的先入先出隊(duì)列是否為空隊(duì)列,并根據(jù)當(dāng)前的先入先出隊(duì)列是否為空隊(duì)列,執(zhí)行不同的迭代流程。
在步驟130中,對(duì)高扇出線網(wǎng)進(jìn)行拆線,并進(jìn)行重新繞線之后。還需要判斷當(dāng)前的先入先出隊(duì)列是否為空隊(duì)列,并根據(jù)當(dāng)前的先入先出隊(duì)列是否為空,執(zhí)行不同的迭代流程。
具體的迭代流程可以包括:當(dāng)當(dāng)前的先入先出隊(duì)列為非空隊(duì)列時(shí),從當(dāng)前的先入先出隊(duì)列中取出第二線網(wǎng),重復(fù)執(zhí)行步驟110至步驟140,直至當(dāng)前的先入先出隊(duì)列為空隊(duì)列時(shí),結(jié)束當(dāng)前迭代周期的全部迭代流程。其中,第二線網(wǎng)的布線順序滯后于第一線網(wǎng)的布線順序,但是優(yōu)先于當(dāng)前的先入先出隊(duì)列中其他線網(wǎng)的布線順序。
可選的,如果在步驟120中,如果確定第一線網(wǎng)不存在擁擠,那么則可以跳過(guò)步驟130,而直接執(zhí)行步驟140。
進(jìn)一步可選的,如果在步驟120中,確定第一線網(wǎng)存在擁擠后,確定第一線網(wǎng)扇出小于第一預(yù)定閾值,那么則可以直接將第一線網(wǎng)進(jìn)行拆線后重新繞線。對(duì)于小于第一預(yù)定閾值的線網(wǎng)而言,直接拆線后進(jìn)行重新繞線,本身就是在加速布線。而且,還可能直接避免了后續(xù)有高扇出線網(wǎng)的擁擠。更加的節(jié)省時(shí)間。并且,在此之后,直接跳過(guò)步驟130,執(zhí)行步驟140。
進(jìn)一步可選的,在步驟140之后,該方法還可以包括步驟150:重新遍歷所有線網(wǎng)。
當(dāng)確定所有線網(wǎng)中仍然存在兩個(gè)或者兩個(gè)以上的線網(wǎng)之間存在擁擠時(shí),將所有線網(wǎng)重新加入先入先出隊(duì)列中,并進(jìn)入下一迭代周期。具體的過(guò)程如步驟110至步驟150,這里不再贅述。
而當(dāng)所有線網(wǎng)中不存在擁擠時(shí),則布線成功,結(jié)束所有流程。
進(jìn)一步的,在執(zhí)行步驟150之前,為了避免迭代無(wú)限期的執(zhí)行下去,所以該方法還可以包括步驟145,判斷當(dāng)前迭代周期是否大于第二預(yù)定閾值,只有在迭代周期小于第二預(yù)定閾值時(shí),則可以執(zhí)行步驟150,否則,布線結(jié)束。
為能夠更好的體現(xiàn)步驟105-150在本發(fā)明中執(zhí)行的時(shí)序順序。本發(fā)明實(shí)施例還提供了另一種加速布線方法流程示意圖,具體如圖2所示。圖1和圖2均是表現(xiàn)本法發(fā)明的具體實(shí)施過(guò)程,只不過(guò)是表現(xiàn)形式不同。不過(guò),在圖2中需要解釋說(shuō)明的是,如上文中所述,判斷第一(二)線網(wǎng)是否擁擠,則是為了說(shuō)明在第一線網(wǎng)執(zhí)行迭代流程后,如果先入先出隊(duì)列為非空隊(duì)列,則需要從當(dāng)前的隊(duì)列中,取出第二線網(wǎng),重復(fù)步驟110至步驟145的迭代流程。當(dāng)然,這里的第一和第二并非是實(shí)際意義上的第一和第二,而是為了區(qū)分不同線網(wǎng)而言。
本發(fā)明提供的一種加速布線的方法,當(dāng)遇到線網(wǎng)存在擁擠時(shí),首先判斷該線網(wǎng)是否為高扇出線網(wǎng),而在確定該線網(wǎng)為高扇出線網(wǎng)時(shí),則需要判斷當(dāng)前迭代周期是否為特殊迭代周期,只有在特殊迭代周期時(shí),才會(huì)對(duì)高扇出線網(wǎng)進(jìn)行拆線重繞。如果在非特殊迭代周期,則跳過(guò)該線網(wǎng)。如果該線網(wǎng)為非高扇出線網(wǎng),則立即對(duì)該線網(wǎng)進(jìn)行拆線重繞。目的是盡量避免對(duì)高扇出線網(wǎng)進(jìn)行拆線重繞,以便節(jié)省拆線重繞的時(shí)間,提升線網(wǎng)的布線速度,大大縮短了布線的運(yùn)行時(shí)間。
專業(yè)人員應(yīng)該還可以進(jìn)一步意識(shí)到,結(jié)合本文中所公開(kāi)的實(shí)施例描述的各示例的單元及算法步驟,能夠以電子硬件、計(jì)算機(jī)軟件或者二者的結(jié)合來(lái)實(shí)現(xiàn),為了清楚地說(shuō)明硬件和軟件的可互換性,在上述說(shuō)明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來(lái)執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計(jì)約束條件。專業(yè)技術(shù)人員可以對(duì)每個(gè)特定的應(yīng)用來(lái)使用不同方法來(lái)實(shí)現(xiàn)所描述的功能,但是這種實(shí)現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
結(jié)合本文中所公開(kāi)的實(shí)施例描述的方法或算法的步驟可以用硬件、處理器執(zhí)行的軟件模塊,或者二者的結(jié)合來(lái)實(shí)施。軟件模塊可以置于隨機(jī)存儲(chǔ)器(RAM)、內(nèi)存、只讀存儲(chǔ)器(ROM)、電可編程ROM、電可擦除可編程ROM、寄存器、硬盤(pán)、可移動(dòng)磁盤(pán)、CD-ROM、或技術(shù)領(lǐng)域內(nèi)所公知的任意其它形式的存儲(chǔ)介質(zhì)中。
以上所述的具體實(shí)施方式,對(duì)本發(fā)明的目的、技術(shù)方案和有益效果進(jìn)行了進(jìn)一步詳細(xì)說(shuō)明,所應(yīng)理解的是,以上所述僅為本發(fā)明的具體實(shí)施方式而已,并不用于限定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。