miércoles, 1 de septiembre de 2010

Como hacer un full adder en la spartan 3

Un full adder es un circuito lógico que suma dos bits y además se complementa con un “carry” de entrada y uno de salida, al conectar los “carry” en cascada, se logra un sumador de n bits. Se logra con dos compuertas Xor, dos AND's y una compuerta OR tal como se muestra acontinuacion.

Ahora para programar un sumador de 4 bits se tiene el siguiente diagrama:



Con esta deduccion podemos empezar a programar el sumador completo

Para empezar a programar cualquier cosa en la Spartan 3 debes de abrir tu programa, y crear un nuevo proyecto, posteriormente asignarle un nombre y en seguida te arrojara una pantalla donde tienes que ingresar las especificaciones de tu tarjeta las cuales vienen en el integrado, por ejemplo la que estamos usando sus especificaciones son:

Device Family: Spartan3

Device: xc3s200
Package: ft256
Speed: -4
Synthesis Tool: XST (VHDL/Verilog)
Simulator: Modelsim-XE VHDL
Preferred Language: VHDL
Property Specification in Project File: Store all values
Manual Compile Order: false
VHDL Source Analysis Standard: VHDL-93

Despues de poner tus especificaciones encontraras una pantalla que te indica que ingreses los nombres que le quieres asignar a las variables que vas a usar asi como tambien denominarlas como de entrada(in), salida(out)  o de entrada-salida(inout). (Aunque no crees todas tus variables al principio en esta pantalla las puedes designar despues dentro del programa)

Tras finalizar la declaracion de variables iniciales se te creara en automatico la libreria que necesitas por default, luego aparecera la estructura de tus variables que declaraste y al final comenzaras a programar tu codigo que buscas compilar. A continuacion se pone el ejemplo del programa para que puedas ver como se soluciona a grandes rasgos.


Sum0 <= A0 xor B0 xor Cin after 10 ns;
C(1) <= (A0 and B0) or (A0 and Cin) or (B0 and Cin) after 10 ns; --se pueden omitir los Cin
Sum1 <= A1 xor B1 xor C(1) after 15 ns;
C(2) <= (A1 and B1) or (A1 and C(1)) or (B1 and C(1)) after 15 ns; --notese que se dam as tiempo para que se logre un procedimiento secuencial
Sum2 <= A2 xor B2 xor C(2) after 20 ns;
C(3) <= (A2 and B2) or (A2 and C(2)) or (B2 and C(2)) after 20 ns;
Sum3 <= A3 xor B3 xor C(3) after 25 ns;
C<= (A3 and B3) or (A3 and C(3)) or (B3 and C(3)) after 25 ns;
Sin olvidar que primero hay que declarar las variables fijas
Port (A0,A1,A2,A3,B0,B1,B2,B3: in bit;
                Sum0, Sum1, Sum2, Sum3, C: out bit);

Los valores como Sum0 son variables de salida, otro ejemplo son las variables A0 y B0 que son variables de entrada y los signos de and y xor corresponden a las compuertas que usas en el metodo fisico y son como palabras reservadas. Por ultimo los signos <= es como si fuese un solo simbolo que en este caso quiere decir asignacion como si pusieras Sum0 = A0 xor B0 y el valor que resulta se guarda en la variable Sum0

Para compilar tu programa en design en tu creador de planAhead podras asignar los pines,switches, leds o lo que tu vayas a usar de tu tarjeta a cada una de tus variables. Para ello usas I/O properties y vas seleccionando cada una de acuerdo a lo que tu quieres, los nombres de cada componente que vayas a usar vienen nombrados en la tarjeta entre parentesis. Por ultimo creas tu archivo.bit y lo programas en tu tarjeta con el programa adept y esta listo para probarse.

De esta forma ahora podras programar tu FPGA para que tengas un sumador completo.



2 comentarios: