Proyecto Micro
Proyecto Micro
Resumen—Este manuscrito expone el desarrollo, la puesta demanda concurrencia rigurosa entre diversos procesos [1].
en marcha y la comprobación operativa de un regulador de En particular, los reguladores de tráfico urbano representan un
tráfico vehicular multicanal integrado con paso de personas, caso de estudio modelo: deben armonizar múltiples actores
conceptualizado bajo una máquina de estados finitos (FSM)
de tipo Moore y codificado mediante el lenguaje VHDL. El (automóviles, viandantes, semáforos secundarios), cumplir con
circuito gestiona de manera concurrente dos rutas de circulación cronometrajes normativos y soportar interrupciones tales como
de vehı́culos y un cruce para peatones, alternando entre cinco activaciones manuales de viandantes o peticiones de prioridad
estados claramente delimitados: verde—amarillo para la arteria para vehı́culos de emergencia.
principal, verde—amarillo para la vı́a secundaria y una etapa El regulador de semáforo tratado en este documento se
exclusiva de tránsito peatonal. La materialización del proyecto
se llevó a cabo en el entorno Xilinx Vivado Design Suite 2017.4, enmarca dentro de los sistemas secuenciales modelables como
seleccionando como dispositivo de destino la FPGA Artix-7 máquinas de estados finitas (FSM, por sus siglas en inglés).
AC701 (referencia xc7a200t-fbg676-2). La estrategia metodológi- Una FSM constituye una abstracción matemática que define
ca empleada abarcó todas las fases del flujo de diseño sugerido el comportamiento de un sistema por medio de un número
por Xilinx: especificación de requerimientos, escritura de código limitado de estados, un conjunto de transiciones sujetas a las
RTL, elaboración, sı́ntesis de puertas lógicas, simulación de
comportamiento y evaluación de recursos tras la sı́ntesis. La entradas y una función de salida que vincula cada estado
validación funcional se ejecutó por medio de un banco de pruebas con una configuración determinada de señales [2]. Existen
(testbench) que estimula la arquitectura con una señal de reloj dos enfoques clásicos: la máquina de Moore, cuyas salidas
de 100 MHz, un pulso de reinicio y un pulsador para peatones, están subordinadas exclusivamente al estado vigente, y la de
posibilitando la visualización de la progresión temporal ı́ntegra Mealy, donde las salidas dependen del estado vigente y de
de los estados. Las estadı́sticas de sı́ntesis revelan un consumo
mı́nimo de apenas 33 LUTs y 40 biestables, lo que equivale las entradas. Para sistemas crı́ticos en los que la firmeza de
al 0.025 % de la capacidad lógica disponible, junto con una la salida frente a fluctuaciones transitorias en la entrada es
disipación de potencia total en el chip de 0.134 W. Estas métricas fundamental, el enfoque de Moore resulta más adecuado, dado
evidencian que la topologı́a presentada es compacta, predecible que aı́sla las salidas del ruido momentáneo presente en las
y idónea para sistemas embebidos en tiempo real que exigen entradas [3].
limitaciones rigurosas de área y consumo energético. El estudio
ratifica asimismo a la FSM Moore como un modelo sólido para La selección de VHDL (VHSIC Hardware Description
controladores secuenciales implementados en FPGA. Language) como lenguaje para la descripción de hardware
Index Terms—VHDL, FPGA, Artix-7, Diseño Digital, Máquina se justifica por su robustez, tipado estricto y gran aceptación
de Estados Finita, Moore, Controlador de Tráfico, Vivado, tanto en el sector industrial como en el académico. VHDL
Verificación Funcional, Sı́ntesis Lógica. posibilita la definición de circuitos tanto a nivel de comporta-
miento como estructural, agiliza la parametrización a través de
I. I NTRODUCCI ÓN genéricos y permite el aprovechamiento de módulos mediante
EL desarrollo de sistemas digitales secuenciales sobre pla- la distinción entity–architecture [4]. La suite Xilinx Vivado
taformas reconfigurables ha mostrado un ascenso continuo 2017.4, empleada en esta investigación, proporciona un flujo
en los últimos diez años, motivado por la accesibilidad a de trabajo unificado que abarca desde la redacción del código
dispositivos Field Programmable Gate Arrays (FPGAs) de hasta la generación del archivo de configuración (bitstream),
bajo precio y elevado rendimiento. Las FPGAs facilitan la incluyendo sı́ntesis, implementación, simulación y emisión de
creación de controladores por hardware dedicados que ofre- informes de uso y energı́a [5].
cen tiempos de respuesta predecibles del orden de nano- La problemática especı́fica que resuelve este artı́culo radica
segundos, un atributo que les otorga ventaja frente a las en la exigencia de disponer de un regulador de semáforo
alternativas fundamentadas en microcontroladores cuando se validable, sintetizable y optimizado en cuanto a recursos,
capacitado para administrar dos carriles vehiculares con un Moore de cuatro estados. Su diseño demandó 42 elementos
cruce de viandantes mediante botón. Las alternativas comer- lógicos y operó a 50 MHz. Un inconveniente de su propuesta
ciales existentes tienden a ser propietarias y onerosas, lo que es la carencia de un canal para viandantes: el sistema ignora
restringe su aplicación en entornos educativos y de investi- las peticiones de cruce, limitando su utilidad práctica. Garcı́a
gación. Por consiguiente, la elaboración de un controlador y Méndez [9] ampliaron esta idea incorporando un botón
abierto, modular y verificable con herramientas de libre acceso peatonal en una FPGA Zynq-7020, reportando 51 LUTs y 38
como Vivado WebPACK resulta de gran interés tanto a nivel flip-flops. Su FSM contempló seis estados, añadiendo dos fases
formativo como práctico. extra de parpadeo en ámbar. La complejidad añadida de los
Los aportes puntuales de esta investigación son: (i) la plani- parpadeos incrementa el área lógica sin aportar una mejora
ficación de una FSM Moore de cinco estados con contadores operativa relevante cuando el sistema está pensado para un
ajustables para un regulador de tráfico bidireccional con paso cruce sencillo.
de personas; (ii) una codificación VHDL modular que incluye
Wang et al. [10] sugirieron un regulador de tráfico inte-
la detección de flanco de subida en el pulsador peatonal y un
ligente que amalgama un semáforo tradicional con sensores
generador de pulso (tick) de 1 Hz derivado del reloj base de
infrarrojos para percibir la presencia de automóviles, desple-
100 MHz de la FPGA; (iii) la validación funcional minuciosa
gado sobre Intel Cyclone V. Aunque el artı́culo incluye una
por medio de un testbench con valores genéricos reducidos
FSM, su propósito central es la modificación adaptativa de los
que hace posible presenciar el ciclo entero en apenas unos
tiempos según el volumen de vehı́culos, aspecto que trasciende
microsegundos de simulación; y (iv) la evaluación post-sı́ntesis
el alcance de este escrito. No obstante, se erige como una
del consumo de recursos y energı́a sobre la placa FPGA Artix-
referencia valiosa para el trabajo venidero, donde se podrı́a
7 AC701.
acoplar detección de presencia al controlador planteado.
El resto del documento se estructura de la siguiente for-
ma. La Sección II examina los antecedentes en reguladores En el plano educativo, Patel y Joshi [11] exponen un regula-
de tráfico soportados en FPGA. La Sección III expone la dor de semáforo básico como ejemplo didáctico en asignaturas
arquitectura sugerida, abarcando el diagrama de bloques, la de diseño digital. Su implementación, sobre Basys-3 (Artix-
FSM y las señales de entrada y salida. La Sección IV detalla 7), recurre a VHDL y un contador de tiempo sin distinción
el procedimiento de diseño en VHDL, adjuntando el código entre el generador de pulsos y la lógica de estados. Esta unión
fuente del módulo y del testbench. La Sección V describe el complica la parametrización y la verificación por bloques, dos
escenario de simulación. La Sección VI expone y analiza los facetas que el presente estudio perfecciona al separar de forma
resultados de sı́ntesis y simulación. Por último, la Sección VII explı́cita el generador de tick del registro de estados y de la
expone las conclusiones y la Sección VIII las lı́neas de trabajo lógica de transición. Adicionalmente, Rodrı́guez [12] evaluó
venideras. de manera comparativa máquinas Moore frente a Mealy para
controladores secuenciales, determinando que Moore exhibe
II. T RABAJOS R ELACIONADOS menor fluctuación temporal en las salidas, hecho que respalda
La concepción de reguladores de tráfico sobre FPGAs ha la decisión tomada en este proyecto.
sido tema de diversas investigaciones en la última década, La Tabla I condensa la comparativa. Se nota que el presente
ya que representa un caso de estudio idóneo para instruir y estudio es el único que fusiona FSM Moore de cinco estados,
evaluar el flujo de diseño digital. En esta sección se examinan paso de viandantes mediante botón, FPGA Artix-7 AC701 y
estudios representativos que abordan la misma temática desde verificación a través de testbench parametrizable. A ello se
diferentes enfoques, destacando discrepancias en el modelo suma que el consumo de 33 LUTs y 40 flip-flops lo sitúa como
FSM, en la plataforma de destino y en las métricas de sı́ntesis la solución más eficiente en recursos del conjunto contrastado.
obtenidas.
Smith y su equipo [6] plantearon una ALU de 8 bits sobre
una FPGA Artix-7 usando Vivado, logrando una frecuencia
Cuadro I
máxima de 250 MHz con 86 LUTs. A pesar de que el dominio C OMPARACI ÓN DE T RABAJOS R ELACIONADOS EN C ONTROLADORES DE
de aplicación difiere, la táctica de comprobación funcional T R ÁFICO SOBRE FPGA.
basada en testbench exhaustivo es asimilable a la adoptada
en este estudio. Por otro lado, Lee [7] documentó la creación Autor (Año) Plataforma FSM (Estados) Peatón LUTs / FF
de un contador sı́ncrono en Spartan-6 con ISE, alcanzando 4 Smith (2024) Artix-7 — (ALU) No 86 / 32
flip-flops y una frecuencia máxima de 200 MHz. La disparidad Lee (2025) Spartan-6 Contador (4) No 12 / 4
principal con la presente investigación radica en el software Kumar (2023) Cyclone IV Moore (4) No 42 / —
Garcı́a (2022) Zynq-7020 Moore (6) Sı́ 51 / 38
(ISE frente a Vivado) y en la familia de FPGA empleada
Wang (2021) Cyclone V Moore adaptativo Sı́ 110 / 64
(Spartan-6 frente a Artix-7), factores que inciden directamente Patel (2020) Artix-7 Moore (4) No 38 / 12
en las métricas de aprovechamiento. Rodrı́guez (2019) Cyclone IV Moore/Mealy — —
En el campo especı́fico de los reguladores de tráfico, Ku- Este trabajo Artix-7 AC701 Moore (5) Sı́ 33 / 40
mar y Sharma [8] introdujeron un controlador de semáforo
bidireccional sobre Cyclone IV, estructurado como una FSM
III. A RQUITECTURA DEL S ISTEMA P ROPUESTO
III-A. Descripción funcional
La arquitectura sugerida corresponde a un regulador de tráfi-
co de doble vı́a integrado con cruce de viandantes, proyectado
para comandar un cruce simple entre dos arterias vehiculares y
un paso peatonal. El sistema va alternando cı́clicamente entre
la ruta primaria y la secundaria, asegurando que jamás ambas
rutas gocen de luz verde al mismo tiempo. Además, ante la
activación del botón peatonal, el dispositivo salta a una etapa diagrama_bloques.png
exclusiva de cruce en la que ambas calzadas se ponen en rojo y
el indicador peatonal se enciende, salvaguardando la integridad
del viandante.
La extensión de cada etapa es configurable a través de
genéricos de VHDL: verde principal, verde secundario, ámbar
principal, ámbar secundario y cruce peatonal. Esta flexibilidad
posibilita adaptar el regulador a distintas normativas locales
sin alterar el código, limitándose a modificar los valores
en la instanciación. En la configuración estándar del diseño Figura 1. Diagrama de bloques del regulador de tráfico propuesto.
sintetizable se asignan 8 segundos para el verde, 3 segundos
para el ámbar y 6 segundos para el cruce, cifras habituales en
intersecciones de zonas urbanas periféricas. diagrama de transiciones. La secuencia habitual es
III-B. Entradas y salidas S_GREEN_MAIN → S_YELLOW_MAIN → S_GREEN_SIDE
→ S_YELLOW_SIDE → S_GREEN_MAIN. Si el botón
Las señales de entrada del sistema son tres: el reloj maestro peatonal es presionado durante el último segundo de la fase
clk de 100 MHz suministrado por el oscilador de la tarjeta verde principal o verde secundario, la FSM migra a S_WALK
AC701; una señal de reset ası́ncrono activa en nivel alto rst; en lugar de pasar al ámbar correspondiente. Al concluir
y el pulsador peatonal btn, también activo en alto. El botón es el tiempo de cruce, el sistema regresa a S_GREEN_MAIN,
capturado por un doble biestable de sincronización seguido de restableciendo el ciclo habitual.
un detector de flanco de subida, mecanismo que neutraliza los
peligros de metaestabilidad y faculta al sistema para reaccionar
a una pulsación fugaz con una única transición interna.
Las salidas se agrupan en tres buses:
main_lights(2:0) para la arteria principal,
side_lights(2:0) para la vı́a secundaria, y walk
para el indicador de peatones. La codificación escogida para
los semáforos es RYG (bit 2 = rojo, bit 1 = ámbar, bit 0
= verde), de forma que el patrón 100 simboliza rojo, 010
ámbar y 001 verde. Esta codificación unaria simplifica el
fsm_diagram.png
enlace directo con los pines de los LEDs en la FPGA y
depura el esquemático RTL resultante, puesto que cada bit
de salida se enlace a un flip-flop propio sin requerir circuitos
decodificadores extras.
III-C. Diagrama de bloques
La Figura 1 exhibe el diagrama de bloques operacional del
sistema. Se diferencian cuatro módulos: el generador de pulso
(tick) de 1 Hz, el sincronizador del botón con su detector
de flanco, el registro de estados de la FSM y la lógica de Figura 2. Diagrama de transición de la FSM Moore planteada.
salidas Moore. La señal de reloj de 100 MHz alimenta todos
los registros, en tanto que el reset inicializa el contador, el
estado y los biestables de sincronización. III-E. Tabla de salidas Moore
III-D. Máquina de estados finita La Tabla II enumera la configuración de salida vinculada a
La FSM Moore planteada se compone de cinco estados: cada estado. Se constata el rasgo distintivo de las máquinas
S_GREEN_MAIN, S_YELLOW_MAIN, S_GREEN_SIDE, Moore: las salidas son dependencia única del estado, sin
S_YELLOW_SIDE y S_WALK. La Figura 2 ilustra el injerencia directa de las entradas.
Cuadro II 8 T_GREEN : integer := 8; --
PATRONES DE S ALIDA POR E STADO (C ODIFICACI ÓN RYG). seconds for green
9 T_YELLOW : integer := 3; --
seconds for yellow
Estado main lights side lights walk 10 T_WALK : integer := 6 --
S GREEN MAIN 001 (verde) 100 (rojo) 0 seconds for walk
S YELLOW MAIN 010 (ámbar) 100 (rojo) 0 11 );
S GREEN SIDE 100 (rojo) 001 (verde) 0 12 Port (
13 clk : in STD_LOGIC;
S YELLOW SIDE 100 (rojo) 010 (ámbar) 0 14 rst : in STD_LOGIC; --
S WALK 100 (rojo) 100 (rojo) 1 active HIGH
15 btn : in STD_LOGIC; --
pedestrian button
16 main_lights : out STD_LOGIC_VECTOR(2 downto
IV. M ETODOLOG ÍA DE D ISE ÑO EN VHDL 0); -- (R,Y,G)
IV-A. Flujo de diseño 17 side_lights : out STD_LOGIC_VECTOR(2 downto
0); -- (R,Y,G)
El flujo de trabajo seguido en esta investigación se acoge18 walk : out STD_LOGIC
al estándar preconizado por Xilinx para proyectos basados en19 );
20 end traffic_light;
HDL [5]. Las fases ejecutadas fueron: (1) definición funcio-21
nal del regulador; (2) redacción del código RTL en VHDL22 architecture Behavioral of traffic_light is
deslindando entity y architecture; (3) elaboración del diseño23 type state_type is (S_GREEN_MAIN, S_YELLOW_MAIN,
S_GREEN_SIDE,
para certificar la sintaxis y la jerarquı́a; (4) confección del24 S_YELLOW_SIDE, S_WALK);
testbench con constantes genéricas minoradas; (5) simulación25 signal current_state, next_state : state_type :=
conductual con Vivado Simulator (xsim); (6) sı́ntesis lógica S_GREEN_MAIN;
26 constant TICK_COUNT : integer := CLK_FREQ;
sobre el componente xc7a200t-fbg676-2; (7) inspección del27 signal tick_counter : integer range 0 to
esquemático RTL y de los informes de aprovechamiento y TICK_COUNT-1 := 0;
energı́a. Cada fase generó entregables verificables que posibili-28 signal tick : STD_LOGIC := ’0’;
29 signal timer : integer range 0 to 31 := T_GREEN;
taron descubrir prematuramente fallos operativos o de sı́ntesis,30 constant L_RED : STD_LOGIC_VECTOR(2 downto 0)
evitando la propagación de errores hacia fases avanzadas. := "100";
31 constant L_YELLOW : STD_LOGIC_VECTOR(2 downto 0)
IV-B. Descripción de la entidad := "010";
32 constant L_GREEN : STD_LOGIC_VECTOR(2 downto 0)
La entidad traffic_light define cuatro constantes := "001";
genéricas (CLK_FREQ, T_GREEN, T_YELLOW, T_WALK) que33 signal btn_sync1, btn_sync2 : STD_LOGIC := ’0’;
parametrizan el módulo. Esta capacidad de ajuste representa34 signal btn_prev, btn_edge : STD_LOGIC := ’0’;
35 begin
una de las ventajas primordiales de VHDL frente a lenguajes36 -- 1 Hz tick generator
sin tipado: habilita el uso del mismo código para variadas37 process(clk, rst)
frecuencias de reloj o duraciones de fase sin manipular la38 begin
39 if rst = ’1’ then
lógica interna. Los puertos coinciden con los detallados en la40 tick_counter <= 0;
Sección III. La separación explı́cita entre in y out, aunada41 tick <= ’0’;
al tipado estricto de STD_LOGIC y STD_LOGIC_VECTOR,42 elsif rising_edge(clk) then
43 if tick_counter = TICK_COUNT-1 then
asegura que el compilador detecte fallos de cableado durante44 tick_counter <= 0;
la elaboración. 45 tick <= ’1’;
46 else
IV-C. Código VHDL del diseño 47 tick_counter <= tick_counter + 1;
48 tick <= ’0’;
El Listado 1 exhibe la codificación VHDL ı́ntegra del49 end if;
regulador. Se distinguen cinco módulos secuenciales dentro de50 end if;
la arquitectura: el generador de pulso de 1 Hz, el sincronizador51 end process;
52
del pulsador, el registro de estados con temporizador, la lógica53 -- Button synchronizer + rising edge detector
de transición y la lógica de salidas Moore. Esta distribución54 process(clk, rst)
por segmentos favorece la lectura y el mantenimiento, y55 begin
56 if rst = ’1’ then
posibilita que cada fracción sea probada de manera aislada57 btn_sync1 <= ’0’; btn_sync2 <= ’0’;
si fuese preciso. 58 btn_prev <= ’0’; btn_edge <= ’0’;
59 elsif rising_edge(clk) then
Listing 1. Código VHDL del controlador de semáforo (traffic [Link]). 60 btn_sync1 <= btn;
1 library IEEE; 61 btn_sync2 <= btn_sync1;
2 use IEEE.STD_LOGIC_1164.ALL; 62 btn_prev <= btn_sync2;
3 use IEEE.NUMERIC_STD.ALL; 63 btn_edge <= btn_sync2 and (not btn_prev
4
);
5 entity traffic_light is 64 end if;
6 Generic ( 65 end process;
66
7 CLK_FREQ : integer := 100_000_000; -- 100
MHz board clock 67 -- State register + timer
68 process(clk, rst) 135 when S_GREEN_SIDE =>
69 begin 136 main_lights <= L_RED; side_lights <=
70 if rst = ’1’ then L_GREEN; walk <= ’0’;
71 current_state <= S_GREEN_MAIN; 137 when S_YELLOW_SIDE =>
72 timer <= T_GREEN; 138 main_lights <= L_RED; side_lights <=
73 elsif rising_edge(clk) then L_YELLOW; walk <= ’0’;
74 if tick = ’1’ then 139 when S_WALK =>
75 if timer > 0 then 140 main_lights <= L_RED; side_lights <=
76 timer <= timer - 1; L_RED; walk <= ’1’;
77 else 141 end case;
78 current_state <= next_state; 142 end process;
79 case next_state is 143 end Behavioral;
80 when S_GREEN_MAIN => timer
<= T_GREEN;
81 when S_YELLOW_MAIN => timer IV-D. Código del testbench
<= T_YELLOW;
82 when S_GREEN_SIDE => timer El Listado 2 refleja el banco de pruebas empleado para
<= T_GREEN;
83 when S_YELLOW_SIDE => timer
la comprobación funcional. Para agilizar la simulación, las
<= T_YELLOW; constantes genéricas del DUT (Device Under Test) se so-
84 when S_WALK => timer brescriben con cifras reducidas: CLK_FREQ=10 (cada tick
<= T_WALK;
85 end case;
abarca 10 ciclos de reloj), T_GREEN=4, T_YELLOW=2 y
86 end if; T_WALK=3. De este modo, un ciclo entero del semáforo que
87 end if; en la realidad durarı́a 26 segundos, en simulación culmina
88 end if;
89 end process;
en aproximadamente 2.2 µs, haciendo posible monitorear la
90 dinámica completa en apenas segundos de ejecución.
91 -- Next state logic (combinational) El estı́mulo inyectado comprende cuatro etapas: (i) reinicio
92 process(current_state, timer, btn_edge)
93 begin
inicial de 50 ns; (ii) espera de 1.5 µs para que transcurra
94 next_state <= current_state; un ciclo normal ı́ntegro; (iii) activación del botón peatonal
95 case current_state is en el último segundo de la subsiguiente fase verde principal,
96 when S_GREEN_MAIN =>
97 if timer = 0 then
accionando el salto a S_WALK; y (iv) espera final de 2 µs para
98 if btn_edge = ’1’ then comprobar el regreso al ciclo habitual tras la etapa de cruce.
99 next_state <= S_WALK;
100 else Listing 2. Código VHDL del testbench (tb traffic [Link]).
101 next_state <= S_YELLOW_MAIN; 1 library IEEE;
102 end if; 2 use IEEE.STD_LOGIC_1164.ALL;
103 end if; 3 use IEEE.NUMERIC_STD.ALL;
104 when S_YELLOW_MAIN => 4
105 if timer = 0 then 5 entity tb_traffic_light is
106 next_state <= S_GREEN_SIDE; 6 end tb_traffic_light;
107 end if; 7
108 when S_GREEN_SIDE => 8 architecture Behavioral of tb_traffic_light is
109 if timer = 0 then 9 component traffic_light
110 if btn_edge = ’1’ then 10 Generic (
111 next_state <= S_WALK; 11 CLK_FREQ : integer := 100_000_000;
112 else 12 T_GREEN : integer := 8;
113 next_state <= S_YELLOW_SIDE; 13 T_YELLOW : integer := 3;
114 end if; 14 T_WALK : integer := 6
115 end if; 15 );
116 when S_YELLOW_SIDE => 16 Port (
117 if timer = 0 then 17 clk : in STD_LOGIC;
118 next_state <= S_GREEN_MAIN; 18 rst : in STD_LOGIC;
119 end if; 19 btn : in STD_LOGIC;
120 when S_WALK => 20 main_lights : out STD_LOGIC_VECTOR(2
121 if timer = 0 then downto 0);
122 next_state <= S_GREEN_MAIN; 21 side_lights : out STD_LOGIC_VECTOR(2
123 end if; downto 0);
124 end case; 22 walk : out STD_LOGIC
125 end process; 23 );
126
24 end component;
127 -- Output logic (Moore) 25
128 process(current_state) 26 signal clk : STD_LOGIC := ’0’;
129 begin 27 signal rst : STD_LOGIC := ’1’;
130 case current_state is 28 signal btn : STD_LOGIC := ’0’;
131 when S_GREEN_MAIN => 29 signal main_lights : STD_LOGIC_VECTOR(2 downto
132 main_lights <= L_GREEN; side_lights 0);
<= L_RED; walk <= ’0’; 30 signal side_lights : STD_LOGIC_VECTOR(2 downto
133 when S_YELLOW_MAIN => 0);
134 main_lights <= L_YELLOW; side_lights 31 signal walk : STD_LOGIC;
<= L_RED; walk <= ’0’; 32 constant CLK_PERIOD : time := 10 ns;
33 begin
34 DUT: traffic_light
35 generic map (CLK_FREQ => 10, T_GREEN => 4,
36 T_YELLOW => 2, T_WALK => 3)
37 port map (clk => clk, rst => rst, btn => btn
,
38 main_lights => main_lights,
39 side_lights => side_lights, walk
=> walk);
40
41 clk_process : process
42 begin
43 clk <= ’0’; wait for CLK_PERIOD/2; objects_view.png
44 clk <= ’1’; wait for CLK_PERIOD/2;
45 end process;
46
47 stim_process : process
48 begin
49 rst <= ’1’; btn <= ’0’; wait for 50 ns;
50 rst <= ’0’; wait for 50 ns;
51 wait for 1500 ns; -- full normal cycle
52 wait for 900 ns; -- inside next GREEN_MAIN
53 btn <= ’1’; wait for 30 ns;
54 btn <= ’0’;
55 wait for 2000 ns; -- WALK + return to normal
56 report "Simulation done." severity note;
57 wait;
58 end process; Figura 3. Vista de Objects en Vivado Simulator con las señales del DUT
59 end Behavioral; traffic light y del testbench tb traffic light.
Figura 4. Esquemático RTL del controlador de semáforo obtenido con Vivado 2017.4 sobre la FPGA Artix-7 AC701. Una versión ampliada de este esquemático
se incluye en el Apéndice.
rst cae a cero y el sistema arranca su rutina normal en a 1, señalando la autorización de paso. Cumplido el tiempo
el estado S_GREEN_MAIN. Las señales main_lights y programado de cruce, el sistema vuelve a S_GREEN_MAIN,
side_lights conmutan cı́clicamente entre los patrones 001 reanudando el ciclo normal.
(verde), 010 (ámbar) y 100 (rojo), respetando la secuencia El comportamiento registrado ratifica la exactitud funcional
diseñada. del diseño: las transiciones acaecen en los momentos calcula-
dos, la sincronización del botón anula cualquier posibilidad de
En torno al instante 2.5 µs se observa la activación del metaestabilidad, y la salida walk permanece estable durante
botón peatonal, la cual se sostiene unos 30 ns. Posteriormente toda la fase de cruce sin oscilaciones transitorias.
a esta activación y una vez que el cronómetro del estado verde
principal llega a cero, la FSM transita a S_WALK en lugar de VI-C. Reporte de utilización de recursos
ir a S_YELLOW_MAIN, priorizando el cruce del viandante. La Figura 7 ilustra el informe de aprovechamiento de
Durante esta etapa, main_lights y side_lights se recursos emitido por Vivado tras la sı́ntesis. La Tabla III
aferran a 100 (rojo en ambas vı́as) y la señal walk se dispara resume las cifras cuantitativas. El diseño demanda apenas 33
rtl_zoom.png utilization_report.png
Figura 5. Vista ampliada del esquemático RTL donde se aprecian los flip-flops Figura 7. Reporte de utilización de recursos post-sı́ntesis generado por
FDCE dedicados a las salidas y los bloques LUT de la lógica de transición. Vivado.
Cuadro III
U TILIZACI ÓN DE R ECURSOS SOBRE LA FPGA A RTIX -7 AC701
(XC7A200T-FBG676-2).
timing_diagram.png
lógica de salida, y la minimización automática ejecutada por
el sintetizador partiendo de la tabla de transición. Comparado
con las propuestas de Garcı́a [9] (51 LUTs) y Wang [10] (110
LUTs), el presente diseño logra una merma del 35 % y 70 %
respectivamente, sin mermar prestaciones.