Float 계산 회로의 Verilog-HDL 구현에 대해 - 그 2.7 (0 대응)

Float 계산 회로의 Verilog 구현



~ FPGA에 올리고 싶다 ~
올레올레 구현이므로 잘못되어도 몰라요

가산회로편
Float 계산 회로의 Verilog-HDL 구현에 관하여 - 그 1

디버그 툴 작성편
Float 계산 회로의 (ry-그 1.1(float값의 16진수 표기)

보충과 LeadingZeros편
플로팅 컴퓨팅 회로의 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

좋은 웹페이지 즐겨찾기