本發(fā)明屬于數(shù)字信號處理技術(shù)領(lǐng)域,具體地說,是涉及一種定點(diǎn)加法結(jié)果位寬限制的處理方法和裝置。
背景技術(shù):
加法器作為數(shù)據(jù)處理的基本器件不僅單獨(dú)使用于數(shù)據(jù)處理集成電路中,而且還作為一個(gè)基本的部件應(yīng)用于乘法器等處理器的運(yùn)算部件中。
大部分算法中都會用到乘法操作,特別是在信號處理算法中,先進(jìn)行乘法操作然后將乘法結(jié)果與累加寄存器中的結(jié)果相加/減的乘累加操作是核心操作之一,這使得每秒可執(zhí)行乘累加操作數(shù)(MAC/S)成為簡單衡量一個(gè)數(shù)字信號處理器計(jì)算能力的指標(biāo)之一。不僅是在數(shù)字信號處理器中,通用處理器為了中也集成了乘累加器,某些通用處理器為了加速圖像處理或其他科學(xué)計(jì)算,也使用了乘累加器。
定點(diǎn)乘法操作的結(jié)果位寬是輸入操作數(shù)位寬的兩倍(假設(shè)兩個(gè)輸入操作數(shù)位寬相同),如果需要經(jīng)過多次乘法操作,理論上運(yùn)算結(jié)果的位寬將以指數(shù)形式增長。但通常處理器可處理數(shù)據(jù)的位寬是有限制的,而且一般情況下程序設(shè)計(jì)員也不需要得到如此形式的結(jié)果,所以通常情況下,需要限制乘法結(jié)果的位寬與輸入數(shù)的位寬相同。
通常,累加寄存器的位寬長于乘法結(jié)果,例如32位乘累加器中乘法結(jié)果是64位,其累加寄存器位寬可能是80位。增加累加寄存器的位寬的主要目的是防止計(jì)算結(jié)果在多次累加/減的過程中溢出。在連續(xù)的累加/減操作結(jié)束并寫出時(shí),仍然需要將結(jié)果的位寬限制到正常操作數(shù)的位寬。不僅僅在累加器中,較多的加減法類操作也需要對結(jié)果進(jìn)行類似的位寬限制處理。
在整數(shù)加法器的位寬限制操作中,如果加法器得出的結(jié)果已經(jīng)超過了限制位寬的表示范圍,則要求進(jìn)行飽和,也即,只保留低位部分;或者,將不在限制位寬可表示范圍內(nèi)的加法器結(jié)果舍去,保留限制位寬可表示范圍內(nèi)的和。在某些處理器中,并不要求運(yùn)算單元直接將結(jié)果飽和,只要求給出上溢出或者下溢出狀態(tài)。以32位乘累加操作要求得到32位飽和結(jié)果為例:首先32位乘法操作會得到64位的乘法結(jié)果,然后至少進(jìn)行64位的累加操作,在累加操作后,需要將64位的加法結(jié)果保存為32位。將64位加法結(jié)果保存為32位結(jié)果的通常流程如下:首先需要判斷64位累加操作是否溢出,然后需要判斷高33位是否是純粹的符號位,如果既沒有64位溢出且高33位都是符號位,則選擇低32位作為結(jié)果即可,否則需要根據(jù)結(jié)果上溢出/下溢出飽和至32位最大值/最小值。
上述可見,在位寬限制操作過程中,若運(yùn)算結(jié)果超過限制位寬的表示范圍,需要進(jìn)行飽和操作或者溢出狀態(tài)報(bào)告。通常的位寬限制操作是在得到最終結(jié)果之后再判斷是否需要進(jìn)行飽和處理,并根據(jù)判斷結(jié)果進(jìn)行飽和處理后寫出運(yùn)算結(jié)果。如圖1所示的常用加法結(jié)果處理框圖,用于將乘法結(jié)果位寬限制在與乘法輸入操作數(shù)的位寬相同;圖示中的結(jié)果處理方式是:根據(jù)加法器高位的“規(guī)約或”“規(guī)約與”結(jié)果判斷運(yùn)算結(jié)果是否超出限制位寬能表示的范圍,并結(jié)合整個(gè)加法器的溢出判斷邏輯,最終選擇寫出的結(jié)果。這其中,“規(guī)約”操作若以NAND2/NOR2邏輯門衡量,位寬為N的輸入需要log2N級的邏輯,如圖2所示是一個(gè)典型的“規(guī)約與”門錐:位寬為N的加法器的進(jìn)位鏈邏輯級數(shù)也是log2N(以AOI21/OAI21邏輯門衡量,與NAND2/NOR2邏輯門延遲基本相同),可見,規(guī)約操作是一個(gè)不可忽視的邏輯長度,這造成了在得到運(yùn)算最終結(jié)果之后再根據(jù)結(jié)果進(jìn)行飽和處理的操作方式不利于提升處理器性能的技術(shù)問題。
技術(shù)實(shí)現(xiàn)要素:
本申請?zhí)峁┝艘环N定點(diǎn)加法結(jié)果位寬限制的處理方法和裝置,能夠提升加法器限制位寬操作的處理速度,從而實(shí)現(xiàn)提升處理器性能的技術(shù)效果。
為解決上述技術(shù)問題,本申請采用以下技術(shù)方案予以實(shí)現(xiàn):
提出一種定點(diǎn)加法結(jié)果位寬限制的處理方法,包括:基于加法器輸入操作數(shù)的高位部分,獲得上溢預(yù)判值和下溢預(yù)判值;以及,基于加法器運(yùn)算結(jié)果中次高位向最高位的進(jìn)位,獲得所述運(yùn)算結(jié)果是否超出所述加法器輸入位寬的溢出判斷和所述運(yùn)算結(jié)果的符號位判斷;基于所述上溢預(yù)判值、所述下溢預(yù)判值、所述溢出判斷、所述符號位判斷和所述加法器運(yùn)算結(jié)果,判斷所述運(yùn)算結(jié)果是否上溢出或下溢出;若是,將所述運(yùn)算結(jié)果飽和至所述加法器限制位寬可表示范圍的最大值或最小值寫出;若否,將所述運(yùn)算結(jié)果不經(jīng)飽和處理寫出。
進(jìn)一步的,所述基于加法器輸入操作數(shù)的高位部分,獲得上溢預(yù)判值和下溢預(yù)判值,具體為:基于所述加法器輸入操作數(shù)的高位部分得到傳遞碼、產(chǎn)生碼和零碼;基于所述傳遞碼、所述產(chǎn)生碼和所述零碼的編碼獲得上溢預(yù)測因子和下溢預(yù)測因子;根據(jù)所述上溢預(yù)測因子的規(guī)約或運(yùn)算得到所述上溢預(yù)判值,根據(jù)所述下溢預(yù)測因子的規(guī)約或運(yùn)算得到所述下溢預(yù)判值;其中,所述上溢預(yù)測因子的每一位根據(jù)所述傳遞碼的每一位與權(quán)重低一位的零碼采取同或運(yùn)算得到;所述下溢預(yù)測因子的每一位根據(jù)所述傳遞碼的每一位與權(quán)重低一位的產(chǎn)生碼采取同或運(yùn)算得到;所述傳遞碼每一位為所述輸入操作數(shù)的高位部分的相同權(quán)重位采取異或運(yùn)算得到;所述產(chǎn)生碼每一位為所述輸入操作數(shù)的高位部分的相同權(quán)重位采取與運(yùn)算得到;所述零碼每一位為所述輸入操作數(shù)的高位部分的相同權(quán)重位采取或非運(yùn)算得到。
進(jìn)一步的,基于加法器運(yùn)算結(jié)果中次高位向最高位的進(jìn)位,獲得所述運(yùn)算結(jié)果是否超出所述加法器輸入位寬的溢出判斷和所述運(yùn)算結(jié)果的符號位判斷,具體為:根據(jù)所述零碼最高位和所述運(yùn)算結(jié)果中次高位向最高位的進(jìn)位采取與運(yùn)算得到上溢位判斷結(jié)果;根據(jù)所述產(chǎn)生碼最高位和取反的所述運(yùn)算結(jié)果中次高位向最高位的進(jìn)位采取與運(yùn)算得到下溢位判斷結(jié)果;根據(jù)所述零碼最高位和所述運(yùn)算結(jié)果中次高位向最高位的進(jìn)位采取或運(yùn)算后,和所述產(chǎn)生碼最高位采取與運(yùn)算再取反運(yùn)算確定所述符號位判斷。
進(jìn)一步的,判斷所述運(yùn)算結(jié)果是否上溢出,具體為:判斷所述運(yùn)算結(jié)果是否大于所述加法器輸入位寬可表示的最大值;或,判斷所述運(yùn)算結(jié)果是否大于所述加法器限制位寬可表示的最大值; 判斷所述運(yùn)算結(jié)果是否下溢出,具體為:判斷所述運(yùn)算結(jié)果是否小于所述加法器輸入位寬可表示的最小值;或,判斷所述運(yùn)算結(jié)果是否小于所述加法器限制位寬可表示的最小值。
進(jìn)一步的,判斷所述運(yùn)算結(jié)果是否大于所述加法器輸入位寬可表示的最大值,具體為:基于所述上溢位判斷結(jié)果,判斷所述運(yùn)算結(jié)果是否大于所述加法器輸入位寬可表示的最大值;判斷所述運(yùn)算結(jié)果是否大于所述加法器限制位寬可表示的最大值,具體為:根據(jù)對所述上溢預(yù)判值和所述運(yùn)算結(jié)果處于限制位寬范圍內(nèi)的最高位采取或運(yùn)算,再與所述符號位判斷采取與運(yùn)算后的運(yùn)算結(jié)果,判斷所述運(yùn)算結(jié)果是否大于所述加法器限制位寬可表示的最大值;判斷所述運(yùn)算結(jié)果是否小于所述加法器輸入位寬可表示的最小值,具體為:基于所述下溢位判斷結(jié)果,判斷所述運(yùn)算結(jié)果是否小于所述加法器輸入位寬可表示的最小值;判斷所述運(yùn)算結(jié)果是否小于所述加法器限制位寬可表示的最小值,具體為:根據(jù)對所述下溢預(yù)判值和所述運(yùn)算結(jié)果處于限制位寬范圍內(nèi)的最高位采取或運(yùn)算,再與所述符號位判斷采取與運(yùn)算后的運(yùn)算結(jié)果,判斷所述運(yùn)算結(jié)果是否小于所述加法器限制位寬可表示的最小值。
提出一種定點(diǎn)加法結(jié)果位寬限制的處理裝置,包括預(yù)判模塊、溢出判斷和符號位確定模塊、溢出結(jié)果判定模塊和運(yùn)算結(jié)果表示模塊;所述預(yù)判模塊,用于基于加法器輸入操作數(shù)的高位部分,獲得上溢預(yù)判值和下溢預(yù)判值; 所述溢出判斷和符號位確定模塊,用于基于加法器運(yùn)算結(jié)果中次高位向最高位的進(jìn)位,獲得所述運(yùn)算結(jié)果是否超出所述加法器輸入位寬的溢出判斷和所述運(yùn)算結(jié)果的符號位判斷;所述溢出結(jié)果判定模塊,用于基于所述上溢預(yù)判值、所述下溢預(yù)判值、所述溢出判斷、所述符號位判斷和所述加法器運(yùn)算結(jié)果,判斷所述運(yùn)算結(jié)果是否上溢出或下溢出;所述運(yùn)算結(jié)果表示模塊,用于在所述溢出結(jié)果判定模塊判斷所述運(yùn)算結(jié)果上溢出或下溢出時(shí),將所述運(yùn)算結(jié)果飽和至所述加法器限制位寬可表示范圍的最大值或最小值寫出;在所述溢出結(jié)果判定模塊判斷所述運(yùn)算結(jié)果不存在溢出時(shí),將所述運(yùn)算結(jié)果不經(jīng)飽和處理寫出。
進(jìn)一步的,所述預(yù)判模塊具體包括傳遞碼編碼單元、產(chǎn)生碼編碼單元、零碼編碼單元、上溢預(yù)測因子編碼單元、下溢預(yù)測因子編碼單元、上溢預(yù)判規(guī)約或運(yùn)算單元和下溢預(yù)判規(guī)約或運(yùn)算單元;所述傳遞碼編碼單元,用于根據(jù)所述輸入操作數(shù)的高位部分的相同權(quán)重位采取異或運(yùn)算得到所述傳遞碼的每一位;所述產(chǎn)生碼編碼單元,用于根據(jù)所述輸入操作數(shù)的高位部分的相同權(quán)重位采取與運(yùn)算得到所述產(chǎn)生碼的每一位;所述零碼編碼單元,用于根據(jù)所述輸入操作數(shù)的高位部分的相同權(quán)重位采取或非運(yùn)算得到所述零碼的每一位;所述上溢預(yù)測因子編碼單元,用于根據(jù)所述傳遞碼的每一位與權(quán)重低一位的零碼采取同或運(yùn)算得到所述上溢預(yù)測因子的每一位;所述下溢預(yù)測因子編碼單元,用于根據(jù)所述傳遞碼的每一位與權(quán)重低一位的產(chǎn)生碼采取同或運(yùn)算得到所述下溢預(yù)測因子的每一位;所述上溢預(yù)判規(guī)約或運(yùn)算單元,用于根據(jù)所述上溢預(yù)測因子的規(guī)約或運(yùn)算得到所述上溢預(yù)判值;所述下溢預(yù)判規(guī)約或運(yùn)算單元,用于根據(jù)所述下溢預(yù)測因子的規(guī)約或運(yùn)算得到所述下溢預(yù)判值。
進(jìn)一步的,所述溢出判斷和符號位確定模塊具體包括上溢位判斷單元、下溢位判斷單元和符號位確定單元;所述上溢位判斷單元,用于根據(jù)所述零碼最高位和所述運(yùn)算結(jié)果中次高位向最高位的進(jìn)位采取與運(yùn)算得到上溢位判斷結(jié)果;所述下溢位判斷單元,用于根據(jù)所述產(chǎn)生碼最高位和取反的所述運(yùn)算結(jié)果中次高位向最高位的進(jìn)位采取與運(yùn)算得到下溢位判斷結(jié)果;所述符號位確定單元,用于根據(jù)所述零碼最高位和所述運(yùn)算結(jié)果中次高位向最高位的進(jìn)位采取或運(yùn)算后,和所述產(chǎn)生碼最高位采取與運(yùn)算再取反運(yùn)算確定所述符號位判斷。
進(jìn)一步的,所述溢出結(jié)果判定模塊具體包括上溢出判定單元和下溢出判定單元;所述上溢出判定單元,用于判斷所述運(yùn)算結(jié)果是否大于所述加法器輸入位寬可表示的最大值;或判斷所述運(yùn)算結(jié)果是否大于所述加法器限制位寬可表示的最大值,若是,則判斷所述運(yùn)算結(jié)果上溢出;所述下溢出判定單元,用于判斷所述運(yùn)算結(jié)果是否小于所述加法器輸入位寬可表示的最小值;或判斷所述運(yùn)算結(jié)果是否小于所述加法器限制位寬可表示的最小值;若是,則判斷所述運(yùn)算結(jié)果下溢出。
進(jìn)一步的,所述上溢出判定單元包括基于輸入位寬的上溢出判定子單元和基于限制位寬的上溢出判定子單元;所述基于輸入位寬的上溢出判定子單元,用于基于所述上溢位判斷結(jié)果,判斷所述運(yùn)算結(jié)果是否大于所述加法器輸入位寬可表示的最大值;所述基于限制位寬的上溢出判定子單元,用于根據(jù)對所述上溢預(yù)判值和所述運(yùn)算結(jié)果處于限制位寬范圍內(nèi)的最高位采取或運(yùn)算,再與所述符號位判斷采取與運(yùn)算后的運(yùn)算結(jié)果,判斷所述運(yùn)算結(jié)果是否大于所述加法器限制位寬可表示的最大值;所述下溢出判定單元包括基于輸入位寬的下溢出判定子單元和基于限制位寬的下溢出判定子單元;所述基于輸入位寬的下溢出判定子單元,用于基于所述下溢位判斷結(jié)果,判斷所述運(yùn)算結(jié)果是否小于所述加法器輸入位寬可表示的最小值;所述基于限制位寬的下溢出判定子單元,用于根據(jù)對所述下溢預(yù)判值和所述運(yùn)算結(jié)果處于限制位寬范圍內(nèi)的最高位采取或運(yùn)算,再與所述符號位判斷采取與運(yùn)算后的運(yùn)算結(jié)果,判斷所述運(yùn)算結(jié)果是否小于所述加法器限制位寬可表示的最小值。
與現(xiàn)有技術(shù)相比,本申請的優(yōu)點(diǎn)和積極效果是:本申請?zhí)岢龅亩c(diǎn)加法結(jié)果位寬限制的處理方法和裝置中,一方面,在加法器運(yùn)算結(jié)束之前,獲取任意時(shí)刻的一對執(zhí)行加法運(yùn)算的輸入操作數(shù)對運(yùn)算結(jié)果做出上溢預(yù)判和下溢預(yù)判,預(yù)判部分包括傳遞碼、產(chǎn)生碼、零碼、上溢預(yù)測因子、下溢預(yù)測因子等的編碼運(yùn)算,以及采取規(guī)約或運(yùn)算得到上溢預(yù)判值和下溢預(yù)判值等的編碼運(yùn)算操作,這部分運(yùn)算在獲得運(yùn)算結(jié)果之前的加法器運(yùn)算過程中同步進(jìn)行;另一方面,稍早于加法器獲得運(yùn)算結(jié)果之前,采用運(yùn)算結(jié)果的次高位向最高位的進(jìn)位,獲得運(yùn)算結(jié)果是否超出加法器輸入位寬的溢出判斷和運(yùn)算結(jié)果的符號位判斷,這部分運(yùn)算采用了運(yùn)算結(jié)果的次高位向最高位的進(jìn)位,在運(yùn)算結(jié)果獲得之前即可執(zhí)行,使得溢出判斷和符號位判斷稍早于加法器得到運(yùn)算結(jié)果得到;最后,在運(yùn)算結(jié)果獲得之后,利用上溢預(yù)判值、下溢預(yù)判值、溢出判斷、符號位判斷和部分運(yùn)算結(jié)果信息,做出運(yùn)算結(jié)果是否上溢出或下溢出的判斷,這部分運(yùn)算中雖然使用了運(yùn)算結(jié)果中的部分信息,但是上溢出或下溢出的判斷是在加法器結(jié)束之后的約一級邏輯時(shí)間即可完成,也即,在加法器獲得運(yùn)算結(jié)果之后的約一級門的時(shí)延之后就可以確定是否需要對結(jié)果進(jìn)行飽和運(yùn)算,與現(xiàn)有技術(shù)中在獲得運(yùn)算結(jié)果之后再采取規(guī)約操作判斷是否對需要飽和處理相比,本申請?zhí)岢龅奶幚矸椒ㄔ谶\(yùn)算結(jié)果獲得之前采取耗時(shí)的規(guī)約運(yùn)算等操作,在運(yùn)算結(jié)果出來之后約一級門的延時(shí)即可獲得是否需要飽和處理的判斷結(jié)果,縮短了判斷是否需要飽和處理的時(shí)間,提升加法器限制位寬操作的處理速度,從而實(shí)現(xiàn)提升處理器性能的技術(shù)效果。
結(jié)合附圖閱讀本申請實(shí)施方式的詳細(xì)描述后,本申請的其他特點(diǎn)和優(yōu)點(diǎn)將變得更加清楚。
附圖說明
圖1為現(xiàn)有技術(shù)中加法結(jié)果為寬限制的處理流程示意圖;
圖2為現(xiàn)有技術(shù)中判斷加法器運(yùn)算結(jié)果是否超出限制位寬表示范圍而采取的規(guī)約與運(yùn)算邏輯門示意圖;
圖3為本申請?zhí)岢龅亩c(diǎn)加法結(jié)果位寬限制的處理方法的方法流程圖;
圖4為本申請?zhí)岢龅亩c(diǎn)加法結(jié)果位寬限制的處理裝置的邏輯架構(gòu)圖;
圖5為本申請?zhí)岢龅念A(yù)判模塊的具體實(shí)施例邏輯門架構(gòu)示意圖;
圖6為本申請?zhí)岢龅念A(yù)判模塊的具體實(shí)施例邏輯門示意圖;
圖7為本申請?zhí)岢龅亩c(diǎn)加法結(jié)果位寬限制的處理裝置的具體實(shí)施例邏輯門示意圖。
具體實(shí)施方式
下面結(jié)合附圖對本申請的具體實(shí)施方式作進(jìn)一步詳細(xì)地說明。
本申請針對整數(shù)加法器中的位寬限制操作,即將兩個(gè)位寬較大的數(shù)相加/減得到的結(jié)果限制到較小的位寬,例如,如何將64位的加法結(jié)果保存為32位的結(jié)果,提出一種定點(diǎn)加法結(jié)果位寬限制的處理方法,使用在加法器運(yùn)算結(jié)果獲得之前對運(yùn)算結(jié)果進(jìn)行預(yù)判,并在加法器運(yùn)算結(jié)果得到之后立刻進(jìn)行飽和操作,縮短了加法器判斷是否需要進(jìn)行飽和處理的時(shí)間,如圖3所示,該方法包括以下步驟:
步驟S31:基于加法器輸入操作數(shù)的高位部分,獲得上溢預(yù)判值和下溢預(yù)判值。
預(yù)判部分采用的是加法器輸入操作數(shù)的高位部分,具體位寬由加法器的限制位寬決定,例如,若加法器的輸入操作數(shù)為a[n-1:0]和b[n-1:0],其加法運(yùn)算后的運(yùn)算結(jié)果為s[n-1:0],而加法器的限制位寬為m,也即需要將運(yùn)算結(jié)果飽和限制到m位寬r[m-1:0];則本申請中用于預(yù)判邏輯的輸入操作數(shù)實(shí)際為加法器輸入操作數(shù)的高位部分a[n-1:m-1]和b[n-1:m-1]。預(yù)判部分獲得兩個(gè)預(yù)判結(jié)果:上溢預(yù)判值pof和下溢預(yù)判值puf。
具體的,首先使用加法器輸入操作數(shù)的高位部分進(jìn)行編碼獲得傳遞碼、產(chǎn)生碼和零碼。
傳遞碼t[n-1:m-1]的每一位是操作數(shù)a[n-1:m-1]和b[n-1:m-1]的相同權(quán)重位采取異或運(yùn)算得到;產(chǎn)生碼g[n-1:m-1] 的每一位是操作數(shù)a[n-1:m-1]和b[n-1:m-1] 的相同權(quán)重位采取與運(yùn)算得到;零碼z[n-1:m-1]的每一位是操作數(shù)a[n-1:m-1]和b[n-1:m-1] 的相同權(quán)重位采取或非運(yùn)算得到。
上述三個(gè)編碼在常用的超前進(jìn)位加法器中也會產(chǎn)生,因此在使用超前進(jìn)位加法器的實(shí)施例中,可以直接由加法器產(chǎn)生上述編碼后輸入給預(yù)判部分使用即可。
在獲得上述三種編碼后,使用編碼產(chǎn)生上溢預(yù)測因子iof和下溢預(yù)測因子iuf;上溢預(yù)測因子iof[n-1:m]的每一位是根據(jù)傳遞碼的每一位與權(quán)重低一位的零碼采取同或運(yùn)算得到的;下溢預(yù)測因子iuf[n-1:m]的每一位是根據(jù)傳遞碼的每一位與權(quán)重低一位的產(chǎn)生碼采取同或運(yùn)算得到的。
最后,將所有的上溢預(yù)測因子采取規(guī)約或運(yùn)算得到上溢預(yù)判值pof,以及將所有的下溢預(yù)測因子采取規(guī)約或運(yùn)算得到下溢預(yù)判值puf。
該步驟的預(yù)判部分是在加法器運(yùn)算結(jié)束之前,獲取任意時(shí)刻的一對執(zhí)行加法運(yùn)算的輸入操作數(shù)對運(yùn)算結(jié)果做出上溢預(yù)判和下溢預(yù)判,預(yù)判部分包括傳遞碼、產(chǎn)生碼、零碼、上溢預(yù)測因子、下溢預(yù)測因子等的編碼運(yùn)算,以及采取規(guī)約或運(yùn)算得到上溢預(yù)判值和下溢預(yù)判值等的編碼運(yùn)算操作,這部分運(yùn)算在獲得運(yùn)算結(jié)果之前的加法器運(yùn)算過程中同步進(jìn)行,而不是在運(yùn)算結(jié)果獲得之后進(jìn)行。
步驟S32:基于加法器運(yùn)算結(jié)果中次高位向最高位的進(jìn)位,獲得運(yùn)算結(jié)果是否超出加法器輸入位寬的溢出判斷和運(yùn)算結(jié)果的符號位判斷。
加法器運(yùn)算結(jié)果中次高位向最高位的進(jìn)位可以在運(yùn)算結(jié)果獲得之前得到,因此本步驟也在加法器運(yùn)算結(jié)果獲得之前執(zhí)行,能稍早于運(yùn)算結(jié)果獲得完成。
具體的,根據(jù)零碼最高位z[n-1]和運(yùn)算結(jié)果中次高位向最高位的進(jìn)位Cn-2采取與運(yùn)算得到上溢位判斷結(jié)果aov;根據(jù)產(chǎn)生碼最高位g[n-1]和取反的運(yùn)算結(jié)果中次高位向最高位的進(jìn)位Cn-2采取與運(yùn)算得到下溢位判斷結(jié)果auv;根據(jù)零碼最高位z[n-1]和運(yùn)算結(jié)果中次高位向最高位的進(jìn)位Cn-2采取或運(yùn)算后,和產(chǎn)生碼最高位g[n-1]采取與運(yùn)算再取反運(yùn)算確定符號位判斷rs;如可用足夠的位寬表示運(yùn)算結(jié)果,則運(yùn)算結(jié)果的最高位為符號位,符號位為高表示負(fù),為低表示正;由于加法器本身就存在溢出的可能導(dǎo)致無法使用運(yùn)算結(jié)果的最高位判斷運(yùn)算結(jié)果的正負(fù)情況,本申請實(shí)施例中,可根據(jù)產(chǎn)生碼的最高位、零碼最高位和運(yùn)算結(jié)果中次高位向最高位的進(jìn)位推算出符號位判斷,例如,產(chǎn)生碼最高位g[n-1]為高,或者零碼最高位z[n-1]和運(yùn)算結(jié)果中次高位向最高位的進(jìn)位Cn-2的“或非”運(yùn)算是高,則rs為高,否則為低。
步驟S33:基于上溢預(yù)判值、下溢預(yù)判值、溢出判斷、符號位判斷和加法器運(yùn)算結(jié)果,判斷運(yùn)算結(jié)果是否上溢出或下溢出;若是,
步驟S34:將運(yùn)算結(jié)果飽和至加法器限制位寬可表示范圍的最大值或最小值寫出。
步驟S33中,運(yùn)用步驟S31和步驟S32中產(chǎn)生的上溢預(yù)判值、下溢預(yù)判值、溢出判斷、符號位判斷,以及結(jié)合加法器運(yùn)算結(jié)果進(jìn)行處理,判定在加法器限制位寬可表示范圍內(nèi)運(yùn)算結(jié)果是否溢出。
具體的,通過判斷運(yùn)算結(jié)果是否大于加法器輸入位寬可表示的最大值;或,通過判斷運(yùn)算結(jié)果是否大于加法器限制位寬可表示的最大值,來實(shí)現(xiàn)判斷運(yùn)算結(jié)果是否上溢出。由上溢位判斷結(jié)果aov判斷運(yùn)算結(jié)果是否大于加法器輸入位寬可表示的最大值;根據(jù)對上溢預(yù)判值pof和運(yùn)算結(jié)果處于限制位寬范圍內(nèi)的最高位s[m-1]采取或運(yùn)算,再與符號位判斷rs采取與運(yùn)算后的運(yùn)算結(jié)果,判斷運(yùn)算結(jié)果是否大于加法器限制位寬可表示的最大值;例如,若符號位判斷rs表明運(yùn)算結(jié)果為正,上溢預(yù)判值pof表示上溢出或運(yùn)算結(jié)果處于限制位寬范圍內(nèi)的最高位s[m-1]是高,則表明加法器運(yùn)算結(jié)果大于限制位寬可表示范圍的最大值,則運(yùn)算結(jié)果上溢,需要報(bào)告上溢狀態(tài),并飽和至限制位寬可表示范圍的最大值寫出。
通過判斷運(yùn)算結(jié)果是否小于加法器輸入位寬可表示的最小值;或,判斷運(yùn)算結(jié)果是否小于加法器限制位寬可表示的最小值,來實(shí)現(xiàn)判斷運(yùn)算結(jié)果是否下溢出。由下溢位判斷結(jié)果auv判斷運(yùn)算結(jié)果是否小于加法器輸入位寬可表示的最小值;根據(jù)對下溢預(yù)判值puf和運(yùn)算結(jié)果處于限制位寬范圍內(nèi)的最高位s[m-1]采取或運(yùn)算,再與符號位判斷rs采取與運(yùn)算后的運(yùn)算結(jié)果,判斷運(yùn)算結(jié)果是否小于加法器限制位寬可表示的最小值;例如,若符號位判斷rs表明運(yùn)算結(jié)果為負(fù),下溢預(yù)判值puf表示下溢出或運(yùn)算結(jié)果處于限制位寬范圍內(nèi)的最高位s[m-1]是低,則表明加法器運(yùn)算結(jié)果小于限制位寬可表示范圍的最小值,則運(yùn)算結(jié)果下溢,需要報(bào)告下溢狀態(tài),并飽和至限制位寬可表示范圍的最小值寫出。
若判斷上溢出和下溢出都不成立,也即運(yùn)算結(jié)果不存在溢出的情況,則選擇按照加法器限制位寬可表示范圍的原始運(yùn)算結(jié)果s[m-1:0]輸出,加法器狀態(tài)指示正常。
上述可見,本申請?zhí)岢龅亩c(diǎn)加法結(jié)果位寬限制的處理方法中,一方面,在加法器運(yùn)算結(jié)束之前,獲取任意時(shí)刻的一對執(zhí)行加法運(yùn)算的輸入操作數(shù)對運(yùn)算結(jié)果做出上溢預(yù)判和下溢預(yù)判,預(yù)判部分包括傳遞碼、產(chǎn)生碼、零碼、上溢預(yù)測因子、下溢預(yù)測因子等的編碼運(yùn)算,以及采取規(guī)約或運(yùn)算得到上溢預(yù)判值和下溢預(yù)判值等的編碼運(yùn)算操作,這部分運(yùn)算在獲得運(yùn)算結(jié)果之前的加法器運(yùn)算過程中同步進(jìn)行;另一方面,稍早于加法器獲得運(yùn)算結(jié)果之前,采用運(yùn)算結(jié)果的次高位向最高位的進(jìn)位,獲得運(yùn)算結(jié)果是否超出加法器輸入位寬的溢出判斷和運(yùn)算結(jié)果的符號位判斷,這部分運(yùn)算采用了運(yùn)算結(jié)果的次高位向最高位的進(jìn)位,在運(yùn)算結(jié)果獲得之前即可執(zhí)行,使得溢出判斷和符號位判斷稍早于加法器得到運(yùn)算結(jié)果得到;最后,在運(yùn)算結(jié)果獲得之后,利用上溢預(yù)判值、下溢預(yù)判值、溢出判斷、符號位判斷和部分運(yùn)算結(jié)果信息,做出運(yùn)算結(jié)果是否上溢出或下溢出的判斷,這部分運(yùn)算中雖然使用了運(yùn)算結(jié)果中的部分信息,但是上溢出或下溢出的判斷是在加法器結(jié)束之后的約一級邏輯時(shí)間即可完成,也即,在加法器獲得運(yùn)算結(jié)果之后的約一級門的時(shí)延之后就可以確定是否需要對結(jié)果進(jìn)行飽和運(yùn)算,與現(xiàn)有技術(shù)中在獲得運(yùn)算結(jié)果之后再采取規(guī)約操作判斷是否對需要飽和處理相比,本申請?zhí)岢龅奶幚矸椒ㄔ谶\(yùn)算結(jié)果獲得之前采取耗時(shí)的規(guī)約運(yùn)算等操作,在運(yùn)算結(jié)果出來之后約一級門的延時(shí)即可獲得是否需要飽和處理的判斷結(jié)果,縮短了判斷是否需要飽和處理的時(shí)間,升加法器限制位寬操作的處理速度,從而實(shí)現(xiàn)提升處理器性能的技術(shù)效果。
需要說明的是:上述處理方法可執(zhí)行于加法器運(yùn)算結(jié)果沒有獲得之前,這包括了加法器所有可能的輸入情況;若在某些特殊情況下,可預(yù)先獲知運(yùn)算結(jié)果在輸入位寬上的正、負(fù)、是否可能溢出或其他情況下,本著縮短處理時(shí)間、提高處理速度、降低資源利用的意圖,本處理方法同樣適用。
基于上述提出的定點(diǎn)加法結(jié)果位寬限制的處理方法,本申請還提出一種定點(diǎn)加法結(jié)果位寬限制的處理裝置,如圖4所示,包括預(yù)判模塊41、溢出判斷和符號位確定模塊42、溢出結(jié)果判定模塊42和運(yùn)算結(jié)果表示模塊44。
預(yù)判模塊41用于基于加法器40輸入操作數(shù)的高位部分a[n-1:m-1]和b[n-1:m-1],獲得上溢預(yù)判值pof和下溢預(yù)判值puf; 溢出判斷和符號位確定模塊42用于基于加法器運(yùn)算結(jié)果中次高位向最高位的進(jìn)位Cn-2,獲得運(yùn)算結(jié)果是否超出加法器輸入位寬的溢出判斷av和運(yùn)算結(jié)果的符號位判斷rs;溢出結(jié)果判定模塊43用于基于上溢預(yù)判值pof、下溢預(yù)判值puf、溢出判斷av、符號位判斷rs和加法器運(yùn)算結(jié)果,判斷運(yùn)算結(jié)果是否上溢出或下溢出;運(yùn)算結(jié)果表示模塊44用于在溢出結(jié)果判定模塊43判斷運(yùn)算結(jié)果上溢出或下溢出時(shí),將運(yùn)算結(jié)果飽和至加法器限制位寬可表示范圍的最大值或最小值寫出;并在溢出結(jié)果判定模塊43判斷運(yùn)算結(jié)果不存在溢出時(shí),將運(yùn)算結(jié)果不經(jīng)飽和處理寫出,也即寫出原始運(yùn)算結(jié)果。
在一個(gè)具體的實(shí)施例中,如圖5所示,預(yù)判模塊41具體包括傳遞碼編碼單元411、產(chǎn)生碼編碼單元412、零碼編碼單元413、上溢預(yù)測因子編碼單元414、下溢預(yù)測因子編碼單元415、上溢預(yù)判規(guī)約或運(yùn)算單元416和下溢預(yù)判規(guī)約或運(yùn)算單元417。
傳遞碼編碼單元411用于根據(jù)輸入操作數(shù)的高位部分a[n-1:m-1]和b[n-1:m-1]的相同權(quán)重位采取異或運(yùn)算得到傳遞碼t[n-1:m-1]的每一位;產(chǎn)生碼編碼單元412用于根據(jù)輸入操作數(shù)的高位部分a[n-1:m-1]和b[n-1:m-1]的相同權(quán)重位采取與運(yùn)算得到產(chǎn)生碼g[n-1:m-1]的每一位;零碼編碼單元413用于根據(jù)輸入操作數(shù)的高位部分a[n-1:m-1]和b[n-1:m-1]的相同權(quán)重位采取或非運(yùn)算得到零碼z[n-1:m-1]的每一位;上溢預(yù)測因子編碼單元414用于根據(jù)傳遞碼的每一位與權(quán)重低一位的零碼采取同或運(yùn)算得到上溢預(yù)測因子iof[n-1:m]的每一位;下溢預(yù)測因子編碼單元415用于根據(jù)傳遞碼的每一位與權(quán)重低一位的產(chǎn)生碼采取同或運(yùn)算得到下溢預(yù)測因子iuf[n-1:m]的每一位;上溢預(yù)判規(guī)約或運(yùn)算單元416用于根據(jù)上溢預(yù)測因子iof[n-1:m]的規(guī)約或運(yùn)算得到上溢預(yù)判值pof;下溢預(yù)判規(guī)約或運(yùn)算單元417用于根據(jù)下溢預(yù)測因子iuf[n-1:m]的規(guī)約或運(yùn)算得到下溢預(yù)判值puf。
其中,傳遞碼編碼單元411、產(chǎn)生碼編碼單元412和零碼編碼單元413的編碼在常用的超前進(jìn)位加法器中也會產(chǎn)生,因此在使用超前進(jìn)位加法器的實(shí)施例中,上述三個(gè)編碼單元實(shí)際應(yīng)用于加法器中,可以直接由加法器產(chǎn)生上述編碼后輸入給預(yù)判模塊41使用即可。
如圖6所示,為預(yù)判模塊41一個(gè)具體邏輯門實(shí)施例圖,使用加法器輸入操作數(shù)的高位部分a[n-1:m-1]和b[n-1:m-1]作為輸入,使用編碼邏輯601產(chǎn)生上溢預(yù)測因子iof和下溢預(yù)測因子iuf,圖中結(jié)構(gòu)使用了一種更適合具體實(shí)現(xiàn)的邏輯結(jié)構(gòu),因?yàn)樾枰瑫r(shí)產(chǎn)生傳遞碼、產(chǎn)生碼和零碼,而傳遞碼可以由產(chǎn)生碼和零碼得到,所以在編碼邏輯601中,首先得到產(chǎn)生碼和零碼,然后再使用產(chǎn)生碼和零碼得到傳遞碼。在每一位編碼邏輯601得到傳遞碼、產(chǎn)生碼和零碼后,需要產(chǎn)生上溢預(yù)測因子和下溢預(yù)測因子,需要使用每一位傳遞碼分別與第一位的產(chǎn)生碼和零碼進(jìn)行異或/同或的操作,得到上溢預(yù)測因子的每一位和下溢預(yù)測因子的每一位;其中,最高位不需要向更高位給出產(chǎn)生碼和零碼,如編碼邏輯602所示,最低位沒有更低位,不需要產(chǎn)生傳遞碼產(chǎn)生該位的預(yù)測因子,如編碼邏輯603所示。得到上溢預(yù)測因子iof和下溢預(yù)測因子iuf之后,將上溢預(yù)測因子的所有位進(jìn)行規(guī)約或邏輯運(yùn)算得到上溢預(yù)判值pof,將下溢預(yù)測因子的所有位進(jìn)行規(guī)約或邏輯運(yùn)算得到下溢預(yù)判值puf。
如圖7所示,溢出判斷和符號位確定模塊42具體包括上溢位判斷單元402、下溢位判斷單元403和符號位確定單元404;上溢位判斷單元402用于根據(jù)零碼最高位z[n-1]和運(yùn)算結(jié)果中次高位向最高位的進(jìn)位Cn-2采取與運(yùn)算得到上溢位判斷結(jié)果aov;圖示中,從加法器401的運(yùn)算中獲取運(yùn)算結(jié)果中次高位向最高位的進(jìn)位Cn-2;下溢位判斷單元403用于根據(jù)產(chǎn)生碼最高位g[n-1]和取反的運(yùn)算結(jié)果中次高位向最高位的進(jìn)位Cn-2采取與運(yùn)算得到下溢位判斷結(jié)果auv,圖示中,采用了同理編碼邏輯設(shè)計(jì),即,根據(jù)產(chǎn)生碼最高位g[n-1]和運(yùn)算結(jié)果中次高位向最高位的進(jìn)位Cn-2采取或運(yùn)算后再取反得到下溢位判斷結(jié)果auv;符號位確定單元404用于確定運(yùn)算結(jié)果符號位的正負(fù),由于加法器本身就存在溢出的可能導(dǎo)致無法使用運(yùn)算結(jié)果的最高位判斷運(yùn)算結(jié)果的正負(fù)情況,本申請實(shí)施例中,可根據(jù)零碼最高位z[n-1]和運(yùn)算結(jié)果中次高位向最高位的進(jìn)位Cn-2采取或運(yùn)算后,和產(chǎn)生碼最高位g[n-1]采取與運(yùn)算再取反運(yùn)算確定符號位判斷。
如圖7所示,溢出結(jié)果判定模塊43具體包括上溢出判定單元405和下溢出判定單元406;上溢出判定單元405用于判斷運(yùn)算結(jié)果是否大于加法器輸入位寬可表示的最大值;或判斷運(yùn)算結(jié)果是否大于加法器限制位寬可表示的最大值,若是,則判斷運(yùn)算結(jié)果上溢出;下溢出判定單元406用于判斷運(yùn)算結(jié)果是否小于加法器輸入位寬可表示的最小值;或判斷運(yùn)算結(jié)果是否小于加法器限制位寬可表示的最小值;若是,則判斷運(yùn)算結(jié)果下溢出。
具體的,上溢出判定單元405包括基于輸入位寬的上溢出判定子單元和基于限制位寬的上溢出判定子單元;基于輸入位寬的上溢出判定子單元中,基于上溢位判斷結(jié)果aov,判斷運(yùn)算結(jié)果是否大于加法器輸入位寬可表示的最大值;基于限制位寬的上溢出判定子單元中,根據(jù)對上溢預(yù)判值pof和運(yùn)算結(jié)果處于限制位寬范圍內(nèi)的最高位s[m-1]采取或運(yùn)算,再與符號位判斷rs采取與運(yùn)算后的運(yùn)算結(jié)果,判斷運(yùn)算結(jié)果是否大于加法器限制位寬可表示的最大值。下溢出判定單元406包括基于輸入位寬的下溢出判定子單元和基于限制位寬的下溢出判定子單元;基于輸入位寬的下溢出判定子單元中,基于下溢位判斷結(jié)果auv判斷運(yùn)算結(jié)果是否小于加法器輸入位寬可表示的最小值;基于限制位寬的下溢出判定子單元中,根據(jù)對下溢預(yù)判值puf和運(yùn)算結(jié)果處于限制位寬范圍內(nèi)的最高位s[m-1]采取或運(yùn)算,再與符號位判斷rs采取與運(yùn)算后的運(yùn)算結(jié)果,判斷運(yùn)算結(jié)果是否小于加法器限制位寬可表示的最小值。
針對上述實(shí)施例需要說明的是:由于同樣的邏輯可以使用不同的邏輯門進(jìn)行表達(dá)和實(shí)現(xiàn),因此,基于同樣的實(shí)現(xiàn)原理,使用其他方式得到相同邏輯結(jié)果的設(shè)計(jì)同樣屬于本申請的保護(hù)范圍內(nèi)。上述所有判斷中,基于邏輯門的特點(diǎn),結(jié)合實(shí)際設(shè)計(jì)使用情況,采取最終邏輯結(jié)果為高時(shí)代表肯定判斷,最終邏輯結(jié)果為低時(shí)代表否定判斷,或,最終邏輯結(jié)果為高時(shí)代表否定判斷,最終邏輯結(jié)果為低時(shí)代表肯定判斷,本申請實(shí)施例不予限制。
應(yīng)該指出的是,上述說明并非是對本發(fā)明的限制,本發(fā)明也并不僅限于上述舉例,本技術(shù)領(lǐng)域的普通技術(shù)人員在本發(fā)明的實(shí)質(zhì)范圍內(nèi)所做出的變化、改型、添加或替換,也應(yīng)屬于本發(fā)明的保護(hù)范圍。