如何在VHDL中将4位std向量转换为5位向量?

如何在VHDL中将4位std向量转换为5位向量?,vhdl,alu,Vhdl,Alu,我被困在转换我的4位标准向量为5位。我应该用4位输入做逻辑运算和算术运算。(4位ALU)然而,对于算术运算,我可能有一个执行位,我不知道如何保存它。这是我的代码,我试图定义一个temp 5位向量并使temp(4)执行 architecture Behavioral of alusmall is signal temp: std_logic_vector (4 downto 0); begin --.--Here we write which operations

我被困在转换我的4位标准向量为5位。我应该用4位输入做逻辑运算和算术运算。(4位ALU)然而,对于算术运算,我可能有一个执行位,我不知道如何保存它。这是我的代码,我试图定义一个temp 5位向量并使temp(4)执行

    architecture Behavioral of alusmall is
    signal temp: std_logic_vector (4 downto 0);
    begin
    --.--Here we write which operations are launched according to M and S signals:
    temp <= (A and B) when (M='0' and S="00") else
    (A or B) when (M='0' and S="01") else
    (A xor B) when (M='0' and S="10") else
    (A xnor B) when (M='0' and S="11") else
std_logic_vector(unsigned(A) + unsigned(C1)) when (M='1' and S="00") else --.--now, the arithmetic part starts (M is one).
std_logic_vector(unsigned(A) + unsigned(B) + unsigned(C1)) when (M='1' and S="01") else
std_logic_vector(unsigned(A) + unsigned(not B) + unsigned(C1)) when (M='1' and S="10") else
std_logic_vector(unsigned(not A) + unsigned(B) + unsigned(C1));
AluIS的行为体系结构 信号温度:标准逻辑向量(4到0); 开始 --.--这里我们写下根据M和S信号启动的操作:
VHDL中的temp加法不会自动进行位增长。要允许进位,只需将“0”附加到操作数的MSB。(为有符号算术添加符号位)。这意味着您可以简单地将生成的MSB作为进位

例如

op
op <= ('0' & A) + ('0' & B);
carry <= op(op'high);
op <= resize(A, op'length) + resize(B, op'length)
carry <= op(op'high);