| Dedication | p. v |
| Preface | p. xi |
| Why this Book | p. xi |
| Prerequisites for this Book | p. xii |
| Book Conventions | p. xiii |
| About the Examples | p. xiv |
| How to Use this Book | p. xiv |
| SystemC Background | p. xv |
| The Evolution of SystemC | p. xv |
| Open SystemC Initiative | p. xvii |
| An Overview to System Design Using SystemC | p. 1 |
| Introduction | p. 1 |
| Language Comparison | p. 2 |
| Design Methods | p. 3 |
| What's Next | p. 3 |
| Enhancing Productivity with SystemC | p. 3 |
| TLM-Based Methodology | p. 11 |
| Transaction-Level Modeling Overview | p. 11 |
| Abstraction Models | p. 13 |
| Another Look at Abstraction Models | p. 15 |
| TLM-Based Methodology | p. 16 |
| Summary | p. 23 |
| Overview of SystemC | p. 25 |
| C++ Mechanics for SystemC | p. 26 |
| SystemC: A C++ Class for Hardware | p. 30 |
| Overview of SystemC Components | p. 33 |
| SystemC Simulation Kernel | p. 38 |
| Data Types | p. 41 |
| Numeric Representation | p. 41 |
| Native Data Types | p. 43 |
| Arithmetic Data Types | p. 43 |
| Boolean and Multi-Value Data Types | p. 45 |
| Fixed-Point Data Types | p. 47 |
| Operators for SystemC Data Types | p. 51 |
| Higher Levels of Abstraction and the STL | p. 52 |
| Choosing the Right Data Type | p. 55 |
| Exercises | p. 56 |
| Modules | p. 57 |
| A Starting Point: sc_main | p. 57 |
| The Basic Unit of Design: SC_MODULE | p. 59 |
| The SC_MODULE Class Constructor: SC_CTOR | p. 60 |
| The Basic Unit of Execution: SystemC Process | p. 61 |
| Registering the Simple Process: SC_THREAD | p. 62 |
| Completing the Simple Design: main.cpp | p. 64 |
| Alternative Constructors: SC_HAS_PROCESS | p. 64 |
| Two Basic Styles | p. 66 |
| Exercises | p. 70 |
| A Notion of Time | p. 71 |
| sc_time | p. 71 |
| sc_start() | p. 72 |
| sc_time_stamp () and Time Display | p. 73 |
| wait(sc_time) | p. 74 |
| sc_simulation_time(), Time Resolution and Time Units | p. 75 |
| Exercises | p. 76 |
| Concurrency | p. 77 |
| sc_event | p. 78 |
| Simplified Simulation Engine | p. 79 |
| SC_THREAD | p. 81 |
| Dynamic Sensitivity for SC_THREAD::wait() | p. 81 |
| Another Look at Concurrency and Time | p. 83 |
| Triggering Events: .notify() | p. 86 |
| SC_METHOD | p. 90 |
| Dynamic Sensitivity for SC_METHOD: next_trigger() | p. 92 |
| Static Sensitivity for Processes | p. 93 |
| dont_initialize | p. 96 |
| sc_event_queue | p. 97 |
| Exercises | p. 98 |
| Basic Channels | p. 99 |
| Primitive Channels | p. 100 |
| sc_mutex | p. 100 |
| sc_semaphore | p. 102 |
| sc_fifo | p. 104 |
| Exercises | p. 107 |
| Evaluate-Update Channels | p. 109 |
| Completed Simulation Engine | p. 111 |
| sc_signal, sc_buffer | p. 113 |
| sc_signal_resolved, sc_signal_rv | p. 116 |
| Template Specializations of sc_signal Channels | p. 118 |
| Exercises | p. 120 |
| Structure | p. 121 |
| Module Hierarchy | p. 121 |
| Direct Top-Level Implementation | p. 123 |
| Indirect Top-Level Implementation | p. 124 |
| Direct Sub-Module Header-Only Implementation | p. 125 |
| Indirect Sub-Module Header-Only Implementation | p. 125 |
| Direct Sub-Module Implementation | p. 126 |
| Indirect Sub-Module Implementation | p. 127 |
| Contrasting Implementation Approaches | p. 128 |
| Exercises | p. 128 |
| Communication | p. 129 |
| Communication: The Need for Ports | p. 129 |
| Interfaces: C++ and SystemC | p. 130 |
| Simple SystemC Port Declarations | p. 135 |
| Many Ways to Connect | p. 136 |
| Port Connection Mechanics | p. 138 |
| Accessing Ports From Within a Process | p. 141 |
| Exercises | p. 142 |
| More on Ports | p. 143 |
| Standard Interfaces | p. 143 |
| Static Sensitivity Revisited | p. 147 |
| Specialized Ports | p. 149 |
| The sc_port[left angle bracket right angle bracket] Array | p. 154 |
| SystemC Exports | p. 158 |
| Connectivity Revisited | p. 164 |
| Exercises | p. 166 |
| Custom Channels and Data | p. 167 |
| A Review of Channels and Interfaces | p. 167 |
| The Interrupt, a Custom Primitive Channel | p. 168 |
| The Packet, a Custom Data Type for SystemC | p. 170 |
| The Heartbeat, a Custom Hierarchical Channel | p. 174 |
| The Adaptor, a Custom Primitive Channel | p. 176 |
| The Transactor, a Custom Hierarchical Channel | p. 180 |
| Exercises | p. 186 |
| Advanced Topics | p. 187 |
| sc_clock, Predefined Processes | p. 187 |
| Clocked Threads, the SC_CTHREAD | p. 189 |
| Programmable Hierarchy | p. 193 |
| Debugging and Signal Tracing | p. 197 |
| Dynamic Processes | p. 199 |
| SC_FORK/SC_JOIN | p. 204 |
| Error and Message Reporting | p. 207 |
| Other Libraries: SCV, ArchC, and Boost | p. 211 |
| Exercises | p. 212 |
| Odds & Ends | p. 213 |
| Determinants in Simulation Performance | p. 213 |
| Features of the SystemC Landscape | p. 218 |
| Next Steps | p. 222 |
| Acknowledgments | p. 227 |
| List of Figures | p. 229 |
| Notes | p. 237 |
| Index | p. 239 |
| Table of Contents provided by Ingram. All Rights Reserved. |