
2つ数値の差を絶対値で求める適切な計算法を探しています.
2つの候補の内,回路の大きさが小さくなりそうな方はどちらですか?
また,絶対値を求める他の方法があったら教えてください。
<候補1>
X(絶対値)a1,a2(データ)
if(a1 < a2) X <= a2 - a1;
elsif (a2 > a1 ) X <= a1 -a2;
else X <= 0
<候補2>
df(N+1) 絶対値 X をビットで表現したときの最上位ビット
X <= a1-a2
X <= ( df(N+1) xor df(N) ) &
( df(N+1) xor df(N-1) ) &
( df(N+1) xor df(N-2) ) &
・・・・・・・
( df(N+1) xor df(2) ) &
( df(N+1) xor df(1) ) &
( df(N+1) xor df(0) ) + ("000000000" & df(N+1));
No.3ベストアンサー
- 回答日時:
考え方は<候補1>、回答のような1ビット演算回路をならべると、回路図が見やすそうで、規模も小さくなりそうだな、と思ったので。
<候補1>だと Nビット比較器とNビットセレクタとNビット減算器が必要な感じに見えたので、それだと無駄な配線が多くなりそうな感じがしたもので。
最近の論理合成プログラムはよくできてるそうで、プログラムのような感覚で設計できるとか。そんな環境なら、私の書いた方法はあまりやくにたたないかもしれません。
No.2
- 回答日時:
ハードはそんなに詳しくはないのですが
絶対値の演算を論理回路を組み合わせてやりたい、ということでよろしいですか?
&,(N)は
a1: a1(N) & a1(N-1) & ...& a1(1) & a1(0)
a2: a2(N) & a2(N-1) & ...& a2(1) & a2(0)
のような構成の意味でしょうか。
入力a1(i),a2(i),cmp(i+1),sel(i+1),Carry(i-1)
出力cmp(i),sel(i),df(i),Carry(i)
cmp(i+1) =False なら
cmp(i)<= (a1(i) ≠ a2(i))
sel(i)<= (a1(i) > a2(i))
cmp(i+1) =Trueなら
cmp(i)<=cmp(i+1)
sel(i)<=sel(i+1)
出力は
sel(i) =True なら df(i),Carry(i)<=a1(i) - a2(i) -Carry(i-1)
sel(i) =False なら df(i),Carry(i)<=a2(i) - a1(i) -Carry(i-1)
のような回路をビット数並べるといい気がします。
この回答への補足
<絶対値の演算を論理回路を組み合わせてやりたい、ということでよろしいですか?
絶対値演算を論理式で記述するか,セレクタ(if文)を用いた記述するか どちらがシステム的に優れているかということです。
↓2の補数を求めています。
最上位ビットが1なら符号を反転,最後に1を足す.
X <= ( df(N+1) xor df(N) ) &
( df(N+1) xor df(N-1) ) &
( df(N+1) xor df(N-2) ) &
・・・・・・・
( df(N+1) xor df(2) ) &
( df(N+1) xor df(1) ) &
( df(N+1) xor df(0) ) + ("000000000" & df(N+1));
お答えありがとうございます
この部分で if文を論理演算を表し,{ if(a1 < a2), else }
cmp(i+1) =False なら
cmp(i)<= (a1(i) ≠ a2(i))
sel(i)<= (a1(i) > a2(i))
cmp(i+1) =Trueなら
cmp(i)<=cmp(i+1)
sel(i)<=sel(i+1)
この部分で,if文の中身の計算ですね。
sel(i) =True なら df(i),Carry(i)<=a1(i) - a2(i) -Carry(i-1)
sel(i) =False なら df(i),Carry(i)<=a2(i) - a1(i) -Carry(i-1)
この方法は<候補1>と同じような気がします、、
No.1
- 回答日時:
「回路の大きさが小さくなりそうな方」
回路が何を指しているのか判りませんが、1点だけ。
候補1の最後のelseは要りますか?
if(a1 < a2) X <= a2 - a1;
elsif (a1 > a2) X <= a1 -a2; ←ここの間違いは修正。
else X <= 0 ←ここ
a1 < a2 じゃ無かったら、
a1 > a2 又は a1 = a2
だけど、0を代入するなら、
a1 - a2
も、0になるんじゃないの?
回答ありがとうございます
ご指摘のとおり0の代入も必要なさそうですね
if(a1 < a2) X <= a2 - a1;
else X <= a1 -a2
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
人気Q&Aランキング
-
4
エクセルの日付抽出
-
5
エクセルで二つの数字の小さい...
-
6
エクセル 同じ値を探して隣の...
-
7
関数を教えてください。
-
8
【VBA】A列の指定した値と同じ...
-
9
「ゴンチャ」について
-
10
エクセルで、2種類のデータを...
-
11
ある列のセルに特定の文字が入...
-
12
エクセルで極大値を拾うには
-
13
PowerPointで表の1つの列だけ...
-
14
Excel、市から登録している住所...
-
15
2つのエクセルのデータを同じよ...
-
16
SUMIFとCOUNTIFを合わせたよう...
-
17
エクセル(勝手に太字になる)
-
18
エクセルで「ぶら下げ」書式を...
-
19
50人を数回、グループ分けする...
-
20
エクセルで最初のスペースまで...
おすすめ情報
公式facebook
公式twitter