SRAM.v
module SRAM (address, clock, resetj, write_enable, data_in, data_out);
// PARAMETERS
// SMI INSTANCE NAME AND MEMORY DIMENSIONS
parameter INSTANCE = "";
parameter SIZE = 0;
parameter WIDTH = 32;
// INTERFACE
input [SIZE-1:0] address;
input clock;
input resetj;
input write_enable;
input [WIDTH-1:0] data_in;
output [WIDTH-1:0] data_out;
// CONSTANTS
// MESSAGE TYPE IDENTIFIERS
parameter MEM_CONFIG = 0;
parameter MEM_WRITE = 1;
parameter MEM_READ = 2;
// INTERNAL SIGNALS
// REPLY DATA
reg [WIDTH-1:0] data;
// SMI MODEL IDENTIFIER
integer id;
// IMPLEMENTATION
initial
begin
// INITIALIZE THE REPLY DATA
data = 0;
// REGISTER THE MODEL INSTANCE WITH SMI
$smi_initial(id, "SRAM", INSTANCE);
// CONFIGURE THE MEMORY DIMENSIONS BY SENDING A "Configure" MESSAGE
$smi_write(id, MEM_CONFIG, WIDTH);
// PRINT THE CONFIGURATION
$display("MODEL-%d: SRAM(%s)[WORD WIDTH=%d]", id, INSTANCE, WIDTH);
end
always @(posedge clock)
// IF RESET IS NOT ASSERTED
if (resetj)
begin
// IF A WRITE OPERATION IS REQUIRED
if (write_enable)
// PERFORM A WRITE OPERATION BY SENDING A "Read+Write" MESSAGE
// AND SAVE THE REPLY
$smi_read(id, MEM_WRITE, address, data_in, data);
else
// PERFORM A READ OPERATION BY SENDING A "Read" MESSAGE AND SAVE
// THE REPLY
$smi_read(id, MEM_READ, address, data);
end
// SET THE OUTPUT EQUAL TO THE REPLY DATA
assign data_out = data;
endmodule
© Copyright 2000-2001 Adrian Lewis