向左移寄存器,带负载和使能信号

时间:2019-10-13 10:05:03

标签: vhdl

我正在编写一个程序,将4位二进制寄存器的内容向左移动。如果我将0101作为输入,它将给出1010。

预期工作:

  • 如果ENABLE为'1'并且LOAD为'1',则应从data_in读取并将值充电到aux。但不要转移。
  • 如果ENABLE为'1'并且LOAD为'0',则应将aux变量的值向左移动。
  • 如果ENABLE为0,则不会执行任何操作。

实际结果:
一切正常,除非当ENABLE为1且LOAD为0时,它不会移动值。

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.all; 
USE IEEE.NUMERIC_STD.all;
ENTITY shift_left IS
    GENERIC (num_bits:POSITIVE:= 4);
      PORT (
       clk:                 IN STD_LOGIC;
       enable:              IN STD_LOGIC;
       load:                IN STD_LOGIC;
      data_in:              IN UNSIGNED  (num_bits -1  DOWNTO 0); 
      data_out:         OUT UNSIGNED (num_bits -1  DOWNTO 0)); 
END shift_left;


ARCHITECTURE behaviour OF shift_left IS 
BEGIN
    PROCESS 

    variable aux: UNSIGNED(num_bits-1 downto 0);
    BEGIN
        WAIT UNTIL RISING_EDGE (clk);
            IF enable = '1' THEN
                IF load = '1' THEN
                    aux := data_in; 
                ELSE
                    FOR i IN num_bits-2 TO 0 LOOP 
                        aux(i+1) := aux(i);
                    END LOOP;
                    aux(0) := '0';
                END IF;
            END IF;--  enable
            data_out <= aux;
    END PROCESS;
END behaviour;

0 个答案:

没有答案