0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Float計算回路のVerilog-HDL実装について -その2.7(0対応)

Posted at

#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

asz_timing.png

各値の保持と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|

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?