# RAM

库: | 存储器
引入版本： | 2.0 Beta 1
外观： |

## 行为

RAM 最多可存储 16,777,216 个数值（由地址位宽属性指定），每个数值最多可包含 32 位（由数据位宽属性指定）。电路可以从 RAM 读取并向其中写入数值。此外，用户既可以通过手形工具（）交互式地修改单个数值，也可以通过右键上下文菜单修改整个内容。更多信息请参见用户指南中的存储器组件。

当前数值会显示在组件内部：显示区域左侧以灰色列出地址；内部每个数值以十六进制显示。当前选中地址对应的数值会以反色文字（黑底白字）显示。

RAM 组件根据异步读取、数据总线实现和使能方式等设置，支持四种不同的接口形式。

数据总线实现属性允许修改数据总线的结构：可以是独立的单向输入总线与输出总线，或是双向的数据总线。

默认设置为：读写分离总线 + 同步控制。

  写入端口由WE（或 Write enable）信号控制；读取端口由OE（或 Output enable）信号驱动。读写操作通过时钟同步，其触发方式由触发方式属性决定。若两条命令线同时为1，则先写后读；可通过修改读取行为属性将其反转。

异步读取，并支持按字节使能读取。

  若使能方式属性设为使用字节使能，且异步读取属性设为是，则只有OE信号的状态会触发数据出现在输出总线上；写入仍按上述方式进行。

异步读取，并使用行使能。

  若使能方式属性为使用行使能，且行大小属性为单行，那么只要地址改变，数据就会立即出现在输出总线上；写入仍按上述方式进行。

同步读取，并使用行使能（多行）。

  若使能方式属性为使用行使能，且行大小属性不为单行，那么只要地址改变，数据就会立即出现在输出总线上。对于写入，额外信号 LE1..LE7 用于选择处于激活状态的数据行。时钟触发模式由触发方式属性配置。

还有一些更细微的设置，请阅读下面对引脚与属性的说明以了解更多细节。

## 引脚

外观属性为该组件提供两种不同的引脚布局。Logisim-evolution 将输入放在西侧、输出放在东侧；而此处按从上到下、从西到东的顺序列出引脚说明。

清除
  输入：仅当使用清除引脚属性设为是时才出现该引脚。当其为是时，无论其它输入如何，存储器中的所有数值都会被固定为0。
地址
  输入总线：选择电路当前要访问的存储单元地址。
WE（或 Write enable）
  输入：使能后，允许将数据写入到地址总线上指定的位置。根据触发方式属性的不同取值，在时钟同步时，它在上升沿/下降沿模式下于1有效；在高电平模式下为1有效；在低电平模式下为0有效（与时钟无关）。

  下表展示了在不同属性设置下，存储器写入的触发条件。

  写入触发模式
  触发方式 | 时钟信号 | WE 信号
  --- | --- | ---
  下降沿 | ↑ | 1
  上升沿 | ↓ | 1
  高电平 | -- | 1
  低电平 | -- | 0

OE（或 Output enable）
  输入：当 OE 为高电平时，地址总线上指定位置的数据将被送到输出总线。

  下表展示了在不同属性设置下，从存储器读出数据到输出端口的触发条件。

  读取触发模式
  使能方式 | 触发方式 | 异步读取 | 时钟信号 | OE 信号
  --- | --- | --- | --- | ---
  使用字节使能 | 上升沿 | 否 | ↑ | 1
  使用字节使能 | 下降沿 | 否 | ↓ | 1
  使用字节使能 | 高电平 | -- | -- | 1
  使用字节使能 | 低电平 | -- | -- | 1
  使用字节使能 | 无影响 | 是 | 无影响 | 1
  使用行使能 | 无影响 | -- | 无影响 | --

时钟（或 C1、E1）
  输入：仅当触发方式属性设为上升沿/下降沿时才出现该引脚；在其它触发方式下，若使能方式属性设为使用行使能，同样会出现该引脚。触发后，存储器会写入或读取数据。
  参见上方两张表格。
LE0 到 LE7
  输入：仅当使能方式属性设为使用行使能时才出现。引脚数量（2、4、8）取决于行大小属性。每个引脚用于激活一条输入数据行。
