Circuitjs 内存模块的使用

建立相对复杂的数字电路时, 一个方便高效的内存组件是必要的, 能极大简化电路的复杂度, 并减少电路模拟中的各种卡顿.

circuitjs 中集成了这样一个内存模块.

引入

点击菜单 绘制-数字芯片-添加静态随机存储器, 之后按住鼠标左键拖动即可添加一个内存模块, 默认形状如下:

静态随机存储器(Static RAM)

标签引脚

引脚分成三类:

  1. 使能引脚
  2. 地址引脚
  3. 数据引脚

使能引脚

使能引脚包括 WEOE:

  1. WE: Write Enable, 为写入模式
  2. OE: Output Enable, 为输出(读取)模式

注: 引脚标记字母的上划线表示 低电平有效, 因此缺省情况下, 两者均有效.

如果置入高电平, 则表示禁止相应功能.

地址引脚

A0~A3 为地址引脚, 默认 4 位, 可以寻址 2^4=16 个不同地址.

注: A 为 Address, 地址.

通过在引脚上置入不同的高低电平, 可以读取或写入不同地址上的数据.

数据引脚

D0~D3 为数据引脚, 默认 4 位, 可以存储一组四位数据, 共 2^4=16 组不同的值(由地址组数决定).

注: D 为 Data, 即数据.

在输出(读取)模式下, 可以读到相应地址下的数据.

在写入模式下, 通过在地址引脚上置入不同的高低电平, 可在指定的地址中写入数据.

位数调整

默认情况地址和数据都是 4 位, 双击组件进行编辑, 可调整位数:

  1. # of Address Bits 表示地址位数, 决定能寻址的最大数量.
  2. # of Data Bits 表示数据位数(比特数), 即单位地址上的数据容量, 限制了能表示数的最大范围.

    如果想一次存取一字节(byte), 可以将其设置为 8 位.

如下图所示, 设置为 5 位地址, 8 位数据, 并把显示的方向(Flip X/Y)改为横向: static RAM 调整地址数据位数及排列方向

基础使用方式

如下电路为一个基础的使用模式.

内存模块的基础使用

  1. 左上角的控制信号控制是写入还是读取模式. 非门控制同时只会处于一种模式下.

    图中为读取模式, 信号改为高电平则处于写入模式.

  2. 左下地址部分 A3~A0 指定要操作数据的地址.

    图中地址为 1000, 即地址 8.

  3. 右边数据端用于对外输出或接受输入.

    图中为输出模式, 值显示在右上角, 为 1010, 即 10 进制的数字 10.

注: 为隔离输入输出, 使用了二极管限制单向流动, 并加入与门与控制信号一起控制是否要进行写入.

点击链接打开此示例电路:

数据初始化

在上述模型中, 尽管通过操作数字开关, 也可以给内存的不同地址存入不同的数据. 但当数据量特别多时, 初始化操作很麻烦.

为此, 组件提供了另外一种便捷的批量数据初始化方式.

双击组件(或 右键--编辑)可打开编辑组件窗口, 在下方的 Contents 一栏中, 可以一次性录入批量数据.

内存组件批量数据初始化

注: 通过 Load Contents From File 按钮还可以通过文件方式载入数据

数据录入格式如下:

  1. 每行开头最前面的数据为起始地址
  2. 地址之后接一个冒号, 再之后接多个以空格隔开的数据, 地址编号也相应增加

在上述示例中:

  • 第一行地址 0~7 这 8 个地址分别存储了 15 1 2 3 7 6 5 4 这 8 个数据.
  • 第二行地址 8~15 这 8 个地址分别存储了 10 9 8 7 7 6 1 1 这 8 个数据.

注: 地址及数据的值不应超过相应地址和数据位数(bits)所能表示的范围.

关于内存模块的使用就介绍到这里.

results matching ""

    No results matching ""