gpt4 book ai didi

vhdl - VHDL中SLA算子的真实使用

转载 作者:行者123 更新时间:2023-12-04 22:56:33 24 4
gpt4 key购买 nike

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

4年前关闭。




Improve this question




大多数(如果不是全部)VHDL 教科书随便列出了算术运算符,其中更随便地列出了左移算术 (SLA) 作为填充最右边元素的左移。虽然偶wikipedia不同意这个定义,我从来没有见过有人对这个定义眨眼,它只是表面值(value),“是的,有道理”。

然而,在二进制算术中填充最右边的值显然完全没有用,这让我感到疑惑 - 有没有人在现实生活中发现 SLA 的一个很好的用途 ?

(我不反对 SLA 的存在,也不想从 VHDL 中根除它。这只是复活节假期的一点乐趣......)

最佳答案

This网站提到:

At one point, there were actual shift operators built into VHDL. These were: srl, sll, sra, sla. However these shift operators never worked correctly and were removed from the language. This website goes into great detail about the history of these VHDL shift operators and discusses why they have been replaced by shift_right() and shift_left() functions.



但是链接已损坏。

您链接的维基百科页面显示了一些非常重要的内容

The VHDL arithmetic left shift operator [sla] is unusual. Instead of filling the LSB of the result with zero, it copies the original LSB into the new LSB. While this is an exact mirror image of the arithmetic right shift, it is not the conventional definition of the operator, and is not equivalent to multiplication by a power of 2. In the VHDL 2008 standard this strange behavior was left unchanged (for backward compatibility) for argument types that do not have forced numeric interpretation (e.g., BIT_VECTOR) but 'SLA' for unsigned and signed argument types behaves in the expected way (i.e., rightmost positions are filled with zeros). VHDL's shift left logical (SLL) function does implement the aforementioned 'standard' arithmetic shift.



IE。现在我们遇到了 sla的特殊情况。对于不同的数据类型表现不同。这对我来说听起来很愚蠢。

然而,这是意料之中的......根据我的经验,IEEE 标准化委员会主要由许多年长的男性组成,其中一些人在委员会成立时就在那里(<'87)。其余的是公司的代表,他们也不喜欢改变。如 sla等将被删除,这意味着必须重写许多旧代码。
然后经过几个月的讨论,他们决定通过保留旧数据类型的旧行为并改变新数据类型的行为来让老人们高兴。

编辑

为了让它更尴尬,似乎 sla没有为 std_logic_vector 定义和 unsigned类型等等......但它又回来了 ufixed类型之类的。所以我设法编写了一些(vhdl-2008)代码来展示行为的差异:
entity test_e is
end entity;

library ieee;

architecture test_a of test_e is
constant value1 : bit_vector(3 downto 0) := "0001";
constant value2 : bit_vector(3 downto 0) := value1 sla 2;

use ieee.fixed_pkg.all;
constant value3 : ufixed(3 downto 0) := to_ufixed(1,3,0);
constant value4 : ufixed(3 downto 0) := value3 sla 2;
begin
end architecture;

模拟时,value2 将保持“0111”,value4 将保持“0100”。

关于vhdl - VHDL中SLA算子的真实使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43362834/

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