前不久在做EDK11.2的6个实验,在lab6时遇到了个问题。
从前只用过9.1做过相关的实验,在9.1中,所用的总线为OPB,它的数据宽度是32位的。但是在11.2中所用到的是PLB总线,其数据宽度为64位的。那么问题就出来了,因为程序中所传输的数据是32位的,那么它是怎么匹配64位的数据宽度呢?
我们来看一下实验6中不同触发条件所导致的不同结果。在lab6中,我们需要实现的是记录当count变量传输给LED的值大于5时起记录之后的32个样本。如果是32位的数据总线,我们设置M2:TRIG2>0000_0005就可以实现了,那么64位呢?
触发条件设置窗口如下图所示,其中M0:TRIG0中包含了各种控制信号,M1:TRIG1为PLB的地址总线,M2:TRIG2为PLB的数据总线。从图中可以看出,PLB的地址总线宽度为32位,PLB的数据总线宽度为64位。
图中的设置如下:
M0:TRIG0==XXXX_XXXX_0XXX_XXXX,表示PLB_RNW=0,即此时PLB总线处于写状态。
M1:TRIG1==8140_0000,表示的是LED设备的基地址。
M2:TRIG2>0000_0005_0000_0005,表示数据大于5。
Trigger Condition Equation:M0 && M1,表示在写入LED设备基地址时,产生触发条件。
Depth:32,表示采样32个样本。
Storage Qualification:M0 && M1 && M2,表示存储大于5后的数据。
最后的结果如下:
现在我们修改M2:TRIG2>0000_0005_0000_0000。结果如下:
最后我们再次修改M2:TRIG2>0000_0000_0000_0005,结果如下:
从这几个不同设置,所显示出来的结果,我们可以看出,PLB总线在传输32位数据时,会把数据扩展成为64位,而其扩展的方式相当于重复传输2次所要传输的32为数据。
所以在设置触发条件的时候,还是需要认真想清楚设置的方法,否则就会出现令人困惑的问题。