// ================================================================== // >>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<< // ------------------------------------------------------------------ // Copyright (c) 2006-2011 by Lattice Semiconductor Corporation // ALL RIGHTS RESERVED // ------------------------------------------------------------------ // // IMPORTANT: THIS FILE IS AUTO-GENERATED BY THE LATTICEMICO SYSTEM. // // Permission: // // Lattice Semiconductor grants permission to use this code // pursuant to the terms of the Lattice Semiconductor Corporation // Open Source License Agreement. // // Disclaimer: // // Lattice Semiconductor provides no warranty regarding the use or // functionality of this code. It is the user's responsibility to // verify the user’s design for consistency and functionality through // the use of formal verification methods. // // -------------------------------------------------------------------- // // Lattice Semiconductor Corporation // 5555 NE Moore Court // Hillsboro, OR 97214 // U.S.A // // TEL: 1-800-Lattice (USA and Canada) // 503-286-8001 (other locations) // // web: http://www.latticesemi.com/ // email: techsupport@latticesemi.com // // -------------------------------------------------------------------- // FILE DETAILS // Project : LatticeMico32 // File : lm32_ram.v // Title : Pseudo dual-port RAM. // Version : 6.1.17 // : Initial Release // Version : 7.0SP2, 3.0 // : No Change // Version : 3.1 // : Options added to select EBRs (True-DP, Psuedo-DP, DQ, or // : Distributed RAM). // Version : 3.2 // : EBRs use SYNC resets instead of ASYNC resets. // Version : 3.5 // : Added read-after-write hazard resolution when using true // : dual-port EBRs // ============================================================================= `include "lm32_include.v" ///////////////////////////////////////////////////// // Module interface ///////////////////////////////////////////////////// module lm32_ram ( // ----- Inputs ------- read_clk, write_clk, reset, enable_read, read_address, enable_write, write_address, write_data, write_enable, // ----- Outputs ------- read_data ); /*---------------------------------------------------------------------- Parameters ----------------------------------------------------------------------*/ parameter data_width = 1; // Width of the data ports parameter address_width = 1; // Width of the address ports parameter RAM_IMPLEMENTATION = "AUTO"; // Implement memory in EBRs, else // let synthesis tool select best // possible solution (EBR or LUT) parameter RAM_TYPE = "RAM_DP"; // Type of EBR to be used /*---------------------------------------------------------------------- Inputs ----------------------------------------------------------------------*/ input read_clk; // Read clock input write_clk; // Write clock input reset; // Reset input enable_read; // Access enable input [address_width-1:0] read_address; // Read/write address input enable_write; // Access enable input [address_width-1:0] write_address;// Read/write address input [data_width-1:0] write_data; // Data to write to specified address input write_enable; // Write enable /*---------------------------------------------------------------------- Outputs ----------------------------------------------------------------------*/ output [data_width-1:0] read_data; // Data read from specified addess wire [data_width-1:0] read_data; generate if ( RAM_IMPLEMENTATION == "EBR" ) begin if ( RAM_TYPE == "RAM_DP" ) begin pmi_ram_dp #( // ----- Parameters ----- .pmi_wr_addr_depth(1<