RE: [tlmwg] Revisit of the TLM2.0 phases rules

From: Veller, Yossi <Yossi_Veller@mentor.com>
Date: Thu Jan 06 2011 - 08:35:49 PST

Hi Bart,

 

I changed the example to reflect this chain of mails.

 

t= t1 I1 sends GP1(BEGIN_REQ) to B

                           B passes the GP1(BEGIN_REQ) to T

                           T computes that the written data takes 310 NS (because of the recommendation of rule 16.2.6 b)

                                    and schedules an inner event notification to t1+310 NS.

                           I2 sends GP2(BEGIN_REQ) to B, B queues it in a PEQ (because of the BEGIN_REQ rule 16.2.6 e).

t= t1+310 NS T sends GP1(END_REQ) and B passes it to I1 then B takes GP2(BEGIN_REQ) from the PEQ and calls T.

                           T returns TLM_UPDATED and changes the phase to END_REQ and B sends GP2(END_REQ) to I2.

                           T schedules an inner event notification to t1+319 NS.

t= t1+319 NS T sends GP2(BEGIN_RESP) and B passes it to I2.

                           I2 computes that the read data takes 311 NS (because of the recommendation of rule 16.2.6 c)

                                   and schedules an inner event notification to t1+640 NS.

t= t1+640 NS I2 sends GP2(END_RESP) and B passes it to T (and the read finishes)

                          T sends GP1(BEG_RESP) to I1 which replies with TLM_COMPLETED (and the write finishes)

 

The outcome is that in a perfectly good TLM2.0 system two transactions each of which should have taken 320 NS, finish BOTH after 640 NS. This seems to me a distortion of the timing and the removal of the response exclusion rule will fix this scenario.

 

Regards

Yossi

 

From: Bart Vanthournout [mailto:Bart.Vanthournout@synopsys.com]
Sent: Thursday, January 06, 2011 4:35 PM
To: Veller, Yossi; john.aynsley@doulos.com; robert.guenzel@greensocs.com
Cc: P1666 Technical WG; tlmwg@lists.systemc.org
Subject: RE: [tlmwg] Revisit of the TLM2.0 phases rules

 

 

Yossi,

 

I just started reading through this chain of mails so sorry but I want to get back to the example, I think you treat the protocol as an end-to-end protocol while the rules only apply per socket.

 

t= t1 I1 sends GP1(BEGIN_REQ) to B

                                B passes the GP1(BEGIN_REQ) to T

                                T computes that the written data takes 310 NS (because of rule 16.2.6 b) and waits.

                                I2 sends GP2(BEGIN_REQ) to B, B queues it in a PEQ (because of the BEGIN_REQ rule 16.2.6 e).

t= t1+310 NS T sends GP1(END_REQ) and B passes it to I1 then B takes GP2(BEGIN_REQ) from the PEQ and calls T.

                                T returns TLM_UPDATED and changes the phase to END_REQ and B sends GP2(END_REQ) to I2.

t= t1+319 NS T sends GP2(BEGIN_RESP) and B passes it to I2.

                                I2 computes that the read data takes 311 NS (because of rule 16.2.6 c) and waits.

t= t1+320 NS T sends GP1(BEGIN_RESP) and B pushes it into the PEQ (because of the BEGIN_RESP rule16.2.6 f).

t= t1+640 NS I2 sends GP2(END_RESP) and B passes it to T (and the read finishes)

                                B sends the GP1(BEG_RESP) to I1 which replies with TLM_COMPLETED

                                B sends the GP1(END_RESP) to T (and the write finishes)

 

Rule 16.2.6.f) says: For the base protocol, a target or interconnect component shall not respond to a new transaction

through a given socket with phase BEGIN_RESP until it has received END_RESP from the upstream component for the immediately preceding transaction or until a component has completed the previous transaction over that hop by returning TLM_COMPLETED. This is known as the response exclusion rule.

 

 

To me that means that the example is wrong at t = t1+320 NS, the target cannot send GP2( BEGIN_RESP) over its TLM2 socket since it did not receive an END_RESP for GP1.

In order to accomplish what you are looking for (I think) the bus to respond with a END_RESP for GP1 at time t =t1+319NS and pass the BEGIN_RESP to I1. This allows the target to continue with an BEGIN_RESP for GP2 and the bus can also forward to initiator I2 since the response exclusion rule applies per socket.

 

So I see the following happening:

 

t= t1 I1 sends GP1(BEGIN_REQ) to B

                                B passes the GP1(BEGIN_REQ) to T

                                T computes that the written data takes 310 NS (because of rule 16.2.6 b) and waits.

                                I2 sends GP2(BEGIN_REQ) to B, B queues it in a PEQ (because of the BEGIN_REQ rule 16.2.6 e).

t= t1+310 NS T sends GP1(END_REQ) and B passes it to I1 then B takes GP2(BEGIN_REQ) from the PEQ and calls T.

                                T returns TLM_UPDATED and changes the phase to END_REQ and B sends GP2(END_REQ) to I2.

t= t1+319 NS T sends GP2(BEGIN_RESP) and B returns GP2(END_RESP) to T, to allow it to continue

B passes GP2(BEGIN_RESP) to I2.

                                I2 computes that the read data takes 311 NS (because of rule 16.2.6 c) and waits.

t= t1+320 NS T sends GP1(BEGIN_RESP) and B returns GP2(END_RESP) to T, to allow it to continue

                                B passes GP1(BEGIN_RESP) to I1 which replies with TLM_COMPLETED

t= t1+640 NS I2 sends GP2(END_RESP) to B (and the read finishes)

                                

 

At least this is my reading of the standard….

 

Bart

-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Thu Jan 6 08:35:04 2011

This archive was generated by hypermail 2.1.8 : Thu Jan 06 2011 - 08:35:08 PST