Я новичок в кодировании HDL.
У меня проблема с округлением, и доступны различные типы округления, например Round half away from zero
, Round half to even
, Round half to odd
и c. (находится в https://en.wikipedia.org/wiki/Rounding
). Я написал код округления Verilog для моего умножения, сложения и т. Д. c. с помощью inte rnet и код работает нормально. Но я хочу знать, какой тип округления выполняет код. Будь то половина раунда до нечетной или половина раунда до четной или что-то еще. Может ли кто-нибудь сказать мне, какой тип округления выполняет код? Код приведен ниже
`timescale 1ns / 1ps
module rounding();
parameter x = 16;
parameter y = 8;
reg [(x)-1:0] A=16'b0010011010110011;
reg [(x)-1:0] B;
initial begin
B = (A[y-1:0]) >= (1 << y-1) ? (A >>> y) + 1 : (A >>> y);
$display("%b", B);
end
endmodule
Если я введу A=16'b0010011010110011
; вывод идет как 0000000000100111;
, если A=16'b0000111100001111;
вывод идет как 0000000000001111