Estoy tratando de implementar un sumador / restador de 4 bits que suma o resta dos números A y B del complemento de 4 bits 2, donde la señal de control SB elige qué operación se realiza cambiando el valor de b de positivo a negativo. También necesitamos chequeo de desbordamiento. Esto es lo que tenemos hasta ahora:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity add_sub_4bit is
Port ( a : in STD_LOGIC_VECTOR(3 downto 0);
b : in STD_LOGIC_VECTOR(3 downto 0);
sel: in STD_LOGIC;
sum : out STD_LOGIC_VECTOR(3 downto 0);
overflow: out STD_LOGIC );
end add_sub_4bit;
architecture Behavioral of add_sub_4bit is
signal localsum: STD_LOGIC_VECTOR(3 downto 0);
signal localover: STD_LOGIC;
begin
localsum <= a + b when sel='0'
else
a - b +"0001";
sum <= localsum;
process (a,b,localsum,localover) begin
if a(3) = '0' AND b(3) = '0' AND localsum(3) = '1' then
localover <= '1';
elsif a(3) = '1' AND b(3) = '1' AND localsum(3) = '0' then
localover <='1';
else
localover <='0';
end if;
end process;
overflow<= localover;
end Behavioral;
He logrado implementar la comprobación de desbordamiento si ambos bits son positivos o si ambos son negativos. Sin embargo, no estoy seguro de que se pueda hacer mejor o de forma más confiable. Por ejemplo, si obtiene A = -2 (1110) y B = 7 (0111) por lo que el primero es negativo y el siguiente es positivo, los resultados serán incorrectos para mí, porque el programa no maneja ese caso y no estoy seguro de cómo manejarlo con exactitud.
Por lo tanto, le agradecería que me aconsejara cómo implementar la comprobación de bits en el caso de que los signos de las entradas no sean idénticos, soy muy nuevo en VHDL.