Float 계산 회로의 Verilog-HDL 구현에 대해 - 2.5 (공통화)
3979 단어 FPGAVerilogfloat하드웨어VerilogHDL
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 공부
float32의 하드웨어 구현
긍정적이고 부정적인 가감산을 균일하게 처리하는 가감산 회로 생성
이번에는 0을 고려하지 않습니다.
사양
이하 상세
값 계산 정책
제 2 인수와 오퍼레이터의 배타적 논리합을 취득해, 제 2 인수의 부호로 한다
모든 계산을 가산 표기로 한다
큰 값의 부호를 결과 출력 부호로 한다.
글쎄, 그렇게 될거야.
가산과 감산의 판정은 큰 값과 작은 값의 부호의 배타적 논리합으로 한다
글쎄, 그렇게 될거야.
1. 값 비교
숫자 비교를 수행하고 큰 값을 vb (값 큰), 작은 값을 vs (값 작은)에 저장합니다.
가산 회로와 달리 코드 이야기가 관련되어 있기 때문에 완전히 크고 작은 것을 분리하고 싶습니다.
//TIM1
reg [31:0] vb;
reg [31:0] vs;
always @(posedge clk) begin
if (v2[30:23] < v1[30:23]) begin
vb <= v1;
vs <= {v2[31] ^ op, v2[30:0]};
end else if (v1[30:23] < v2[30:23]) begin
vb <= {v2[31] ^ op, v2[30:0]};
vs <= v1;
end else if (v2[22:0] < v1[22:0]) begin
vb <= v1;
vs <= {v2[31] ^ op, v2[30:0]};
end else begin
vb <= {v2[31] ^ op, v2[30:0]};
vs <= v1;
end
end
제 2 인수의 부호와 오퍼레이터의 배타적 논리합을 취한다 (-(-v) 의 배제)
2, 3. 생략
부호가 지워지지 않도록 적절히 보호
4. 계산
//TIM4
reg [7:0] vexp3;
reg [24:0] r;
always @(posedge clk) begin
op3 <= opb2;
vexp3 <= vexp2;
if (opb2 ^ ops2) begin
r <= vb3 - vs3;
end else begin
r <= vb3 + vs3;
end
end
2치의 부호가 다른 경우는 감산한다(부호는 큰 쪽을 유지하기 때문에 절대치의 계산이군)
5, 6. 생략
순조롭게 만들기 (특히 코멘트 없음)
시뮬레이션 결과
4302_A666 = 130.65
42E8_4CCD = 116.15
C2E8_4CCD = -116.17
C302_A666=-130.65
값 1
값 2
연산자
결과
123.4
7.25
+
130.65
123.4
-7.25
+
116.15
-123.4
7.25
+
-116.15
-123.4
-7.25
+
-130.65
7.25
123.4
+
130.65
7.25
-123.4
+
-116.15
-7.25
123.4
+
116.15
-7.25
-123.4
+
-130.65
123.4
7.25
-
116.15
123.4
-7.25
-
130.65
-123.4
7.25
-
-130.65
-123.4
-7.25
-
-116.15
7.25
123.4
-
-116.15
7.25
-123.4
-
130.65
-7.25
123.4
-
-130.65
-7.25
-123.4
-
116.15
있어요.
Reference
이 문제에 관하여(Float 계산 회로의 Verilog-HDL 구현에 대해 - 2.5 (공통화)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/Soleiyu/items/5751c226d1e8008a3231
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
//TIM1
reg [31:0] vb;
reg [31:0] vs;
always @(posedge clk) begin
if (v2[30:23] < v1[30:23]) begin
vb <= v1;
vs <= {v2[31] ^ op, v2[30:0]};
end else if (v1[30:23] < v2[30:23]) begin
vb <= {v2[31] ^ op, v2[30:0]};
vs <= v1;
end else if (v2[22:0] < v1[22:0]) begin
vb <= v1;
vs <= {v2[31] ^ op, v2[30:0]};
end else begin
vb <= {v2[31] ^ op, v2[30:0]};
vs <= v1;
end
end
//TIM4
reg [7:0] vexp3;
reg [24:0] r;
always @(posedge clk) begin
op3 <= opb2;
vexp3 <= vexp2;
if (opb2 ^ ops2) begin
r <= vb3 - vs3;
end else begin
r <= vb3 + vs3;
end
end
Reference
이 문제에 관하여(Float 계산 회로의 Verilog-HDL 구현에 대해 - 2.5 (공통화)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Soleiyu/items/5751c226d1e8008a3231텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)