ieee.numeric_std proporcionará un resultado a la longitud del operando izquierdo. Podría concatenar un bit de signo inicial o un bit cero (para no firmado) con el operando izquierdo para producir su resultado de 65 bits.
Una mirada a través de la fuente de Synopsys 'std_logic_arith muestra que "+" hace lo mismo.
Library ieee;
use ieee.std_logic_1164.all;
-- use ieee.numeric_std.all;
use ieee.std_logic_arith.all;
entity adder65bit is
port (
a,b: in unsigned(63 downto 0);
carry: out std_logic;
sum: out unsigned (63 downto 0)
);
end entity;
architecture foo of adder65bit is
signal temp: unsigned(64 downto 0);
begin
temp <= '0' & a + b;
sum <= temp (63 downto 0);
carry <= temp(64);
end architecture;
No especificaste firmado o sin firmar, esto no está firmado, los operandos y los resultados pueden estar firmados o sin firmar en su lugar.
Este código analiza, elabora y simula. Funciona configurando el operando izquierdo para que tenga 65 bits de longitud. Usted mencionó carry, por lo que se muestra con uno en un método compatible con implementaciones anteriores de herramientas VHDL.
Note el "&" y los operadores "+" tienen la misma prioridad, se ejecutarán en el orden en que se encuentran de izquierda a derecha.