spacer spacer spacer spacer spacer
head01 head02
head03
head04 head05 head06 spacer spacerContact Us
menu00
Overview
ten_b
News
ten_c
Events
ten_c
Technical Documents
ten_c
Comments
ten_c
Case Study WG
ten_c
Language WG
ten_c
Member Registration
ten_c
List of Members
ten_c
Rules
ten_c
List of Endorsers
ten_c
Notes
ten_c
ten_c
ten_c
spacer
return

News
spacer
spacer
July 2, 2002

STOC (SpecC Technology Open Consortium) Announce of approved issues of the 4th General Meeting


From this year, General Meeting was done through e-mail.
This is the announcement that of all the approving Issues are agreed from all members.

Approved Issues are:
1. Appointment of STOC Officials
2. Financial Report of the Year 2001
3. Year 2002 Activities
4. Year 2002 Financial Plans
5. Approval of SpecC v2.0 specification



Note:
1. Officials in the year 2002

Chairperson:
Kiichiro Tamaru (Toshiba)
Vice-chairpersons:
Yukio Kunimine (GAIO Technology)
Hiroshi Monden (NEC)
Case Study WG
Leader:
Prof.Yoshihiro Matsumoto (Musashi Institute of Technology)
Sub-Leader:
Masato Igarashi (Toshiba)
Language Spec. WG
Leader:
Masahiro Fujita (University of Tokyo)
Sub-Leader:
Masaki Ito (Hitachi)
 
Daniel Gajski (University of California Irvine)
Secretariat:
Ken Chiboshi (Soliton Syetems)


2. SpecC 2.0 refined points:


[1] Semantics of par
In SpecC 1.0, there have been some ambiguities in the semantics of parallel behaviors.
In SpecC 2.0, it was defined clearly as follows;
- Behaviors in a par block begin at the same time and terminate at the same time.
- Statements in a behavior are executed sequentially but not always in continuous way.
- If behaviors B1 and B2 are in the same par block, and if statement st2 follows st1 in B1 and statement st3 is in behavior B2, then no deterministic order exists between st1, st2, and st3, except that termination of st1 precedes beginning of st2.
- The length of statement interval is quite small and infinitely close to 0 in "simulation time"
- Any kind of atomicity is not guaranteed between concurrent instances of behavior, which means that statements may be preempted at any time in their execution, even in the middle of memory accesses.

[2] Mutual exclusion
Since in the semantics of par, preemption and no atomicity for a sentence are defined, some special features are needed to control the mutual exclusive access.
SpecC 1.0 has no clear primitives for mutually exclusive access.
- Only one method in a channel instance can run at a time. Other methods in the channel instance can run after the previous method completes, or it executes a wait or waitfor statement. The methods in other channel instances can run independently.
- In hierarchical channels, i.e. a channel method call of other channel method, when it executes a wait statement, all channel mutexes of the current thread are released.
In SpecC, wait and waitfor are not bound to a channel, so every thread will have its own list of obtained mutexes.

[3] Synchronization semantics
In SpecC 2.0, the synchronization semantics in SCRC (SpecC reference compiler) version 1.x is clarified. However, the synchronization semantics is not defined as the language specification at this time.

[4] Exception handlers
While SpecC 1.0 limits interrupt points only after wait or waitfor statement, SpecC 2.0 allows interrupts and traps at any place chosen in a non-deterministic manner.

[5] Fixed-point data type
It was approved that SpecC should support the fixed point data type. The detailed implementation will be defined in the future version of SpecC.

[6] AND conditions for event wait statement
SpecC 2.0 allows new wait notation as;
wait (e1 && e2);
The semantics of this statement is to wait for both e1 and e2 events, but we don't care the arrival order. This statement is a shortcut of the following code;
behavior B_wait(in event e)
{
void main(void) { wait e; }
};
behavior B_andwait(in event e1, in event e2)
{
B_wait b1(e1);
B_wait b2(e2);
void main(void)
{
// Do something before wait (e1 && e2);
par {
b1.main();
b2.main();
}
// Do something after both e1 and e2 arrive
}
};

