【问题标题】:The best way to convert a real valued number to an integer value larger than 32 bits?将实数值转换为大于 32 位的整数值的最佳方法?
【发布时间】:2017-09-12 10:56:31
【问题描述】:

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

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

【问题讨论】:

    标签: system-verilog


    【解决方案1】:

    从实数到整数的隐式转换为您提供了您想要的四舍五入

    test_value = 2.0**39.5;
    

    或者您可以使用显式转换

    typedef logic [41:0] uint42_t;
    
    test_value = uint42_t'(2.0**39.5);
    

    【讨论】:

    • 感谢您的回答,@dave_59。这两个都为我工作。仅供参考:您的显式类型转换中有一个错字,声明的标识符是 uint42_t 并且转换有一个额外的下划线 uint_42_t ...我试图修复它,但它不允许我,因为我没有在至少 6 个字符。
    猜你喜欢
    • 2019-05-30
    • 2018-08-17
    • 2023-04-08
    • 2023-03-05
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 2018-03-23
    • 2016-05-07
    相关资源
    最近更新 更多