Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Simulacion
Simulacion
para escritura y una salida para lectura. Como ejemplo diseñaremos un buffer
de almacenamiento de 16 bytes que cargue a través de datos provenientes del
puerto serie, y una vez llenado, se vuelca su contenido también por el puerto
serie.
Puertos y parámetros
Los puertos y parámetros se muestran esta figura:
Cronograma
En este cronograma se muestran dos ciclos de lectura y uno de
escritura intercalado:
Ciclo de lectura:
Ciclo de escritura:
Descripción en verilog
El código es similar al de la memoria rom pero añadiendo un proceso nuevo
que se encarga de la escritura en cada flanco de subida del reloj, usando la
señal rw como habilitación
( //-- Puertos
input clk, //-- Señal de reloj global
input wire [AW-1: 0] addr, //-- Direcciones
input wire rw, //-- Modo lectura (1) o escritura
(0)
input wire [DW-1: 0] data_in, //-- Dato de entrada
output reg [DW-1: 0] data_out); //-- Dato a escribir
//-- Parametro: Nombre del fichero con el contenido de la RAM
parameter ROMFILE = "bufferini.list";
//-- Memoria
reg [DW-1: 0] ram [0: NPOS-1];
endmodule
Ejemplo: Buffer
Para probar la memoria ram, implementaremos un buffer de 16 bytes. Se
comienza volcando el buffer a través del puerto serie (tiene unos datos iniciales
que establecemos en el fichero bufferini.list). Los siguientes caracteres recibidos
por el puerto serie, se van almacenando en la memoria, comenzando por la
dirección 0. Una vez llenada la memoria, se procede a su volcado
Diagrama de bloques
La arquitectura del circuito es la clásica: una ruta de datos y un controlador:
Ruta de datos
En la ruta de datos se instancian la unidad de transmisión de serie (uart_tx.v), la
de recepción (uart_rx.v) y la memoria ram genérica (genram.v). El resto de
componentes son: un contador para direccionar la memoria,
un comparador para detectar cuando hay overflow en el contador (paso de
0xF a 0) y un inicializador