transaction level modeling of bus based systems with
play

Transaction-level modeling of bus-based systems with SystemC 2.0 - PowerPoint PPT Presentation

Transaction-level modeling of bus-based systems with SystemC 2.0 Ric Hilderink, Thorsten Grtker Synopsys, Inc. Efficient platform modeling Get to executable platform model ASAP Simulation speed >> 100k cycles/sec C DSP BUS


  1. Transaction-level modeling of bus-based systems with SystemC 2.0 Ric Hilderink, Thorsten Grötker Synopsys, Inc.

  2. Efficient platform modeling � Get to executable platform model ASAP � Simulation speed >> 100k cycles/sec µ C DSP BUS Arbiter MEM ASIC Moving from pin-level to transaction-level models (TLM) is mandatory! 2

  3. Outline Idea: � Based on an example show how SystemC 2.0 enables efficient platform modeling. � Introduce some key language elements in the process. 3

  4. Example: Simple bus model � Cycle-accurate transaction-level model. � “Simple” = – No pipelining – No split transactions – No master wait states – No request/acknowledge scheme – … NB: Of course, these features can be modeled at the transaction level 4

  5. Interface Method Calls (IMC) � Modules communicate via channels. � Channels implement interfaces. � An interface is a set of methods (functions). � Ports – Modules have ports. – Ports are connected to channels. – Modules access channels through ports. ... some_port->some_method(some_data); ... 5

  6. Interface Methods Calls (cont’d) module channel process port module::process() { ... port->some_method(42); ... } 6

  7. Hierarchical channels � Channels can be hierarchical, i.e. they can contain modules, processes, and channels. � A module that implements an interface is a hierarchical channel. module module hierarchical channel channel process process port port i/f 7

  8. Example system (napkin view) masters M1 M2 M3 BUS Arbiter slaves S1 S2 8

  9. SystemC 2.0 transaction-level model M1 M2 M3 clock BUS Arbiter S1 S2 9

  10. SystemC 2.0 transaction-level model M1 M2 M3 clock BUS Arbiter S1 S2 10

  11. SystemC 2.0 transaction-level model The bus is The bus is implemented as implemented as M1 M2 M3 a hierarchical clock a hierarchical channel! channel! BUS Arbiter S1 S2 11

  12. SystemC 2.0 transaction-level model Arbiter and slaves Arbiter and slaves M1 M2 M3 are implemented are implemented clock as channels too! as channels too! BUS Arbiter S1 S2 12

  13. SystemC 2.0 transaction-level model Arbiter has been Arbiter has been made a separate made a separate M1 M2 M3 module to allow clock module to allow for customization! for customization! BUS Arbiter S1 S2 13

  14. SystemC 2.0 transaction-level model Optionally, ports Optionally, ports can be connected can be connected M1 M2 M3 to multiple clock to multiple channels! channels! BUS Arbiter S1 S2 14

  15. SystemC 2.0 transaction-level model Optionally, ports Optionally, ports can be connected can be connected M1 M2 M3 sc_port<class IF, unsigned n_channels = 1> sc_port<class IF, unsigned n_channels = 1> to multiple clock to multiple channels! channels! BUS Arbiter S1 S2 15

  16. Rising clock edge Masters request Masters request M1 M2 M3 bus access. clock bus access. BUS Arbiter S1 S2 16

  17. Falling clock edge The bus has a The bus has a process that is process that is M1 M2 M3 sensitive to the clock sensitive to the falling edge. falling edge. BUS Arbiter S1 S2 17

  18. Falling clock edge The arbiter is called. The arbiter is called. It will grant a single It will grant a single M1 M2 M3 master access to clock master access to the bus. the bus. BUS Arbiter S1 S2 18

  19. Falling clock edge Then, a slave Then, a slave is accessed after is accessed after M1 M2 M3 consulting the clock consulting the memory map. memory map. BUS Arbiter S1 S2 19

  20. Arbiter M3 M2 S2 BUS Bus interfaces M1 S1 20 clock

  21. Master interfaces of the bus � Blocking: – Complete bursts – Used by high-level models � Non-blocking: – Cycle-based – Used by processor models � Direct: – Immediate slave access – Put SW debugger to work 21

  22. Blocking master interface � status burst_read(unique_priority, data*, start_address, length=1, lock=false); � status burst_write(unique_priority, data*, start_address, length=1, lock=false); � “Blocking” because call returns only after complete transmission is finished. � Master is identified by its unique priority. 22

  23. Dynamic Sensitivity � SystemC 1.0 – Static sensitivity � Processes are made sensitive to a fixed set of signals during elaboration � SystemC 2.0 – Static sensitivity – Dynamic sensitivity � The sensitivity (activiation condition) of a process can be altered during simulation (after elaboration) � Main features: events and extended wait() method 23

  24. Waiting wait(); // as in SystemC 1.0 wait(event); // wait for event wait(e1 | e2 | e3); // wait for first event wait(e1 & e2 & e3); // wait for all events wait(200, SC_NS); // wait for 200ns // wait with timeout wait(200, SC_NS, e1 | e2); wait(200, SC_NS, e1 & e2); 24

  25. Dynamic sensitivity Statically sensitive to clock MASTER � activated every cycle clock BUS Master won’t be Master won’t be status bus::burst_write(...) { activated until activated until ... transmission is wait(transmission_done); transmission is ... completed! completed! } 25

  26. Dynamic sensitivity Statically sensitive to clock MASTER � activated every cycle clock BUS Master won’t be Master won’t be status bus::burst_write(...) { Advantages: activated until activated until ... � Easy-to-use interface (blocking interface) transmission is transmission is wait(transmission_done); completed! ... completed! � Simulation speed } 26

  27. Non-blocking master interface � status get_status(unique_priority); � status read(unique_priority, data*, address, lock=false); � status write(unique_priority, data*, address, lock=false); � “Non-blocking” because calls return immediately. � Less convenient than blocking API but caller remains in control (needed e.g. for most processor models). 27

  28. Direct master interface � status direct_read(data*, address); � status direct_write(data*, address); � Provides direct access to slaves (using the bus’ address map). – Immediate access � � simulated time does not advance � � – No arbitration � Use for SW debuggers or decoupling of HW and SW. � Use with care! 28

  29. Arbiter M3 M2 S2 BUS Slave interface M1 S1 29 clock

  30. Slave interfaces � unsigned start_address(); address mapping � unsigned end_address(); � status read(data*, address); regular I/O � status write(data*, address); � status direct_read(data*, address); debug interface � status direct_write(data*, address); 30

  31. What’s so cool about transaction-level bus models? They are … � relatively easy to develop and extend � easy to use � fast – use of IMC � � function calls instead of HW signals � � and control FSMs – use of dynamic sensitivity � � reduce unnecessary � � process activations 31

  32. Key language elements used in the example � Interface method calls (IMC) � Hierarchical channels � Connecting ports to multiple channels � Dynamic sensitivity / waiting 32

  33. Conclusions SystemC 2.0 enables efficient platform modeling. � Ease of modeling � get to executable platform model ASAP � � � � Simulation speed Still not convinced? Try it out! (see following slides) 33

  34. How to install > cd <systemc_installation_directory>/examples/systemc > gtar zxvf simple_bus_v2.tgz This will create a directory 'simple_bus'. Go to this directory and build the executable, e.g. For gcc-2.95.2 on Solaris: See README.txt for > gmake -f Makefile.gcc detailed information! … Now you can run the executable, e.g. > simple_bus.x 34

  35. The testbench M1 M2 M3 clock BUS Arbiter see simple_bus_test.h S1 S2 35

  36. The testbench Blocking master: uses blocking bus interface to read M1 M2 M3 and write data clock BUS Arbiter Arbiter: Priority-based arbitration, supports bus locking S1 S2 36

  37. The testbench M1 M2 M3 clock Non-blocking master: Uses non-blocking bus interface for data I/O BUS Arbiter Direct master: uses direct interface of bus to print debug information S1 S2 37

  38. The testbench M1 M2 M3 clock Slow memory: configurable number Fast memory: of wait states zero wait states BUS Arbiter S1 S2 38

  39. The testbench (cont’d) � Most modules are configurable – Masters � Priority (not direct master) � Delay / timeout � Bus locking on/off (not direct master) – Slaves � Address ranges � Number of wait-states (only slow memory) – Bus, arbiter, direct master � Verbosity � Change parameter settings in simple_bus_test.h � See README.txt for details 39

  40. That’s it! Thank you and have fun trying it out!

Recommend


More recommend