《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 模擬設(shè)計 > 設(shè)計應(yīng)用 > 數(shù)值計算中Bcd碼校驗電路的分析與設(shè)計
數(shù)值計算中Bcd碼校驗電路的分析與設(shè)計
摘要: 本文通過對Bcd碼算法和并/串行BCD校驗電路的分析,提出了一種高效,快速的BCD校驗?zāi)K,。由上面仿真結(jié)果可知,,此種電路速度較快,硬件電路簡單,。適合實時處理系統(tǒng),。
Abstract:
Key words :
 

引言

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

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

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

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

  校驗原理

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

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

  1000

 ?。?0111

  1111

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

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

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

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

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

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

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

   下面是基于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

reg [4:0] TEM P_RESULT;

  always @(data_i or cy_i or en )

  if(en == 0)

  begin

  cy_o=cy_i;

  data_o=data_i;

  z_o=z_i;

  end

  else

  begin

  if(data_i[3]&&data_i[1] ||(data_i[3]&&data_i[2]) || cy_i==1)

  TEMP_RESULT = {1'b0,data_i } + {1'b0,4'b0110 } + cy_i;

  else

  begin

  TEMP_RESULT[3:0]=data_i;

  TEMP_RESULT[4]=cy_i;

  end

  data_o = TEMP_RESULT[3:0];

  z_o = | TEMP_RESULT[3:0];

  cy_o = TEMP_RESULT[4];

  end

  例如:兩個十進制數(shù)2189+8075的正確結(jié)果應(yīng)為11064,可是,,相加運算后的結(jié)果為FEH,為此應(yīng)進行BCD調(diào)整,。將為經(jīng)校驗的相加結(jié)果 0010,1001,,1000,,1001(十進制2989)+1000,0000,,0111,, 0101(十進制8075)=1010,1001,,1111,,1110代人上述BCD校驗?zāi)K,可得仿真結(jié)果如圖四,。

   有圖可知data_o為1064 且進位輸出為1,,即總的結(jié)果為11064,這與2989+8075=11064的結(jié)果是一致的,。

  結(jié)束語

  本文通過對Bcd碼算法和并/串行BCD校驗電路的分析,,提出了一種高效,快速的BCD校驗?zāi)K,。由上面仿真結(jié)果可知,,此種電路速度較快,硬件電路簡單,。適合實時處理系統(tǒng),。

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。