本發(fā)明屬于電子設(shè)計(jì)自動(dòng)化eda領(lǐng)域,尤其涉及一種模塊組合邏輯大小評(píng)估方法。
背景技術(shù):
1、芯片的設(shè)計(jì)由許多模塊以及模塊之間的通信信號(hào)組成,芯片的設(shè)計(jì)邏輯可以用rtl級(jí)較為高級(jí)的語言表示,如verilog,vhdl等,也可以由更為低級(jí)的網(wǎng)表(netlist)表示,網(wǎng)表中包含了具體的門級(jí)結(jié)構(gòu)和門之間的連線(net),從高級(jí)語言到低級(jí)語言的轉(zhuǎn)換過程叫做邏輯綜合。分割的對(duì)象可以是網(wǎng)表,也可以是rtl語言,前者屬于后期分割,后者屬于前期分割。如果要進(jìn)行邏輯綜合的并行過程,那么必須進(jìn)行rtl級(jí)的前期分割,將整體rtl分割成不同的子部分。
2、分割過程為將芯片的設(shè)計(jì)分成指定數(shù)量的子部分,每個(gè)子部分稱為子設(shè)計(jì),在分割過程中,要求子設(shè)計(jì)之間的規(guī)模相等或者相近,以達(dá)到各個(gè)子設(shè)計(jì)之間的資源平衡,衡量模塊大小的標(biāo)準(zhǔn)有很多,比如功耗大小,邏輯規(guī)模大小,物理尺寸的大小,一般來說模塊的邏輯規(guī)模大小是最常用的標(biāo)準(zhǔn)。
3、如果將組合邏輯進(jìn)行綜合,那么將得到門級(jí)網(wǎng)表,邏輯規(guī)模則可以直接獲得,得到的邏輯規(guī)模也最準(zhǔn)確的,但是組合綜合過程常常需要消耗大量的時(shí)間和計(jì)算資源,代價(jià)非常大。模塊邏輯規(guī)模大小的估計(jì)主要的難點(diǎn)在于對(duì)組合邏輯的估計(jì)。時(shí)序邏輯與模塊中存在的狀態(tài)機(jī)的狀態(tài)個(gè)數(shù)有關(guān),且相同狀態(tài)機(jī)的合并操作也比較容易,即具有相同次狀態(tài)和輸出的狀態(tài)可以合并,而組合邏輯的簡化過程涉及的情形更為復(fù)雜,所以估計(jì)起來難度更大。
4、現(xiàn)有rtl級(jí)分割常常將模塊組合邏輯進(jìn)行綜合后再給出模塊的邏輯規(guī)模大小,這種方法雖然結(jié)果更加準(zhǔn)確,但是消耗的時(shí)間過長,不適合rtl級(jí)的快速分割需求,因?yàn)閞tl級(jí)的分割本身是具有前期預(yù)布局的特點(diǎn),需要更加快速的結(jié)果輸出。因而,需要一種對(duì)rtl級(jí)的模塊進(jìn)行快速、粗略地邏輯大小估算,不經(jīng)過綜合過程直接進(jìn)行rtl級(jí)的分割。邏輯表達(dá)式是用邏輯運(yùn)算符將關(guān)系表達(dá)式或邏輯量連接起來的有意義的式子,邏輯表達(dá)式的值是一個(gè)邏輯值,即“true”或“false”,編譯系統(tǒng)在給出邏輯運(yùn)算結(jié)果時(shí),以數(shù)字1表示“真”,以數(shù)字0表示“假”,但在判斷一個(gè)量是否為“真”時(shí),以0表示“假”,以非0表示“真”。所謂的邏輯大小,即為邏輯表達(dá)式中,相鄰變量之間的運(yùn)算次數(shù)的總和。
5、現(xiàn)有技術(shù)在進(jìn)行邏輯轉(zhuǎn)換和簡化過程常采用兩種技術(shù)手段,第一種為表格法,其思路為根據(jù)真值表,首先將表達(dá)式為“真”的變量組合進(jìn)行提??;然后對(duì)上述組合按照變量為“真”的數(shù)量進(jìn)行分組;最后將“真”數(shù)量上相差1的相鄰分組中的變量組合進(jìn)行兩兩匹配,合并只有一個(gè)變量為不同的變量組合,更新表格;重復(fù)上述步驟以至無法進(jìn)行進(jìn)一步的化簡。該方法的優(yōu)點(diǎn)為能得到邏輯表達(dá)式的最簡形式,缺點(diǎn)是計(jì)算量巨大,無法快速得到結(jié)果。但在分割場景,需要快速得到簡化的邏輯表達(dá)式,估算出邏輯的資源,因而該方法很難滿足當(dāng)前大規(guī)模設(shè)計(jì)分割的需要。
6、第二種方法為二叉樹法,即樹的每一層節(jié)點(diǎn)代表一個(gè)變量,該節(jié)點(diǎn)向左向右有兩個(gè)子節(jié)點(diǎn),其中一個(gè)子節(jié)點(diǎn)為父節(jié)點(diǎn)對(duì)應(yīng)變量取“真”時(shí)的情況,另一個(gè)子節(jié)點(diǎn)則對(duì)應(yīng)父節(jié)點(diǎn)為“非”。整棵樹的葉子節(jié)點(diǎn)為“真”或者是“非”,“真”用“1”表示,“非”用“0”表示,得到表達(dá)式的結(jié)果。二叉樹法的過程為從葉子節(jié)點(diǎn),也就是底部向上,逐層進(jìn)行相同子樹的合并與冗余節(jié)點(diǎn)的剔除,直到進(jìn)行上述操作到頂層節(jié)點(diǎn)。最后,從頂層節(jié)點(diǎn)出發(fā),變量所有從頂點(diǎn)到葉子節(jié)點(diǎn)的路徑,取表達(dá)式為“真”的路徑形成邏輯表達(dá)式。該方法相比于表格法,速度更快,但在快速估計(jì)的需求中,仍然因?yàn)椴僮鞑襟E繁瑣,時(shí)間復(fù)雜度較大。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明提供了一種模塊組合邏輯大小評(píng)估方法,以解決現(xiàn)有模塊組合邏輯大小評(píng)估方法計(jì)算量巨大、操作步驟繁瑣、估算速度慢等問題。
2、為解決上述技術(shù)問題,本發(fā)明提供的技術(shù)方案為:
3、本發(fā)明涉及一種模塊組合邏輯大小評(píng)估方法,其包括以下步驟:
4、s1.構(gòu)建初始邏輯樹;
5、s2.從邏輯樹的頂層至底層的方向,依次尋找某個(gè)節(jié)點(diǎn)下是否存在同結(jié)構(gòu)的子樹,若存在,刪除該節(jié)點(diǎn)及其中一個(gè)同結(jié)構(gòu)的子樹,將剩余的同結(jié)構(gòu)的子樹連接到該節(jié)點(diǎn)的父節(jié)點(diǎn)上;
6、s3.從邏輯樹的頂層至底層的方向,依次尋找不同節(jié)點(diǎn)下是否存在同結(jié)構(gòu)的子樹,若存在,刪除部分同結(jié)構(gòu)的子樹且僅保留唯一一個(gè)同結(jié)構(gòu)的子樹,并將對(duì)應(yīng)的節(jié)點(diǎn)均連接至保留下來的唯一的子樹上;
7、s4.根據(jù)s2和s3得到的簡化的邏輯樹估算邏輯規(guī)模。
8、優(yōu)選地,所述s2和s3中判斷兩個(gè)子樹是否為同結(jié)構(gòu)的子樹的具體方法為:
9、步驟(1).創(chuàng)建兩個(gè)隊(duì)列結(jié)構(gòu);
10、步驟(2).將兩個(gè)子樹的頂層節(jié)點(diǎn)分別推入兩個(gè)隊(duì)列結(jié)構(gòu)中;
11、步驟(3).判斷兩個(gè)隊(duì)列是否相同,若相同,進(jìn)行下一步,否則,輸出子樹結(jié)構(gòu)不相同并結(jié)束判斷;
12、步驟(4).彈出隊(duì)列結(jié)構(gòu)中的節(jié)點(diǎn),并將彈出的節(jié)點(diǎn)的子節(jié)點(diǎn)按順序推入兩個(gè)隊(duì)列結(jié)構(gòu)中;
13、步驟(5).判斷兩個(gè)隊(duì)列是否均未推入子節(jié)點(diǎn),若是,輸出子節(jié)點(diǎn)結(jié)構(gòu)相同并結(jié)束判斷,若不是,進(jìn)行步驟(6);
14、步驟(6).判斷是否僅一個(gè)隊(duì)列推入子節(jié)點(diǎn),若是,則輸出子樹結(jié)構(gòu)不相同并結(jié)束判斷,若否,返回步驟(3)。
15、優(yōu)選地,所述步驟(1)創(chuàng)建兩個(gè)隊(duì)列結(jié)構(gòu)前,先統(tǒng)計(jì)該節(jié)點(diǎn)兩個(gè)子樹中的節(jié)點(diǎn)數(shù)量是否相同,若節(jié)點(diǎn)數(shù)量不相同,則判斷子樹結(jié)構(gòu)為不相同并結(jié)束判斷,若相同,則開始步驟(1)。
16、優(yōu)選地,所述s4基于簡化的邏輯樹,搜索簡化的邏輯樹的頂層節(jié)點(diǎn)到底層節(jié)點(diǎn)的所有邏輯路徑,并構(gòu)建邏輯表達(dá)式,基于邏輯表達(dá)式確定邏輯規(guī)模。
17、優(yōu)選地,所述s4搜索簡化的邏輯樹的頂層節(jié)點(diǎn)到底層節(jié)點(diǎn)的所有邏輯路徑時(shí),搜索值為1的底層節(jié)點(diǎn)為終點(diǎn)的所有邏輯路徑并構(gòu)建相應(yīng)的邏輯表達(dá)式l1,基于邏輯表達(dá)式l1確定邏輯規(guī)模。
18、優(yōu)選地,所述s4獲取邏輯路徑的具體步驟為:
19、s4.1.構(gòu)建一個(gè)隊(duì)列,為每個(gè)節(jié)點(diǎn)構(gòu)建一個(gè)驅(qū)動(dòng)節(jié)點(diǎn)集合;
20、s4.2.將頂層節(jié)點(diǎn)壓入隊(duì)列中;
21、s4.3.彈出最先進(jìn)入隊(duì)列中的節(jié)點(diǎn),若彈出節(jié)點(diǎn)存在子節(jié)點(diǎn),判斷彈出節(jié)點(diǎn)的子節(jié)點(diǎn)是否已經(jīng)在隊(duì)列中,若彈出節(jié)點(diǎn)的子節(jié)點(diǎn)已經(jīng)在隊(duì)列中,將該彈出節(jié)點(diǎn)作為子節(jié)點(diǎn)的驅(qū)動(dòng)節(jié)點(diǎn)加入到該子節(jié)點(diǎn)的驅(qū)動(dòng)節(jié)點(diǎn)集合中,若彈出節(jié)點(diǎn)的子節(jié)點(diǎn)不在隊(duì)列中,按照節(jié)點(diǎn)層數(shù)從小到大的順序依次將彈出節(jié)點(diǎn)的子節(jié)點(diǎn)帶入隊(duì)列中,以頂層節(jié)點(diǎn)作為被帶入節(jié)點(diǎn)的驅(qū)動(dòng)節(jié)點(diǎn),放入被帶入節(jié)點(diǎn)的驅(qū)動(dòng)節(jié)點(diǎn)集合中,若彈出節(jié)點(diǎn)不存在子節(jié)點(diǎn),則不進(jìn)行任何操作;
22、s4.4.判斷隊(duì)列中是否存在節(jié)點(diǎn),若存在,返回s4.3,若不存在,從值為1的底層節(jié)點(diǎn)開始,遞歸尋找驅(qū)動(dòng)節(jié)點(diǎn)的驅(qū)動(dòng)節(jié)點(diǎn),直到頂層節(jié)點(diǎn)位置,輸出所有路徑組合,形成最終的邏輯路徑。
23、采用本發(fā)明提供的技術(shù)方案,與現(xiàn)有技術(shù)相比,具有如下有益效果:
24、本發(fā)明涉及的模塊組合邏輯大小評(píng)估方法對(duì)于初始邏輯樹,先尋找某個(gè)節(jié)點(diǎn)下是否存在同結(jié)構(gòu)的子樹,若存在,刪除該節(jié)點(diǎn)及其中一個(gè)同結(jié)構(gòu)的子樹,將剩余的同結(jié)構(gòu)的子樹連接到該節(jié)點(diǎn)的父節(jié)點(diǎn)上;再尋找不同節(jié)點(diǎn)下是否存在同結(jié)構(gòu)的子樹,若存在,刪除部分同結(jié)構(gòu)的子樹且僅保留唯一一個(gè)同結(jié)構(gòu)的子樹,并將對(duì)應(yīng)的節(jié)點(diǎn)均連接至保留下來的唯一的子樹上,進(jìn)而刪除冗余變量,得到簡化的邏輯樹;最后根據(jù)簡化的邏輯樹,使用全路徑搜索算法,快速獲得所有邏輯表達(dá)式為“1”的邏輯路徑,使得二叉樹法在不損失精度的情況下,速度更快,滿足rtl分割場景中對(duì)模塊組合邏輯規(guī)模的快速估計(jì)需求。