4.2 通常のBCD 変換器 リスト58 は、8 ビットの値をBCD の3 桁の値にする変換器の変換部分です。
◆100 の位
adata は8 ビットなので100 で除算した場合は0?2 の値になります。p は100 の位を求める計算の結果を代入しています。
◆10 の位
10 の位の計算は、adata を10 で除算した値から100 の位の値を10 倍して減算します。t は10 の位を求める計算の結果を代入しています。
◆1 の位
adata を10 で除算した余りが1 の位の値になります。rは1 の位を求める計算の結果を代入しています。
◆100 の位の値の10 倍
10 の位を計算するのに100 の位の値の10 倍の値が必要ですが、この計算はp × 10 = p × 8 + p × 2 です。
- 2 進数のp × 8 はp を上位に3 ビット移動した値です。
- 2 進数のp × 2 はp を上位に1 ビット移動した値です。
- p の10 倍はp>>3+p>>1 になります。
s は100 の位の値の10 倍の値を求める計算の結果を代入しています。
◆計算の終了
本論理では8 ビットの記憶式の除算器を使っています。この行程の終了が変換の終了を示します。変換の終了を示すのにq の計算の終了を示すq.8 をACK に代入しています。
リスト58 BCD 変換器
logicname bcdconv
entity main
input RESET; { 初期化}
input REQ; { 変換要求}
input ADATA[8]; { データ}
output BCD0P[4]; { BCD 第1 桁}
output BCD1P[4]; { BCD 第2 桁}
output BCD2P[4]; { BCD 第3 桁}
output ACK;
bitn adata[8]; { データ仲介}
bitn p[8]; { 100 の位計算}
bitn q[8]; { 10 の位計算a}
bitn r[8]; { 1 の位}
bitn s[8]; { p の10 倍}
bitn t[8]; { 10 の位計算b }
BCD0P=r.0:3;
BCD1P=t.0:3;
BCD2P=p.0:3;
ACK=q.8;
adata=ADATA;
if (!RESET&!REQ)
p=adata/100; { 100 の位の計算}
endif
if (!RESET&!REQ)
q=adata/10; { 10 の位の計算a }
endif
if (!RESET&!REQ)
r=adata%10; { 1 の位の計算}
endif
s=p>>3+p>>1; { p の10 倍}
t=q-s.0:7; { 10 の位の計算b }
ende
続きを読む> 「第4章 マイクロプロセッサ 4.2 通常のBCD 変換器」 »