Problema de diseño del vhdl del sumador OLA y vhdl firmado

0

He implementado el siguiente sumador en línea para el dígito firmado utilizando el código vhdl y he simulado mi diseño de acuerdo con la tabla de ejemplo que se muestra en la figura adjunta el problema es que no obtengo el primer resultado, que es "10" para Z + y Z + y en algún punto una combinación de XX e YY da ZZ diferente

Tampoco entendí la operación que sucedió, ya que si normalmente agrego los bits dados No obtengo el mismo resultado

¡¿Está ocurriendo una conversión especial ?!

un ejemplo de 11111111 - 11111111 para verificar si el resultado es satisfactorio pero no obtuve un resultado de 0000 0000 en la simulación, aunque obtuve el resultado de la tabla simulando los mismos valores de entrada en la figura

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_textio.all;
use IEEE.std_logic_arith.all;
use IEEE.numeric_bit.all;
use IEEE.numeric_std.all;
use IEEE.std_logic_signed.all;
use IEEE.std_logic_unsigned.all;
use IEEE.math_real.all;
use IEEE.math_complex.all;

entity sD_adder is 
port ( clk,rst : in std_logic;
         x_p,x_m,y_p,y_m : in std_logic;
         z_p,z_m : out std_logic
        );
end sD_adder;

architecture cSadd of sD_adder is
signal sig_xm : std_logic;
signal sig_zp, sig_zm : std_logic;
signal n_sig_xm, n_sig_ym, n_sig_w2m,n_sig_g2p : std_logic;
signal sig_g3, sig_h2, sig_w2m : std_logic;
signal sig_g2p, sig_g2m, sig_w2p : std_logic;
signal sig_z2p,sig_z2m : std_logic;

begin

    n_sig_xm <= not(x_m);

    FA_add1: entity work.add_sig 
    port map( a => x_p,
                 b => n_sig_xm,
                 cin => y_p,
                 sum => sig_g3,
                 cout => sig_h2);

    reg_ff1: entity work.d_ff 
    port map( clk=>clk,
                 rst=>rst,
                 d=>y_m,
                 q=>sig_g2p
                );

    reg_ff2: entity work.d_ff 
    port map( clk=>clk,
                 rst=>rst,
                 d=>sig_g3,
                 q=>sig_g2m
                );  

    n_sig_g2p <= not(sig_g2p);  

    FA_add2: entity work.add_sig 
    port map( a => sig_g2m,
                 b => n_sig_g2p,
                 cin => sig_h2,
                 sum => sig_w2p,
                 cout => sig_w2m);

    n_sig_w2m <= not(sig_w2m);

    reg_ff3: entity work.d_ff 
    port map( clk=>clk,
                 rst=>rst,
                 d=>sig_w2p,
                 q=>sig_z2p
                );

    reg_ff4: entity work.d_ff 
    port map( clk=>clk,
                 rst=>rst,
                 d=>sig_z2p,
                 q=>z_p
                );

    reg_ff5: entity work.d_ff 
    port map( clk=>clk,
                 rst=>rst,
                 d=>n_sig_w2m,
                 q=>z_m
                );
end cSadd;
    
pregunta user3368764

1 respuesta

0

¡¿Se está produciendo una conversión especial ?!

Su imagen para la diapositiva 25 corresponde a la figura 9.10 que se encuentra en la página 506 y la diapositiva 27 corresponde a la tabla 9.3 que se encuentra en la página 507 en el libro "Aritmética digital" por Miloŝ D. Ercegovac y Tomás Lang, 2004, ISBN: 1-55860 -798-6.

Si mira en el libro, el texto debajo de la figura 9.10 (b) en la página 506, Ejemplo 9.2:

  

Las señales en la Tabla 9.3 corresponden a la Figura 9.10 (b) y los bits firmados   se codifican utilizando 9.18.

     

Tenga en cuenta que durante el ciclo 0 se produce el dígito de resultado z0 - 1. Aunque esto podría interpretarse como un desbordamiento, el rango del resultado sigue siendo inferior a 1, ya que el siguiente dígito es -1. Véase también el ejercicio 9.10.

9.18 se encuentra en la página 505 -

  

Estosnoestánpresentesensudiapositiva26nomostrada.

Ybajo9.5Ejercicios,suma/restadeMSDF,página537:

  

9.10Considerelaadiciónenlíneaderadix-2conoperandosquesatisfacenx+y<1.

    
    

(a)Realiceelalgoritmodesumaparamostrarquesiz0=1,entonceselsiguientedígitoderesultadodistintodecerodebetenerunvalor-1.    (b)Idearuna    modificacióndelalgoritmodeadiciónenlíneaparaproducirz0a0y    Desarrollareldiseñocorrespondiente.

  

Unacomprobaciónde ERRATA no muestra nada que afecte a estas páginas en el Capítulo 9.

No estás demostrando ningún código VHDL. ¿Por qué la etiqueta ?

    
respondido por el user8352

Lea otras preguntas en las etiquetas