在VHDL中移位std_logic_vector的寄存器

时间:2013-10-20 17:00:33

标签: vector vhdl shift-register

有人可以告诉我,如何制作12位std_logic_vector项目的移位寄存器?

1 个答案:

答案 0 :(得分:1)

看一下下面的例子。 VECTOR_WIDTH是每个std_logic_vector中的位数(在您的情况下为12)。 FIFO_DEPTH是移位寄存器中所需的矢量数。

library ieee;
use ieee.std_logic_1164.all;

entity vectors_fifo is
    generic (
        VECTOR_WIDTH: natural := 12;
        FIFO_DEPTH: natural := 100
    );
    port (
        clock: in std_logic;
        reset: in std_logic;
        input_vector: in std_logic_vector(VECTOR_WIDTH-1 downto 0);
        output_vector: out std_logic_vector(VECTOR_WIDTH-1 downto 0)
    );
end;

architecture rtl of vectors_fifo is
    type fifo_memory_type is array (natural range <>) of std_logic_vector;
    signal fifo_memory: fifo_memory_type(0 to FIFO_DEPTH-1)(VECTOR_WIDTH-1 downto 0);
begin
    process (clock, reset) begin
        if reset then
            fifo_memory <= (others => (others => '0'));
        elsif rising_edge(clock) then
            fifo_memory <= input_vector & fifo_memory(0 to FIFO_DEPTH-2);
        end if;
    end process;

    output_vector <= fifo_memory(FIFO_DEPTH-1);
end;