[7] Simple notation of par/pipe/try statement
In SpecC 2.0, we can replace
par { S1.main(); S2.main(); S3.main(); }
with
par { S1; S2; S3; }
or
par ( S1; S2; S3 );
as shortcuts. Same rule applies to pipe and try/trap/interrupt statement.

[8] Arbitrary statements in FSM statement
SpecC 2.0 allows arbitrary C language statements including function call in fsm as follows;
fsm{
s1:
goto s2; // state transition (allowed in SpecC1.0)
s2: {
if( local_i == 0 ) goto s1; // conditional state transition
goto s3; // default state transition (allowed in SpecC1.0)
}
s3: {
local_i = 1; // allow any C language statements (New)
...
goto s1;
}
};

[9] Extension of persistent annotation
In SpecC 1.0, the note construct is limited to a single annotation value of constant type (or constant expression, evaluated at compile time).
In SpecC 2.0 the syntax is extended to a list of values, or even a list of a list (...) of values, by using grammar rules similar to the ones for variable initializers as follows;
annotation = constant_expression
| '{' annotation_list '}'
annotation_list = annotation
| annotation_list ',' annotation

[10] Modeling RTL in SpecC
- Introduce FSMD and some related constructs for describing RTL model in SpecC.
- Detailed language extension is described in the document of "RTL Semantics according to Accelera Standard (revision 10/29/01)."

[11] RTL model of SpecC
FSMD constrct
Accellera RTL semantics is defibed by FSMD model, the object is expressed as a variable.
Some of objects can be expressed by SpecC1.0, but newly introduced expression by SpecC2.0 also there.
Accellera object:
SpecC expression:
uninterpreted variable
normal variable
port
port
storage (register)
buffered variable (*)
wire,bus in FSM
normal variable
wire, bus intra FSM
signal variable (*)
clock
event
reset
event or bool
(*) added in SpecC 2.0

[12] SpecC RTL model(3)
buffered variable, signal variable
Express the wire between FSMD communication
It is used as a event.
syntax
semantics
signal int x;
event x_e; buffered[x_e] int x_v;
x = 55;
x_v = 55; notify x_e;
y = x + 2;
y = x_v + 2;
wait x;
wait x_e;
notify x;
notify x_e;
wait (x == 5);
while(x_v != 5) {wait x_e;}
Express storage(register)
(e.g.)
buffered[CLK] int R1, R2; // event CLK update
buffered[CLK1,CLK2] int R3; // event CLK1, CLK2 update
R1 = R2; // R1, R2 swap
R2 = R1;
wait CLK;

[13] SpecC RTL model
signal variable
Express intra FSMD communication wire.
It is used as aevent.
syntax
semantics
signal int x;
event x_e; buffered[x_e] int x_v;
x = 55;
x_v = 55; notify x_e;
y = x + 2;
y = x_v + 2;
wait x;
wait x_e;
notify x;
notify x_e;
wait (x == 5);
while(x_v != 5) {wait x_e;}

[14] SpecC RTL model
Construct element fsmd
SpecC1.0 presents state base behavior by fsm.
SpecC2.0 introduced Accellera standard FSMD expression by fsmd.
(e.g.)
fsmd(CLK) {
    unsigned bit [31:0]    Data;                  // unmapped variable
    unsigned bit [31:0]    Ocount;
                  { Outport = 0;   Done = 0; }    // initial value set
    if (RST)      { State = S0; }                 // reset time behavior notation
    S0 :          { Done = 0;                     // every times behavior notation
                    if (Start != 0) goto S1;      // state transition
                    else  goto S0; }
    S1 :          { Data = Inport;
                          goto S2; }
    S2 :  ...
}


 

go_top

spacer