Agregar con carry en el operador VHDL +

1

Al revisar algunos documentos sobre la biblioteca ieee.std_logic_arith , parece que la longitud resultante de A+B será de 64 bits cuando tanto A como B sean de 64 bits.

¿Quiero saber si ieee.std_logic_arith tiene un operador de adición que genera carry (para que el operador genere una salida de 65 bits para agregar dos operandos de 64 bits)?

    
pregunta VSB

3 respuestas

1

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.

    
respondido por el user8352
0

La longitud del resultado es la misma que la longitud del operando izquierdo. Por lo tanto, debe considerar cuántos bits tendrán el resultado para declarar los agregados. No se genera ningún acarreo.

    
respondido por el ferdepe
0

Le sugeriría que explícitamente dejara el bit de signo izquierdo extendido (firmado) o extendiera el bit cero izquierdo (sin signo) sus entradas en 1 bit. Esto asegurará que retenga el bit de acarreo, pero también le dejará claro al futuro lector de su código que está guardando específicamente el acarreo. También sugeriría poner comentarios que describan su intención de hacerlo.

Incluso si pudiera hacerlo de manera implícita, aún sugeriría que lo haga explícitamente solo para que el usuario no tenga que atravesar su (s) archivo (s) para determinar si el tamaño del vector de salida es el mismo o 1 más grande que las entradas.

    
respondido por el user2913869

Lea otras preguntas en las etiquetas