如何对固定信号值进行零延伸?
我有以下信号:
signal shamt: std_logic_vector(4 downto 0);
在我将它分配给另一个大小为31 downto 0的变量之前,我必须将其扩展为shamt。我有以下代码,但我不确定它是否正确。
muxSOut <= conv_std_logic_vector(unsigned(shamt),32) when (muxSSel = '0') else A;
我对部分conv_std_logic_vector(unsigned(shamt),32)持怀疑态度。
这会将shamt扩展为5位到32位吗?因此,如果shamt是11011,它将只是27 0s然后是11011?如果没有,那么零延长shamt的正确方法是什么?
答案 0 :(得分:5)
一种(标准)方法是使用ieee.numeric_std
和resize()
。 e.g:
muxSOut <= std_logic_vector(resize(unsigned(shamt), 32)) ...
这样做的一个优点是,您可以将32
替换为muxSOut'length
,然后您的代码就会变得更加灵活。
答案 1 :(得分:-1)
我可能会期待:
muxSOut <= x"000000" & "000" & shamt when muxSSel = '0' else A;