PDLP 03
PDLP 03
Práctica No. 3.
Aplicaciones de circuitos combinacionales y secuenciales.
Combinational and secuential circuits applications.
Contenido:
En esta práctica se implementarán/simularán los siguientes circuitos:
• Contador de pulso en alto en ms con salida a display hasta 9999 al presionar un botón,
con beep y led RGB indicando el rango, mensaje de termino de conteo y reset.
• Control de posición de un servomotor (0°-180°) con encoder rotatorio.
Introducción.
Introduction.
Encoder
Un encoder rotatorio mecánico consta de por lo menos dos interruptores que se cierran en
diferentes posiciones cuando su eje gira. La secuencia generada en los interruptores A y B
es: 00→10→11→01→00, lo que se conoce como código Gray. En la figura 3.1 se muestran
los encoder y su diagrama interno. Es posible cambiar un poco el mecanismo y los sensores
para tener un encoder rotatorio óptico o magnético, empleando optointerruptores y sensores
de efecto hall junto con imanes, respectivamente.
1
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
Figura 3.1. Foto del encoder mecánico (a), circuito eléctrico equivalente (b), encoder
magnético (c) y encoder óptico (d).
PWM
La modulación de ancho de pulso también conocida como PWM permite cambiar el voltaje
promedio de una señal, tal como se puede ver en la figura 3.2. Dicha señal es muy utilizada
para el control de posición en un servomotor con tope o control de velocidad y sentido de
giro en un servomotor de movimiento contínuo o sin tope, lo que se aprecia en la figura 3.9.
Figura 3.2. Voltaje medio de una señal. (a) Vm bajo, (b) Vm medio y (c) Vm alto.
Dicha señal es muy utilizada para el control de posición en un servomotor con tope o control
de velocidad y sentido de giro en un servomotor de movimiento contínuo o sin tope, lo que
se aprecia en la figura 3.3.
2
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
Figura 3.3. PWM que se controla la posición de un servomotor de forma genérica con una
señal de T=10ms ó f=100Hz y señal en alto de 1ms a 2ms. (a) va a 0° con 1ms, (b) va a 90°
con 1.5ms y (c) va a 180° con 2ms.
En seguida se presenta un ejemplo escrito en VHDL que al girar el eje del encoder en
cualquier sentido, cambia la posición de un servomotor con tope, debido a que se modifica
el PWM conectado a la señal de control. El cambio en el PWM se observa en un led testigo
cambiando su intensidad y también se visualizan los cambios de posición en 5 leds de forma
binario y en un display de 7 segmentos las 32 posiciones (0 a F y 0. a F.), a parte de los
movimientos del servo.
Las características del servomotor FUTABA S3003 con el que se diseñó el programa son:
Tiempo en alto
Ángulo High
0° 0.3ms
180° 2.3ms
Tomando en cuenta que se tiene un reloj de 50MHz que da un periodo T=20ns, se calculan
las veces que cabe el periodo en el tiempo en alto y en el incremento, quedando de la siguiente
forma:
Tiempo en alto [ms]
Ángulo high Constantes Observaciones
0° 0.3ms (@cnt=0) high/20ns=15000 Se llamará “min”
180° 2.3ms (@cnt=31)
Incremento = Incremento =
(180°-0°)/31 (2.3-0.3=2ms)/31 = 64.516us incremento=3225 Se llamará “inc”
64.516us/20ns = 3225.8
cuyo resultado en la señal de PWM para el servo se muestra en la siguiente figura 3.4
3
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
Figura 3.4. Tres ejemplos de la señal de PWM generadas por el código en VHDL.
------------------------------------------------------------------------------------------------------
-- Se presenta un generador de señal PWM para controlar un servomotor, utilizando un
-- encoder rotatorio mecánico para manipular su posición. El sentido de giro es CW y
-- CCW, tanto para el encoder como para el servomotor, teniendo un tope en ambos
-- sentidos. El tiempo en alto “high” se obtiene con la función Ta=K1+(conta*K2) o bien
-- high <= min + (cnt*inc), colocada como high = 15000 + (cnt * 3225).
-- Archivos: [Link] y [Link], ServoconEncoderPos (proyecto)
------------------------------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity encoder is
Generic ( msb : integer := 5; --número de bits del contador
min : integer := 18332; --valor mínimo del contador para el tiempo en alto
max : integer := 121686; --valor máximo del contador para el tiempo en alto
inc : integer := 3334; -- incremento para el tiempo en alto
N : integer := 15 ); --divisor
Port (
--reloj de 50MHz de la nexys2
clk : in STD_LOGIC;
--reset asíncrono en alto en la nexys2 (BTN0) y en el encoder (Push)
resetB,resetP: in STD_LOGIC;
--señales A y B del encoder
A,B : in STD_LOGIC;
--salida del contador de 5 bits cuando msb=5
contador : out STD_LOGIC_VECTOR (msb-1 downto 0);
--salida a display de 7 segmentos + P
display : out STD_LOGIC_VECTOR (7 downto 0):="00000001";
--salida a los ánodos
AN : out STD_LOGIC_VECTOR (0 to 3);
--salidas de pwm para el servomotor y un led testigo
servomotor,servoLED : out STD_LOGIC
);
end encoder;
4
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
--declaración de señales
signal clkdiv: std_logic_vector(N downto 0); --señal para el divisor
signal AB: std_logic_vector (1 to 2); --señal que une las señales del encoder
signal cntPWM: integer range 1 to 500000 := 1; --contador de 10ms @ clk=50MHz
-- o T=20ns
signal cnt: integer range 0 to 31:= 0; --contador de 0 a 31
signal servo: std_logic; --señal de PWM para las salidas servos
signal high: integer range min to max := min; --duración del tiempo en alto de la
-- señal PWM
------------ end signal declarations ------------
begin
FSM: --proceso que detecta los giros del encoder y genera la variable cnt
process (clkdiv(N),resetB,resetP,cnt)
begin
if resetB = '1' or resetP = '1' then EP <= EA; cnt<=0;
elsif rising_edge(clkdiv(N)) then
case EP is
when EA =>
if AB = "00" then EP <= EA; cnt<=cnt; --hold
elsif AB = "10" then EP <= EB; --cw
if cnt = 31 then cnt <= 31;
elsif cnt < 31 then cnt <= cnt + 1;
else cnt <= cnt;
end if;
elsif AB = "01" then EP <= ED; --ccw
if cnt = 0 then cnt <= 0;
elsif cnt > 0 then cnt <= cnt - 1;
else cnt <= cnt;
end if;
5
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
end if;
when EB => cnt <= cnt; --hold
if AB = "10" then EP <= EB;
elsif AB = "11" then EP <= EC;
elsif AB = "00" then EP <= EA;
end if;
when EC =>
if AB = "11" then EP <= EC; cnt<=cnt; --hold
elsif AB = "01" then EP <= ED; --cw
if cnt = 31 then cnt <= 31;
elsif cnt < 31 then cnt <= cnt + 1;
else cnt <= cnt;
end if;
elsif AB = "10" then EP <= EB; --ccw
if cnt = 0 then cnt <= 0;
elsif cnt > 0 then cnt <= cnt - 1;
else cnt <= cnt;
end if;
end if;
when ED => cnt <= cnt; --hold
if AB = "01" then EP <= ED;
elsif AB = "00" then EP <= EA;
elsif AB = "11" then EP <= EC;
end if;
when others => null;
end case;
end if;
end process FSM;
-- Proceso para generar la salida de PWM de 0.3 a 2.3 ms @ f=100Hz, cntPWM cuenta
-- de 1 a 500,000 que equivale a un periodo de 10ms, con 16 posiciones, high va de
-- min @ cnt=0 (0.3ms) hasta max @ cnt=15 (2.3ms).
--
-- Los valores de high para (cnt) con incrementos de 6666 son:
-- 0.3ms (0), 0.4333ms (1), 0.5666ms (2), 0.7ms (3),
-- 0.8333ms (4), 0.9666ms (5), 1.1ms (6), 1.2333ms (7),
-- 1.3666ms (8), 1.5ms (9), 1.6333ms (10), 1.7666ms (11),
-- 1.9ms (12), 2.0333ms (13), 2.1666ms (14), 2.3ms (15)
--
-- Con 32 posiciones high va de min @ cnt=0 (0.3ms) hasta max @ cnt=31 (2.3ms).
-- Los valores de high para (cnt) con incrementos de 3225 son:
-- 0.3ms (0), 0.365ms (1), 0.429ms (2), 0.494ms (3),
-- 0.558ms (4), 0.623ms (5), 0.687ms (6), 0.752ms (7),
-- 0.816ms (8), 0.881ms (9), 0.945ms (10), 1.01ms (11),
-- 1.074s (12), 1.139ms (13), 1.203ms (14), 1.268ms (15)
-- 1.332ms (16), 1.397ms (17), 1.467ms (18), 1.526ms (19),
-- 1.59ms (20), 1.655ms (21), 1.719ms (22), 1.784ms (23),
6
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
7
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
##############################################################
# UCF para la Nexys 2 #
##############################################################
# reloj de 50MHz de la nexys2
net "clk" loc ="B8" ; # 50MHz
8
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
En la figura 3.5 se muestra el diagrama de conexión, y en la 3.6 fotos del funcionamiento del
código presentado para 3 de las 32 posiciones (3, 2. y F.).
Teclado y PS2
Un teclado comercial PS/2 de 104 teclas se encarga del rastreo de teclas, del sistema anti-
rebotes y de la transmisión de datos utilizando una trama perfectamente establecida. El
teclado PS/2 tiene un mapa de teclas a las que asigna un código, de uno o dos bytes, para
cada una de ellas y que son los códigos que nos va a transmitir para indicarnos que se está
pulsando una tecla determinada. A estos códigos se les llama códigos de rastreo de teclado,
mostrados en la figura 3.7.
9
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
El teclado PS/2 envía el código de rastreo asociado a una tecla al ser esta pulsada, tantas
veces como sea necesario si se mantiene pulsada con una cadencia tal como indique su tiempo
de repetición, que es programable, y el mismo código de rastreo con el prefijo del byte F0h
al ser soltada, también conocido como Break Code.
Por ejemplo: Para conseguir la letra G Mayúscula debemos pulsar la tecla Shift y mientras la
mantenemos pulsada, pulsar la tecla G, soltar la tecla G y soltar la tecla Shift. Esa secuencia
de pulsaciones nos va a hacer que el teclado transmita la siguiente secuencia de bytes:
Pulsar Shift -> 12h, (scan code de la tecla shift, ver figura 3.8)
Pulsar "G" -> 34h,
Soltar "G" -> F0h 34h
y soltar Shift -> F0h 12h
En la siguiente tabla 3.1 se muestran las letras del abecedario y junto con el código de rastreo
(scan code) y su dato en ASCII.
10
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
Un teclado PS2 también permite comandos, que por el momento no se presentarán en este
documento y cuya información está disponible en libros y en la red.
Conexionado eléctrico:
El teclado PS/2 se conecta mediante cuatro hilos. Dos de ellos son para alimentación Vcc a
5V y GND, y otros dos para las señales Data y Clock. El pinout de los conectores Mini-DIN
PS/2 tanto hembra (en la PC), como machos (en el teclado) se muestran en la figura 3.8 y en
la tabla 3.2.
11
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
En el Teclado PS/2 las señales Data y Clock son de "colector abierto". Esto quiere decir que
para establecer una comunicación eléctricamente correcta debemos nosotros suministrar
voltaje para el nivel lógico alto, y es él el encargado de dar los correspondientes niveles
lógicos bajos, tirando nuestra señal a GND cuando así sea necesario. Este tema se soluciona
conectando dos resistencias de 10K entre dichas líneas y Vcc por lo que siempre tendrán
nivel lógico alto, salvo cuando el teclado disponga lo contrario y lo tire a GND para dar lo
correspondientes niveles lógicos bajos. Esto es lo que se llama conectar unas resistencias
Pull-Up.
En la figura 3.9 se muestra como conectar las resistencias Pull-Up entre el teclado y el
dispositivo programable.
El teclado PS/2 se comunica mediante un Protocolo Serie Síncrono, utiliza una señal de Clock
que índica cuando están disponibles los correspondientes bits en la señal de Data.
En reposo la señal de Clock está a nivel alto; a cada pulso a nivel bajo corresponde un pulso
a nivel alto o bajo en la señal de Data, que se traducen respectivamente como bits 0 ó 1 del
dato a transmitir.
12
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
como puede verse en la figur 3.10 el cronograma de esta trama de comunicación PS/2
Teclado (Keyboard) -> PC (host):
El teclado PS/2 admite también comandos enviados desde el PC con el mismo formato, el
protocolo es bidireccional, el cual se indica mediante la señal de Clock al colocarla en nivel
bajo durante 160 uS, y la señal de Data a bajo unos 35 uS después de del Clock. Posteriomente
se espera la señal del Clock generada por el Teclado. Esto indica que el teclado está dispuesto
para recibir nuestro comando. Después de detectar el primer pulso de Clock, a partir del
siguiente se comienza a enviar el byte (los 8 bits de comando) con el correspondiente pulso
en bajo, iniciando por el LSB, y después el bit de paridad impar (el número de unos en los
datos más el de paridad deber ser impar, o sea 1 si el número de unos es par y cero si el total
de unos es impar). Por último, hay que esperar el nivel bajo de ACK del teclado, tras dos
pulsos de reloj, mostrado en la figura 3.11.
A continuación, se muestran tres códigos para el teclado PS2 escritos en VHDL, que utilizan
ciclos for con estructura de registro de corrimiento y con FSM.
------------------------------------------------------------------------------------------------
-- Primer código basado en un registro de corrimiento
------------------------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.all;
Entity Reg_Der_S_P is
generic (n: in integer:= 33); --Trabaja a 11x3 para asegurar que no haya perdida de datos
port (CLK_T: in std_logic; --reloj del ps2
RST : in std_logic; --reset
R : in std_logic; --dato del ps2
Q : out std_logic_vector (8 downto 1)); --salida
endReg_Der_S_P;
13
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
------------------------------------------------------------------------------------------------
-- Segundo código
------------------------------------------------------------------------------------------------
-- Código de teclado PS2 implementado con FSM
-- teclado con PS2
-- se toma la lectura al presionar una tecla empleando una FSM
-- [Link]
-- ps-2-interfacing-with-spartan-3e-webserver
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
--declaración de la entidad
entity key is
port( ps2data: in std_logic; --dato del PS2
ps2clk: in std_logic; --reloj del PS2
leds : out std_logic_vector(7 downto 0); --salida a leds
D: out std_logic_vector(7 downto 0); --salida a display
14
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
15
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
16
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
end if;
end process; --termina de leer los datos del teclado
------------------------------------------------------------------------------------------------
-- Tercer código
------------------------------------------------------------------------------------------------
-- Lectura del código de rastreo de un teclado conectado al puerto PS/2 de la Nexys 2
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
--Señales de la entidad
--reloj y dato del PS2, reset con un interruptor SW0 o botón
--8 leds de la tarjeta para sacar el código hexadecimal asignado a cada tecla
entity teclado is
Port ( clk,dato,rst: in std_logic;
leds : out std_logic_vector(7 downto 0));
end teclado;
--Proceso que habilita el contador tmp para la recepción del dato del teclado
conteo:process (clk,rst,tmp)
begin
--si reset = '1' o tmp=22, se resetea la señal tmp (contador)
if rst='1' or tmp = "10110" then tmp <= (others=>'0');
--se habilita el contador con flanco de subida del reloj
elsif clk'event and clk ='1' then tmp <= tmp + 1;
17
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
end if;
end process conteo;
Desarrollo.
Procedure
Recuerde MOSTRAR sus circuitos funcionando a su profesor para la valoración del trabajo
de laboratorio (TL2).
1. Implement in TLD a pulse counter in high in ms with output to display, which when
pressing a button (push) the count is displayed on the display and when the button is
released it stops at a value, but if it is pressed again continue the count. It has a reset
button to restart at zero any time it is pressed. The display can count to a maximum of
9,999 ms (9.9 s) and when this value is reached it will stop and a message (“maximum
value”, “I am already filled”) will sound in a speaker, etc. By means of a RGB led it is
indicated in what rank the count is (0 < R 3,333, 3,333 < G 6,666, 6,666 < B
9,999). Each time the range is changed, a “BEEP” will sound in a buzer or speaker.
The block diagram is shown in figure 3.12, an example of the operation in figure 3.13
and one way to implement the TLD in figure 3.14. The language in which it is
implemented is defined by the teacher. Report the commented codes (vhd,v,ucf,vxdc,csv),
simulations, operation photos with explanatory text of what happens.
18
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
2. Implement a position control for a servo motor with stop by changing the control signal
(PWM) suitable to the motor type, by means of a mechanical rotary encoder (optical or
magnetic), shown in figure 3.15. The movement of the encoder in one direction will
change the position of the servo in that same direction, both clockwise and
counterclockwise. The displays (see figure 3.16) indicate the angle of the motor (0°-
180°), with a minimum resolution of 5°. The engine must carry a load on the axle (belt,
wheels, pulley, animatronic system, window or door to scale, etc., simple things such as
propellers, clips, wires, links, sheets of paper, etc. are not allowed). The language in
which it is implemented is defined by the teacher. Report the commented codes,
simulations, operation photos with explanatory text of what happens.
Figura 3.15. Diagrama a bloques para el control de posición del servo por PWM.
19
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
Figura 3.16. Ejemplo del valor del display para el servo con tope.
NOTA: Respetar la numeración de cada punto de este formato en el reporte escrito [máximo
25 cuartillas si se entrega impreso (Letra Times New Roman de 12ptos, interlineado
sencillo)].
------------------------------------------------------------------------------------------
-- Contador ascendente y descendente, con 2 reset asíncronos y salida pwm a led.
Library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
-- Declaración de la entidad
entity Contador is
Port (UpDown: in STD_LOGIC_VECTOR(1 DOWNTO 0); -- botones subir y bajar ms
CLK: in STD_LOGIC; -- reloj de 50MHz-nexys 2 y 100MHz-nexys 3
RESET: in STD_LOGIC; -- reset
SALED: OUT STD_LOGIC; -- salida del led testigo
DISPLAY: out STD_LOGIC_VECTOR(7 DOWNTO 0); -- segmentos "abcdefgP"
AN: out STD_LOGIC_VECTOR(3 DOWNTO 0); -- ánodos del display
RGB: out STD_LOGIC_VECTOR(1 TO 3)); -- salida a leds RGB para el rango
end Contador;
-- Declaración de la arquitectura
architecture Behavioral of Contador is
20
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
BEGIN
---------------------DIVISOR 1ms------------------------------------
-- en este proceso se genera una señal "SAL_1ms" de 1ms de periodo
PROCESS(reset, CLK)
begin
if reset ='1' then
Conta_500us <= 1; -- se reinicializa
elsif(CLK'event and CLK='1') THEN
if(Conta_500us = 25_000) then -- pregunta si ya se alcanzó 0.5ms (nexys2)
--if(Conta_500us = 50000) then -- pregunta si ya se alcanzó 0.5ms (nexys3)
SAL_1ms <= not SAL_1ms; --se genera 0.5ms en bajo y 0.5ms en alto
Conta_500us <= 1; --reinicia el Contador a 1
else
Conta_500us <= Conta_500us + 1;
end if;
end if;
end process; --termina el proceso de generación de señal 1ms
--------------------------------CONTEO-----------------------------------
-- con Up se incrementa y Down decrementa en el rango 0<CONT<9999
21
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
end process;
--------------------------------RGB-----------------------------------
-- 0< R <3333 3333< G <6666 6666< B <9999
PROCESS(CONT2)
begin
if CONT2>=0 and CONT2 <= 3333 then RGB <="100"; -- 0< R <3333
elsif CONT2>3333 and CONT2 <= 6666 then RGB <="010"; -- 3333< G <6666
elsif CONT2>6666 and CONT2 <= 9999 then RGB <="001"; -- 6666< B <9999
else RGB <="000"; -- apaga todos
end if;
end process;
22
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
PROCESS(CONT)
VARIABLE UM_C_D_U:STD_LOGIC_VECTOR(29 DOWNTO 0);
--30 bits para separar las Unidad_de_Millar-Centenas-Decenas-Unidades
BEGIN
--ciclo de inicialización
FOR I IN 0 TO 29 LOOP --
UM_C_D_U(I):='0'; -- se inicializa con 0
END LOOP;
23
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
END LOOP;
END PROCESS;
--UNIDADES
UNI<=P(3 DOWNTO 0);
--DECENAS
DEC<=P(7 DOWNTO 4);
--CENTENAS
CEN<=P(11 DOWNTO 8);
--MILLARES
MIL<=P(15 DOWNTO 12);
-------------------DIVISOR ÁNODOS-------------------
--------------------MULTIPLEXOR---------------------
24
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
CASE(SEL) IS
when "00" => AN <="0111";D <= UNI; -- UNIDADES
when "01" => AN <="1011";D <= DEC; -- DECENAS
when "10" => AN <="1101";D <= CEN; -- CENTENAS
when "11" => AN <="1110";D <= MIL; -- UNIDAD DE MILLAR
when OTHERS=>AN <="1110"; D <= MIL; -- UNIDAD DE MILLAR
END CASE;
end if;
--------------------DISPLAY---------------------
PROCESS(D)
Begin
case(D) is -- abcdefgP
WHEN "0000" => DISPLAY <= "00000011"; --0
WHEN "0001" => DISPLAY <= "10011111"; --1
WHEN "0010" => DISPLAY <= "00100101"; --2
WHEN "0011" => DISPLAY <= "00001101"; --3
WHEN "0100" => DISPLAY <= "10011001"; --4
WHEN "0101" => DISPLAY <= "01001001"; --5
WHEN "0110" => DISPLAY <= "01000001"; --6
WHEN "0111" => DISPLAY <= "00011111"; --7
WHEN "1000" => DISPLAY <= "00000001"; --8
WHEN "1001" => DISPLAY <= "00001001"; --9
WHEN OTHERS => DISPLAY <= "11111111"; --apagado
END CASE;
END PROCESS; -- fin del proceso Display
------------------------------------------------
///////////////////////////////////////////////////////////////////////////////////////
// Archivo de restricciones de usuario (UCF) Nexys 2 //
///////////////////////////////////////////////////////////////////////////////////////
//CLK reloj 50MHz
NET "CLK" LOC = "B8";
//DISPLAYS
NET "DISPLAY(7)" LOC = "L18"; // a
NET "DISPLAY(6)" LOC = "F18"; // b
25
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
//ANODOS
NET "AN(3)" LOC = "F17"; // AN0
NET "AN(2)" LOC = "H17"; // AN1
NET "AN(1)" LOC = "C18"; // AN2
NET "AN(0)" LOC = "F15"; // AN3
//UpDown,RESET--PUSH BUTTON
NET "UpDown(1)" LOC = "B18"; // btn0 SUBE
NET "UpDown(0)" LOC = "D18"; // btn1 BAJA
NET "RESET" LOC = "H13”; // btn2 RST
Referencias.
References.
26
Prácticas de Laboratorio de Dispositivos Lógicos Programables .
Juan Antonio Jaramillo Gómez, Mirna Salmerón Guzmán, Rafael Santiago Godoy,
CONTROL DE POSICIÓN DE UN SERVOMOTOR UTILIZANDO LA TARJETA DE
DESARROLLO NEXYS 2 Y VHDL, boletín UPIITA número 29, consultado en enero-2020,
disponible en [Link]
control-de-posicion-de-un-servomotor-utilizando-la-tarjeta-de-desarrollo-nexys-2-y-vhdl
Juan Antonio Jaramillo Gómez, Mirna Salmerón Guzmán, Rafael Santiago Godoy,
CONTROL DE UN SERVOMOTOR CON UN ENCODER MECÁNICO ROTATORIO
UTILIZANDO VHDL Y LA NEXYS II, boletín UPIITA número 34, consultado en enero-
2020, disponible en [Link]
34/122-control-de-un-servomotor-con-un-coder-mecanico-rotatorio-utilizando-vhdl-y-la-
nexys-ii
Juan Antonio Jaramillo Gómez, Mirna Salmerón Guzmán, Brahim El Filali, Método de
Conversión de Binario a BCD con VHDL, boletín UPIITA número 63, consultado en enero-
2020, disponible en [Link]
63/1434-metodo-de-conversion-de-binario-a-bcd-con-vhdl
27