输入数据
  输入总线：仅当数据总线实现属性设为读写分离的数据总线时才出现。它接收要写入存储器的数据：当触发条件满足时，数据会写入由地址引脚值所指定的位置。参见上方表格。
输入数据 0 到 输入数据 7
  输入总线：仅当使能方式属性设为使用行使能且行大小不为单行时才出现。其功能与输入数据总线相同，但区别在于：输入数据 0 指向地址总线对应的存储位置，输入数据 1 指向地址总线+1，输入数据 2 指向地址总线+2，依此类推。每条输入数据行都有对应的使能信号 LE0..LE7。
输出数据
  输出总线：仅当数据总线实现属性设为读写分离的数据总线时才出现。该总线在触发条件满足时输出由地址引脚值所指定位置的数据。参见上方表格。
输出数据 0 到 输出数据 7
  输出总线：仅当使能方式属性设为使用行使能且行大小不为单行时才出现。其功能与输出数据总线相同，但区别在于：输出数据 0 输出地址总线对应存储位置的数据，输出数据 1 输出地址总线+1，输出数据 2 输出地址总线+2，依此类推。
  允许非对齐属性用于决定：当地址未按“行数”的倍数对齐时，是否产生错误（E）。

## 属性

当组件被选中或正在放置时，数字 0 到 9 可修改其地址位宽属性，Alt-0 到 Alt-9 可修改其数据位宽属性。

地址位宽
  地址位的数量。RAM 中可存储的数值数量为 2地址位宽。
数据位宽
  存储器中每个数值的数据位宽（以 bit 为单位）。
使能方式
  决定数据如何加载给组件。使用字节使能：仅存在一条数据总线。
  使用行使能：数据总线由一条或多条数据行组成，每条数据行都有各自的选择信号。“行数”属性可定义数据行数量（1、2、4、8）。
RAM 类型
  决定重新开始仿真时 RAM 内容如何变化：
  非易失：内存内容不变。
  易失：RAM 内容会清零或随机化（取决于项目选项中仿真选项卡的设置）。
使用清除引脚
  决定是否显示清除引脚。若该引脚为1，则存储器内容会被异步置为0，且其他命令无效。
行大小
  仅当使能方式属性设为使用行使能时才出现。用于确定输入与输出端存在的数据行数量：1、2、4 或 8。每条数据行在写入时由对应信号（LE0..LE7）驱动。第 0 行对应地址总线上的地址，第 1 行对应地址总线上的地址+1，依此类推。
允许非对齐
  仅当使能方式属性设为使用行使能时才出现。用于决定：数据行是否可以对应任意地址，还是必须与其数量的倍数地址对齐。例如，当有两行时，第 0 行对应地址总线上的地址+0，第 1 行对应地址总线上的地址+1，那么地址必须是 2 的倍数，否则输出将为错误（E）。
触发方式
  配置如何解释时钟输入。取值：
  上升沿：在时钟从0上升到1的瞬间更新。
  下降沿：在时钟从1下降到0的瞬间更新。
  高电平：当时钟输入为1时持续更新。
  低电平：当时钟输入为0时持续更新。
异步读取
  决定读存储器时是否涉及时钟信号。
  是：仅由 OE 信号触发读取。
  否：由 OE 信号与时钟信号的边沿共同触发读取。
读行为
  决定读写同时使能时的行为。
  先写后读：先写入 Address 指向的存储单元，然后再读取并输出。
  先读后写：先输出 Address 指向的存储单元内容，然后再用输入数据改写该单元。
数据总线实现
  决定数据总线的结构。取值：
  一条双向的数据总线：数据输入与输出共用同一总线，需要使用受控缓冲器管理数据流向。
  读写分离的数据总线：存在两条总线，一条用于输入，一条用于输出。
标签
  与组件关联的标签内显示的文本。
标签字体
  用于渲染标签的字体。
标签可见
  标签是否可见。
外观
  Logisim-HolyCross / Logsim-Evolutions：以 IEC 方式的新外观。Classic Logisim：以传统 Logisim 风格显示。

## 手形工具行为

参见用户指南中的点按存储器。

## 文本工具行为

无。

## 菜单工具行为

参见用户指南中的弹出菜单与文件。

返回 库参考手册