Float 계산 회로의 Verilog-HDL 실장에 대해 -그 3(적산 회로)

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 (공통화)

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

목적



float 공부
float32의 하드웨어 구현

0에 대응하지 않는 적산 회로의 실장을 실시한다
전회까지의 가감산 회로와의 공통화는 실시하지 않는다.

이번 HW





코드


module float_mul(
    input wire clk,
    input wire [31:0] v1,
    input wire [31:0] v2,

    output wire [31:0] vres
);

    assign vres = res;

    // TIM1
    reg [7:0] v1e;
    reg [7:0] v2e;
    reg [23:0] v1v;
    reg [23:0] v2v;
    reg v1o;
    reg v2o;

    // TIM2
    reg [7:0] re;
    reg [47:0] rv;
    reg ro;

    // TIM3
    reg [31:0] res;

    always @(posedge clk) begin
    // TIM1
        v1e <= (v1[30:23] - 8'h7F);
        v2e <= (v2[30:23] - 8'h7F);
        v1v <= {1'b1, v1[22:0]};
        v2v <= {1'b1, v2[22:0]};
        v1o <= v1[31];
        v2o <= v2[31];

    // TIM2
        re <= v1e + v2e;
        rv <= v1v * v2v;
        ro <= v1o ^ v2o;

    // TIM3
        if (rv[47]) begin
            res <= {ro, re + 8'h80, rv[46:24]};
        end else begin
            res <= {ro, re + 8'h7F, rv[45:23]};
        end
    end

endmodule

127과 128



계산 도중 내려가고 있기 때문입니다.

시뮬레이션 결과 및 오차




값 1
값 2
결과

정답
오차


7.25
123.4
894.64996

894.65
0.00004

7.25
0.00123
0.0089175

0.0089175
0

0.725
123.4
89.465004

89.465
0.000004

0.725
0.00123
0.00089175004

0.00089175
0.0000000004


쁘띠 개량(?)


// TIM3
    if (rv[47]) begin
        res <= {ro, re + 8'h80, rv[46:24] + {22'b0, rv[23]}};
    end else begin
        res <= {ro, re + 8'h7F, rv[45:23] + {22'b0, rv[22]}};
    end

반올림 도입
어쩌면 괜찮지 만 OF는 몰라

시뮬레이션 결과 및 오차




값 1
값 2
결과

정답
오차


7.25
123.4
894.65

894.65
0

7.25
0.00123
0.0089175

0.0089175
0

0.725
123.4
89.465004

89.465
0.000004

0.725
0.00123
0.0008917501

0.00089175
0.0000000001


오차가 커지거나 작아지거나 변하지 않거나

좋은 웹페이지 즐겨찾기