欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種狀態(tài)機等價變換的方法和裝置的制造方法

文檔序號:8257908閱讀:370來源:國知局
一種狀態(tài)機等價變換的方法和裝置的制造方法
【技術領域】
[0001]本發(fā)明涉及數(shù)字集成電路領域,更具體地涉及一種狀態(tài)機等價變換的方法和裝置,以降低動態(tài)可配置流水線的電路復雜度和配置程序的開發(fā)難度。
【背景技術】
[0002]流水線以及用狀態(tài)機控制流水線上的各個流水級和流水級之間的連接關系是一種普遍應用的數(shù)字集成電路形式。例如指令的流水線、網(wǎng)絡處理器里處理數(shù)據(jù)包的流水線、基帶信號處理的流水線等等。指令流水線技術是指在程序執(zhí)行時多條指令重疊進行操作的一種處理技術,它將指令分解成不同的階段,讓電路能夠按照指定的操作更加充分的利用硬件資源。
[0003]動態(tài)可重配流水線技術使得硬件電路結(jié)構更加靈活可控,其本質(zhì)是用程序描述流水線上各個狀態(tài)機的行為。狀態(tài)機對應于電路中各個功能單元,通過編程設計和配置狀態(tài)機可以方便的操控硬件資源。然后,電路較為復雜時,狀態(tài)機的設計和配置就變得極其復雜O
[0004]當狀態(tài)機實現(xiàn)的功能較為復雜、狀態(tài)機的形式和類型較多的時候,在狀態(tài)機拼接過程中會遇到很多復雜的情況導致無法直接拼接。例如循環(huán)狀態(tài)塊和順序狀態(tài)塊的拼接情況,以及循環(huán)狀態(tài)塊和嵌套循環(huán)狀態(tài)塊的拼接情況等。這時需要對狀態(tài)機進行特定的定價變換,使得變換后的狀態(tài)機可以進行拼接,且狀態(tài)機實現(xiàn)的功能不變。

【發(fā)明內(nèi)容】

