gpt4 book ai didi

type-conversion - VHDL 中的类型转换 : real to integer - Is the rounding mode specified?

转载 作者:行者123 更新时间:2023-12-04 07:04:15 25 4
gpt4 key购买 nike

在 Vivado ( read more ) 中调试用户定义物理类型的处理时,我发现了从实数到整数的类型转换的不同行为。

这是我的示例代码:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--use IEEE.MATH_REAL.all;

entity Top_PhysicalTest_Simple is
port (
Clock : in STD_LOGIC;
Input : in STD_LOGIC;
Output : out STD_LOGIC
);
end;

architecture top of Top_PhysicalTest_Simple is
constant int_1 : INTEGER := natural(0.5);
constant int_2 : INTEGER := integer(-0.5);
-- constant int_2 : INTEGER := natural(-0.5);
begin
assert FALSE report "16 - int_1 (natural(0.5)): " & INTEGER'image(int_1) severity note;
assert FALSE report "17 - int_2 (natural(-0.5)): " & INTEGER'image(int_2) severity note;

Output <= Input when rising_edge(Clock);
end;

虚拟触发器用于防止某些工具提示设计无效。

XST 14.7:
Elaborating entity <Top_PhysicalTest_Simple> (architecture <top>) from library <work>.
Note: "16 - int_1 (natural(0.5)): 1"
Note: "17 - int_2 (natural(-0.5)): 0"

XST 似乎使用向上舍入模式并处理类型转换包含范围检查。
所以我必须使用 integer(-0.5)而不是 natural(-0.5) .

Vivado 2014.4:
[Synth 8-63] RTL assertion: "16 - int_1 (natural(0.5)):  1" ["D:/Temp/PhysicalTest_Vivado2014.4/vhdl/Top_PhysicalTest_Simple.vhdl":80]
[Synth 8-63] RTL assertion: "17 - int_2 (natural(-0.5)): -1" ["D:/Temp/PhysicalTest_Vivado2014.4/vhdl/Top_PhysicalTest_Simple.vhdl":81]

Synth 似乎使用循环到无穷大的模式,它在没有范围检查的情况下处理类型转换。所以也许 natural(..)只是 integer(..) 的别名.
注释行: constant int_2 : INTEGER := natural(-0.5);没有错误。

GHDL 0.29:

GHDL 0.29 在 natural(..) 中没有范围检查.
我知道它已经过时了,但由于 0.31 讨厌我,我不知道这是否已经修复。

GHDL 0.31:

我稍后会介绍结果。 GHDL 拒绝分析我的代码,因为:
Top_PhysicalTest_Simple.vhdl:29:14: 文件 std_logic_1164.v93 已更改,必须重新分析

我的问题:
  • VHDL 是否定义了舍入模式?如果有,是哪一个?
  • 如果没有定义模式,我应该如何处理舍入?
  • 最佳答案

    来自 IEEE Std 1076-2002 第 7.3.5 节“类型转换”

    The conversion of a floating point value to an integer type rounds to
    the nearest integer; if the value is halfway between two integers,
    rounding may be up or down.


    如果你想要别的东西,也许在 IEEE.MATH_REAL 中起作用可能会有一些用处(特别是 CEILFLOOR 和/或 TRUNC )。

    关于type-conversion - VHDL 中的类型转换 : real to integer - Is the rounding mode specified?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27823757/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com