IDT在标示March 2000的AN-91应用说明中,将双端口SRAM定义为一个静态SRAM阵列,由两组地址、数据和控制信号访问。两端口共享的是同一个阵列,并不是各自保存一份镜像。文中的“异步”又指器件响应地址和控制输入,不需要时钟或计数器。[1] 阵列的数量、访问端的数量与是否需要时钟,是这一定义中分别说明的内容。
访问冲突带有地址和动作两个条件。两端访问不同位置时,FAQ说不会产生这里所谈的冲突;即使同时访问同一位置,两端都读取也没有争用。只有同一位置的访问中至少一端要写入,才出现潜在问题。[1] 对一读一写,原文列出读到旧数据、新数据或二者组合的可能;两端同时写同一位置,则写入结果不确定。这些情况说明,单看“同时访问”还没有交代冲突对象。
BUSY逻辑针对这种同位置访问给仲裁失去优先权的一端提供写入阻断。该端若原本尝试写入,会被内部禁止写;原文同时明确,即使收到BUSY,尝试读取也不会因此被禁止。[1] 仲裁所依据的是地址和CE,而不是R/W。仲裁的依据与其对写入施加的限制因而不同,不能从“只看地址和CE”推成它对读写采用完全相同的阻断结果。
Interrupt逻辑采用另一种关系。文中把阵列上端两个地址位置描述为mailbox,即在两端之间传递通知的“邮箱”。中断标志用于把信号从RAM一侧传到另一侧,也可以联系两边的处理器;标志的置位本身不阻止RAM进行任何操作。[1] 它是一项通知,不是BUSY那样的写入阻断。数据所在位置和通知是否已经发出,可以在同一机制中分别存在。
通知标志与邮箱数据也没有被合成一个对象。FAQ明确指出,清除中断信号的读取不会扰动该位置的数据。文档另问,如果不使用中断,还能否使用这些上端地址;回答仍把它们视为普通RAM位置。[1] 因而,邮箱名称没有把这两处永久改成不存数据的额外标志空间:文中的标志状态可以改变,原地址中的数据却有自己的内容。
Semaphore逻辑恰好使用另一类位置。AN-91写它由八个独立位置组成,这些位置不属于RAM,因此不占器件可用的RAM空间。每个位置各有仲裁,防止两端同时取得同一semaphore或软件标记。[1] 这里“八个”数的是独立标记位置,不能拿前述邮箱的普通RAM地址来替换它们。两种机制都能联系两端,却使用不同的存储位置定义。
这些标记代表什么资源,还由软件赋予含义。说明将semaphore称为通用逻辑,强调它与RAM阵列的功能没有直接联系;软件可以把某标记关联到RAM的一部分,也可以用于系统里的其他功能。[1] 标记位置的独立仲裁属于器件所述机制,标记对应哪项资源则是另一层定义。因此,看到semaphore存在,并不等于已经知道它专门代表哪一块RAM。本文只采用这些历史功能语义,未读取电路图或实施读写、锁操作。
信息来源
本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。