vhdl有符号和无符号类型endianess

vhdl有符号和无符号类型endianess,vhdl,endianness,signed,Vhdl,Endianness,Signed,我正在用vhdl编写一个充满代数运算的代码,并声明了一些有符号变量(我知道有更好的类型,但我需要减少使用的位)。我想知道是否最好把它们声明为 variable foo1 := signed (7 downto 0); 或 我知道这与持久性有关,但我相当困惑。例如,如果我声明 variable foo3 := signed (0 to 7) := "01100100"; 它将被解释为十进制的100或38?如果我对foo3as有条件 if (foo3(1) = '1') th

我正在用vhdl编写一个充满代数运算的代码,并声明了一些有符号变量(我知道有更好的类型,但我需要减少使用的位)。我想知道是否最好把它们声明为

variable foo1 := signed (7 downto 0);

我知道这与持久性有关,但我相当困惑。例如,如果我声明

variable foo3 := signed (0 to 7) := "01100100";
它将被解释为十进制的100或38?如果我对
foo3
as有条件

if (foo3(1) = '1') then
-- whatever you want
endif;

foo3(1)='1'
是真是假?

为了在VHDL的数学包中保持一致性,最好使用downto

variable foo1 : signed (7 downto 0);
这与数字_std包无关。与numeric_std包一样,最左边的元素始终是最重要的元素,与使用downto还是to无关。数值_std也很有趣,该值与索引无关-因此(15到8)的工作原理与(7到0)的工作原理相同

另一方面,对于VHDL-2008的定点和浮点包,支持的唯一方向是向下。实际范围有意义。对于固定点,指标具有权重。负指数是分数部分

variable foo4 : sfixed(7 downto -2) ; -- 8 bits of integer, 2 bits of fraction
variable foo5 : sfixed(7 downto 1) ; -- even numbers only.   
有关定点和浮点的详细信息,请参阅:

有关未签名/已签名的详细信息,请参阅:

为了在VHDL的数学包之间保持一致性,最好使用downto

variable foo1 : signed (7 downto 0);
这与数字_std包无关。与numeric_std包一样,最左边的元素始终是最重要的元素,与使用downto还是to无关。数值_std也很有趣,该值与索引无关-因此(15到8)的工作原理与(7到0)的工作原理相同

另一方面,对于VHDL-2008的定点和浮点包,支持的唯一方向是向下。实际范围有意义。对于固定点,指标具有权重。负指数是分数部分

variable foo4 : sfixed(7 downto -2) ; -- 8 bits of integer, 2 bits of fraction
variable foo5 : sfixed(7 downto 1) ; -- even numbers only.   
有关定点和浮点的详细信息,请参阅:

有关未签名/已签名的详细信息,请参阅:

在IEEE标准VHDL合成包中:

类型UNSIGNED表示具有最大值的无符号二进制整数 左侧的有效位,而带符号的类型表示 带上最高有效位的二元补整数 左。特别地,一个单元素有符号向量表示 整数值–1和0


因此,无论射程方向如何,数字都将被解释为100。但是,访问或分配单个元素将与IEEE标准VHDL合成包中的
to
范围相匹配,即
foo3(1)=“1”

类型UNSIGNED表示具有最大值的无符号二进制整数 左侧的有效位,而带符号的类型表示 带上最高有效位的二元补整数 左。特别地,一个单元素有符号向量表示 整数值–1和0


因此,无论射程方向如何,数字都将被解释为100。但是,访问或分配单个元素将与
to
范围相匹配,即
foo3(1)=“1”

这里
foo3
的默认值的数值为100十进制,if语句条件将为TRUE,而不需要在声明之后进行中间赋值。最左边的元素是最重要的。提供算术运算符重载的函数使用从操作数长度派生的子类型指示降序的别名,在内部将最右边的元素指定为(0)。返回的结果将按降序排列,分配将最左边的关联到最左边的,并需要匹配的元素,从而提供隐式子类型转换。您可以通过模拟自己演示问题的答案。例如,包numeric_std可以将有符号值转换为整数,例如
报告“foo3=“&integer”图像(转换为_integer(foo3)),适用于整数类型最小范围内的所有有符号值。同样,您也可以分配元素并检查结果值。此处
foo3
的默认值的数值为100十进制,if语句条件将为TRUE,而不需要在声明后进行中间赋值。最左边的元素是最重要的。提供算术运算符重载的函数使用从操作数长度派生的子类型指示降序的别名,在内部将最右边的元素指定为(0)。返回的结果将按降序排列,分配将最左边的关联到最左边的,并需要匹配的元素,从而提供隐式子类型转换。您可以通过模拟自己演示问题的答案。例如,包numeric_std可以将有符号值转换为整数,例如
报告“foo3=“&integer”图像(转换为_integer(foo3)),适用于整数类型最小范围内的所有有符号值。您也可以分配元素并检查结果值。引用自IEEE Std 1076-2008 16.8.5使用位和标准逻辑值的算术包,16.8.5.1概述。8.4索引名称“索引名称表示数组的一个元素。”“表达式指定元素的索引值;阵列的每个索引位置应有一个这样的表达式,每个表达式应为相应索引的类型。对于索引名称的计算,将计算前缀和表达式。如果索引值不属于数组对应索引范围的范围,则为错误。“引用自IEEE Std 1076-2008 16.8.5使用位和标准逻辑值的算术包,16.8.5.1概述。8.4索引名称“索引名称表示数组的元素。”表达式指定元素的索引值;应该有一个这样的表达