Circuitjs 内存模块的使用

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

circuitjs 中集成了这样一个内存模块, 下面简述其常规使用方法.

引入

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

静态随机存储器(Static RAM)

标签引脚

可以分成三类: 使能引脚, 地址引脚和数据引脚.

使能引脚

使能引脚包括 WE 和 OE:

  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 ""