下面是编写的VHDL程序!!
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
PACKAGE REG IS
PROCEDURE SHIFTER (DIN,S:IN STD_LOGIC_VECTOR;
SIGNAL DOUT:OUT STD_LOGIC_VECTOR);
END REG;
PACKAGE BODY REG IS
PROCEDURE SHIFTER (DIN,S:IN STD_LOGIC_VECTOR;
SIGNAL DOUT: OUT STD_LOGIC_VECTOR) IS
VARIABLE TEMP: INTEGER;
BEGIN
TEMP := CONV_INTEGER(S);
FOR I IN DIN'RANGE LOOP
IF(TEMP+I<=DIN'LEFT) THEN
DOUT(TEMP+I)<=DIN(I);
ELSE
DOUT(TEMP+I-DIN'LEFT)<=DIN(I);
END IF;
END LOOP;
END SHIFTER;
END REG;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE WORK.REG.ALL;
ENTITY SHIFTER_REG IS
PORT (DIN: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
S: IN STD_LOGIC_VECTOR(2 DOWNTO 0);
CLK,EN:IN STD_LOGIC;
DOUT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END SHIFTER_REG;
ARCHITECTURE a OF SHIFTER_REG IS
BEGIN
PROCESS(CLK)
BEGIN
IF(CLK' EVENT AND CLK='1') THEN
IF(EN='0') THEN
DOUT<=DIN;
ELSE
SHIFTER(DIN,S,DOUT);
END IF;
END IF;
END PROCESS;
END a; |