计算32位移位VHDL延迟

时间:2016-02-24 09:43:20

标签: vhdl shift

[我的波形] [1] 移位器是能够实现算术和逻辑移位操作的组件。 对于此实现,不允许使用shift运算符。 AL输入决定您是否具有算术或逻辑移位操作。 迪尔还决定了你的转变方向。 转移输入值也决定了您期望的换班次数。 您可以假设每个单位移位在移位组件中需要10 ns。例如,如果您选择shift = 5而不管移位方向或类型(算术或逻辑),则此组件的延迟为50 ns。

如何找出延迟?每个位有10 ns的延迟,我该怎么办10 *移位延迟?

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_unsigned.all;

ENTITY shifter IS
    GENERIC (BW : INTEGER :=32);
    PORT ( i : IN STD_LOGIC_VECTOR (BW -1 DOWNTO 0);
             dir : IN BIT; -- dir ='0' means shift right and dir ='1' means shift left
             AL: IN BIT ; -- Arithmetic or logical shift asume AL='1' means arithmetic an AL ='0' means logical
             shifting : IN INTEGER range 0 to BW -1;
             o: OUT STD_LOGIC_VECTOR (BW -1 DOWNTO 0));
    END ;

ARCHITECTURE shifter_arch OF shifter IS

BEGIN 
process(dir,i,AL,shifting)
variable temp: std_logic_vector(31 downto 0);
 begin
 if dir='0' then
    if AL='0' then
        temp:= i(BW-(1+shifting) downto 0)&(BW-1 downto BW-(1+shifting)=> '0');
    else
        temp:= i(BW-(1+shifting) downto 0)&(BW-1 downto BW-(1+shifting)=> i(BW-1));
    end if;

elsif dir ='1' then
    if AL='0' then
        temp:= i(BW-1 downto shifting)&((shifting-1) downto 0=> '0');
    else 
        temp:= i(BW-1 downto shifting)&((shifting-1) downto 0=> i(0));
    end if;

end if;
o <= temp ;
end process;
END shifter_arch ;

1 个答案:

答案 0 :(得分:0)

首先:你写了10 ns但你在模拟器中以1 ps的步长拍照, 而且我无法理解。 第二:如果你没有在ISim中取得成功,你可以将你的模拟器更改为ModelSim,并在Quartos中编译你的代码,而不是在ISE和它的模拟器中。因为他们没有更好地支持时间模拟。