Mostrando entradas con la etiqueta INAOE. Mostrar todas las entradas
Mostrando entradas con la etiqueta INAOE. Mostrar todas las entradas

domingo, 16 de mayo de 2010

Puertos Bidireccionales en FPGAs (Continuación 2)

Para definir puertos bidireccionales, se utiliza el concepto de tres estados. Bajo esta definición, la salida es deshabilitada colocandola en alta impedancia, y, así, la lectura es independiente. El código se muestra en la siguiente figura:
Al igual que el ejemplo anterior. SWITCH, SWITCH2 y ENTRADA son definidos como in, SALIDA es out y LED es inout. El funcionamiento es basicamente el mismo: cuando SWITCH es '1', LED, funcionando como salida, tendra lo que tiene ENTRADA, sin embargo, cuando SWITCH es '0', LED se pondrá en alta impedancia. Esta condición provocará que el ISE infiera que se trata de un puerto bidireccional de tres estados. Siguiendo la explicación, cuando SWITCH2 es '1', entonces SALIDA tendrá lo que tiene LED funcionando como entrada.
Como se observa en la imagen inferior. Al igual que el ejemplo anterior, LED se encuentra en '1' siendo ENTRADA '1' y SWTICH '1'.

Sin embargo, en la siguiente imagen se muestra como, cuando SWITCH es '0', colocando en alta impedancia a LED (como salida), y SWITCH2 es '1', entonces SALIDA tendrá lo que tiene LED.


Concluyendo, si queremos utilizar puertos bidireccionales en un FPGA, entonces debemos colocar la condición de alta impedancia cuando el puerto funciona como entrada, provocando que el ISE lo defina como un puerto de tres estados bidireccinal.

viernes, 14 de mayo de 2010

Puertos Bidireccionales en FPGAs (Continuación 1)

El código mostrado en anteriormente no funcionará como puerto bidireccional. Como se muestra en las figuras siguientes, el puerto de salida estará conectado directamente al puerto de entrada. Es decir, el puerto inout lee (in) lo que tiene a la salida (out) y es útil cuando se desea monitorear el valor que se envía al  puerto, sin embargo, definido unicamente como tal, no sirve como puerto bidireccional.
La figura anterior muestra el código cargado en el FPGA. Dado que SWITCH es '1', LED tendrá el valor de ENTRADA (ambos '1' en la fotografía). Hasta aqui, el código trabaja como se desea.
Sin embargo, como muestra la figura anterior, cuando queremos que LED funcione como entrada, es cuando el código deja de funcionar como se desea. Cuando SWITCH2 es '1', SALIDA debe tener lo que tiene LED, que ahora debería ser de entrada. Sin embargo, se observa como SALIDA siempre es '1' sin importar que valor tenga LED.
En conclusión, el ejemplo anterior muestra como la definición inout no define un puerto como bidireccional. Puertos bidireccionales son comunes en memorias, protocolos seriales, pantallas, entre otros.
En la siguiente entrada, explicaré como hacer puertos direccionales a partir de un concepto llamado en VHDL Three State Inference.