|
Black_Frontmatter_O.pdf |
2 |
|
|
Anchor 1 |
6 |
|
|
Anchor 3 |
8 |
|
|
Anchor 4 |
8 |
|
|
Anchor 5 |
9 |
|
|
Anchor 6 |
10 |
|
|
Anchor 7 |
11 |
|
|
Anchor 8 |
12 |
|
|
Anchor 9 |
12 |
|
|
Anchor 10 |
13 |
|
|
Black_Ch01_O.pdf |
23 |
|
|
Chapter 1 |
23 |
|
|
Why SYSTEMC: ESL and TLM |
23 |
|
|
1.1 .Introduction |
23 |
|
|
1.2 .ESL Overview |
24 |
|
|
1.2.1 .Design Complexity |
24 |
|
|
1.2.2 .Shortened Design Cycle = Need For Concurrent Design |
25 |
|
|
1.2.2.1 .Traditional System Design Approach |
26 |
|
|
1.3 .Transaction-Level Modeling |
29 |
|
|
1.3.1 .Abstraction Models |
29 |
|
|
1.3.2 .An Informal Look at TLM |
30 |
|
|
1.3.3 .TLM Methodology |
32 |
|
|
1.3.3.1 .Algorithmic Modeling |
33 |
|
|
1.3.3.2 .Architectural Modeling |
34 |
|
|
1.3.3.3 .Virtual Software Development Platform |
34 |
|
|
1.3.3.4 .Hardware Refinement |
35 |
|
|
1.3.3.5 .Functional and Architectural Verification |
35 |
|
|
1.4 .A Language for ESL and TLM: SystemC |
36 |
|
|
1.4.1 .Language Comparisons and Levels of Abstraction |
37 |
|
|
1.4.2 .SystemC: IEEE 1666 |
38 |
|
|
1.4.3 .Common Skill Set |
38 |
|
|
1.4.4 .Proper Simulation Performance and Features |
38 |
|
|
1.4.5 .Productivity Tool Support |
39 |
|
|
1.4.6 .TLM Concept Support |
39 |
|
|
1.5 .Conclusion |
40 |
|
|
Black_Ch02_O.pdf |
41 |
|
|
Chapter 2 |
41 |
|
|
Overview of SystemC |
41 |
|
|
2.1 .C++ Mechanics for SystemC |
42 |
|
|
2.2 .SystemC Class Concepts for Hardware |
44 |
|
|
2.2.1 .Time Model |
44 |
|
|
2.2.2 .Hardware Data Types |
45 |
|
|
2.2.3 .Hierarchy and Structure |
45 |
|
|
2.2.4 .Communications Management |
45 |
|
|
2.2.5 .Concurrency |
46 |
|
|
2.2.6 .Summary of SystemC Features for Hardware Modeling |
46 |
|
|
2.3 .Overview of SystemC Components |
47 |
|
|
2.3.1 .Modules and Hierarchy |
47 |
|
|
2.3.2 .SystemC Threads and Methods |
47 |
|
|
2.3.3 .Events, Sensitivity, and Notification |
48 |
|
|
2.3.4 .SystemC Data Types |
49 |
|
|
2.3.5 .Ports, Interfaces, and Channels |
49 |
|
|
2.3.6 .Summary of SystemC Components |
50 |
|
|
2.4 .SystemC Simulation Kernel |
51 |
|
|
Black_Ch03_O.pdf |
53 |
|
|
Chapter 3 |
53 |
|
|
Data Types |
53 |
|
|
3.1 .Native C++ Data Types |
53 |
|
|
3.2 .SystemC Data Types Overview |
54 |
|
|
3.3 .SystemC Logic Vector Data Types |
55 |
|
|
3.3.1 .sc_bv. |
55 |
|
|
3.3.2 .sc_logic and sc_lv. |
56 |
|
|
3.4 .SystemC Integer Types |
57 |
|
|
3.4.1 .sc_int.. and sc_uint. |
57 |
|
|
3.4.2 .sc_bigint.. and sc_biguint. |
57 |
|
|
3.5 .SystemC Fixed-Point Types |
58 |
|
|
3.6 .SystemC Literal and String |
61 |
|
|
3.6.1 .SystemC String Literals Representations |
61 |
|
|
3.6.2 .String Input and Output |
62 |
|
|
3.7 .Operators for SystemC Data Types |
63 |
|
|
3.8 .Higher Levels of Abstraction and the STL |
65 |
|
|
3.9 .Choosing the Right Data Type |
66 |
|
|
3.10 .Exercises |
66 |
|
|
Black_Ch04_O.pdf |
68 |
|
|
Chapter 4 |
68 |
|
|
Modules |
68 |
|
|
4.1 .A Starting Point: sc_main |
68 |
|
|
4.2 . The Basic Unit of Design: SC_MODULE |
70 |
|
|
4.3 .The SC_MODULE Class Constructor: SC_CTOR |
71 |
|
|
4.4 .The Basic Unit of Execution: Simulation Process |
72 |
|
|
4.5 .Registering the Basic Process: SC_THREAD |
73 |
|
|
4.6 .Completing the Simple Design: main.cpp |
74 |
|
|
4.7 .Alternative Constructors: SC_HAS_PROCESS |
74 |
|
|
4.8 .Two Styles Using SystemC Macros |
76 |
|
|
4.8.1 .The Traditional Coding Style |
76 |
|
|
4.8.2 .Recommended Alternate Style |
77 |
|
|
4.9 .Exercises |
78 |
|
|
Black_Ch05_O.pdf |
80 |
|
|
Chapter 5 |
80 |
|
|
A Notion of Time |
80 |
|
|
5.1 .sc_time |
80 |
|
|
5.1.1 .SystemC Time Resolution |
81 |
|
|
5.1.2 .Working with sc_time |
82 |
|
|
5.2 .sc_time_stamp() |
82 |
|
|
5.3 .sc_start() |
83 |
|
|
5.4 .wait(sc_time) |
84 |
|
|
5.5 .Exercises |
85 |
|
|
Black_Ch06_O.pdf |
86 |
|
|
Chapter 6 |
86 |
|
|
Concurrency |
86 |
|
|
6.1 .Understanding Concurrency |
86 |
|
|
6.2 .Simplified Simulation Engine |
89 |
|
|
6.3 .Another Look at Concurrency and Time |
91 |
|
|
6.4 .The SystemC Thread Process |
92 |
|
|
6.5 .SystemC Events |
93 |
|
|
6.5.1 Causing Events |
94 |
|
|
6.6 .Catching Events for Thread Processes |
95 |
|
|
6.7 .Zero-Time and Immediate Notifications |
96 |
|
|
6.8 .Understanding Events by Way of Example |
99 |
|
|
6.9 .The SystemC Method Process |
102 |
|
|
6.10 .Catching Events for Method Processes |
104 |
|
|
6.11 .Static Sensitivity for Processes |
104 |
|
|
6.12 .Altering Initialization |
107 |
|
|
6.13 .The SystemC Event Queue |
108 |
|
|
6.14 .Exercises |
109 |
|
|
Black_Ch07_O.pdf |
110 |
|
|
Chapter 7 |
110 |
|
|
Dynamic Processes |
110 |
|
|
7.1 .Introduction |
110 |
|
|
7.2 .sc_spawn |
110 |
|
|
7.3 .Spawn Options |
112 |
|
|
7.4 .A Spawned Process Example |
113 |
|
|
7.5 .SC_FORK/SC_JOIN |
114 |
|
|
7.6 .Process Control Methods |
117 |
|
|
7.7 . Exercises |
118 |
|
|
Black_Ch08_O.pdf |
119 |
|
|
Chapter 8 |
119 |
|
|
Basic Channels |
119 |
|
|
8.1 .Primitive Channels |
120 |
|
|
8.2 .sc_mutex |
120 |
|
|
8.3 .sc_semaphore |
122 |
|
|
8.4 .sc_fifo |
124 |
|
|
8.5 .Exercises |
126 |
|
|
Black_Ch09_O.pdf |
127 |
|
|
Chapter 9 |
127 |
|
|
Evaluate-Update Channels |
127 |
|
|
9.1 .Completed Simulation Engine |
128 |
|
|
9.2 .SystemC Signal Channels |
130 |
|
|
9.3 .Resolved Signal Channels |
133 |
|
|
9.4 .Template Specializations of sc_signal Channels |
135 |
|
|
9.5 .Exercises |
136 |
|
|
Black_Ch10_O.pdf |
137 |
|
|
Chapter 10 |
137 |
|
|
Structure |
137 |
|
|
10.1 .Module Hierarchy |
137 |
|
|
10.2 .Direct Top-Level Implementation |
139 |
|
|
10.3 .Indirect Top-Level Implementation |
139 |
|
|
10.4 .Direct Submodule Header-Only Implementation |
140 |
|
|
10.5 .Direct Submodule Implementation |
140 |
|
|
10.6 .Indirect Submodule Header-Only Implementation |
141 |
|
|
10.7 .Indirect Submodule Implementation |
142 |
|
|
10.8 .Contrasting Implementation Approaches |
143 |
|
|
10.9 .Exercises |
143 |
|
|
Black_Ch11_O.pdf |
144 |
|
|
Chapter 11 |
144 |
|
|
Communication |
144 |
|
|
11.1 .Communication: The Need for Ports |
144 |
|
|
11.2 .Interfaces: C++ and SystemC |
145 |
|
|
11.3 .Simple SystemC Port Declarations |
148 |
|
|
11.4 .Many Ways to Connect |
149 |
|
|
11.5 .Port Connection Mechanics |
151 |
|
|
11.6 .Accessing Ports From Within a Process |
153 |
|
|
11.7 .Exercises |
154 |
|
|
Black_Ch12_O.pdf |
155 |
|
|
Chapter 12 |
155 |
|
|
More on Ports & Interfaces |
155 |
|
|
12.1 .Standard Interfaces |
155 |
|
|
12.1.1 .SystemC FIFO Interfaces |
155 |
|
|
12.1.2 SystemC Signal Interfaces |
157 |
|
|
12.1.3 sc_mutex and sc_semaphore Interfaces |
158 |
|
|
12.2 .Sensitivity Revisited: Event Finders and Default Events |
158 |
|
|
12.3 .Specialized Ports |
160 |
|
|
12.4 .The SystemC Port Array and Port Policy |
163 |
|
|
12.5 .SystemC Exports |
166 |
|
|
12.6 .Connectivity Revisited |
171 |
|
|
12.7 .Exercises |
173 |
|
|
Black_Ch13_O.pdf |
174 |
|
|
Chapter 13 |
174 |
|
|
Custom Channels and Data |
174 |
|
|
13.1 .A Review of SystemC Channels and Interfaces |
174 |
|
|
13.2 .The Interrupt, a Custom Primitive Channel |
175 |
|
|
13.3 .The Packet, a Custom Data Type for SystemC |
176 |
|
|
13.4 .The Heartbeat, a Custom Hierarchical Channel |
179 |
|
|
13.5 .The Adaptor, a Custom Primitive Channel |
181 |
|
|
13.6 .The Transactor, a Custom Hierarchical Channel |
183 |
|
|
13.7 .Exercises |
187 |
|
|
Black_Ch14_O.pdf |
188 |
|
|
Chapter 14 |
188 |
|
|
Additional Topics |
188 |
|
|
14.1 .Error and Message Reporting |
188 |
|
|
14.2 .Elaboration and Simulation Callbacks |
191 |
|
|
14.3 .Configuration |
192 |
|
|
14.4 .Programmable Structure |
194 |
|
|
14.5 .sc_clock, Predefined Processes |
198 |
|
|
14.6 .Clocked Threads, the SC_CTHREAD |
199 |
|
|
14.7 .Debugging and Signal Tracing |
202 |
|
|
14.8 .Other Libraries: SCV, ArchC, and Boost |
204 |
|
|
14.9 .Exercises |
204 |
|
|
Black_Ch15_O.pdf |
205 |
|
|
Chapter 15 |
205 |
|
|
SCV |
205 |
|
|
15.1 .Introduction |
205 |
|
|
15.2 . Data Introspection |
205 |
|
|
15.2.1 .Components for scv_extension Interface |
206 |
|
|
15.2.2 .Built-In scv_extensions |
208 |
|
|
15.2.3 .User-Defined Extensions |
209 |
|
|
15.3 .scv_smart_ptr Template |
209 |
|
|
15.4.1 .Global Configuration |
210 |
|
|
15.4.2 .Basic Randomization |
212 |
|
|
15.4.3 .Constrained Randomization |
213 |
|
|
15.5 .Callbacks |
216 |
|
|
15.6 .Sparse Arrays |
217 |
|
|
15.7 .Transaction Sequences |
218 |
|
|
15.8 .Transaction Recording |
219 |
|
|
15.9 .SCV Tips |
220 |
|
|
15.10 .Exercises |
220 |
|
|
Black_Ch16_O.pdf |
222 |
|
|
Chapter 16 |
222 |
|
|
OSCI TLM |
222 |
|
|
16.1 .Introduction |
222 |
|
|
16.2 .Architecture |
223 |
|
|
16.3 .TLM Interfaces |
225 |
|
|
16.3.1 .Unidirectional Blocking Interfaces |
226 |
|
|
16.3.2 .Unidirectional Non-Blocking Interfaces |
226 |
|
|
16.3.3 .Bidirectional Blocking Interface |
228 |
|
|
16.4 .TLM Channels |
228 |
|
|
16.5 .Auxiliary Components |
229 |
|
|
16.5.1 .TLM Master |
230 |
|
|
16.5.2 .TLM Slave |
230 |
|
|
16.5.3 .Router and Arbiter |
231 |
|
|
16.6 .A TLM Example |
232 |
|
|
16.7 .Summary |
235 |
|
|
16.8 .Exercises |
235 |
|
|
Black_Ch17_O.pdf |
237 |
|
|
Chapter 17 |
237 |
|
|
Odds & Ends |
237 |
|
|
17.1 .Determinants in Simulation Performance |
237 |
|
|
17.1.1 .Saving Time and Clocks |
238 |
|
|
17.1.2 .Moving Large Amounts of Data |
239 |
|
|
17.1.3 .Too Many Channels |
240 |
|
|
17.1.4 .Effects of Over Specification |
241 |
|
|
17.1.5 .Keep it Native |
241 |
|
|
17.1.6 . C++ Compiler Optimizations |
241 |
|
|
17.1.7 .C++ Compilers |
241 |
|
|
17.1.8 .Better Libraries |
241 |
|
|
17.1.9 .Better and More Simulation Computers |
242 |
|
|
17.2 .Features of the SystemC Landscape |
242 |
|
|
17.2.1 .Things You Wish Would Just Go Away |
242 |
|
|
17.2.2 .Development Environment |
244 |
|
|
17.2.3 .Conventions and Coding Style |
244 |
|
|
17.3 .Next Steps |
245 |
|
|
17.3.1 .Guidelines for Adopting SystemC |
245 |
|
|
There are a number of companies supporting SystemC methodologies. A quick visit to the OSCI web site www.systemc.org can |
245 |
|
|
Black_Backmatter_O.pdf |
248 |
|
|
Appendix A |
248 |
|
|
C++ Basics |
248 |
|
|
A.1 Background of C++ |
249 |
|
|
A.2 Structure of a C Program |
249 |
|
|
A.3 Comments |
250 |
|
|
A.4 Streams (I/O) |
250 |
|
|
A.4.1 Streaming vs. printf |
251 |
|
|
A.5 Basic C Statements |
251 |
|
|
A.5.1 Expressions and Operators |
251 |
|
|
A.5.2 Conditional |
253 |
|
|
A.5.3 Looping |
254 |
|
|
A.5.4 Altering Flow |
255 |
|
|
A.6 Data Types |
255 |
|
|
A.6.1 Built-In Data Types |
256 |
|
|
A.6.2 User-Defined Data Types |
256 |
|
|
A.6.2.1 Pointers, Arrays, and References |
256 |
|
|
A.6.2.2 Structures |
257 |
|
|
A.6.2.3 STL |
259 |
|
|
A.6.3 Constants |
259 |
|
|
A.6.4 Declaration vs. Definition |
259 |
|
|
A.7 Functions |
260 |
|
|
A.7.1 Pass By Value and Return |
261 |
|
|
A.7.2 Pass by Reference |
261 |
|
|
A.7.3 Overloading |
262 |
|
|
A.7.4 Constant Arguments |
262 |
|
|
A.7.5 Defaults for Arguments |
263 |
|
|
A.7.6 Operators as Functions |
263 |
|
|
A.8 Classes |
264 |
|
|
A.8.1 Member Data and Member Functions |
264 |
|
|
A.8.2 Constructors and Destructors |
265 |
|
|
A.8.2.1 Initialization |
267 |
|
|
A.8.3 Destructors |
268 |
|
|
A.8.4 Inheritance |
269 |
|
|
A.8.4.1 Adding Members |
269 |
|
|
A.8.4.2 Initialization of a Base Class |
269 |
|
|
A.8.4.3 Overriding Inherited Member Functions |
270 |
|
|
A.8.4.4 Multiple Inheritance |
270 |
|
|
A.8.5 Public, Private and Protected Access |
271 |
|
|
A.8.5.1 Friends |
271 |
|
|
A.8.6 Polymorphism |
271 |
|
|
A.8.6.1 Virtual |
272 |
|
|
A.8.6.2 Abstract and Interface Classes |
272 |
|
|
A.8.7 Constant Members |
273 |
|
|
A.8.8 Static Members |
273 |
|
|
A.9 Templates |
274 |
|
|
A.9.1 Defining Template Functions |
274 |
|
|
A.9.2 Using Template Functions |
274 |
|
|
A.9.3 Defining Template Classes |
275 |
|
|
A.9.4 Using Template Classes |
275 |
|
|
A.9.5 Template Considerations |
275 |
|
|
A.10 Names and Namespaces |
276 |
|
|
A.10.1 Meaningful Names |
276 |
|
|
A.10.2 Ordinary Scope |
276 |
|
|
A.10.3 Defining Namespaces |
277 |
|
|
A.10.4 Using Names and Namespaces |
277 |
|
|
A.10.5 Anonymous Namespaces |
277 |
|
|
A.11 Exceptions |
278 |
|
|
A.11.1 Watching for and Catching Exceptions |
278 |
|
|
A.11.2 Throwing Exceptions |
279 |
|
|
A.11.3 Functions that Throw |
280 |
|
|
A.12 Standard Library Tidbits |
281 |
|
|
A.12.1 Strings |
281 |
|
|
A.12.2 File I/O |
281 |
|
|
A.12.3 Standard Template Library |
283 |
|
|
A.13 Closing Thoughts |
283 |
|
|
A.14 References |
284 |
|
|
Black_Index_O.pdf |
285 |
|