01signal.com

Verilog의Signed arithmetics : 알아야 할 유일한 규칙

황금률은 다음과 같습니다. 모든 operands는 signed여야 합니다.

Verilog은 unsigned 숫자에 강한 경향이 있는 것 같습니다. 다음 중 하나는 unsigned 값을 산출합니다.

따라서 결론은 $signed system function을 사용하거나 signed wires 및 signed registers를 정의하는 것입니다.

예를 들어, signed register 에 unsigned register를 곱하고 결과를 signed 값으로 처리하려면(물론) 다음과 같이 하십시오.

reg         [15:0] a; // Unsigned
reg signed  [15:0] b;
wire signed [16:0] signed_a;
wire signed [31:0] a_mult_b;

assign signed_a = a; // Convert to signed
assign a_mult_b = signed_a * b

signed_a는 "a"보다 하나의 bit 넓기 때문에 항상 0인 sign bit을 위한 자리가 있습니다. 이 추가 bit이 없었다면 a의 MSb는 signed_a (MSb = most significant bit)에서 sign bit 로 취급되었을 것입니다.

"a" 대신 {1′b0, a} 와 같은 것으로 signed_a의 MSb를 명시적으로 결정하는 것이 실수로 필요할 수 있습니다. 그러나 Verilog standard는 표현식만이 숫자가 signed 인지 unsigned인지를 결정한다는 점에 대해 명시적입니다. 따라서 왼쪽은 이 문제에 영향을 미치지 않습니다. 따라서 "a"는 unsigned 값으로 취급되므로 0으로 확장됩니다.

이 페이지는 영어에서 자동으로 번역됩니다. 불분명한 사항이 있으면 원본 페이지를 참조하십시오.
Copyright © 2021-2024. All rights reserved. (6f913017)