循环8位移位器,VHDL

循环8位移位器,VHDL,vhdl,Vhdl,我有以下问题:我必须实现8位左移位器,使一个左移位,其代码是: entity left_shift is generic ( N: integer := 8); Port( Databitsin : in STD_LOGIC_vector(N-1 downto 0); Databitsout : out STD_LOGIC_vector(N-1 downto 0); Carry: out std_logic ); end left_shift; archite

我有以下问题:我必须实现8位左移位器,使一个左移位,其代码是:

entity left_shift is

generic ( N: integer := 8);

Port(
    Databitsin : in STD_LOGIC_vector(N-1 downto 0);
    Databitsout : out STD_LOGIC_vector(N-1 downto 0);
    Carry: out std_logic  
);

end left_shift;

architecture Behavioral_l of left_shift is
begin
    Databitsout(N-1 downto 1)<= Databitsin(N-2 downto 0);
    Carry<=Databitsin(N-1);
end Behavioral_l;
实体左移位为
泛型(N:整数=8);
港口(
Databitsin:标准逻辑向量(N-1向下至0);
数据输出:输出标准逻辑向量(N-1到0);
执行:执行标准逻辑
);
结束左/右移位;
左移位的架构行为是
开始

Databitsout(N-1到1)这听起来很像家庭作业,但从来没有少过:

首先,为什么要使用两个组件?优雅的解决方案是编写一个能够向左或向右移动的组件


如果你有一些非常好的理由按照你建议的方式做事情,试着实例化这两种方法,并根据所需的动作在这两种方法的数据输出信号之间进行多路复用。要进行循环移位而不是线性移位,需要将进位压缩到逻辑向量数组的适当端。

有不同的方法实现循环移位(=旋转!)。如果添加方向选择器Dir,则在一个代码中可以同时具有两个方向

ex.1

添加“使用IEEE.NUMERIC\u STD.all”以使用NUMERIC\u STD包函数:

Databitsout<=std_logic_vector(rotate_right(unsigned(Databitsin),1)) when Dir='0' else
             std_logic_vector(rotate_left(unsigned(Databitsin),1));                 

Databitsout@user2280448如果您对问题有更新,您应该编辑问题,而不是其中一个答案。非常感谢您的帮助
Databitsout<=std_logic_vector(rotate_right(unsigned(Databitsin),1)) when Dir='0' else
             std_logic_vector(rotate_left(unsigned(Databitsin),1));                 
Databitsout<=Databitsin(0) & Databitsin(N-1 downto 1) when Dir='0' else
             Databitsin(N-2 downto 0) & Databitsin(N-1);
Carry<=      Databitsin(0) when Dir='0' else 
             Databitsin(N-1);