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