FW: SCE-MI 2.0 semantics queston

From: Brian Bailey <bbaileyconsulting_at_.....>
Date: Wed Jun 13 2007 - 07:34:02 PDT
Forwarding to the refrlector

-----Original Message-----
From: Bernard Deadman [mailto:bdeadman@sdvinc.com] 
Sent: Wednesday, June 13, 2007 5:45 AM
To: Brian Bailey
Subject: SCE-MI 2.0 semantics queston

We're beginning to look at how we convert our existing SCE-MI 1.1 
generator to create 2.0 compliant code, however we've come across a 
semantic question to which I can't see an obvious solution.  Our 1.1 
"slave" transactors need to obtain response values from the C++ domain 
once they recognize a transaction coming from the DUT.  At present they 
stall the controlled clock while they send a message to the workstation 
and wait for a response.  I believe the nearest equivalent to this in 
the function-based 2.0 environment is for the synthesizable transactor 
to make a function call to the C++, and for the response to be provided 
in a nested call into the Verilog-domain, ie nest figure 8 inside figure 
9 (page 34).

My concern is how we handle the response in the synthesizable Verilog.  
Our generated verilog is a classic two-process style, where one process 
is combinational and calculates the next state(s), while the second 
updates the latches.  It's essentially:


always @ *
    begin
    // combinational process to calculate state & transaction data

    new_state = ???? ;

    end


always @ ( posedge clock or negedge reset )
    begin
    // latch the new state

    state <= new_state;

    end


How are the semantics of the function call expected to work in this 
coding style?  My concern is if we place the function in the 
combinational process, for example

always @ *
    begin
    // combinational process to calculate state & transaction data

    if( signalA && signalB )
        begin
        new_data = my_function( detected_transaction );
       end

    end

while correct, the function can potentially get called many times, 
generating a lot more SCE-MI traffic than necessary, with a consequent 
performance issue.


If I read the documentation correctly, we're also not allowed to embed 
clock control macro's in function-based transactors.  Was there a reason 
this was not allowed?  I can see situations where we've "stolen" an 
un-controlled clock cycle to move or re-calcuate data inside the 
transactor after communication with the testbench, however the apparent 
inability to do this in function-based 2.0 is going to force us to use 
more multi-port storage than we presently generate.

Thanks in advance for your help and advice.

Regards

Bernard
PS - I was also going to send these questions to John Stickley as you 
suggested, however I don't have an up-to-date address for him.

-- 
====================================================================
SDV Inc.   Austin,   TX,   USA    Phone:   (512) 431-5126
Sussex, England   Phone +44-(0)1243-842111  Mobile +44-(0)798-1982762
Email:    bdeadman@sdvinc.com   Website:   www.sdvinc.com




-- 
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
Received on Wed Jun 13 07:33:15 2007

This archive was generated by hypermail 2.1.8 : Wed Jun 13 2007 - 07:35:06 PDT