280 likes | 464 Views
OCP TLM for Architectural Modeling. Tim Kogel, CoWare Inc. Outline. System-Level Design Working Group Update SLD WG Charter Latest 2.1.2 release Standards based Architectural Modeling TLM Standardization Overview The new OCP TL3 Channel Transaction Recording.
E N D
OCP TLM for Architectural Modeling Tim Kogel, CoWare Inc.
Outline • System-Level Design Working Group Update • SLD WG Charter • Latest 2.1.2 release • Standards based Architectural Modeling • TLM Standardization Overview • The new OCP TL3 Channel • Transaction Recording
OCP-IP System Level Design WG Charter • TLM modeling of the Open Core Protocol • Proliferation of open standards • Proliferation of ESL design to master SoC complexity • Metrics/goals • Up-to-date SystemC modeling library available • Improved time-to-market through streamlined ESL • Adoption of OCP based ESL methodology and tooling
OCPIP SLD WG • Active members: • Nokia (Chair), Sonics, TI, CoWare, Jeda, GreenSocs • Achievements • Channels, Monitors, Adapters • Methodology, Abstraction levels, examples • CoWare contribution • SCV based performance monitor • Methodology for OCP based Architectural Modeling • Unified monitor interface
Release 2.1.2 (February 2006) • Update of layer adapters (Sonics) • TL0/TL1 adapters support full OCP configurability • Assertion package (Jeda) • Verification of OCP SystemC models • Unified monitor API (CoWare) • Similar API for TL1, TL2, and TL3 • Enable user-defined OCP monitors • Hook arbitrary number of OCP monitors • TL3 channel for architectural modeling (CoWare)
Outline • System-Level Design Working Group Update • SLD WG Charter • Latest 2.1.2 release • Standards based Architectural Modeling • TLM Standardization Overview • The new OCP TL3 Channel • Transaction Recording
OCP based Architectural Modeling • Compliance with OSCI TLM standard • Re-define TL3 channel on-top of OSCI TLM • Map TL2 on-top of OSCI TLM • Interoperability of different TLM use-cases • OCP/PV transactors • Examples • Initiator, target, simple bus, simple systems • Methodology whitepaper
OSCI TLM Standard • Define foundation for Transaction Level Modeling • Blocking/non-blocking • Blocking: interface should be called from a sc_thread • Non-blocking: interface can also be called from sc_method • Uni-directional versus bi-directional communication Bi-directional Uni-directional RESP transport(REQ&) void put(T&)void get(T&) Blocking bool nb_put(T&)bool nb_get(T&) Non-Blocking N/A?
packets TL3 total event ordering, burst-level annotation functional specification, generic architecture exploration burst of words TL2 burst-level and word-level annotation exploration of OCP based architecture word cycle accurate TL1 100% cycle accurate performance profiling OCPIP TLM Abstraction Levels Communication Accuracy Data Accuracy Timing Accuracy Addressed Design Problems domain specific MoC tokens causality, partial event ordering algorithm design TLM RTL bitvector cycle accurate synthesis
Memory #2 Memory #1 Memory #3 Memory #4 Architectets View: Exploration Evaluation Results: Producer #0 Producer #1 Bus I Bus II Bus III Bridge Bridge
void Master::response_thread(){ OCPTL2Response resp; while (true) { wait(ocp->ResponseStartEvent); ocp->getOCPResponse(resp); ocp->acceptResponse(10); } class OCPTL2Response{ SRespType SResp; int DataLength; int SThreadID; int prio; …} SystemC based OCP Channel OCP Channel OCP Master Request Response
OSCI TLM Compliant OCP TL3 Channel Master Slave tlm_nonblocking_put_if tlm_get_peek_if request response tlm_get_peek_if tlm_nonblocking_put_if
requestStartEvent sendRequest() requestEndEvent acceptRequest() responseStartEvent sendResponse() responseEndEvent acceptResponse() Un-timed OCP TL3 Channel Primitives slave master ts,accept methodCall() eventNotification tresponse tm,accept
Timed TL3 Channel Primitives slave master sendRequest(trequest) trequest accept(ts,accept) requestStart requestStart ts,accept sendResponse(tresponse) requestEnd tresponse responseStart responseStart tm,accept accept(tm,accept) responseEnd
taccept tdelay Mixing TLM Use-Cases to enable Model Reuse Initiator TL2 My_thread { getReqBlocking(REQ); acceptReq(Δtaccept) RESP transport(REQ); sendResp(RESP, Δtdelay); } AV-PV adaptor Target PV
trace monitor performance monitor custom monitor New OCP Monitor Interface OCP Channel OCP Master OCP Slave
Summary • Methodology document • Available to public on ocpip.org • OCP based performance modeling • Demonstrate OSCI TLM standard compliance • Implement TL3 channel on top of OSCI TLM 1.0 standard • Coding guidelines and examples • Traffic generator, slaves, multi-master bus, systems • Unified Monitor Interface • ASCII based transaction tracing • SCV based transaction recording
OCP TL3 to OSCI TLM mapping (1) OCP_TL3_MasterIF tlm_nonblocking_put_if bool sendOCPRequest(const R &r) bool nb_put(const T &t) bool requestInProgress() !( bool nb_can_put() ) sc_event& RequestEndEvent() sc_event& ok_to_put() sendOCPRequestBlocking (derived) sc_event& RequestStartEvent() (derived)
OCP TL3 to OSCI TLM mapping (2) OCP_TL3_SlaveIF tlm_get_peek_if bool getOCPRequest(R &r) bool nb_peek(T &t) bool requestInProgress() bool nb_can_peek() sc_event& RequestStartEvent() sc_event& ok_to_peek() bool acceptRequest() T nb_get() getOCPRequestBlocking (derived) sc_event& RequestEndEvent() (derived)
OSCI TLM based Generic TL2 Channel Master Interface Slave Interface request channel response channel TLM TL2 Master Protocol TLM TL2 Slave Protocol delayQ put get TLM get put delayQ TLM
AV: Scope • AV abstraction enables architecture exploration • Protocol agnostic synchronization interface • Timing information sufficient for trade-off analysis • Interfaces well with PV models and IA ISS’s • HW synchronization can be taken into account • AV abstraction is useful to determine HW/SW partitioning, interconnect configuration
OCP Timing Model thread(){ ocp->sendRequest(req); ... wait (ocp->ReqEndEvent); ... } thread(){ ocp->getRequest(req); wait(t_accept) ocp->accept(); wait(t_response) ocp->sendResponse(); } OCP Channel OCP master OCP slave slave busy taccept tresponse
OCP Timing Model thread(){ ocp->sendRequest(req); ... wait (ocp->ReqEndEvent); ... } thread(){ ocp->getRequest(req); ... ocp->accept(ts,accept); wait(ts,accept) ocp->sendResponse(); } OCP Channel OCP master OCP slave slave blocked taccept process response tresponse
tt,accept acceptReq(tt,accept) reqEnd tt,delay … startResp() Compositional Timing Model bandwidth taccept tdelay bus target initiator reqStart sendReq() tbus,pending getReq() acceptReq(ttransfer) reqStart sendReq() reqEnd tbus,ransfer