| 
		 | 	
  
Parameterized RAM with separate input and output ports megafunction. Altera® recommends using lpm_ram_dq to implement asynchronous memory or memory with synchronous inputs and/or outputs. This megafunction is provided only for backward compatibility in Cyclone, Stratix, and Stratix GX designs; instead, Altera recommends using the altsyncram megafunction. The lpm_ram_dq function uses Embedded System Blocks (ESB) in APEX 20K, APEX II, ARM®-based Excalibur, and Mercury devices, Embedded Array Blocks (EAB) in ACEX® 1K and FLEX 10KE devices, or DFFE primitives or latch arrays in FLEX® 6000, MAX® 3000, and  MAX 7000 devices or if the USE_EAB parameter is set to "OFF". Altera strongly recommends using synchronous rather than asynchronous RAM functions.
| The Quartus® II Compiler automatically implements suitable portions of this function in ESBs in APEX 20K, APEX II, ARM-based Excalibur, and Mercury devices, and in EABs in ACEX 1K and FLEX 10KE devices. The Compiler automatically implements this function in logic cells in FLEX 6000, MAX 3000, and MAX 7000 devices. | 
Altera also recommends instantiating this function as described in Using the MegaWizard® Plug-In Manager.
This topic contains the following information:
FUNCTION lpm_ram_dq (data[LPM_WIDTH-1..0], address[LPM_WIDTHAD-1..0], we, inclock, outclock) WITH (LPM_WIDTH, LPM_WIDTHAD, LPM_NUMWORDS, LPM_FILE, LPM_INDATA, LPM_ADDRESS_CONTROL, LPM_OUTDATA) RETURNS (q[LPM_WIDTH-1..0]);
COMPONENT lpm_ram_dq
   GENERIC (LPM_WIDTH: POSITIVE;
      LPM_WIDTHAD: POSITIVE;
      LPM_NUMWORDS: NATURAL := 0;
      LPM_INDATA: STRING := "REGISTERED";
      LPM_ADDRESS_CONTROL: STRING := "REGISTERED";
      LPM_OUTDATA: STRING := "REGISTERED";
      LPM_FILE: STRING := "UNUSED";
      LPM_TYPE: STRING := "LPM_RAM_DQ";
      LPM_HINT: STRING := "UNUSED");
    PORT (data: IN STD_LOGIC_VECTOR(LPM_WIDTH-1 DOWNTO 0);
      address: IN STD_LOGIC_VECTOR(LPM_WIDTHAD-1 DOWNTO 0);
      inclock, outclock: IN STD_LOGIC := '0';
      we: IN STD_LOGIC;
      q: OUT STD_LOGIC_VECTOR(LPM_WIDTH-1 DOWNTO 0));
END COMPONENT;
LIBRARY lpm; USE lpm.lpm_components.all;
INPUT PORTS
| Port Name | Required | Description | Comments | 
|---|---|---|---|
data[] | 
    Yes | Data input to the memory. | Input port LPM_WIDTH wide. | 
  
address[] | 
    Yes | Address input to the memory. | Input port LPM_WIDTHAD wide. | 
  
we | 
    Yes | Write enable input. Enables write operations to the memory when high. | Required if inclock is not present. 
      If only the we port is used, the data on the address[] 
      port should not change while we is high. If the data on the 
      address[] port changes while the we port is high, all memory 
      locations that are addressed are overwritten with data[]. | 
  
inclock | 
    No | Synchronizes memory loading. | If the inclock port is used, the 
      we port acts as an enable for write operations synchronized 
      to the rising edge of the inclock signal. If the inclock 
      port is not used, the we port acts as an enable for asynchronous 
      write operations. In addition, if the inclock port is not used, 
      the LPM_INDATA and LPM_ADDRESS_CONTROL parameters 
      should be set to "UNREGISTERED". | 
  
outclock | 
    No | Synchronizes q outputs from memory. | 
    The addressed memory content-to-q[] 
      response is synchronous when the outclock port is connected, 
      and asynchronous when it is not connected. In addition, if the outclock 
      port is not used, the LPM_OUTDATA parameter should be set to 
      "UNREGISTERED". | 
  
OUTPUT PORTS
| Port Name | Required | Description | Comments | 
|---|---|---|---|
q[] | 
    Yes | Data output from the memory. | Output port LPM_WIDTH wide. | 
  
