//----------------------------------------------------- // Имя модуля : ram_sp_ar_aw // Имя файла : ram_sp_ar_aw.v // Функц. назначение : Аинхронная запись/чтение RAM // Программист : www.portal-ed.ru //----------------------------------------------------- module ram_sp_ar_aw ( address , // Адресный вход data , // Двунаправленный порт данных cs , // Выбор блока we , // Разрешение записи/Разрешение чтения oe // Разрешение выхода ); parameter DATA_WIDTH = 8 ; parameter ADDR_WIDTH = 8 ; parameter RAM_DEPTH = 1 << ADDR_WIDTH; //--------------Входные порты----------------------- input [ADDR_WIDTH-1:0] address ; input cs ; input we ; input oe ; //--------------Двунаправленные порты------------------ inout [DATA_WIDTH-1:0] data ; //--------------Внутренние переменные---------------- reg [DATA_WIDTH-1:0] data_out ; reg [DATA_WIDTH-1:0] mem [0:RAM_DEPTH-1]; //--------------Начало кода------------------ // Управление тристабильным буфером // output : When we = 0, oe = 1, cs = 1 assign data = (cs && oe && !we) ? data_out : 8'bz; // Запись блока памяти // Write Operation : When we = 1, cs = 1 always @ (address or data or cs or we) begin : MEM_WRITE if ( cs && we ) begin mem[address] = data; end end // Чтение блока памяти // Read Operation : When we = 0, oe = 1, cs = 1 always @ (address or cs or we or oe) begin : MEM_READ if (cs && !we && oe) begin data_out = mem[address]; end end endmodule // Конец модуля ram_sp_ar_aw