我正在编写一个程序,将4位二进制寄存器的内容向左移动。如果我将0101作为输入,它将给出1010。
预期工作:
实际结果:
一切正常,除非当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;