具体实施方式
一种异步时钟域设备对共享存储装置访问的控制方法,包括时钟同步方法,总线生效的方法,以及寄存器互锁的方法;尤其是,在共享存储装置同多个异步时钟域设备之间分别设立资源锁,每个设备有自己的资源锁,只有对该资源锁加锁成功才能对共享存储装置进行写操作;并规定各设备对资源锁的优先级,以解决同时访问的设备间的访问顺序;每个资源锁都具有被选中后屏蔽其余资源锁的功能;将系统时钟100引入所述异步时钟域设备和共享存储装置,以便共享存储装置保持稳定的同步状态,供设备读写共享数据。
所述控制方法适用于所有多设备访问共享存储装置的电路结构,并在读、写过程中分别具有以下步骤:
(1)读共享存储装置的步骤,包括:
α.共享存储装置将其数据送输出总线150;
β.至少一个访问设备读有效;
γ.输出总线150上的数据传送到读有效的访问设备总线上;
δ.经访问设备内部时钟同步后将该数据送内部数据总线。
(2)写共享存储装置的步骤,包括:
A.访问设备启用资源锁;
B.本地资源锁屏蔽其余资源锁;
C.使本地资源锁输出控制信号有效并开启数据选择器400;
D.等待系统时钟100的上升沿到达时,将数据写入共享存储装置;
E.访问设备释放本地资源锁以结束写操作并让别的设备访问该共享存储装置。
本方法所涉及的资源锁是一位寄存器,使系统占用的资源做到最少。
本方法所涉及的异步时钟域设备包括PCI从设备101和PCI桥主控器108,前者比后者对资源锁有较高的控制优先级;
本方法所涉及的PCI从设备101和PCI桥主控器108的本地资源锁分别是资源锁S201和资源锁M204;
本方法所涉及的共享存储装置是PCI桥内共享寄存器401;
所述方法在写共享存储装置的步骤A中含有下列分步骤:
a1.访问设备向本地资源锁写入数据“1”;
a2.所述访问设备读本地资源锁;
a3.判断读回的数据N,若N=1,说明加锁成功,则执行步骤B屏蔽其余资源锁并准备写操作;否则转执行分步骤a1,重新尝试加锁。
还在步骤E中含有下列分步骤:
e1.访问设备向本地资源锁写入数据“0”。表示本地资源锁不再占用共享寄存器。
所述控制方法所使用的资源锁201/204至少两个同时使用,PCI从设备和桥主控器两个使用时,该资源锁包括一个一位D触发器281/284,该D触发器的时钟Q输出端同访问设备101/108的写信号线116/181分别接资源锁201/204的输出与门291/294输入端,该与门的输出端即为资源锁201/204的输出端210/240;
所述D触发器281/284的D输入端接二选一MUX271/274的输出端,该MUX的一个输入端是输入与门261/264的输出端,其另一个输入端交叉接另一通道输入与门264/261的倒相输入端,同时接本通道D触发器281/284的Q输出端即互锁信号端220/230;
所述PCI从设备的写信号线116接本通道三输入与门261的一个输入和二选一MUX271的使能端,同时接桥主控器资源锁204的前置三输入与门254的倒相输入端;所述PCI从设备的数据线112接三输入与门261的第三输入端;
所述桥主控器的写信号181接本通道前置三输入与门254的输入端和二选一MUX274的使能端,所述桥主控器的数据线183接前置三输入与门254的第三输入端;该前置三输入与门254的输出端接本通道输入与门264的输入端。
该方法中使用的资源锁是包括D触发器的一位寄存器。D触发器逻辑关系清晰,能方便搭建所需外围电路。
本发明的方案可以细述如下:
如图1所示,PCI从设备101和PCI桥的主控器108都要对共享寄存器401存取数据。他们的两套总线是两个时钟域的异步信号。我们采用系统时钟100作为对资源锁寄存器201,204以及共享寄存器401访问的时钟。这样一来最大的优点就是把两个时钟域的异步信号,转换到一个时钟域来处理。因此在对资源锁寄存器和共享寄存器写操作之前,首要解决的问题是,用系统时钟100去同步从PCI从设备和PCI桥主控器输入的异步读写信号,保证每次不论是哪个设备在对资源锁寄存器,共享寄存器写操作时,都是和系统时钟保持完全的同步。实现同步的过程很简单,PCI从设备和PCI桥主控器输出的数据,地址,以及写信号用系统时钟100做两级同步,就能保证每次写操作到寄存器的总线信号都和系统时钟有严格的同步。当执行读操作时,数据从共享寄存器,资源锁寄存器返回到PCI从设备以及PCI桥主控器的数据总线上,又跨越了两个时钟域,即从系统时钟100回到各自的总线时钟域中。这样就要求从寄存器输出的数据读回到数据总线上之前,再用各自时钟域的时钟信号对返回的数据再做两级同步。经过这样处理以后,所有的读写操作在各自的时钟区域内都能保证总线上有稳定的数据。这是对寄存器读写的前提条件。
在PCI从设备和PCI桥主控器要求对共享寄存器做写操作时,还将遇到的问题是把两条总线信号转换成一条总线,再把数据写入到共享寄存器中。这里就涉及到资源锁的应用。不论是哪一方需要写共享寄存器,都必需先要对自己的资源锁寄存器加锁来实现对共享寄存器操作的独占性。由于资源锁的设计考虑了启用的本地锁能屏蔽其余所有的资源锁,所以其中一方对自己的资源锁加锁成功以后,另外一方对共享寄存器操作无效,并且每次都是用重试方式返回。图2中201是PCI从设备的资源锁寄存器,204是PCI桥主控器的资源锁寄存器。加锁的含义就是锁定当前设备对寄存器操作的所有权,是对这个一位的资源锁寄存器写入“1”来实现的。加锁操作成功以后,设备才能对共享寄存器执行正确的操作。判断对资源锁加锁操作是否成功,方法很简单。只要对资源锁写“1”之后,再读回资源锁寄存器中的数值,如果读回数值是“1”,表示加锁成功。读回为“0”加锁不成功。
加资源锁的机制可以参考电路结构图2。当PCI从设备要对共享寄存器401写操作,在PCI从设备的写信号116有效时,把“1”通过数据线112写到资源锁寄存器201,如果PCI桥主控器108已经对自己的资源锁寄存器204成功的加锁,反馈的信号230使PCI从设备写到资源锁寄存器中的数值为“0”。此时如果PCI从设备读回加锁状态为“0”,说明共享寄存器正在使用,加锁不成功。相反,如果PCI桥主控器108没有对204加锁,PCI从设备写进资源锁寄存器中的数值为“1”。这样在PCI从设备读回201中的数值时,返回为“1”。加锁成功,可以对共享寄存器操作。
同样道理,在PCI桥的主控器108对资源锁寄存器204的操作过程是受到另一资源锁寄存器201输出的反馈信号220的控制。当PCI桥主控设备写信号181有效时,把“1”通过数据线183写到资源锁寄存器204,如果PCI从设备没有对共享寄存器加锁,201输出的反馈信号220为“0”时,写入到资源锁寄存器204的数值为“1”。此时读回到PCI主控器就为“1”,加锁成功。当PCI从设备已经对资源锁201加锁成功了,其反馈信号220为“1”,表示PCI从设备已经对资源锁加锁成功,此时在反馈信号的控制下,写入到资源锁寄存器204中的数值为“0”。这样在PCI桥的主控器读204时,返回的数值就是“0”。说明共享寄存器已经在使用,加锁不成功。
假如在复位以后或者是所有的资源锁寄存器都处于没有加锁的状态,而PCI从设备和桥上的主控器双方在某一时刻同时对各自的资源锁做加锁操作时,我们规定操作的双方有固定的优先级,即其中一方的优先级高于另外一方。这样在设备的双方只有一方能成功加锁,另一方加锁不成功。在图2中,PCI从设备的优先级高于PCI桥主控器。双方的主控设备写信号116、181同时有效。根据固定优先级的设置,用从设备写信号116把主控设备写信号181的输入屏蔽,这样在写入到资源锁寄存器201中的数值是“1”,而写入到204中的数值为“0”。即PCI从设备加锁成功,而PCI桥主控器加锁不成功。
当一个设备加锁成功以后,开始对共享寄存器操作。对寄存器操作完毕,当前占用总线的设备必须做解锁操作,释放自己的资源锁寄存器,允许其它设备能够访问共享寄存器。解锁操作和加锁操作相同,只是加锁过程往寄存器中写入“1”,而解锁操作写入到资源锁的数值是“0”。两种操作的工作过程完全相同。
在实际的电路结构中,加锁的意义在于用资源锁去屏蔽PCI从设备101,PCI桥主控器108的写信号是否有效。图2中,当PCI从设备加锁成功,用资源锁的输出信号220去屏蔽主控器写信号181,输出210信号有效,保证PCI从设备能对共享寄存器操作。如当PCI桥主控器加锁成功,其资源锁204输出的反馈信号230使主控设备写信号181信号的输出有效,保证PCI桥主控器108的写信号能够对共享寄存器操作。
对资源锁寄存器的加锁流程参考图5;解锁过程类似,只是写“1”改为写“0”。
本发明所用的资源锁201、204如图3所示。D触发器284是PCI桥主控器108的资源锁寄存器,另一个D触发器281是PCI从设备101的资源锁寄存器。当PCI从设备要对201加锁操作时,写出的数据112,写信号116和PCI主控器的资源锁寄存器284提供的反馈信号230相与。如果108已经加锁成功,230为高电平,相与后输出为低电平,经过116选择输入到201的数据就是低电平,加锁不成功。相反如果108没有加锁,则230为低,经过一级与门输出的数据和112保持一致,再用116选择从与门输出的结果到D触发器281的输入端,加锁操作成功。在PCI从设备没有执行加锁操作时,写信号116无效,选择220输入到D触发器281的输入端。始终保持着寄存器中的数据。
假如PCI桥主控器108要对资源锁M做加锁操作时,写信号181,写出的数据183先经过一级固定优先级的判断电路,再和资源锁S的反馈信号220相与后,经过181的选择输入D触发器284。固定优先级是通过一个三输入与门来实现的。图中缺省是PCI从设备的优先级高于PCI桥主控器。当设备双方同时加锁操作时,写信号116和181都为高电平,在116和183,181相与后,输出为低电平,这样经过181的选择输入到284的信号也是低电平。如果只有108一方需要对204加锁,此时PCI从设备的写信号116为低电平;经过固定优先级的判断电路,116和181,183相与输出为高电平,再和D触发器281的反馈信号220相与后输出还是高电平,最后,由181选择相与后的高电平输出到D触发器284的输入端。加锁操作成功。在PCI主控器没有执行操作时,写信号181保持低电平,选择反馈信号230输入到D触发器284的输入端,寄存器中的数值保持不变。
最后再用资源锁寄存器204,201的输出信号和各自的写信号经过一级与门后输出到数据选择器400。如果PCI从设备101对D触发器281加锁成功,220输出为高电平,经过与门后,输出信号210和写信号116保持一致。当PCI主控器对D触发器284加锁成功,230输出为高电平,经过与门后,输出的信号240和181保持一致。经过图3中的电路,就实现了用资源锁对每个设备写信号的控制。
图4是实现数据选择器的电路,当资源锁S,M都没有加锁时,输出的210,240都是低电平,210和数据114相与输出为低电平,240和数据185相与输出也为低电平,只有数据150,和210,240经过三输入与门后保持不变。经过最后一级三输入或门后,数据150输出到122。当210为高电平,240为低电平时,185和240相与为低电平,150与210相与后输出为低电平,只有114经过第一级相与操作后能保持不变,最后通过三输入或门时,114能输出到122。同样道理,当210为低电平,240为高电平时,数据185能保持不变的输出到122。这样通过一级与门,和一级或门后,用210,240信号控制了输入数据的选择过程。
对资源锁寄存器加锁是对共享寄存器操作的先决条件,加锁成功以后就可以用资源锁寄存器控制的有效写信号,选择设备的总线输入信号。参考图3所示数据选择电路。当PCI从设备加锁成功以后,执行写操作,PCI从设备101的资源锁201控制其输出信号210有效,打开数据选择器400,使数据信号114能够输出到共享寄存器的输入端122。当PCI桥主控器加锁成功以后,执行写操作输出240有效,打开数据信号185的数据选择器400,使PCI桥主控器108的数据能输出到共享寄存器输入端122。如果两个设备都没有对共享寄存器操作时,就保持共享寄存器中的数值。此时PCI从设备101的输出信号210,和PCI桥主控器108的输出信号240均无效,把共享寄存器的输出端150的数值直接输出到共享寄存器的输入端122端口。
最后从PCI从设备101或者是PCI桥主控器108中输出的数据从共享寄存器的输入端122的选择输出端口,在系统时钟总线100的上升沿写入到共享寄存器中。至此异步时钟域设备对共享寄存器的写入操作执行完毕。
设备对共享寄存器的读出过程比较简单。共享寄存器中的数据可以直接从共享寄存器的输出端150输出,在PCI从设备101的读信号有效时,把数据放在数据线112上,再用PCI从设备的时钟同步以后直接输入到内部的数据总线上。同样道理在PCI桥主控器108做读操作时,数据共享寄存器的输出端150在主控器读有效时,输出到数据线183上,再用主控器的时钟同步以后,输入到内部数据总线上。这样通过时钟域的转换,就能读到稳定的寄存器数值。因此在执行读操作时,可以保证每个设备能同时读取共享寄存器中的数值。
本发明还可以做功能扩充,通过增加主控器及其配套的资源锁,用同样的反馈控制机制还可以实现3条总线或者是4条总线以至于更多路的主控器访问一个共享存储器。这样在PCI桥,多CPU工作系统和所有需要用到共享存储器访问的地方都可以使用这种高效率的电路结构。