function Delta(Arg : signed; Cnt : natural) return signed is
variable tmp : signed(Arg'range);
constant lo : integer := Arg'high -cnt +1;
begin
for n in Arg'high downto lo loop
tmp(n) := Arg(Arg'high);
end loop;
for n in Arg'high -cnt downto 0 loop
tmp(n) := Arg(n +cnt);
end loop;
return tmp;
end function Delta;
-- function Delta is actually an arithmatic shift right
-- This strange construction is needed for compatibility with Xilinx WebPack
--这个函数只是实现了简单的算术右移,右移后左边补上符号位
--Arg'high相当于Arg最高位所在位数,例如Arg = 0101 则Arg'high = 3,因为Arg最高位在第三位上。
function Delta(Arg : signed; Cnt : natural) return signed is
variable tmp : signed(Arg'range);
constant lo : integer := Arg'high -cnt +1;
begin
for n in Arg'high downto lo loop
tmp(n) := Arg(Arg'high); --高位补上符号位
end loop;
for n in Arg'high -cnt downto 0 loop
tmp(n) := Arg(n +cnt); --右移cnt位,所以要截断右边cnt位
end loop;
return tmp;
end function Delta;
在一个博客上看到的这个函数的解释,是右移(左边符号位扩展),嘿嘿~
http://blog.163.com/jinyun_xie/blog/static/1283908112012576194574/