240 likes | 404 Views
reloj100ms. rojo1. amarillo1. y. semáforo. verde1. rojo2. amarillo2. reset. verde2. Semáforo Versión .TDF AHDL. Bloque de objetos ( entradas y salidas ). Esquema de funcionamiento. Diagrama de estados semáforo (Moore). r1,a2. 0. 0. S 1. 0 día 1 noche. S 0. v1,r2. 1. S 2.
E N D
reloj100ms rojo1 amarillo1 y semáforo verde1 rojo2 amarillo2 reset verde2 Semáforo Versión .TDF AHDL Bloque de objetos ( entradas y salidas )
Diagrama de estados semáforo(Moore) r1,a2 0 0 S1 0 día 1 noche S0 v1,r2 1 S2 0,0 0 0 r1,r2 1 1 0 a1,r2 S3 S6 1 0 S4 1 0 0 r1,r2 1 1 S7 S5 1 0 r1,v2 a1,a2
% N If case S0 30 Salida FF If case S1 180 If case S2 30 BLOQUE COMBINATORIO salida[5..0] If case S3 30 IfCuenta.data[7..0]= Cuenta.q[7..0] If case S4 180 BLOQUE SEC If case S5 30 Semáforo: Entradas y salidas , procesos, Variables y nodos AHDL Xtal 8 Mhz Entradadatos[7..0] Cuenta.data[7..0] LPM_counter cuenta IF CASE Cuenta.q[7..0] reloj100ms FFD Cuenta.q[7..0] D Entradadatos[7..0] table SS y Dia /noche reset relojmáquina R1,A1,V1,R2,A2,V2
AHDL Subdesign SUBDESIGN semaforo2 ( reloj100ms, y, reset : INPUT; rojo1, rojo2, amari1, amari2, verde1, verde2 : OUTPUT; )
AHDL Variables y Nodos internos VARIABLE cuenta: lpm_counter WITH ( LPM_WIDTH=8); ss: MACHINE WITH STATES (s0, s1, s2, s3, s4, s5, s6, s7); salida[5..0], entradacontador[7..0], relojmaquina : NODE; borrar : NODE; salidaff : DFF; BEGIN
Proceso Table TABLE % estado entrada salida proximo % % actual actual actual estado % ss, y => salida[], ss; s0, 0 => B"100100", s1; s1, 0 => B"001100", s2; s2, 0 => B"010100", s3; s3, 0 => B"100100", s4; s4, 0 => B"100001", s5; s5, 0 => B"100010", s0; s6, 0 => B"010010", s0; s7, 0 => B"000000", s0; s0, 1 => B"100100", s7; s1, 1 => B"001100", s7; s2, 1 => B"010100", s7; s3, 1 => B"100100", s7; s4, 1 => B"100001", s7; s5, 1 => B"100010", s7; s6, 1 => B"010010", s7; s7, 1 => B"000000", s6; END TABLE;
Proceso IF CASE CASE salida [] IS WHEN B"100100" => entradacontador[] = H"1E"; WHEN B"001100" => entradacontador[] = H"B4"; WHEN B"010100" => entradacontador[] = H"1E"; WHEN B"100100" => entradacontador[] = H"1E"; WHEN B"100001" => entradacontador[] = H"B4"; WHEN B"100010" => entradacontador[] = H"1E"; WHEN B"010010" => entradacontador[] = H"0A"; WHEN B"000000" => entradacontador[] = H"0A"; END CASE;
Proceso IF ELSE salidaff.clk = reloj100ms; cuenta.clock = reloj100ms; cuenta.sclr = borrar; cuenta.data[] = entradacontador[]; IF cuenta.q[7..0] < entradacontador[7..0] THEN salidaff.d = GND; borrar = GND; ELSE borrar = VCC; salidaff.d = VCC; END IF; % Fin etapa programador de tiempo % relojmaquina = salidaff.q;
salidas rojo1 = salida[5]; amari1 = salida[4]; verde1 = salida[3]; rojo2 = salida[2]; amari2 = salida[1]; verde2 = salida[0];
LPM_Counter • LPM_WIDTH Integer Yes The number of bits in the count, or the width of the q[] and data[] ports, if they are used. • LPM_DIRECTION String No Values are "UP", "DOWN", and "UNUSED". If the LPM_DIRECTION parameter is used, the updown port cannot be connected. When the updown port is not connected, the default for the LPM_DIRECTION parameter is "UP".
Simulación: Estados • Los estados rojo-amarillo y verde -amarillo duran 3 s el estado rojo-verde dura 18 seg. (diurno) Intervalo rojo verde