Vhdl 6操作ALU是否有组合电路设计?

Vhdl 6操作ALU是否有组合电路设计?,vhdl,alu,Vhdl,Alu,我试图用VHDL创建一个ALU,但我很难实现几个操作。我已经实现了加法、减法和或运算,但我想知道如何实现逻辑移位运算?ALU是32位的,但任何设计都将受到赞赏 numeric\u std包包含逻辑移位操作,shift\u right 和左移: function SHIFT_LEFT (ARG: UNSIGNED; COUNT: NATURAL) return UNSIGNED; -- Result subtype: UNSIGNED(ARG'LENGTH-1 downto 0) -- Resul

我试图用VHDL创建一个ALU,但我很难实现几个操作。我已经实现了加法、减法和或运算,但我想知道如何实现逻辑移位运算?ALU是32位的,但任何设计都将受到赞赏

numeric\u std
包包含逻辑移位操作,
shift\u right
左移

function SHIFT_LEFT (ARG: UNSIGNED; COUNT: NATURAL) return UNSIGNED;
-- Result subtype: UNSIGNED(ARG'LENGTH-1 downto 0)
-- Result: Performs a shift-left on an UNSIGNED vector COUNT times.
--         The vacated positions are filled with '0'.
--         The COUNT leftmost elements are lost.

function SHIFT_RIGHT (ARG: UNSIGNED; COUNT: NATURAL) return UNSIGNED;
-- Result subtype: UNSIGNED(ARG'LENGTH-1 downto 0)
-- Result: Performs a shift-right on an UNSIGNED vector COUNT times.
--         The vacated positions are filled with '0'.
--         The COUNT rightmost elements are lost.
基于此,您可以简单地编写如下代码:

library ieee;
use ieee.numeric_std.all;

architecture syn of mdl is
  signal arg   : std_logic_vector(31 downto 0);
  signal count : std_logic_vector( 4 downto 0);
  signal res_r : std_logic_vector(31 downto 0);
  signal res_l : std_logic_vector(31 downto 0);
begin
  res_r <= std_logic_vector(shift_right(unsigned(arg), to_integer(unsigned(count))));
  res_l <= std_logic_vector(shift_left(unsigned(arg), to_integer(unsigned(count))));
end architecture;
ieee库;
使用ieee.numeric_std.all;
mdl的体系结构syn是
信号参数:标准逻辑向量(31到0);
信号计数:标准逻辑向量(4到0);
信号分辨率:标准逻辑向量(31到0);
信号分辨率:标准逻辑向量(31到0);
开始

res_r专注于软件问题——这是硬件设计。试着在@MikeW上提问-考虑到这是关于用VHDL编写实现的问题,这可能还是可以的。@admdraw可能是,但OP更可能找到在@MikeW上有相关硬件设计经验的人同意,这个问题一开始写得不是很好。@MikeW-有相当数量的vhdler和EE:)