Vistas de página en total

Buscar este blog

sábado, 9 de noviembre de 2013

VHDL - Multiplexor

Un multiplexor selecciona de entre varios datos de entradas uno de los datos,  y lo presenta a la salida
-- ejemplo multiplexor 4 a 1 donde se cuenta con "4 datos de entrada", cada uno con "ancho de 5 bits", y un dato de salida, también con ancho 5 bit. (Nota: El demultiplexor [FALTA- enlazarlo a la nota del demultiplexor] selecciona en cual de varias salidas se debe presentar el  único dato seleccionado desde las entradas)
--LIBRERIAS--------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;

--DEFINICION DE PUERTOS DE LA ENTIDAD------------------------------------
entity MULTIPLEXOR_1 is port( DATO_IN3: in std_logic_vector(4 downto 0); -- ancho 5 bit DATO_IN2: in std_logic_vector(4 downto 0); -- ancho 5 bit DATO_IN1: in std_logic_vector(4 downto 0); -- ancho 5 bit DATO_IN0: in std_logic_vector(4 downto 0); -- ancho 5 bit SELECTOR_DE_DATO: in std_logic_vector(1 downto 0); -- ancho 2 bit DATO_OUT: out std_logic_vector(4 downto 0) -- ancho 5 bit ); end entity MULTIPLEXOR_1;
--DOS OPCIONES PARA DEFINIR LA ARQUITECTURA-------------------------------
-- Utilizando sentencia CASE architecture ar1_MULTIPLEXOR_1 of MULTIPLEXOR_1 is
begin
    process(DATO_IN3,DATO_IN2,DATO_IN1,DATO_IN0,SELECTOR_DE_DATO)
    begin
            
        case (SELECTOR_DE_DATO) is
     when "00" => DATO_OUT <= DATO_IN0;
     when "01" => DATO_OUT <= DATO_IN1;
     when "10" => DATO_OUT <= DATO_IN2;
     when "11" => DATO_OUT <= DATO_IN3;
     when others => DATO_OUT <= "ZZZZZ"; -- Alta impedancia
 end case;

    end process;
end architecture ar1_MULTIPLEXOR_1;

-- Utilizando sentencia WHEN-ELSE
architecture ar2_MULTIPLEXOR_1 of MULTIPLEXOR_1 is begin DATO_OUT <= DATO_IN0 when SELECTOR_DE_DATO="00" else DATO_IN1 when SELECTOR_DE_DATO="01" else DATO_IN2 when SELECTOR_DE_DATO="10" else DATO_IN3 when SELECTOR_DE_DATO="11" else "ZZZZZ"; end architecture ar2_MULTIPLEXOR_1;
-------------------------------------------------------------------------

VHDL - Decodificador de BCD a 7 Segmentos

[Imagen del decodificador]
[Explicación del decodificador]
[Descripción del decodificador BCD a 7 segmentos mediante VHDL]

VHDL - Decodificador ONE-HOT 2 a 4

[Imagen del decodificador]
[Explicación del decodificador]
[Descripción del decodificador mediante VHDL]
-- Decodificador 2 a 4

-------------------------------------------------------------------------
-- Definir librerias:
library ieee;
use ieee.std_logic_1164.all;
-------------------------------------------------------------------------
-------------------------------------------------------------------------
-- Definir el puerto de la entidad:

entity decodificador_1 is
       port( DATO_ENTRADA: in  std_logic_vector(1 downto 0);
             DATO_SALIDA: out std_logic_vector(3 downto 0)
            );
end decodificador_1;
-------------------------------------------------------------------------

-- Dos opciones para describir el comportamiento de este decodificador:

-------------------------------------------------------------------------
-- Opcion 1  Arquitectura definida de acuerdo al comportamiento y sentencia CASE:
-------------------------------------------------------------------------
architecture ar1_decodificador_1 of decodificador_1 is
begin

    -- Definicion del proceso utilizando "CASE"

    process (DATO_ENTRADA)
    begin
        
        case (DATO_ENTRADA) is
     when "00" => DATO_SALIDA <= "0001";
     when "01" => DATO_SALIDA <= "0010";
     when "10" => DATO_SALIDA <= "0100";
     when "11" => DATO_SALIDA <= "1000";
     when others => DATO_SALIDA <= "0000";
 end case;

    end process;
 
end architecture ar1_decodificador_1;
-------------------------------------------------------------------------


-------------------------------------------------------------------------
-- Opcion 2 Arquitectura definida de acuerdo al comportamiento y sentencia WHEN ELSE: 
-------------------------------------------------------------------------
architecture ar2_decodificador_1 of decodificador_1 is
begiN

    DATO_SALIDA <=  "0001" when DATO_ENTRADA = "00" else
          "0010" when DATO_ENTRADA = "01" else
          "0100" when DATO_ENTRADA = "10" else
          "1000" when DATO_ENTRADA = "11" else
          "0000";

end ar2_decodificador_1;
-------------------------------------------------------------------------

