VHDL:零 - 扩展固定信号值

use*_*888 1 vhdl

你如何对固定信号值进行零延伸?

我有以下信号:

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的正确方法是什么?

fru*_*bat 5

一种(标准)方法是使用ieee.numeric_stdresize().例如:

muxSOut <= std_logic_vector(resize(unsigned(shamt), 32)) ...
Run Code Online (Sandbox Code Playgroud)

这样做的好处是,你可以替换32使用muxSOut'length,然后你的代码变得更灵活一些.