Placa de desarrollo FPGA EP1C3T144 (II)

Seguimos indagando en las posibilidades de esta placa de desarrollo, y en esta ocasión vamos a ver cómo están conectados el cuádruple display de siete segmentos (bueno, 8 segmentos con el punto decimal) y los dos bancos de switches.

El display es un 3461B (de ánodo común). Al igual que un 7 segmentos normal, este display tiene las 8 entradas para cada uno de los leds, y además, otras cuatro para seleccionar el led a iluminar en cada momento (refrescando los displays consecutivamente pueden usarse los cuatro a la vez). Estos son los pines de la FPGA asociados a cada pin del display.

Pin display Pin FPGA
Segmento A (pin 14) PIN 74
Segmento B (pin 16) PIN 77
Segmento C (pin 13) PIN 78
Segmento D (pin 3) PIN 79
Segmento E (pin 5) PIN 75
Segmento F (pin 11) PIN 82
Segmento G (pin 15) PIN 73
Punto decimal (pin 7) PIN 76
Dígito 1 (pin 1) PIN 83
Dígito 2 (pin 2) PIN 84
Dígito 3 (pin 6) PIN 85
Dígito 4 (pin 8) PIN 91

Las cuatro señales de selección del display las gobiernan los 4 transistores Q1 a Q4 que hay situados en la placa justo debajo del display.
Ahora vamos con los dos bancos de switches. Cada uno de ellos tiene 6 switches, es decir, disponemos un total de 12. Estos son los pines a los que están conectados los switches.

Banco switch Pin FPGA
1 1 PIN 40
1 2 PIN 39
1 3 PIN 37
1 4 PIN 38
1 5 PIN 36
1 6 PIN 35
2 1 PIN 54
2 2 PIN 53
2 3 PIN 51
2 4 PIN 50
2 5 PIN 48
2 6 PIN 41

Con esta información vamos a poner en marcha un circuito que nos permita usar el display y los switches. En el pasado artículo usamos un semisumador. Ahora vamos a hacer un circuito sumador completo de dos bits. Para introducir los dos bits vamos a usar el segundo banco de switches, en concreto, los switches 1 y 2 para introducir el primer sumando y los switches 5 y 6 para introducir el segundo sumando. El resultado se mostrará en decimal en el display (sólo vamos a usar uno de los cuatro displays).

El esquema del sumador completo es el siguiente.

fulladder

Y su tabla de verdad es

full-adder2

En esta ocasión, en lugar de trazar el esquemático vamos a implementar el sumador de un bit en VHDL.

library ieee ;
use ieee.std_logic_1164.all;

entity fulladder is
port (    
	Cin, x, y	: in	std_logic;
	s, Cout		: out std_logic );
end fulladder;

architecture rtl of fulladder is
begin
	s <= x xor y xor Cin;
	Cout <= (x and y) or (Cin and x) OR (Cin and y);
end rtl;

Como vamos a sumar dos bits necesitamos dos sumadores de un bit.
También necesitamos un circuito decodificador que traduzca la salida de los sumadores a las señales necesaria para mostrar el resultado en el display. Este circuito también vamos a especificarlo en VHDL.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity decoder7s is
port (
   bcd 	        : in 	std_logic_vector(2 downto 0);  
   seg7 	: out	std_logic_vector(7 downto 0);
   dsel	        : out   std_logic_vector(3 downto 0));
end decoder7s;

architecture beh of decoder7s is
begin
dsel <= "1110";	-- seleccionar display 1
with bcd select
	seg7 <= 
		"11000000" when "000", 	-- '0'
		"11111001" when "001", 	-- '1'
		"10100100" when "010",  -- '2'
		"10110000" when "011",  -- '3'
		"10011001" when "100",  -- '4' 
		"10010010" when "101",  -- '5'
		"10000010" when "110",  -- '6'
		"11111000" when "111",  -- '7'
		"11111111" when others; 
end beh;

Los leds del display son activos a nivel bajo, así que ponemos un 0 cuando queremos encender un led y un 1 para apagarlo.

Finalmente, usamos el sumador y el decodificador que acabamos de crear para montar todo el circuito.

circuito

Las entradas desde los switches van negadas por la misma razón que ya se explicó en el artículo anterior. Finalmente, y siguiendo las tablas anteriores, asignamos los pines a la FPGA con el pin planner.

pinplanner

El resultado puede verse en el siguiente vídeo.

Primera parte: http://www.digilogic.es/placa-de-desarrollo-fpga-ep1c3t144/

Tercera parte: http://www.digilogic.es/placa-de-desarrollo-fpga-ep1c3t144-iii/

Sé el primero en comentar en «Placa de desarrollo FPGA EP1C3T144 (II)»

Deja un comentario

Tu dirección de correo electrónico no será publicada.


*