Circuitos Digitales - Ayuda con VHDL

 
Vista:

Ayuda con VHDL

Publicado por L (1 intervención) el 23/03/2008 18:31:16
Hola!!! Estoy empezando a programar en VHDL. Es mi primera práctica. Me han pedido que haga la arquitectura estructural de una ALU con operandos de un numero variable de n bits. Utiliza los componentes AE(segundo operando),LE(operaciones logicas),CI(acarreo),FA(sumador completo de 1 bit). Este es el codigo que he hecho, pero no me funciona correctamente. ¿Alguien me puede ayudar? Estoy ya desesperada. Muchas graciasss

entity alu is generic(

n : natural := 8); -- operand width. Podemos utilizar n como un parametro constante

port(
a : in std_logic_vector (n-1 downto 0);
b : in std_logic_vector (n-1 downto 0);
s : in std_logic_vector (2 downto 0);
f : out std_logic_vector (n-1 downto 0);
carry : out std_logic;
overflow : out std_logic);
end alu;

architecture structural of alu is

component circuitoAE
port (s: in std_logic_vector; b: in std_logic; fae: out std_logic);
end component;
component circuitoCI
port (s: in std_logic_vector; fci: out std_logic);
end component;
component circuitoLE
port (s:in std_logic_vector; a, b: in std_logic; fle: out std_logic);
end component;
component circuitoFA
port (a, b, c: in std_logic; c_mas,s: out std_logic);
end component;
signal salidafa, salidafae, salidafle, salidafci: std_logic_vector(n-1 downto 0);

begin

0: circuitoCI port map (s);

cAlu: for i in 0 to n generate
1: circuitoAE port map (s, b(i), salidafae(i));
2: circuitoLE port map (s, a(i), b(i) ,salidafle(i));
3: circuitoFA port map (salidafle(i),salidafae(i), salidafci(i), salidafci(i+1), salidafa(i));
end generate;

carry<=salidafci(n);
overflow <= salidafci(n) xor salidafci(n-1);

end structural;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Solución de problemas en la implementación de una ALU en VHDL

Publicado por Alejandro (117 intervenciones) el 28/08/2023 17:06:06
Entiendo que estás teniendo dificultades con tu código VHDL para la arquitectura estructural de una ALU. Veamos si puedo ayudarte a identificar el problema.

Primero, revisemos tu código:

1. En la sección de `cAlu`, estás utilizando un bucle `generate` para crear múltiples instancias de los componentes `circuitoAE`, `circuitoLE` y `circuitoFA`. Esto parece correcto ya que deseas operar en cada bit individual de los operandos.

2. En la línea `0: circuitoCI port map (s);`, estás llamando al componente `circuitoCI` pero no estás proporcionando ninguna conexión a sus puertos. Deberías proporcionar una señal de salida o similar para que se conecte.

3. Parece que estás utilizando señales `salidafae`, `salidafle`, `salidafci` y `salidafa` para almacenar las salidas de los componentes respectivos. Asegúrate de que estas señales estén declaradas adecuadamente con los tipos correctos (`std_logic_vector(n-1 downto 0)`).

4. En la línea `carry<=salidafci(n);`, estás intentando asignar el último bit de `salidafci` al port `carry`. Sin embargo, en VHDL, la indexación comienza desde 0, por lo que debería ser `carry <= salidafci(n-1);`.

5. En la línea `overflow <= salidafci(n) xor salidafci(n-1);`, estás calculando el overflow mediante un XOR entre el último bit de `salidafci` y el penúltimo bit. Esto podría no ser correcto dependiendo de cómo se está generando el carry en los sumadores y cómo se están manejando las condiciones de carry en tu implementación.

6. Asegúrate de que los componentes `circuitoAE`, `circuitoLE`, `circuitoCI` y `circuitoFA` están implementados correctamente y sus puertos se están conectando adecuadamente en la arquitectura estructural.

Para depurar tu código, puedes agregar señales intermedias en tu arquitectura que te permitan observar el valor de las señales en diferentes puntos del proceso. También es importante revisar cómo se están implementando los componentes `circuitoAE`, `circuitoLE`, `circuitoCI` y `circuitoFA`, ya que el problema podría estar en su funcionamiento interno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar