Chinaunix首页 | 论坛 | 博客
  • 博客访问: 162428
  • 博文数量: 207
  • 博客积分: 10280
  • 博客等级: 上将
  • 技术积分: 2600
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-11 11:01
文章分类

全部博文(207)

文章存档

2011年(1)

2008年(206)

我的朋友
最近访客

分类:

2008-10-07 10:21:29

如何在双端口SRAM中实现同步硬件原语

Dual-port SRAM with Semaphore logic
摘要:在多处理器并行环境中,必须通过同步机制保证系统的一致性。硬件实现同步原语能大大减小系统开销,提高同步可靠性。本文介绍了如何在双端口SRAM中实现同步硬件原语,可在处理器不支持同步硬件原语的条件下提供可靠的同步机制。
关键字:同步硬件原语逻辑 双端口SRAM   同步机制  
Abstract: In the multiprocessors situation, synchronization mechanisms can prevent the system from reaching a nonconsistent state. And hardware-supplied synchronization primitives are a low-cost and reliable method to implement synchronization. This paper presents a control logic to supply synchronization in a dual-port SRAM, which can supply synchronization in multiprocessors situation without synchronization instructions.
Keywords: Semaphore logic, dual-port SRAM, synchronization mechanisms
1. 引言
当代多处理器并行环境经常是基于较为简单的多节点共享总线的互连架构建立的。在这样的并行环境中,事务处理过程通常被分为多个任务交由不同处理器执行,并在执行过程中通过同步(Synchronization)机制维持共享资源使用的顺序性,保持全系统的一致性[1]。一般来说同步机制是通过用户层的软件例程来构造的,而这些例程要使用硬件提供的同步指令。在规模较小的多处理器系统或竞争较少的环境中实现同步的关键在于要有一个能够以原子方式对共享存储器执行读写操作的硬件原语集合。如果没有这种支持,构造基本的同步原语将会付出非常大的代价。原子互换(atomic exchange)是一个典型的构建同步原语的操作,它将一个寄存器中的值和一个存储器中的值进行互换,其操作过程可以通过一个简单的锁来实现,锁值为0表示该锁可以占用,即共享资源可以使用,而1表示该锁不能占用,即共享资源已被使用。如果其他处理器已经占用了该锁,返回结果为1,否则为0。如果返回结果为0,锁的数值被设置成1,这样在这个处理器将锁释放之前,其他处理器无法占用这个锁[2]。通过同步锁的支持,就可以共享资源的使用就可以做到串行化,共享数据的顺序一致性也就有了保证。
现代处理器中提供了一套不可分割的读修改写指令,也叫TAS(test and set)指令,作为硬件同步原语。但是并不是所有处理器都包含这样的指令,而且并行环境并不一定全由处理器构成,在嵌入式处理器+DSP协处理这样的应用中,任务分配和资源共享也需要同步机制保证任务执行的顺序性,此时单靠处理器提供同步原语支持显然是不够的。在这样的环境中,如果作为资源共享的核心―存储器件能直接支持同步机制,其通用性显然更好。本文介绍的就是基于双端口SRAM支持同步硬件原语。
2. 同步硬件原语逻辑设计
同步硬件原语逻辑的设计关键就在于获取同步锁操作的原子性,即必须不可中断地取回同步锁的值并修改其值。这一特性在几个处理器同时争用一个同步锁(即同一共享资源)情况下尤为重要。考虑两个处理器试图同时申请获得共享资源使用权的情况,因为只有一个处理器能首先申请同步锁并得到正确的返回值“全0”,而第二个处理器执行TAS操作时将得到返回值“全1”。在这里,申请同步锁的操作具有原子性,不能分割,而两个同时进行的申请操作由写串行机制进行排序。用这种方式,两个试图申请同步锁的处理器不可能同时完成申请。
在同步原语逻辑设计中,可以使用RS触发器保证申请同步锁操作的原子性。图1为同步原语逻辑电路。
 500)this.style.width=500;" border=0>
图 1 同步原语逻辑
SEMAPHORE代表同步请求,REQUEST为具体的请求内容,GRANT是响应结果。当左端提出同步请求(SEMAPHORE置高电平),请求内容为申请占用同步锁(REQUEST置低电平),根据RS触发器的电路特性,只有当R GRANT为高电平,即右端并没有占用该锁,L GRANT输出才会是低电平,表示占用成功;否则L GRANT输出高电平,表示该锁已被右侧占用。右端申请占用同步锁的操作情况和左端完全相同。
当左端已经占用了同步锁后,提出释放同步锁的请求(SEMAPHORE和REQUEST都置高电平),根据RS触发器的电路特性,L GRANT输出将变为1。由于请求信号都会被锁存,所以只要右端在左端占用同步锁期间曾提请占用同步锁(此时右端锁存器输出为高电平),则R GRANT输出将立即变成低电平,表明右端获得了同步锁,否则,左右两端GRANT都将输出高电平,即同步锁处于空闲状态。右端释放同步锁的过程和左端完全类似。
现在考虑两端口同时争用同步锁的情况。当左右两端口同时发出占用同步锁的请求时,因为在实际电路中,不可能有左右两端口输入完全同步的情况,必定有一端略微领先输入请求电平信号,从而获得同步锁的使用权,输入落后的一端的GRANT将返回高电平,表示同步锁已被占用。根据实际电路差异,哪一端口获得同步锁是将会是随机的。在两端口争用的情况下,同步原语逻辑利用RS触发器R和S同时有效时输出结果的不确定性,保证了申请的串行性,避免了冲突和同步申请操作中断。
3. 支持同步硬件原语的双端口SRAM
普通的双端口SRAM一般包含双端口存储体、译码器、IO控制、控制仲裁逻辑等电路模块,其基本结构如图2所示[3]。
 500)this.style.width=500;" border=0>
图 2 双端口SRAM的结构框图
在普通双端口SRAM基础上,只需增加一个控制信号,并将第二节所提的同步原语逻辑添加到控制仲裁逻辑中就可实现对同步硬件原语的支持。图3为支持同步原语的双端口SRAM结构图。
 500)this.style.width=500;" border=0>
图 3  支持同步硬件原语SRAM结构图
在图3结构中,两个端口各增加一个同步请求使能信号SEMAPHORE SELECT,当某一端口的同步请求使能有效时,从该端口输入的IO数据就作为具体的请求内容信号(一般取IO数据的最低有效位表示)。同时为了避免请求信号和正常的SRAM数据读写冲突,此时片选使能端应无效以关闭正常的SRAM存储体。因为同步操作最基本的就是请求占用同步锁,所以在正常的双端口存储体之外应另外准备独立存储单元(SEMAPHORE CELLS)保存同步锁的使用信息。同步锁的使用信息可以通过地址线(一般是低位进行寻址,具体位数视同步锁的个数而定)。
以一次同步操作为例,处理器L希望占用同步锁001(假设有8个同步锁),它首先将左端口片选使能 置高电平, 置低电平,启动同步原语逻辑电路,然后向左端口地址线写入地址数据xxxxxxxxxxxxx001(x表示该地址位无效),数据线写入数据xxxxxxxxxxxxxxx0(x表示该数据位无效),最后打开写使能,完成对同步锁001的请求输入。同步原语逻辑收到左端口的占用请求后做出仲裁并将仲裁结果写入同步锁001中,此时处理器L可以打开读使能,从数据线上输出仲裁结果。如果数据线上输出“全1”,就表示同步锁001已经被其他处理器占用,处理器L要继续等待;如果数据线上输出“全0”,就表示处理器L完成对同步锁001的占用。释放同步锁的操作更简单,只需要向已经占用的同步锁写1即可。
从上面可以看出进行同步操作和正常访问某一存储单元完全类似,只是在引脚 和 控制下,同步操作访问的不是普通存储单元而已。这样的设计使增加了同步原语支持的双端口SRAM对外时序变化很小,使之既能用于普通非并行环境,又能在并行环境中提供可靠的同步机制,适应性增强。
实际电路中,同步锁的输出结果(一般只有1位)并不直接送IO端口,而是进行了扩展,将一位结果扩展到全IO端口再进行输出,避免出现其他IO端口输出结果不定的状况。图4为同步锁输出扩展电路(8位)。
 500)this.style.width=500;" border=0>
图 4 同步锁输出扩展电路
4. 结论
本文作者的创新点是:对同步硬件原语的支持极大地提高了双端口SRAM的适应范围,使得微处理器和其他控制设备构建简单的并行计算环境成为可能。图5是一个 M68020配合TI TMS3020 DSP芯片的协处理环境。在这一环境中,M68020进行控制信号处理和任务分配,TMS3020负责数值计算,两个处理器共享一个存储器。在运行过程中存储区域的分配和数据的传递就需要同步机制协调避免冲突,而两个处理器都不支持同步硬件原语,此时使用支持同步硬件原语的双端口SRAM就可以利用同步锁来分配存储区域和传递共享数据,极大地简化了两者的程序设计,提高了执行的正确性和效率。
 500)this.style.width=500;" border=0>
图 5 协处理环境实例

    本文可能所用到的IC型号:        
阅读(472) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~