Ayuda en el bloque de SRAM??

D

dcreddy1980

Guest
No sé que hice mal en el código siguiente, cuando me simular el
código ... estoy RWD conseguir <= "UUUUUU" en los resultados de forma de onda ....

SRAM entidad es
(puerto caddr: in std_logic_vector (3 downto 0);
RAddr: in std_logic_vector (6 downto 0);
RWD: inout std_logic_vector (15 downto 0);
BNKSEL: in std_logic;
RDCAS: in std_logic;
WRCAS: in std_logic;
DTRDY: out std_logic);
SRAM final;

el comportamiento de la arquitectura de SRAM es
empezar
proceso (BNKSEL, RDCAS, WRCAS, caddr, rAddr, RWD)
tmp subtipo es std_logic_vector (15 downto 0);
memory_array tipo es array (rango entero de 0 a 127, el rango entero de 0 a
15 );--- 128 filas y 16 columnas
MEM variable: memory_array;
empezar
if (BNKSEL'event y BNKSEL = '1 ') entonces
if (RDCAS = '1 ') entonces
RWD <= mem (conv_integer (sin signo (caddr)), conv_integer (sin signo (rAddr)));
DTRDY <= '1 ';
END IF;
if (WRCAS = '1 ') entonces
MEM (conv_integer (sin signo (caddr)), conv_integer (sin signo (rAddr))): =
RWD;
DTRDY <= '0 ';
END IF;
END IF;
proceso de finalización;
el comportamiento final;Banco de pruebas:
------------

entidad tb_SRAM es
final tb_SRAM;

TB es la arquitectura de tb_SRAM
componente de SRAM
(puerto caddr: in std_logic_vector (3 downto 0);
RAddr: in std_logic_vector (6 downto 0);
RWD: inout std_logic_vector (15 downto 0);
BNKSEL: in std_logic;
RDCAS: in std_logic;
WRCAS: in std_logic;
DTRDY: out std_logic);
componente final;
RDCAS señal, WRCAS, DTRDY, BNKSEL: std_logic;
caddr señal: std_logic_vector (6 downto 0);
rAddr señal: std_logic_vector (3 downto 0);
señal de RWD: std_logic_vector (15 downto 0);
empezar

ESP: Mapa puerto SRAM (caddr, rAddr, RWD, BNKSEL, RDCAS, WRCAS, DTRDY);

Caddr <= "0010010";
RAddr <= "0010";
RWD <= "0001000100010001";
BNKSEL <= '0 ', '1' después de 8 ns, '0 ', después de 16 ns, '1' después de 24 ns, '0 'después de 30
ns;
RDCAS <= '0 ', '1', después de 26 ns, '0 ', después de 34 ns;
WRCAS <= '0 ', '1' después de 10 ns, '0 'después de 18 ns;

tb final;

 
¿Estás seguro de ur código está compilando limpio???
Estoy de error de compilación para obtener la siguiente línea en el código!

memory_array tipo es array (rango entero de 0 a 127, el rango entero de 0 a 15);¿Por qué estás tratando de usar matriz de dos dimensiones para la memoria!
Sólo matriz sola dimensión es suficiente!

Usted puede obtener gratis SARM modelos VHDL de manufaturers SRAM
búsqueda en web que recibe toneladas de modelo para el estudio!

 
He compilado el código NC-Sim ... no he tenido ningún error de compilación ...

Tengo que usar una matriz de memoria con 128 filas y 16 columnas .. por esta razón .. estoy usando matriz bidimensional ..recuerdos,
dcreddy1980

 
Hola,

Es normal que para que usted consiga "U" en la simulación ya que la tabla de memoria que está
la creación no está inicializado.

 
Hola,
Traté y modificado el código para hacerlo compilar.Ahora es compilar y dar resultados adecuados.Sin embargo el estilo de codificación no es eficiente y suficiente para ser llamado como la SRAM.Usted necesita tener un pin de reset también.Casi todos los chip requiere poder reiniciar, en el que inicializar todas las señales necesarias.
Razón por la que se estaban 'U' está en las bases de VHDL, así como la SRAM.
Como la SRAM tiene datos del mismo autobús para leer y escribir, es necesario obligar a la 'Z' del DUT en el autobús durante la operación de escritura para permitir módulo externo a la fuerza en el bus de datos (módulo externo puede ser la tuberculosis o Controlador de memoria).Esto se menciona claramente en las fichas de datos de SRAM, bus de datos va 'Z' durante la operación de escritura.Además, después de la lectura de datos autobús va 'Z' después de un tiempo específico que se menciona en las hojas de datos para permitir que la siguiente operación a realizar.
En lo que se refiere a VHDL que estás forzando a los datos sobre RWD de DUT, así como la tuberculosis por lo que se refiere a los conductores múltiples de la señal.
También le sugiero que utilice en lugar del nombre de Asociación posicional Asociación para el mapeo de puertos, que ayuda en grandes diseños.
ver el código indica a continuación: =

==============================================
Library IEEE;
Ieee.std_logic_1164.all USO;
Use ieee.std_logic_arith.all;
Ieee.STD_LOGIC_unsigned.all USO;SRAM entidad es
(puerto caddr: in std_logic_vector (3 downto 0);
RAddr: in std_logic_vector (6 downto 0);
RWD: inout std_logic_vector (15 downto 0);
BNKSEL: in std_logic;
RDCAS: in std_logic;
WRCAS: in std_logic;
DTRDY: out std_logic);
SRAM final;

el comportamiento de la arquitectura de SRAM es
empezar
proceso (BNKSEL, RDCAS, WRCAS, caddr, rAddr, RWD)
tmp subtipo es std_logic_vector (15 downto 0);
memory_array tipo es array (rango entero de 0 a 127, el rango entero de 0 a 15) de tmp; --- 128 filas y 16 columnas de
MEM variable: memory_array: = (others => (others => (others => '0')));
empezar

if (BNKSEL'event y BNKSEL = '1 ') entonces

if (RDCAS = '1 ') entonces
RWD <= mem (conv_integer (sin signo (rAddr)), conv_integer (sin signo (caddr)));
DTRDY <= '1 ';
algo más
RWD <= (others => 'Z');
END IF;

if (WRCAS = '1 ') entonces
MEM (conv_integer (sin signo (rAddr)), conv_integer (sin signo (caddr))): RWD =;
DTRDY <= '0 ';
END IF;

elsif (BNKSEL'event y BNKSEL = '0 ') entonces
RWD <= (others => 'Z');
END IF;
proceso de finalización;
el comportamiento final;
==============================================
- Banco de pruebas:
--------------
Library IEEE;
Ieee.std_logic_1164.all USO;
Use ieee.std_logic_arith.all;
Ieee.STD_LOGIC_unsigned.all USO;

entidad tb_SRAM es
final tb_SRAM;

TB es la arquitectura de tb_SRAM
componente de SRAM
(puerto caddr: in std_logic_vector (3 downto 0);
RAddr: in std_logic_vector (6 downto 0);
RWD: inout std_logic_vector (15 downto 0);
BNKSEL: in std_logic;
RDCAS: in std_logic;
WRCAS: in std_logic;
DTRDY: out std_logic);
componente final;
RDCAS señal, WRCAS, DTRDY, BNKSEL: std_logic;
caddr señal: std_logic_vector (3 downto 0);
rAddr señal: std_logic_vector (6 downto 0);
señal de RWD: std_logic_vector (15 downto 0);
empezar

ESP: Mapa puerto SRAM (caddr, rAddr, RWD, BNKSEL, RDCAS, WRCAS, DTRDY);

RAddr <= "0010010";
Caddr <= "0010";
RWD <= (others => 'Z'), "0001000100010001" después de 22 ns, (others => 'Z') después de 28 ns;
BNKSEL <= '0 ', '1' después de 8 ns, '0 ', después de 16 ns, '1' después de 24 ns, '0 ', después de 32 ns, '1' después de 40 ns, '0 'después de 48 ns;
RDCAS <= '0 ', '1' después de 6 ns, '0 'después de 10 ns, '1', después de 37 ns, '0 ', después de 43 ns;
WRCAS <= '0 ', '1', después de 22 ns, '0 'después de 28 ns;

tb final;
==============================================

Compilar y ejecutar, compruebe si está cumpliendo su propósito.Siéntase libre de enviar cualquier pregunta.

Recuerdos,
Jitendra

 

Welcome to EDABoard.com

Sponsor

Back
Top