将实数值转换为大于32位的整数值的最佳方法是什么?

时间:2017-09-12 10:56:32

标签: system-verilog

System Verilog中是否有任何支持32位以上的系统功能?我想将实值数量转换为包含超过32位的整数值。 $ rtoi()系统函数正是我想要的值,可以用32位或更少的值表示。是否有内置功能,或者我需要自己编写?

举个具体的例子,我希望能够做到以下几点:

logic [41:0] test_value;

initial begin
    test_value = $rtoi($pow(2.0, 39.5));
end

在哪里,而不是$ rtoi(),我会使用未知的追求系统功能。给定正确的函数,如果支持舍入,我希望这会导致test_value使用位序列42'b1011010100000100111100110011001111111001或可能42'b1011010100000100111100110011001111111010进行初始化。

我可以编写自己的功能,但我想避免重新发明轮子,除非没有轮子。

1 个答案:

答案 0 :(得分:3)

从真实到整数的隐式演员可以为你提供所需的四舍五入

test_value = 2.0**39.5;

或者您可以使用显式转换

typedef logic [41:0] uint42_t;

test_value = uint42_t'(2.0**39.5);