gpt4 book ai didi

vhdl - VHDL 中的通用移位算法

转载 作者:行者123 更新时间:2023-12-05 09:00:14 31 4
gpt4 key购买 nike

我正在设计通用移位算术运算符。除了以下面介绍的方式使用 32 位多路复用器(解码器)之外,还有更好的方法来实现它吗?

ENTITY isra IS 
PORT (
clk: in std_logic;
rst: in std_logic;
di: in std_logic_vector (31 downto 0);
sel: in std_logic_vector (31 downto 0);
res: out std_logic_vector (31 downto 0) := (others => '0')
);
END isra;


PROCESS
BEGIN
WAIT UNTIL clk'EVENT AND clk = '1';
IF rst = '1' THEN
res <= (others => '0');
ELSE
CASE sel IS
when X"00000001" => res <= to_stdlogicvector(to_bitvector(a) sra 1);
when X"00000002" => res <= to_stdlogicvector(to_bitvector(a) sra 2);
...
when X"0000001F" => res <= to_stdlogicvector(to_bitvector(a) sra 31);
when others => res <= (others => '0');
END CASE;
END IF;
END PROCESS;

最佳答案

您可以在没有任何循环或 case 语句的情况下使用 SRA 函数:

res <= to_stdlogicvector(to_bitvector(di) sra to_integer(sel));

请注意,您需要使 sel 成为无符号的,而不是 std_logic_vector:

sel: in unsigned (31  downto 0);

如果您不想这样,您仍然可以将 sel 转换为无符号的。您还需要我们 numeric_bit:

use ieee.numeric_bit.all;

关于vhdl - VHDL 中的通用移位算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4174473/

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