[0005]有鑒于此,本發(fā)明提出一種狀態(tài)機等價變換的方法,以對各種符合等價變換規(guī)則的狀態(tài)機設計等價變換規(guī)則,提高狀態(tài)機拼接范圍和正確性。
[0006]為了實現(xiàn)上述目的,作為本發(fā)明的一個方面,本發(fā)明提出了一種狀態(tài)機等價變換的方法,包括以下步驟:
[0007]步驟I,將狀態(tài)機的狀態(tài)塊初始化成樹形二維結(jié)構;
[0008]步驟2,讀取一個狀態(tài)機和狀態(tài)機的狀態(tài)提取方式,根據(jù)狀態(tài)提取方式對狀態(tài)機選擇輸出或反向;如果提取方式是正向提取,則將輸入狀態(tài)機放入步驟3的輸入中,跳轉(zhuǎn)至步驟3 ;如果提取方式是反向提取,則將狀態(tài)塊放入步驟2.1的輸入中,調(diào)用步驟2.1,將步驟
2.1返回的狀態(tài)塊替換狀態(tài)機中的原狀態(tài)塊,并將新狀態(tài)機放入步驟3的輸入,跳轉(zhuǎn)至步驟3 ;
[0009]步驟2.1,將輸入狀態(tài)機的尾區(qū)域標示為頭區(qū)域,同時將原頭區(qū)域標識為尾區(qū)域;
[0010]其中,如果當前主區(qū)域為嵌套循環(huán)塊,則將嵌套循環(huán)塊中的狀態(tài)塊,顛倒序列,并對每個狀態(tài)塊調(diào)用步驟2.1,用返回的狀態(tài)塊替換嵌套循環(huán)塊中的原狀態(tài)塊;如果當前主區(qū)域不是嵌套循環(huán)塊,則將主區(qū)域中狀態(tài)塊里所有狀態(tài)顛倒順序;
[0011]將調(diào)整后的狀態(tài)塊輸出,返回到調(diào)用當前此步驟的前一個步驟中;
[0012]步驟3,讀取一個輸入狀態(tài)機的首個狀態(tài)塊,判斷該狀態(tài)塊的類型,并跳轉(zhuǎn)到相應狀態(tài)塊狀態(tài)提取的步驟中;其中
[0013]如果當前狀態(tài)塊為順序塊,則跳轉(zhuǎn)至步驟4 ;
[0014]如果當前狀態(tài)塊為循環(huán)塊,則跳轉(zhuǎn)至步驟5 ;
[0015]如果當前狀態(tài)塊為嵌套循環(huán)塊,則跳轉(zhuǎn)至步驟6 ;
[0016]步驟4,接收一個順序狀態(tài)塊和待提取長度作為輸入,從輸入順序塊頭部提取出指定數(shù)量個狀態(tài)置于頭區(qū)域中,并修改待提取長度;將提取后的狀態(tài)機輸出,跳轉(zhuǎn)至步驟8 ;
[0017]步驟5,接收一個循環(huán)塊和待提取長度作為輸入,判斷待提取長度與循環(huán)塊內(nèi)部狀態(tài)數(shù)量和尾區(qū)域狀態(tài)數(shù)量,提取指定數(shù)量的狀態(tài);
[0018]子步驟5.0,計算循環(huán)塊尾區(qū)域的長度,并判斷當前是否需要提取一次循環(huán)塊;
[0019]子步驟5.1,將循環(huán)體內(nèi)部所有狀態(tài)按順序組成一個新的順序塊,將該順序塊放入尾區(qū)域的頭部,將循環(huán)塊的已循環(huán)次數(shù)加1,跳轉(zhuǎn)至子步驟5.2 ;
[0020]子步驟5.2,如果待提取長度大于等于循環(huán)塊內(nèi)部狀態(tài)數(shù)量,則將尾區(qū)域中首個順序塊放到提取區(qū)域的尾部,并將待提取數(shù)量減去循環(huán)塊內(nèi)部狀態(tài)數(shù)量,跳轉(zhuǎn)到步驟8;如果待提取長度小于循環(huán)塊內(nèi)部狀態(tài)數(shù)量,則將尾區(qū)域中的順序塊按順序合并成一個順序塊,然后從合并的順序塊中提取出頭部的待提取長度個狀態(tài),組成一個新的順序塊放入提取區(qū)域的尾部,清空尾區(qū)域,若提取后的順序塊內(nèi)狀態(tài)數(shù)不為0,則將提取后的順序塊放入尾區(qū)域中。跳轉(zhuǎn)至子步驟5.3;
[0021]子步驟5.3,將循環(huán)塊內(nèi)頭部待提取長度個狀態(tài)取出放到循環(huán)塊內(nèi)狀態(tài)的尾部,形成一次循環(huán)滾動,并將待提取長度置為0,跳轉(zhuǎn)至子步驟8 ;
[0022]步驟6,接收嵌套循環(huán)塊和待提取長度作為輸入,從輸入嵌套循環(huán)塊頭部提取出指定數(shù)量個狀態(tài),輸出可用于狀態(tài)機拼接的狀態(tài)塊的組合;
[0023]子步驟6.0,如果尾區(qū)域為空,則跳至子步驟6.1 ;如果尾區(qū)域非空,則跳至子步驟6.2 ;
[0024]子步驟6.1,提取嵌套循環(huán)塊內(nèi)的所有狀態(tài)塊,按順序置于尾區(qū)域中,將嵌套循環(huán)塊的已循環(huán)次數(shù)加I,跳轉(zhuǎn)至子步驟6.2 ;
[0025]子步驟6.2,將嵌套循環(huán)塊的尾區(qū)域取出,組成一個新的狀態(tài)機,將待提取長度和新的狀態(tài)機作為輸入,遞歸調(diào)用本方法,將返回的狀態(tài)機的首個狀態(tài)塊的頭區(qū)域內(nèi)所有狀態(tài)塊取出,放入提取區(qū)域的尾部,跳轉(zhuǎn)至子步驟6.3 ;
[0026]子步驟6.3,將嵌套循環(huán)塊內(nèi)所有狀態(tài)塊取出,按順序組成一個新的狀態(tài)機,待提取長度和新的狀態(tài)機作為輸入,遞歸調(diào)用本方法,將返回的狀態(tài)機的首個狀態(tài)塊的頭區(qū)域內(nèi)所有狀態(tài)塊取出放到返回的狀態(tài)機的最后一個狀態(tài)塊后面,并用該狀態(tài)機內(nèi)的狀態(tài)塊替換嵌套循環(huán)塊內(nèi)的所有狀態(tài)塊,并將待提取長度置為0,跳轉(zhuǎn)至步驟8 ;
[0027]步驟8,如果當前待提取長度不為0,則將當前狀態(tài)機和待提取長度作為步驟3的輸入,跳轉(zhuǎn)至步驟3,否則跳轉(zhuǎn)至步驟9 ;
[0028]步驟9,將提取區(qū)域,放置到首個狀態(tài)塊頭區(qū)域的尾部;如果原提取方式是反向提取,將首個狀態(tài)塊放入步驟2.1的輸入中,調(diào)用步驟2.1,將步驟2.1返回的狀態(tài)塊替換狀態(tài)機中的原狀態(tài)塊,該方法結(jié)束;否則該方法結(jié)束。
[0029]其中,所述步驟I包括:
[0030]對于輸入狀態(tài)機的每個狀態(tài)塊,判斷其是否已經(jīng)是二維結(jié)構,即由頭區(qū)域、主區(qū)域和尾區(qū)域組成,如果是,則該狀態(tài)機是已經(jīng)參與過等價變換的狀態(tài)機,跳轉(zhuǎn)到步驟2 ;如果不是,則為狀態(tài)塊構建一個頭區(qū)域、主區(qū)域和尾區(qū)域的二維結(jié)構,將原狀態(tài)塊放入主體部分,頭區(qū)域和尾區(qū)域置空,若狀態(tài)塊是嵌套循環(huán)塊則對狀態(tài)塊內(nèi)的每個狀態(tài)塊構建二維結(jié)構;
[0031]跳轉(zhuǎn)到步驟2。
[0032]其中,步驟4中所述接收一個順序狀態(tài)塊和待提取長度作為輸入,從輸入順序塊頭部提取出指定數(shù)量個狀態(tài)置于頭區(qū)域中,并修改待提取長度的步驟的特征是:
[0033]若待提取長度小于等于順序塊中的狀態(tài)數(shù),從狀態(tài)塊開始處進行提取,從當前狀態(tài)塊第一個狀態(tài)開始按順序提取出指定數(shù)量個狀態(tài),把這些狀態(tài)合并為一個新的順序狀態(tài)塊,把這個狀態(tài)塊置于提取區(qū)域尾部;提取剩余的部分作為新的順序狀態(tài)塊,替換原狀態(tài)塊。將待提取長度置為零。
[0034]若待提取長度大于等于順序塊中的狀態(tài)數(shù),將全部順序塊置于提取區(qū)域尾部,刪除狀態(tài)機中的該狀態(tài)塊,并將待提取長度減去順序塊中的狀態(tài)數(shù)。
[0035]作為本發(fā)明的另一個方面,本發(fā)明還提出了一種狀態(tài)機的等價變換裝置,包括:
[0036]第一和第二狀態(tài)機寄存器1、9,用于接收和存儲變換過程中的頭區(qū)域、主區(qū)域和尾區(qū)域;
[0037]狀態(tài)塊類型判斷模塊3,實現(xiàn)了狀態(tài)機等價變換方法中的變換類型判斷步驟;該模塊讀取第一狀態(tài)機反向模塊2輸出的待變換狀態(tài)塊,并根據(jù)執(zhí)行結(jié)果將狀態(tài)塊輸出給順序塊提取模塊6、循環(huán)塊提取模塊7或嵌套循環(huán)塊提取模塊8之一;
[0038]第一和第二狀態(tài)機反向模塊2、10,實現(xiàn)了狀態(tài)機反向步驟,其中所述第一狀態(tài)機反向模塊2讀取初始輸入狀態(tài)機和待提取長度,用于處理反向提取時的第一次狀態(tài)機逆序變換;所述第二狀態(tài)機反向模塊10與所述第二狀態(tài)機寄存器9和狀態(tài)塊堆棧4連接,用于實現(xiàn)輸出時反向提取的狀態(tài)機進行的狀態(tài)機逆序變換,并在步驟執(zhí)行完畢后輸出可拼接狀態(tài)機;
[0039]狀態(tài)塊堆棧4,與所述第一和第二狀態(tài)機反向模塊2、10、提取模塊5連接,為主要的狀態(tài)機等價變換步驟提供了狀態(tài)塊的堆棧存儲功能,輔助完成這幾個模塊中執(zhí)行的變換步驟;
[0040]提取模塊5,包含了順序塊提取模塊6、循環(huán)塊提取模塊7、嵌套循環(huán)塊提取模塊8 ;其中所述順序塊提取模塊6實現(xiàn)了順序塊狀態(tài)提取步驟,所述循環(huán)塊提取模塊7實現(xiàn)了循環(huán)塊提取步驟,所述嵌套循環(huán)塊提取模塊8實現(xiàn)了嵌套循環(huán)塊提取步驟;所述提取模塊5將三個不同類型的狀態(tài)塊提取模塊集合為一個整體以連接所述狀態(tài)塊堆棧4,并通過所述狀態(tài)塊堆棧4進行狀態(tài)塊的存儲和調(diào)用;所述提取模塊5的輸出結(jié)果存儲至所述第二狀態(tài)機寄存器9中。
[0041]其中,所述第一和第二狀態(tài)機寄存器1、9設計為樹形二維結(jié)構的存儲模式。
[0042]其中,所述狀態(tài)塊堆棧4為存儲狀態(tài)塊的堆棧寄存器,內(nèi)部以狀態(tài)塊為基本存儲單元,實現(xiàn)了狀態(tài)塊存儲的堆棧、隊列等存儲結(jié)構。
[0043]其中,所述等價變換裝置通過C++編程語言來實現(xiàn),適用于x86或MIPS處理器體系O
[0044]其中,所述等價變換裝置通過verilog進行硬件實現(xiàn),作為獨立的可移植的流水線配置模塊。
[0045]基于上述技術方案可知,本發(fā)明的方法作為狀態(tài)機拼接方法中的重要子方法,能夠極大提高狀態(tài)機拼接的范圍和正確性。同時,還可以應用于其他類似程序段和代碼段的形式變換和分析。
【附圖說明】
[0046]圖1是本發(fā)明的狀態(tài)機等價變換裝置的結(jié)構示意圖;
[0047]圖2是本發(fā)明實施例1輸入狀態(tài)塊的示意圖;
[0048]圖3是本發(fā)明實施例1步驟I狀態(tài)塊的示意圖;
當前第1頁1 2 3 4 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
五原县| 鹤峰县| 五华县| 南充市| 九龙城区| 民勤县| 辽宁省| 平遥县| 鹤庆县| 黄龙县| 甘孜县| 沙湾县| 永嘉县| 黑龙江省| 蓬莱市| 阳江市| 比如县| 卢湾区| 利川市| 临湘市| 黔西| 赣榆县| 潢川县| 始兴县| 牡丹江市| 安福县| 肥城市| 陈巴尔虎旗| 同心县| 麻阳| 德钦县| 施秉县| 集贤县| 龙山县| 敦煌市| 大悟县| 金门县| 惠东县| 姜堰市| 墨脱县| 崇左市|