你如何对固定信号值进行零延伸?
我有以下信号:
signal shamt: std_logic_vector(4 downto 0);
Run Code Online (Sandbox Code Playgroud)
在我将它分配给另一个大小为31 downto 0的变量之前,我必须将其扩展为shamt.我有以下代码,但我不确定它是否正确.
muxSOut <= conv_std_logic_vector(unsigned(shamt),32) when (muxSSel = '0') else A;
Run Code Online (Sandbox Code Playgroud)
我对部分conv_std_logic_vector(unsigned(shamt),32)持怀疑态度.
这会扩展shamt,它是5位大小到32位吗?因此,如果shamt是11011,它将只是27 0s然后是11011?如果没有,零延长shamt的正确方法是什么?
一种(标准)方法是使用ieee.numeric_std和resize().例如:
muxSOut <= std_logic_vector(resize(unsigned(shamt), 32)) ...
Run Code Online (Sandbox Code Playgroud)
这样做的好处是,你可以替换32使用muxSOut'length,然后你的代码变得更灵活一些.