| Parameter | Type | Required | Description | 
|---|---|---|---|
LPM_WIDTH | 
    Integer | Yes | Width of data[] and q[] 
      ports. | 
  
LPM_WIDTHAD | 
    Integer | Yes | Width of the address port. LPM_WIDTHAD 
      should be (but is not required to be) equal to log2(LPM_NUMWORDS). 
      If LPM_WIDTHAD is too small, some memory locations will not 
      be addressable. If it is too large, the addresses that are too high will 
      return undefined (X) logic levels. | 
  
LPM_NUMWORDS | 
    Integer | No | Number of words stored in memory. If omitted, 
      the default is 2 ^ LPM_WIDTHAD. In general, this value should 
      be (but is not required to be) 2 ^ LPM_WIDTHAD-1 < LPM_NUMWORDS 
      <= 2 ^ LPM_WIDTHAD. If omitted, the default is 2 ^ LPM_WIDTHAD. | 
  
LPM_FILE | 
    String | No | Name of the Memory 
      Initialization File (.mif) or Hexadecimal 
      (Intel-Format) Output File (.hexout) containing ROM initialization 
      data ("<file name>"), or 
      "UNUSED". 
      If omitted, contents default to all 0s. The we port must be registered to support memory initialization. | 
  
LPM_INDATA | 
    String | No | Values are "REGISTERED", 
      "UNREGISTERED", and "UNUSED". 
      Controls whether the data port is registered. If omitted, the 
      default is "REGISTERED". If the inclock 
      port is not used, the LPM_INDATA and LPM_ADDRESS_CONTROL 
      parameters should be set to "UNREGISTERED". | 
  
LPM_ADDRESS_CONTROL | 
    String | No | Values are "REGISTERED", 
      "UNREGISTERED", and "UNUSED". 
      Controls whether the address and we ports are 
      registered. If omitted, the default is "REGISTERED". 
      If LPM_ADDRESS_CONTROL is "UNREGISTERED", 
      the we port is level-sensitive, so that when the we 
      port is high, the address[] port must be stable to prevent 
      other memory locations from being overwritten. If the inclock 
      port is not used, the LPM_INDATA and LPM_ADDRESS_CONTROL 
      parameters should be set to "UNREGISTERED". | 
  
LPM_OUTDATA | 
    String | No | Values are "REGISTERED", 
      "UNREGISTERED", and "UNUSED". 
      Controls whether the q and internal eq ports are 
      registered. If omitted, the default is "REGISTERED". 
      If the inclock port is not used, the LPM_OUTDATA 
      parameter should be set to "UNREGISTERED". | 
  
LPM_HINT | 
    String | No | Allows you to specify Altera-specific 
      parameters in VHDL Design Files (.vhd). 
      The default is "UNUSED". | 
  
LPM_TYPE | 
    String | No | Identifies the library of parameterized modules (LPM) entity name in VHDL Design Files. | 
USE_EAB | 
    String | No | 
	   Altera-specific parameter. Values are  If you wish to use this parameter when you instantiate the function in a Block Design File (.bdf), you must specify it by entering the parameter name and value manually with the Parameters tab (Symbol Properties Command) or the Parameters tab (Block Properties Command). You can also use this parameter name in a Text Design File (.tdf) or a Verilog Design File (.v). You must use the   | 
  
| Synchronous Read or Write to Memory (all inputs registered) | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
      
  | 
  
For devices with ESBs or EABs, the lpm_ram_dq megafunction internally writes the data to memory while the write clock is low.
| Synchronous Read from Memory | ||||||
|---|---|---|---|---|---|---|
      
  | 
  
Totally asynchronous memory operations occur when neither inclock nor outclock is connected. The output q is asynchronous and reflects the memory location pointed to by address.
| Asynchronous Memory Operations | ||||||
|---|---|---|---|---|---|---|
      
  | 
  
Uses one embedded cell per data output bit for ACEX 1K, APEX 20K, APEX II, ARM-based Excalibur, FLEX 10KE, and Mercury devices; however, in FLEX 6000, MAX 3000, and MAX 7000 devices, or if the USE_EAB parameter is set to "OFF", uses one logic cell per memory bit.
| This topic prints best in Landscape orientation. | 
| 
       - PLDWorld -  | 
    
| 
       
  | 
  
| Created by chm2web html help conversion utility. |