vhdl 有符号和无符号类型字节顺序
vhdl signed and unsigned type endianess
我正在用充满代数运算的 vhdl 编写代码,并且我声明了一些带符号的变量(我知道有更好的类型,但我需要减少使用的位数)。我想知道将它们声明为
是否更好
variable foo1 := signed (7 downto 0);
或
variable foo2 := signed (0 to 7);
我知道这与字节顺序有关,但我很困惑。例如,如果我声明
variable foo3 := signed (0 to 7) := "01100100";
它会被解释为十进制的 100 还是 38?如果我在 foo3
上有条件
if (foo3(1) = '1') then
-- whatever you want
endif;
foo3(1) = '1'
是真还是假?
为了在 VHDL 的数学包之间保持一致,最好使用 downto。
variable foo1 : signed (7 downto 0);
这与 numeric_std 包无关。与 numeric_std 包一样,最左边的元素始终是最重要的元素,与您使用的是 downto 还是 to 无关。 numeric_std 也很有趣,该值绝不依赖于索引 - 因此(15 到 8)与(7 到 0)的工作方式相同。
另一方面,对于 VHDL-2008 的定点和浮点包,唯一支持的方向是 downto。实际范围有意义。对于固定点,指数具有权重。负指数是小数部分。
variable foo4 : sfixed(7 downto -2) ; -- 8 bits of integer, 2 bits of fraction
variable foo5 : sfixed(7 downto 1) ; -- even numbers only.
有关定点和浮点的更多信息,请参阅:
https://synthworks.com/papers/vhdl_fixedfloat_lewis_bishop_date_2007.pdf
有关未签名/已签名的更多信息,请参阅:
https://synthworks.com/papers/vhdl_math_tricks_mapld_2003.pdf
在 IEEE 标准 VHDL 综合包中:
The type UNSIGNED represents an unsigned binary integer with the most
significant bit on the left, while the type SIGNED represents a
two’s-complement binary integer with the most significant bit on the
left. In particular, a one-element SIGNED vector represents the
integer values –1 and 0.
因此无论范围方向如何,数字都将被解释为 100。但是,访问或分配单个元素将匹配 to
范围,即 foo3(1) = '1'
.
我正在用充满代数运算的 vhdl 编写代码,并且我声明了一些带符号的变量(我知道有更好的类型,但我需要减少使用的位数)。我想知道将它们声明为
是否更好variable foo1 := signed (7 downto 0);
或
variable foo2 := signed (0 to 7);
我知道这与字节顺序有关,但我很困惑。例如,如果我声明
variable foo3 := signed (0 to 7) := "01100100";
它会被解释为十进制的 100 还是 38?如果我在 foo3
上有条件
if (foo3(1) = '1') then
-- whatever you want
endif;
foo3(1) = '1'
是真还是假?
为了在 VHDL 的数学包之间保持一致,最好使用 downto。
variable foo1 : signed (7 downto 0);
这与 numeric_std 包无关。与 numeric_std 包一样,最左边的元素始终是最重要的元素,与您使用的是 downto 还是 to 无关。 numeric_std 也很有趣,该值绝不依赖于索引 - 因此(15 到 8)与(7 到 0)的工作方式相同。
另一方面,对于 VHDL-2008 的定点和浮点包,唯一支持的方向是 downto。实际范围有意义。对于固定点,指数具有权重。负指数是小数部分。
variable foo4 : sfixed(7 downto -2) ; -- 8 bits of integer, 2 bits of fraction
variable foo5 : sfixed(7 downto 1) ; -- even numbers only.
有关定点和浮点的更多信息,请参阅: https://synthworks.com/papers/vhdl_fixedfloat_lewis_bishop_date_2007.pdf
有关未签名/已签名的更多信息,请参阅:
https://synthworks.com/papers/vhdl_math_tricks_mapld_2003.pdf
在 IEEE 标准 VHDL 综合包中:
The type UNSIGNED represents an unsigned binary integer with the most significant bit on the left, while the type SIGNED represents a two’s-complement binary integer with the most significant bit on the left. In particular, a one-element SIGNED vector represents the integer values –1 and 0.
因此无论范围方向如何,数字都将被解释为 100。但是,访问或分配单个元素将匹配 to
范围,即 foo3(1) = '1'
.