This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

对TI DATSHEET(CLA)的一个疑问



在5.2 CLA Pipeline Alignment(P35-P36)这一章节中,我对Example 5-1. Write Followed by Read - Read Occurs First与Example 5-2. Write Followed by Read - Write Occurs First不是很理解,看了很多遍,不知道作者想表达的什么意思,求救于各位高手,望予以解答,小弟在此先行谢过。

  • 大概意思:如果后一条语句B,要用到前一条语句A的结果。

    CPU:会自动停止B语句的流水线。等到A语句执行完后,再执行B。

    CLA:  不会自动停止B的流水线,要人为的插入L2 L3 L4三条等待指令,等到A语句完后,执行B

    这是我个人的理解,不知道对不对!

     

  • 这两条不都是CLA的指令码,我是问为什么CLA要插入三条指令,第一个不要插入任何指令

  • 谢谢您的回答,清帮我解决这个问题好吗

     

  • 举个例子

    第一条指令的功能是计算:A+B=C

    第二条指令的功能是计算:C+D=M

    第二条指令要用到第一条指令的计算结果C。由于有流水线,CLA在第一条指令没有执行完之前(也就是在没有计算出C之前),

    CLA就已经对第二条指令取指,译码(具体看CLA流水线)。

    如果不插入三个NOP,第二条指令使用的C,就不是第一条指令计算的结果。

    插入三个NOP,等待第一条语句计算完(计算出C),才能执行第二条指令。具体的过程,你要看CLA的流水线的各阶段,F1 F2 D1 D2 R1 R2 E W。

    表达能力有限,大概的意思应该是这样。

  • 楼上解释是正确的。

    通常来讲,如果都是CLA指令,都使用相同的流水线,应该没有问题,但这一章节讲的就是特例,比如后一条语句的8级流水线执行到R2时,需要去读前一条语句的运算结果,可它是在W才写入,所以为了使用这个结果,必须加入延时等待。这个例子是因为流水线的读和写是有时间差的,而这两条语句又互相有关系(使用同一个变量或寄存器)那么写程序时就需要人为处理了。

    具体就像楼上所说的,还是请仔细看一下流水线的各个阶段去了解一下。

  • 首先,感谢两位的回答,我看了一下,是不是这个意思:举个例子:

    MMOV16 @Reg1, MR3

    MMOV16 MR2, @Reg1

    这两条语句中第一条用到了Reg1,第二句中也用了Reg1,所以在CLA中我们要用三分MNOP指令来达到想要的结果,如果不加入MNOP指令,Reg1在第二句中仍然使用旧的值? 

  • 意思大概是这样,但不适用于你举的这个例子,因为它们是相同的MMOV16指令,那么执行的动作是完全一样的,其中一个在8级是怎样的,另一个也完全一样。

    上面所说的特例,是指分别有读和写,而后一个的读发生在前一个的写之前,就会遇到结果还没出来的问题。

    记得之前你问过一个关于MNOP的问题,我想应该解释的比较清楚了。。

  • 感谢您耐心的回答,在DATSHEET中,所举的例子不也是MMOV16 @Reg1, MR3,MMOV16 MR2, @Reg2.例子中不也是相同的MMOV16 指令码,这个是特例吗,另外,MMOV16 @Reg1, MR3是写,MMOV16 MR2, @Reg2读吗?

  • 是我没看清楚,上面的就是特例,但内容还是一样的。

    第一条语句中Reg1的值可能影响到Reg2的值,那么在Reg1还没写入时,Reg2还是原来的值,因此如果程序设计原意是希望得到Reg1写完后的Reg2的值,那么就需要加入MNOP,否则不需要,就如Example5-1。

    你再仔细理解一下这段话:

    In both the CLA pipeline the read operation occurs before the write. This means that if a read operation immediately follows a write, then the read will complete first as shown in Example 5-1. In most cases this does not cause a problem since the contents of one memory location does not depend on the state of another. For accesses to peripherals where a write to one location can affect the value in another location the code must wait for the write to complete before issuing the read as shown in Example 5-2.

  • 您很耐心,谢谢您,有几个问题:1:在CLA中,规定MMOV16 @Reg1, MR3是写,MMOV16 MR2, @Reg2读吗?2:您说“Reg1的值可能影响到Reg2的值”这个他们之间没有任何联系啊。

  • 1,不是;

    2,是可能,所以有两种情况,就出现了有的需要加入,有的不需要加入。

    我还是建议你仔细阅读那段话,纯粹是英语的理解问题,然后你画一下流水线的时序就清楚了。

  • 谢谢您的回答,MMOV16 @Reg1, MR3不是写,MMOV16 MR2, @Reg2不是读的话,那DATSHEET为什么举这个例子,不是说写紧跟着读,来用这个举例子的吗。那什么算是写,什么是读?