Float計算回路のVerilog-HDL実装について -その2.7(0対応)
Float計算回路のVerilog実装
~ FPGA に載せたい ~
オレオレ実装なので間違っていても知りません
加算回路編
Float計算回路のVerilog-HDL実装について -その1
デバッグツール作成編
Float計算回路の(ry-その1.1(float値の16進数表記)
補足とLeadingZeros編
Float計算回路のVerilog-HDL実装について -その1.5 (LeadingZeros)
減算回路編
Float計算回路のVerilog-HDL実装について -その2(減算編)
回路共通化とタイミング調整編
Float計算回路のVerilog-HDL実装について -その2.1(加算回路の共通化とタイミング調整)
共通化編
Float計算回路のVerilog-HDL実装について -その2.5(共通化)
目的
floatの勉強
float32のハードウェア実装
0に対応したHWの実装
面倒くさいので指数部が0かどうかで判定して非正規化数はまるめる(どんまい)
これで通常計算は最後(のはず)
0のパターン
a \pm 0\\
0 \pm a\\
a - a\\
0-0
だいたいこの4パターン(2でも良いくらい)
今回のHW
各値の保持とTIM4の変更
TIM4
// TIM4 //
if ((eb2 == es2) && (vb3 == vs3) && (opb2 ^ opb3)) begin
op3 <= 1'b0;
vexp3 <= 8'b0;
end else begin
op3 <= opb2;
vexp3 <= eb2;
end
if (eb2 == 8'b0) begin
r <= 25'b0;
end else if (es2 == 8'b0) begin
r <= vb3;
end else if (opb2 ^ ops2) begin
r <= vb3 - vs3;
end else begin
r <= vb3 + vs3;
end
その2.5までで、絶対値の大小で値をソートしている為、
a \pm 0
のパターンで 0 は必ず小さい値としてソートされる
したがって、
計算時にこれを検出すれば良い
さらに
大きい値が 0 であるならば 小さい方は必ず 0 である
シミュレーション結果
値1 | 値2 | 演算子 | 結果 | |
---|---|---|---|---|
123.4 | 0 | + | 123.4 | |
-123.4 | 0 | + | -123.4 | |
0 | 123.4 | + | 123.4 | |
0 | -123.4 | + | -123.4 | |
123.4 | 0 | - | 123.4 | |
-123.4 | 0 | - | -123.4 | |
0 | 123.4 | - | -123.4 | |
0 | -123.4 | - | 123.4 | |
0 | 0 | + | 0 | |
0 | 0 | - | 0 | |
123.4 | 123.4 | + | 246.8 | |
123.4 | 123.4 | - | 0 |
Author And Source
この問題について(Float計算回路のVerilog-HDL実装について -その2.7(0対応)), 我々は、より多くの情報をここで見つけました https://qiita.com/Soleiyu/items/23e1df40e67b05025990著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .