tema 6: memorias - fdi.ucm.es · Organización de la memoria El número de puertos (simple/doble) y...
Transcript of tema 6: memorias - fdi.ucm.es · Organización de la memoria El número de puertos (simple/doble) y...
tema 6: memorias
Diseño Automático de Sistemas
José Manuel Mendías CuadrosDpto. Arquitectura de Computadores y Automática
Universidad Complutense de Madrid
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
RAM Blocks de Xilinx (i)
Xilinx incorpora en alguna de sus familias bloques de SRAM síncrona on-chip: Alta velocidad de transferencia (Spartan 3: hasta 200 MHz).
Inicializables durante start-up.
Doble puerto (configurable como simple) con entrada y salida de datos separados.
Organizados físicamente en bloques de 1 bit de que pueden configurarse para presentar hasta 2 organizaciones lógicas distintas (una por puerto) con distinta relación de anchura/profundidad de datos.
Pueden incorporarse al diseño: Por instanciación explícita de componentes de biblioteca en el código VHDL.
Por inferencia a partir de construcciones VHDL.
A través de la generación automática de un modulo desde la herramienta de síntesis.
2
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
RAM Blocks de Xilinx (ii)
3
Entrada de datos: DI[#:0] / (DIA[#:0], DIB[#:0]) – Bus/es de datos de entrada.
DIP[#:0] / (DIPA[#:0], DIPB[#:0]) – Bus/es de paridad de datos de entrada.
Salida de datos: DO[#:0] / (DOA[#:0], DOB[#:0]) – Bus/es de datos de salida.
DOP[#:0] / (DOPA[#:0], DOPB[#:0]) – Bus/es de paridad de datos de salida.
Entrada de direcciones: ADDR[#:0] / (ADDRA[#:0], ADDRB[#:0]) – Bus/es de direcciones.
Entradas de control (activas en alta): EN / (ENA, ENB) – Capacitación del módulo.
SSR / (SSRA, SSRB) – Inicialización síncrona de los latches de salida.
CLK / (CLKA, CLKB) – Reloj: las operaciones se hacen a flanco de subida.
WE / (WEA, WEB) – Capacitación de escritura.
Los buses de paridad aparecen en configuraciones de más de 8 bits de anchura. Físicamente no tienen funcionalidad propia, por lo que puede ser usados libremente
Interfaz de un RAM Block
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
RAM Blocks de Xilinx (iii)
4
Organización de la memoria El número de puertos (simple/doble) y la organización lógica de la memoria (relación
anchura/profundidad) para cada puerto se determina instanciando la primitiva apropiada.
Contenidos iniciales (cargados durante configuración, por defecto 0) INIT_xx – Contenido inicial de la memoria de datos.
INITP_xx – Contenido inicial de la memoria de paridad.
INIT / (INIT_A, INIT_B) – Contenido inicial de los latches de salida de datos.
Otros SRVAL / (SRVAL_A, SRVAL_B) – Valor inicialización síncrona (tras activación de la línea
SSR) de los latches de salida de datos: por defecto 0
WRITE_MODE – Comportamiento de los latches de salida de datos durante escritura. Los valores posibles son: WRITE_FIRST(valor por defecto), READ_FIRST, NO_CHANGE.
Parametrización de un RAM Block
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
RAM Blocks de Xilinx (iv)
5
EN SSR WE CLK DO/DOP Memoria
Tras configuración X X X X INIT INIT_xx / INTP_xx
RAM desabilitada 0 X X X No cambia No cambia
Reset síncrono 1 1 0 ↑ SRVAL No cambia
Reset síncrono durante escritura 1 1 1 ↑ SRVAL RAM(ADDR) ← DI/DIP
Lectura sin escritura 1 0 0 ↑ RAM(ADDR) No cambia
Escritura con lectura simultáneaWRITE_MODE = WRITE_FIRST
1 0 1 ↑
DI/DIP
RAM (ADDR) ← DI/DIPEscritura con lectura simultáneaWRITE_MODE = READ_FIRST
RAM(ADDR)
Escritura con lectura simultáneaWRITE_MODE = NO_CHANGE
No cambia
Modos de funcionamiento
En las memorias configuradas con doble puerto, aparecen conflictos cuando: Se intenta escribir por cada puerto un valor distinto en la misma posición de memoria.
Se intenta escribir una posición de memoria por un puerto configurado en modo WRITE_FIRST o NO_CHANGE y leer la misma posición por el otro.
Se intenta escribir una posición de memoria por un puerto, leer/escribir la misma posición por el otro y los relojes de cada puerto son asíncronos entre sí.
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
RAM Blocks de Xilinx (iv)
6
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
RAM Blocks en Spartan 3
7
Organizaciones como RAM de doble puerto
Organizaciones como RAM de simple puerto
El bloque primitivo en la familia Spartan 3, es una memoria de (16+2)K×1 bit Las distintas organizaciones lógicas que puede adoptar este bloque se encuentran en la
biblioteca UNISIM, paquete VCOMPONENTS.
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
primitiva de puerto simple
8
component RAMB16_S9generic(INIT : bit_vector := X"000";SRVAL : bit_vector := X"000";WRITE_MODE : string := "WRITE_FIRST";INIT_00 : bit_vector := X"00000...00000";...INIT_3F : bit_vector := X"00000...00000";INITP_00 : bit_vector := X"00000...00000";...INITP_07 : bit_vector := X"00000...00000”);
port(DO : out STD_LOGIC_VECTOR (7 downto 0);DOP : out STD_LOGIC_VECTOR (0 downto 0);ADDR : in STD_LOGIC_VECTOR (10 downto 0);CLK : in STD_ULOGIC;DI : in STD_LOGIC_VECTOR (7 downto 0);DIP : in STD_LOGIC_VECTOR (0 downto 0);EN : in STD_ULOGIC;SSR : in STD_ULOGIC;WE : in STD_ULOGIC);
end component;
Inicialización de la memoria de datos:64 cadenas de 64 dígitos hexadecimales
64 × 64 × 4 = 16 Kb
Inicialización de la memoria de paridad:8 cadenas de 64 dígitos hexadecimales
8 × 64 × 4 = 2 Kb
Memoria de puerto simple organizada lógicamente como 2K×(8D+1P)
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
primitiva de puerto doble
9
component RAMB16_S9_S9generic(
INIT_00 : bit_vector := X"00000...00000";...INIT_3F : bit_vector := X"00000...00000";INITP_00 : bit_vector := X"00000...00000";...INITP_07 : bit_vector := X"00000...00000";INIT_A : bit_vector := X"000";INIT_B : bit_vector := X"000";SRVAL_A : bit_vector := X"000";SRVAL_B : bit_vector := X"000";WRITE_MODE_A : string := "WRITE_FIRST";WRITE_MODE_B : string := "WRITE_FIRST");
port(DOA : out STD_LOGIC_VECTOR (7 downto 0);DOB : out STD_LOGIC_VECTOR (7 downto 0);DOPA : out STD_LOGIC_VECTOR (0 downto 0);DOPB : out STD_LOGIC_VECTOR (0 downto 0);ADDRA : in STD_LOGIC_VECTOR (10 downto 0);ADDRB : in STD_LOGIC_VECTOR (10 downto 0);CLKA : in STD_ULOGIC;CLKB : in STD_ULOGIC;DIA : in STD_LOGIC_VECTOR (7 downto 0);DIB : in STD_LOGIC_VECTOR (7 downto 0);DIPA : in STD_LOGIC_VECTOR (0 downto 0);DIPB : in STD_LOGIC_VECTOR (0 downto 0);ENA : in STD_ULOGIC;ENB : in STD_ULOGIC;SSRA : in STD_ULOGIC;SSRB : in STD_ULOGIC;WEA : in STD_ULOGIC;WEB : in STD_ULOGIC);
end component;
Inicialización independiente dela organización lógica
Memoria de doble puerto organizada lógicamente desde ambos puertos
como 2K×(8D+1P)
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ejemplos de uso (i)
10
library UNISIM;use UNISIM.vcomponents.all
architecture ... of ... issignal addr: std_logic_vector(10 downto 0);signal di, do: std_logic_vector(7 downto 0);...
beginmem_2Kx8b: RAMB16_S9
port map( do, open, addr, clk, di, "0", '1', '0', we );...
end ...;
library UNISIM;use UNISIM.vcomponents.all
architecture ... of ... issignal addr: std_logic_vector(13 downto 0);signal di, do: std_logic_vector(7 downto 0); ...
beginmem_16Kx8b: for n in 7 downto 0 generate
slice: RAMB16_S1port map( do(n downto n), addr, clk, di(n downto n), '1', '0', we);
end generate;...
end ...;
Especificación de una memoria 2K×8usando 1 Block RAM organizado en 2K×9
Especificación de una memoria 16K×8 usando 8 Block RAM organizados en 16K×1
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ejemplos de uso (ii)
11
library IEEE, UNISIM;use UNISIM.vcomponents.alluse std_logic_unsigned.all
libraryarchitecture ... of ... is
signal addr: std_logic_vector (13 downto 0);signal di, do: std_logic_vector (7 downto 0);signal en: std_logic_vector(7 downto 0); signal we: std_logic;type dataVector is array (7 downto 0) of std_logic_vector (7 downto 0);signal doVector: dataVector;...
beginaddr_dec: process( addr )begin
en <= (others => '0');en( conv_integer( addr(13 downto 11) ) ) <= '1';
end process;
mem_16KBx8b: for n in 7 downto 0 generateslice: RAMB16_S9
port map(doVector(n), open, addr(10 downto 0), clk, di, "0", en(n), '0', we);end generate;
do_mux:do <= doVector( conv_integer( addr(13 downto 11) ) );
...end ...;
Especificación de una memoria 16K×8 usando 8 Block RAM organizados en 2K×9
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
organización de una RAM estática (SRAM)
12
Matriz dememoria
AMSB
Am
plif
icad
or
Buffers de entrada
Dec
ofic
ador
de
fila
s
Decodificador de columnas
I/O0
Control
WE* OE* CE*
ALSB
I/On-1
CS*
HLLL
OE*
XHLX
WE*
XHHL
Modo
no seleccionadosalida desabilitada
lecturaescritura
I/O
alta impedanciaalta impedancia
salidaentrada
SRAM de 2n palabrasde m bits
CS*
OE*
WE*
A
I/Om
n
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ciclos de acceso a una SRAM
13
Ciclo de lectura(CE* = X, WE* = 1, OE* =X, A = X )
A
CE*
OE*
I/O
zona con datosestables de salida
alta impedancia
zona
de
ince
rtid
umbr
e
zona
de
ince
rtid
umbr
e
iniciode ciclo
finde ciclo
A
I/Oentrada
I/Osalida
CE*
WE*
finde ciclo
iniciode ciclo
zona de aceptaciónde datos de entrada
alta impedancia
zona
de
ince
rtid
umbr
e
zona
de
ince
rtid
umbr
e
Ciclo de escritura(CE* = X, WE* = X, OE* =X, A = X )
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ciclo de lectura (i)
14
tRC: Tiempo de ciclo de lectura mínimo.
tAA: Tiempo máximo de acceso desde dirección estable.
tACE: Tiempo máximo de acceso desde la selección del dispositivo.
tAOE: Tiempo máximo de acceso desde la activación de la señal de lectura.
tOH: Tiempo mínimo de permanencia de los datos (hold) en la salida.
tCLZ: Tiempo mínimo de desactivación de alta impedancia desde la
selección del dispositivo.
tOLZ: Tiempo mínimo de desactivación de alta impedancia desde la
activación de la señal de lectura.
tCHZ: Tiempo máximo de puesta en alta impedancia desde la deselección
del dispositivo.
tOHZ: Tiempo máximo de puesta en alta impedancia desde la desactivación
de la señal de lectura.
Lectura general(CE* = X, WE* = 1, OE* =X, A = X )
tRC (min)
tOHZ (max)
tAA (max)
tACE (max)
tOH (min)
tAOE (max)
A
CE*
OE*
I/O
tCHZ (max)tCLZ (min)
tOLZ (min)
inicio de ciclo fin de ciclo
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ciclo de lectura (ii): simplificaciones
15
Lecturas dirigidas por dirección(CE* = 0, WE* = 1, OE* = 0, A = X)
tAA (max)
A
tOH (min)tOH (min)
tRC (min)
I/O
Sistemas con un único módulo de SRAM en el
que sólo se hacen lecturas
Sistemas con un único módulo de SRAM en el que
se hacen lecturas y escrituras
Sistemas con varios módulos de SRAM en bus común en los que sólo se
hacen lecturas
tRC (min)
tOHZ (max)
tAA (max)
tOH (min)
tAOE (max)
A
OE*
I/O
tOLZ (min)
Lecturas dirigidas por OE* (CE* = 0, WE* = 1, OE* = X, A = X)
tRC (min)
tCHZ (max)
tAA (max)
tOH (min)
tACE (max)
A
CE*
I/O
tCLZ (min)
Lecturas dirigidas por CE* (CE* = X, WE* = 1, OE* = 0, A = X)
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ciclo de escritura (i)
16
I/Oentrada
I/Osalida
tWC: Tiempo mínimo de ciclo de escritura
tAS: Tiempo mínimo de establecimiento de las direcciones
tDW: Tiempo mínimo de establecimiento de los datos
tAW: Tiempo mínimo de validez de direcciones
tAH: Tiempo mínimo de permanencias de las direcciones
tDH: Tiempo mínimo de permanencia de los datos
tCW: Anchura mínima del pulso de selección de chip
tWP: Anchura mínima del pulso de escritura
tWZ: Tiempo máximo de puesta en alta impedancia
tOW: Tiempo mínimo de desactivación de alta impedancia
Escritura general(CE* = X, WE* = X, OE* =X, A = X )
tDH (min)
tWC (min)
tCW (min)
tDW (min)
A
CE*
WE*
tAH (min)tAS (min)
tWP (min)
tAW (min)
tWZ (max) tOW (min)
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ciclo de escritura (ii): simplificaciones
17
Escrituras dirigidas por WE* (CE* = 0, WE* = X, OE* = 1, A = X)
tDH (min)
tWC (min)
tWP (min)
tDW (min)
A
WE*
I/Oentrada
tAH (min)tAS (min)
I/Osalida
tWZ (max) tOW (min)
tAW (min)
I/Oentrada
I/Osalida
tDH (min)
tWC (min)
tCW (min)
tDW (min)
A
CE*
tAH (min)tAS (min)
tWZ (max) tOW (min)
tAW (min)
Escrituras dirigidas por CE* (CE* = X, WE* = 0, OE* =1, A = X)
Escrituras dirigidas por dirección(CE* = 0, WE* = 1, OE* = X, A = X)
Aunque son posibles, no son recomendables
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
SRAM en las placas de prototipado (i)
18
A14 — P60A13 — P58A12 — P50A11 — P56A10 — P51A9 — P57A8 — P59A7 — P84A6 — P83A5 — P82A4 — P79A3 — P78A2 — P5A1 — P4A0 — P3
D7 — P10D6 — P80D5 — P81D4 — P35D3 — P38D2 — P39D1 — P40D0 — P41
W24257A
K-15 (right)
(SR
AM
32K8)
AS
7C256-15JC
(SR
AM
32K8)
W24257A
K-15 (left)
(SR
AM
32K8)
WE* — P62OE* — P61
CE* — P65 CE* — P7 CE* — P8
tipo A, B tipo C
A14 — P60A13 — P58A12 — P50A11 — P56A10 — P51A9 — P57A8 — P59A7 — P84A6 — P83A5 — P82A4 — P79A3 — P78A2 — P5A1 — P4A0 — P3
D7 — P10D6 — P80D5 — P81D4 — P35D3 — P38D2 — P39D1 — P40D0 — P41
AS
7C1024 -
15TJC
(SR
AM
128K8)
WE* — P62OE* — P61
CE* — P65
A16 — P16A15 — P28
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
SRAM en las placas de prototipado (ii)
19
A14 — P234A13 — P235A12 — P236A11 — P237A10 — P238A9 — P187A8 — P188A7 — P189A6 — P191A5 — P192A4 — P193A3 — P194A2 — P195A1 — P199A0 — P200
D7 — P215D6 — P209D5 — P208D4 — P207D3 — P206D2 — P205D1 — P203D0 — P202
AS
7C4096-15JC
(left bank)(S
RA
M 512K
8)WE* — P201OE* — P228
A18 — P229A17 — P230A16 — P231A15 — P232
CE* — P186
AS
7C4096-15JC
(left bank)(S
RA
M 512K
8)
D7 — P224D6 — P223D5 — P222D4 — P221D3 — P220D2 — P218D1 — P217D0 — P216
A14 — P101A13 — P102A12 — P103A11 — P107A10 — P108A9 — P53A8 — P54A7 — P55A6 — P56A5 — P57A4 — P63A3 — P64A2 — P65A1 — P66A0 — P67
D7 — P80D6 — P79D5 — P78D4 — P74D3 — P73D2 — P72D1 — P71
D0 — P70
AS
7C4096-15JC
(right bank)(S
RA
M 512K
8)
WE* — P68OE* — P95
A18 — P96A17 — P97A16 — P99A15 — P100
CE* — P109
AS
7C4096-15JC
(right bank)(S
RA
M 512K
8)
D7 — P94D6 — P93D5 — P87D4 — P86D3 — P85D2 — P84D1 — P82D0 — P81
tipo D
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
SRAM en las placas de prototipado (iii)
20
Lectura general(CE* = X, WE* = 1, OE* =X, A = X )
15 ns (min)
4 ns (max)
15 ns (max)
15 ns (max)
3 ns (min)
4 ns (max)
A
CE*
OE*
I/O
4 ns (max)3 ns (min)
0 ns (min)
Escritura general(CE* = X, WE* = X, OE* =X, A = X )
0 ns (min)
15 ns (min)
12 ns (min)
8 ns (min)
A
CE*
WE*
0 ns (min)0 ns (min)
9 ns (min)
12 ns (min)
5 ns (max) 3 ns (min)
I/Oentrada
I/Osalida
ciclos de acceso de AS7C256-15
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ejemplo (i): un interfaz síncrono de SRAM
21
Diseñar un circuito que actúe de interfaz síncrono con una SRAM de 8 bits. Acepta una palabra de 16 bits y una dirección.
Escribe o lee la palabra de dos direcciones consecutivas con ordenación big-endian.
El circuito debe usar un protocolo tipo strobe con espera: Debe aceptar el tipo de operación con memoria, el dato y/o la dirección durante el ciclo en
que memRqt permanece activa, indicando mediante memRdy su disponibilidad para la transferencia.
rstclk
memRqt
memOp
addr
dataIn
dataOut
memRdy
15
16
16
Interfaz dememoria
a
io
15
8
ce*
oe*
we*
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ejemplo (ii): mal diseño – ruta de datos
22
dataMsbldMsb
msbSrc
dataLsbldLsb
lsbSrc
dumpMsb dumpLsb
data
Out
dataIn
io
addrRegldAddr
aSrc
inc
addr
a
1 0 01
1 0
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ejemplo (iii): mal diseño – controlador
23
puertos:memRqt : in : 1 bit : log. positivamempOp : in : 1 bitmemRdy : out : 1 bit : log. positiva := 0ce : out : 1 bit : log. negativa := 0we, oe : out : 1 bit : log. negativa := 1aSrc, msbSrc, lsbSrc : out : 1 bit := XldAddr, ldMsb, ldLsb : out : 1 bit : log. positiva := 0dumpMsb, dumpLsb : out : 1 bit : log. positiva := 0
estado inicial: espera
espera
memRdy
no memRqt
lecturaMsb
msbSrc*, ldMsbaSrc, oe*
lecturaLsb
lsbSrc*, ldLsbaScr*, oe*
escrituraMsb
dumpMsbaSrc, we*
escrituraLsb
dumpLsbaSrc*, we*
memRqt and no memOp
ldAddrmsbSrc, ldMsblsbSrc, ldLsb
memRqt and memOp
ldAddr
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ejemplo (iv): mal diseño – simulación funcional
24
estado escrMSB escrLSB lecMSB lecLSBesperaespera espera
addr
dataIn
dataOut
a
io
we
oe
dir1
dir1 dir1+1
dat1
dat115..8 dat17..0
dat1
dir2
dir2 dir2+1
M(dir2) M(dir2+1)
M(dir2) & M(dir2+1)
clk
memRqt
memOp
memRdy
lect
uraes
critu
ra
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ejemplo (v): mal diseño – operación lectura
25
io
dir2a dir2+1
oe
tatAA
toe tdi
ctrlReg
LC
oe
t oe
= t c
lk-q
+ t c
omb
t a=
t clk
-q+
t inc
+ t m
ux
addrReg
inc
a
1 0
t di=
t RA
M-io
+ t m
ux+
t s
dataXXX
io
1 0
M(dir2) M(dir2+1)
tOHZtOH
clk
tOLZ
tAOE
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ejemplo (vi): mal diseño – temporización
26
io
a
oe
80 ns
35 ns
15 ns
45 ns > 15 ns
3 ns 4 ns
20 ns
Considerando un circuito para el que: tclk = 80 ns (12.5 MHz), ta = 35 ns, toe = 10 ns, tdi = 20 ns
y que usa SRAM AS7C256-15, chequeemos: que tRC se respeta que el slack es positivo.
M(dir2) M(dir2+1)
dir2 dir2+1
10 ns
10 ns
clk
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ejemplo (vii): mal diseño – operación escritura
27
twe
ctrlReg
LC
we
t we
= t c
lk-q
+ t c
omb
t do
= t c
lk-q
+ t b
uff
t a=
t clk
-q+
t add
+ t m
ux
dataXXX
io
addrReg
inc
a
1 0
dir2
dat115..8
a
io
dir2+1
dat17..0
tdo
we
ta
ta > twe
clk
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ejemplo (viii): 1er buen diseño – modular we con clk
28
tdo
ta
tor
a
io
we
dir2
dat115..8
dir2+1
dat17..0
t do
= t c
lk-q
+ t b
uff
t a=
t clk
-q+
t add
+ t m
ux
dataMsb
io
addrReg
inc
a
1 0
ctrlReg
LC
we
t we
= t c
lk-q
+ t c
omb
clk
clk
weAux
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ejemplo (ix): 1er buen diseño – temporización
29
Considerando un circuito para el que: tclk = 80 ns (12.5 MHz), ta = 35 ns, tor = 7 ns, tdo = 5 ns
y que usa SRAM AS7C256-15, chequeemos : que se respetan tWC, tWP, tAW, tDW
tAS, tAH y tDH no se chequean porque para esta SRAM valen 0.
5 ns
35 ns
7 ns
80 ns
40 ns > 9 ns
52 ns > 12 ns
a
io
we
45 ns > 15 ns
82 ns > 8 ns
2 ns < 8 ns
dat115..8 dat17..0
dir2 dir2+1
clk
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ejemplo (x): 2do buen diseño – controlando con WE
30
5 ns
35 ns
7 ns
80 ns
40 ns > 9 ns
52 ns > 12 ns
a
io
we
45 ns > 15 ns
37 ns > 8 ns
2 ns < 8 ns
dat115..8 dat17..0
Dado que las operaciones de escritura son prioritarias sobre las de lectura, cuando hay un único módulo la SRAM puede controlarse únicamente con la línea de WE*, dejando CE* y OE* activadas constantemente. obsérvese cómo en la porción de ciclo en la que WE está desactivada, io está
indeterminada ya que tanto la SRAM como el circuito vuelcan datos.
clk
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ejemplo (xi): 3er buen diseño – registrar puertos
31
dir2
dat115..8
a
io
dir2+1
dat17..0
tdo
we
ta
ctrlReg
LC
we
t we
= t c
lk-q
+ t c
omb
t do
= t c
lk-q
+ t b
uff
t a=
t clk
-q
dataMsb
io
addrReg
oe
twe
clk
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ejemplo (xii): 3er buen diseño – temporización
32
Considerando un circuito para el que: tclk = 80 ns (12.5 MHz), ta = 5 ns, twe = 10 ns, tdo = 5 ns
y que usa SRAM AS7C256-15, chequeemos : que se respetan tWC, tWP, tAW, tDW
tAS, tAH y tDH no se chequean porque para esta SRAM valen 0.
80 ns
5 ns
dir2
dat115..8
a
io
dir2+1
dat17..0
we
clk
80 ns > 15 ns85 ns > 8 ns
85 ns > 12 ns
160 ns > 9 ns
5 ns < 8 ns
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ejemplo (xiii): 3er buen diseño – ruta de datos
33
addrRegldAddr
addrSrc
inc
addr
a
dataMsbldMsb
msbSrc
dataLsbldLsb
lsbSrc
dumpMsb dumpLsb
data
Out
dataIn
io
1 0 011 0
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ejemplo (xiv): 3er buen diseño – controlador
34
puertos:memRqt : in : 1 bit : log. positivamempOp : in : 1 bitmemRdy : out : 1 bit : log. positiva := 0ce : out : 1 bit : log. negativa := 0we, oe : out : 1 bit : log. negativa := 1addrSrc, msbSrc, lsbSrc : out : 1 bit := XldAddr, ldMsb, ldLsb : out : 1 bit : log. positiva := 0dumpMsb, dumpLsb : out : 1 bit : log. positiva := 0
estado inicial: espera
espera
memRdy
no memRqt
lecturaMsb
msbSrc*, ldMsbaddrSrc*, ldAddr
oe*
lecturaLsb
lsbSrc*, ldLsboe*
escrituraMsb
addrSrc*, ldAddrdumpMsb
we*escrituraLsb
dumpLsbwe*
memRqt and no memOp
addrSrc, ldAddrmsbSrc, ldMsblsbSrc, ldLsb
memRqt and memOp
addrSrc, ldAddr
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ejemplo (xiii): 4o buen diseño – 2 ciclos de escritura
35
clk
estado escMsb1 escMsb2 lecMSBesperaespera
memRqt
memOp
memRdy
addr
dataIn
dataOut
a
io
we
oe
dir1
dir1 dir1+1
dat1
dat17..0
dat1
dir2
dir2 dir2+1
M(dir2) M(dir2+1)
escLsb2escLsb1
dat115..8
diseño automático de sistemas
© J
.M.
Men
días
, 200
1, 2
011
ejemplo (xiv): 4o buen diseño – controlador
36
puertos:memRqt : in : 1 bit : log. positivamempOp : in : 1 bitmemRdy : out : 1 bit : log. positiva := 0ce : out : 1 bit : log. negativa := 0we, oe : out : 1 bit : log. negativa := 1addrSrc, msbSrc, lsbSrc : out : 1 bit := XldAddr, ldMsb, ldLsb : out : 1 bit : log. positiva := 0dumpMsb, dumpLsb : out : 1 bit : log. positiva := 0
estado inicial: espera
espera
memRdy
no memRqt
escrituraMsb1
dumpMsb
escrituraLsb1
dumpLsb
memRqt and no memOp
addrSrc, ldAddrmsbSrc, ldMsblsbSrc, ldLsb
memRqt and memOp
addrSrc, ldAddr
escrituraMsb2
addrSrc*, ldAddrdumpMsb
we*
escrituraLsb2
dumpLsb, we*
lecturaMsb
msbSrc*, ldMsbaddrSrc*, ldAddr
oe*
lecturaLsb
lsbSrc*, ldLsboe*