ROM
Single Port Read Only Memory primitive.
Model
| Pin | Function |
|---|---|
CS |
Chip Select (Active High). If Low, outputs are High-Z. |
RE |
Read Enable (Active High). If Low, outputs are High-Z. |
ADDR |
Address input bus. |
DATA |
Data output bus. |
Operation
| CS | RE | DATA |
|---|---|---|
| 0 | — | Z |
| 1 | 0 | Z |
| 1 | 1 | contents at ADDR |
Initialization & Data Population
ROM contents are typically initialized using the DATA keyword within the PART
statement.
However, they can also be updated dynamically prior to simulation using the CLAMP command.
# Static initialization in netlist
PART=U1 TYPE=ROM DATA=X0, FF, AA, 55, 01
# Dynamic population in run script
CLAMP PART=U1 DATA=X100 01 02 03
For detailed information on the DATA syntax, X-handling behavior, and the CLAMP
command, see the Memory Handling & Initialization guide.
X-Handling
- If the Chip Select (
CS) or Read Enable (RE) is X, the entire output data bus becomes X. - If any address bit is X, Simic identifies all possible addresses that match the bit-pattern. If the data at all matching addresses is identical, that value is output; otherwise, bits that differ are set to X.
- If the number of X-bits in the address exceeds the global
MAXXlimit, the output is immediately forced to X for efficiency.
Physical Constraints
- Address Depth: Supports up to 2m+1 locations, where
m+1is the number of address pins. - Data Width: The data bus
o=DATA[n:0]defines the word size (typically 1 to 64 bits). - Memory Limit: Large memories are handled efficiently using a sparse allocation
technique, but very large address spaces may increase simulation startup time during
DATAloading.
Equivalent Type Statement
Type=ROM i=CS,RE,ADDR[m:0] o=DATA[n:0]