Ver diseño de aplicación en un reloj con TTL
<http://www.slideshare.net/MiguelSanchez14/reloj-digital-ttl-24-horas>
Ver diseño de reloj con microcontrolador y una RTC DS1307 (julio 2014)
<http://electronicsforu.com/electronicsforu/circuitarchives/view_article.asp?sno=860&title%20=%20Microcontroller-Based+Clock+Using+DS1307&id=9050&article_type=2&b_type=new#.U7RaWfl5OSo>

martes, 5 de noviembre de 2013

Modulo de expansión Digilent PmodSSD - 2 display de 7 segmentos

Este modulo de expansión ofrece dos display de siete segmentos (el  punto decimal no es tenido en cuenta dentro de las conexiones),  que puede conectarse a cualquier tarjeta de desarrollo marca Digilent inc.

(Aquí imagen)

El consumo de corriente de los led de cada segmento es 5 mA y es  "activo alto", esto es un "1" lógico para encenderlo.

Cada display de 7 segmentos esta conectado en cátodo común y son utilizados para habilitarlos con señales "activo bajo", esto es un "0" lógico; ambos display comparen el mismo bus de datos siendo necesario necesario realizar un control multiplexado para habilitar uno a la vez y desplegar la información.



La hoja de producto suministrada por el fabricante: <http://digilentinc.com/Data/Products/PMOD-SSD/Pmod%20SSD_rm.pdf>

domingo, 3 de noviembre de 2013

Tarjeta de desarrollo Nexys 2 - Los Display de 7 segmentos con punto

La tarjeta Nexys 2, incluye 4 display de 7 segmentos y un punto, conectados en ánodo común; esto implica que para encenderlos es necesario un "0" lógico (Activo bajo).


Fuente 1


Adicionalmente cada uno de los cuatro módulos está conectado a la FPGA mediante un transistor del tipo PNP "activo bajo" desde la FPGA con un "0" lógico.


Fuente 1
En la imagen, los pines son los mismos, tanto en la versión de la tarjeta Nexys 2 que incluye FPGA Spartan-3E de 1.200.000 compuertas  como en la versión de Nexys 2 que incluye la FPGA Spartan-3E de 500 mil compuertas

Se debe tener presente que los cuatro display de 7 segmentos con punto , comparten el mismo bus de datos, por lo tanto se debe utilizar la técnica de multiplexado para activar un display a la vez, de acuerdo a la posición que debe ocupar el dato que está presente en el bus de datos.

La técnica de multiplexado de los displays es muy conocida y consiste en prender los displays uno a uno en tiempos sucesivos pero con la suficiente frecuencia como para que parezcan que están prendidos los cuatro al mismo tiempo. 

El fabricante (Digilent) sugiere una frecuencia de barrido de entre 1000 Hz y 60 Hz, lo que corresponde a un "período total de barrido" para los 4 display , de entre 1 milisegundo y 16 milisegundos. 


Fuente 1


[Fuente 1 - imagenes y base documental: <http://www.digilentinc.com/Data/Products/NEXYS2/Nexys2_rm.pdf>
Anotación temporal ( borrarla luego)
    0x3f  =  00111111      // 7-segment code of 0 DP,gfedcba, cátodo común
    0x06  =  00000110      // 7-segment code of 1
    0x5b  =  01011011      // 7-segment code of 2
    0x4f  =  01001111      // 7-segment code of 3
    0x66  =  01100110      // 7-segment code of 4
    0x6d  =  01101101      // 7-segment code of 5
    0x7d  =  01111101      // 7-segment code of 6
    0x07  =  00000111      // 7-segment code of 7
    0x07  =  01111111      // 7-segment code of 8
    0x7f  =  01101111      // 7-segment code of 9

Tarjeta de desarrollo Nexys 2 - Los Led

En la tarjeta de desarrollo NEXYS 2, cada uno de los 8 diodos emisores de luz (LED), está configurado como "Activo Alto", lo cual implica que se encienden cuando la FPGA envía un "1" lógico. 

Cada LED está conectado a la FPGA por el ánodo y su cátodo a una resistencia de 390 ohm en serie puesta a tierra ; cuando un LED está encendido la corriente que  entregada por la FPGA está entre 3 y 4 mA (De acuerdo con el manual de referencia del fabricante: Digilent).

(La caída de tensión en la resistencia de 390 ohm es de 1.56 voltios para  una corriente de 4 mA y el voltaje de diodo es de 1.74 voltios; cuando la corriente es de 3 mA  la caída en la resistencia de 390 ohm es de 1.17 voltios, lo que implica 2.13 voltios de voltaje en el diodo).
En la imagen, los pines con marcados con " * ", corresponden a la versión de la tarjeta Nexys 2 que incluye FPGA Spartan-3E de 1.200.000 compuertas ,  sin el asterisco, corresponden a la versión de Nexys 2 que incluye la FPGA Spartan-3E de 500 mil compuertas