verilog中不同算术运算期间的位舍入?

Rounding of bits during different arithmetic operation in verilog?

我是 HDL 编码新手。

我对舍入有疑问,有不同类型的舍入可用,例如 Round half away from zeroRound half to evenRound half to odd 等(在 https://en.wikipedia.org/wiki/Rounding 中找到)。我在互联网的帮助下为我的乘法、加法等写了一个四舍五入的 verilog 代码,代码工作正常。但是,我想知道代码执行的是哪种类型的舍入。无论是 Round half to odd 还是 Round half to even 或其他。谁能告诉我代码执行的是什么类型的舍入?下面给出代码

`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

您的代码将输入值 A 除以 256 并四舍五入到最接近的整数:

A=16'b0010011010110011 -> 9907 (dec) -> 9907/256 = 38.69 (round up) ~ 39 -> 0000000000100111
A=16'b0000111100001111 -> 3855 (dec) -> 3855/256 = 15.06 (round down) ~ 15 -> 0000000000001111