我想知道是否可以对std_logic_vector类型的变量执行右移或左移
当我使用信号而不是变量时,我通常使用shift_left或shift_right函数,但是我尝试在它们上使用它,但是它不起作用,或者我做错了。
例如variable a : std_logic_vector(16 downto 0);
答案 0 :(得分:0)
移位运算符(sla
,sra
,sll
和srl
)都是为 type 定义的,与实例无关(signal
或variable
)。实际上,这些运算符可以在引用类型的任何地方使用,甚至可以用于constant
,record
等。
例如,假设您拥有:
type my_record is record
a : std_logic_vector(7 downto 0);
b : std_logic_vector(3 downto 0):
end record my_record;
还有几个实例,例如:
architecture behav of foo is
signal x : my_record;
begin
process
variable y : my_record;
begin
y.a := y.a sll 1;
y.b := x.b srl 1;
end process;
end architecture behav;
请注意,运算符可用于该类型的任何实例。甚至对于子程序也可以接受,例如:
function myfunc(a : std_logic_vector) return std_logic_vector is
begin
return (a sll 5);
end function myfunc;