Transcript Document
Semáforo Versión .TDF AHDL reloj100ms y reset semáforo rojo1 amarillo1 verde1 rojo2 amarillo2 verde2 Bloque de objetos ( entradas y salidas ) Esquema de funcionamiento Diagrama de estados semáforo (Moore) r1,a2 0,0 0 S1 S0 1 0 v1,r2 S2 0 r1,r2 1 1 0 S6 S3 1 1 0 1 S7 0 a1,a2 S5 0 r1,v2 0 S4 0 día 1 noche a1,r2 0 r1,r2 Xtal 8 Mhz Semáforo: Entradas y salidas , procesos, Variables y nodos AHDLEntradadatos[7..0] Cuenta.data[7..0] % N LPM_counter cuenta IF CASE Cuenta.q[7..0] reloj100ms FFD If case Cuenta.q[7..0] If Cuenta.data[7..0]= Cuenta.q[7..0] S0 If case S1 SS table If case S2 y Dia /noche BLOQUE COMBINA TORIO salida[5..0] If case S3 If case reset BLOQUE SEC S4 If case relojmáquina M A C H I N E W I T H S T A T E S ( s 0 , s 1 , s 2 , s 3 , s 4 , s 5 , s 6 , s 7 ) ; S5 30 180 30 30 180 30 R1,A1,V1,R2,A2,V2 Entradadatos[7..0] Salida FF D Esquemáticos Esquemáticos 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 actual ss, s0, s1, s2, s3, s4, s5, s6, s7, s0, s1, s2, s3, s4, s5, s6, s7, END TABLE; entrada actual salida actual y proximo % estado % => salida[], ss; 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 => => => => => => => => => => => => => => => => s1; s2; s3; s4; s5; s0; s0; s0; s7; s7; s7; s7; s7; s7; s7; s6; B"100100", B"001100", B"010100", B"100100", B"100001", B"100010", B"010010", B"000000", B"100100", B"001100", B"010100", B"100100", B"100001", B"100010", B"010010", B"000000", Proceso IF CASE CASE salida WHEN WHEN WHEN WHEN WHEN WHEN WHEN WHEN END CASE; [] IS B"100100" B"001100" B"010100" B"100100" B"100001" B"100010" B"010010" B"000000" => => => => => => => => entradacontador[] entradacontador[] entradacontador[] entradacontador[] entradacontador[] entradacontador[] entradacontador[] entradacontador[] = = = = = = = = H"1E"; H"B4"; H"1E"; H"1E"; H"B4"; H"1E"; H"0A"; H"0A"; 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 amari1 verde1 rojo2 amari2 verde2 = = = = = = salida[5]; salida[4]; salida[3]; salida[2]; salida[1]; 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". FFD Simulación: Estados (detalle) Simulación: Estados • Los estados rojo-amarillo y verde -amarillo duran 3 s el estado rojo-verde dura 18 seg. (diurno) Intervalo rojo verde Floorplan EPM7128 ARQUITECTURA MAX 7000 macrocelda I/0 JTAG Conectory señales JTAG