<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > EDA/PCB > 設(shè)計(jì)應(yīng)用 > 數(shù)值計(jì)算中Bcd碼校驗(yàn)電路的分析與設(shè)計(jì)

          數(shù)值計(jì)算中Bcd碼校驗(yàn)電路的分析與設(shè)計(jì)

          作者: 時(shí)間:2008-06-16 來源:中國(guó)電子網(wǎng) 收藏

            引言

          本文引用地址:http://www.ex-cimer.com/article/84260.htm

            的工作過程是大量數(shù)據(jù)的輸入--運(yùn)算--輸出的過程,其中相當(dāng)數(shù)量的數(shù)據(jù)使用十進(jìn)制形式表達(dá)。使用者希望的輸入數(shù)據(jù)和輸出結(jié)果能使用十進(jìn)制形式表達(dá),而在內(nèi)采用二進(jìn)制表示和處理數(shù)據(jù)更方便,所以在二者之間的數(shù)制轉(zhuǎn)換是必要的。通常采用兩種方式解決這一問題。

            方法1:十--二進(jìn)制轉(zhuǎn)換將輸入的十進(jìn)制數(shù)據(jù)轉(zhuǎn)換為相應(yīng)的二進(jìn)制數(shù)據(jù),微處理器內(nèi)部算術(shù)邏輯單元仍然執(zhí)行二進(jìn)制數(shù)據(jù)運(yùn)算微操作,運(yùn)算結(jié)果再進(jìn)行二--十進(jìn)制轉(zhuǎn)換,將結(jié)果以十進(jìn)制形式輸出。

            方法2:算術(shù)邏輯單元對(duì)二進(jìn)制數(shù)據(jù)處理能力的前提下,增加少量硬件線路,使之對(duì)某種二進(jìn)制編碼形式表示的十進(jìn)制數(shù)據(jù)具有直接處理能力,該算術(shù)邏輯單元能夠接收特定二進(jìn)制編碼構(gòu)成的十進(jìn)制數(shù)據(jù),可以產(chǎn)生相同編碼組成的計(jì)算結(jié)果,在數(shù)據(jù)處理過程中該單元執(zhí)行十進(jìn)制數(shù)據(jù)運(yùn)算微操作。

            微處理器使用中涉及大量的數(shù)據(jù)輸入輸出操作,顯然方法1不是理想的選擇,因而從提高機(jī)器的運(yùn)行效率,簡(jiǎn)化機(jī)器結(jié)構(gòu)和保證系統(tǒng)時(shí)序結(jié)構(gòu)的規(guī)整性考慮,方法2更有實(shí)用價(jià)值。 所以本文講述了方法2為算法依據(jù)的BCD加減

            校驗(yàn)原理

            在計(jì)算機(jī)得中,數(shù)值經(jīng)常是以表示的十進(jìn)制進(jìn)行運(yùn)算的。即一位BCD碼用4位二進(jìn)制位表示。但是BCD的加法需要兩個(gè)加法器來完成,如果分析一下BCD數(shù)的加法過程,原因就很清楚。請(qǐng)看下面:

            令A(yù)=1000,B=0111,這兩個(gè)數(shù)都是正確的BCD碼,如果兩個(gè)操作數(shù)直接相加,結(jié)果不是一個(gè)BCD碼:

            1000

            + 0111

            1111

            正確的BCD碼加法運(yùn)算應(yīng)為1000+0111=(1)0101即8+7=15。其它BCD碼操作數(shù)運(yùn)算的結(jié)果也能產(chǎn)生不正確的BCD碼結(jié)果。實(shí)際上當(dāng)結(jié)果大于9或者有進(jìn)位時(shí),就要進(jìn)行BCD的校驗(yàn),以確保結(jié)果的正確性。

            對(duì)于產(chǎn)生進(jìn)位得情況,加法器直接提供了二進(jìn)制的進(jìn)位輸出,即BCD修正信號(hào)Y=C.而對(duì)于結(jié)果大于9,需要修正的數(shù)為1010-1111。

            把它們作為四變量布爾表達(dá)式的最小項(xiàng),就能化簡(jiǎn)邏輯。即Y=E3E2+E3E1.其中E3 、E2、E1、E0是加法器的和的輸出。綜合以上結(jié)果可得BCD修正信號(hào)Y=E3E2+E3E1+C.修正如圖一所示。

            下面就已四位并行加法器和一位串行加法器兩種電路形式來討論BCD碼的驗(yàn)證。

             圖二所示為4位并行的BCD加法器電路。其中上面加法器的輸入來自低一級(jí)的BCD數(shù)字。下面加法器BCD的輸出E3、E2、E1、E0和COUT至高一級(jí) BCD數(shù)字,其A3和A1位接地,即當(dāng)BCD校驗(yàn)信號(hào)為真時(shí)Y=1,A3A2A1A0= 0110,以實(shí)現(xiàn)加6的調(diào)整.當(dāng)不需要BCD調(diào)整時(shí)Y=0,此時(shí)A3A2A1A0=0000,從而使輸出結(jié)果無變化.

            雖然4位并行加法器運(yùn)算速度較快,但是所用邏輯門較多。圖三所示為一位串行BCD加法器。它是以犧牲速度以達(dá)到減少硬件邏輯門的目的,這種電路在對(duì)頻率要求不高的系統(tǒng)中非常之適用。其中ADDER1、ADDER2均為一位全加器。ADDER1 做主運(yùn)算器,ADDER2做BCD校驗(yàn)運(yùn)算器,不管是否做BCD校驗(yàn),ADDER2的初始進(jìn)位、借位始終為“1”。

            圖三中Z型門為延時(shí)電路,延時(shí)一個(gè)時(shí)鐘周期,這樣在外部電路控制下,經(jīng)過四個(gè)時(shí)鐘周期,得到一位十進(jìn)制BCD結(jié)果E3E2E1E0.由電路圖所以當(dāng) C+(E3E2+E3E1)邏輯值為‘1’時(shí),控制多路選擇器選擇A通路(A通路為序列 1001),當(dāng)C+(E3E2+E3E1)為‘0’時(shí),選擇B通路(B通路序列為1111),即需要校驗(yàn)時(shí),多路選擇器輸出序列1001;不需要校驗(yàn)時(shí),輸出序列1111,與Z型門的輸出對(duì)應(yīng)相加,并且ADDER2的初始進(jìn)位始終為‘1’,由此可完成BCD的校驗(yàn)工作。

             下面是基于4位并行BCD加法器算法的一種快速BCD的加法器VERILOG硬件描述語言程序及其仿真結(jié)果。

            module bcd_check (data_i,data_o,cy_i,cy_o,en,z_i,z_o);

            input data_i;

            input cy_i;

            input z_i;

            input en; //insructure

            output cy_o;

            output data_o;

            output z_o;

            wire [3:0] data_i;

            wire cy_i;

            wire en;

            reg z_o;

            reg cy_o;

            reg [3:0] data_o;

            //}} End of automatically maintained section

          DIY機(jī)械鍵盤相關(guān)社區(qū):機(jī)械鍵盤DIY



          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();