VHDL - 带阵列寄存器

时间:2016-01-19 15:06:00

标签: vhdl

我知道下面的模型绝不是描述8位寄存器的最有效方法,但我这样做是为了了解数组的使用。模拟模型时,会出现第9个锁存器,在将MSB传递到输出s_out之前存储MSB。让我演示一下。

模型

ENTITY Q1 IS
PORT (clk,s_enable,s_right,s_in :   IN      std_logic := '0';
        s_out                               :   OUT std_logic := '0');
END ENTITY Q1;

ARCHITECTURE behavioural OF Q1 IS
TYPE reg1 IS ARRAY (7 DOWNTO 0) OF std_logic; -- array decleration
SIGNAL mem : reg1 := "00000000"; -- assignment of arry values
SIGNAL sel :    std_logic_vector(1 DOWNTO 0) := "00"; 
BEGIN
sel <= (s_enable & s_right); -- concatination of s_enable and s_right 
-->Additional multiplexer <--
--s_out <= mem(0) when sel = "11" ELSE
--         mem(7) when sell = "10" ELSE
--         s_out;
REG :   PROCESS (clk) -- shift process
BEGIN
    IF clk'EVENT AND clk = '1' THEN
        IF      sel = "11" THEN
                    s_out <= mem(0);--< remove with new mix
                    mem <= s_in & mem (7 DOWNTO 1);-- shifting of mem by   concatination of s_in as the LSB to mem
        ELSIF   sel = "10" THEN
                    s_out <= mem(7);--< remove with new mux
                    mem <= mem(6 DOWNTO 0) & s_in;
        END IF;
    END IF;
END PROCESS REG;
END ARCHITECTURE behavioural;

模拟

enter image description here

您可以看到添加了一个额外的锁存器,其中最后一位取决于它是向左还是向右移位仅在另一个时钟脉冲之后出现在输出s_out上。它也可以在RTL查看器中看到:

enter image description here

虽然不改变寄存器阵列的使用是否可以删除这个额外的锁存器?我尝试将信号更改为进程内的变量但仍然具有相同的结果。 非常感谢。

0 个答案:

没有答案