AbstractSystemC and CynApps libraries makes the use of the C++ language for system designpossible. However, designers use it the same way they use HDLs: they model the hardwarepart of the design at the register transfer level, or wire level. In particular, extensive useof object oriented mechanisms (as in software) is restricted. Usually, this is because thesefeatures are difficult to conceptualize, simulate and to synthesize. This paper addresses theuse in system design of one of these mechanism for hardware design, polymorphism, and theassociated debugging problems. The C++ implementation of polymorphism relies on pointermanipulation. We describe how pointers have been identified as useful, the capability of theirusage,and describe how to solve some of the associated debuggingproblems. Introduction Object oriented methodology for hardware design have been proposed in [4, 10] and [11] to in-crease the level of abstraction to address the growing complexity of implementations. Class li-braries as an extension to the C++ language have been proposed recently to address the increasingcomplexity of system design [7, 1]. Such techniques and languages were applied in successful chipdesign in [8, 9]. Recent interest in these techniques is due to the fact that modeling hardware in asoftware centric environment is key to enabling effective system codesign.With an object oriented language, the system designer can use powerful decomposition tech-niques for both software and hardware portions of the design. One of these technique is polymor-phism, the specialization of operations through object interfaces.The ways polymorphism is implemented in C++ is by using pointers. There have been animplicit consensus not to use pointers among language and tool designers for digital hardwarebecause of the difficulty to synthesize them. But, work done in [6, 5] shows new pointer synthesistechniques and opens the door to their usage in hardware modeling. The problem we address inthis paper is that in presence of pointers, HDL debugging with traditional waveform viewers is notpossible due to static binding of variables to their locations.We have modeled a DLX processor pipeline in the C++ language using the SystemC classlibraries and used polymorphism for the instruction functional decomposition instead of modelingat the register transfer level. We show how to trace, view and interpret the wave output of pointers.In the section 1, we describe the polymorphism mechanism. This is followed by a descriptionof our approach and implementation.
[1]
U. Kebschull,et al.
C++ base classes for specification, simulation and partitioning of a hardware/software system
,
1995,
Proceedings of ASP-DAC'95/CHDL'95/VLSI'95 with EDA Technofair.
[2]
H. De Man,et al.
On the use of C++ for system-on-chip design
,
1999,
Proceedings. IEEE Computer Society Workshop on VLSI '99. System Design: Towards System-on-a-Chip Paradigm.
[3]
Patrick Schaumont,et al.
An object oriented programming approach for hardware design
,
1999,
Proceedings. IEEE Computer Society Workshop on VLSI '99. System Design: Towards System-on-a-Chip Paradigm.
[4]
Wayne H. Wolf,et al.
Object-oriented cosynthesis of distributed embedded systems
,
1996,
TODE.
[5]
William A. Wulf,et al.
Object-oriented techniques in hardware design
,
1994,
Computer.
[6]
Donald J. Patterson,et al.
Computer organization and design: the hardware-software interface (appendix a
,
1993
.
[7]
Abhijit Ghosh,et al.
Methodology for hardware/software co-verification in C/C++
,
2000,
Proceedings 2000. Design Automation Conference. (IEEE Cat. No.00CH37106).
[8]
장훈,et al.
[서평]「Computer Organization and Design, The Hardware/Software Interface」
,
1997
.
[9]
Ralph Johnson,et al.
design patterns elements of reusable object oriented software
,
2019
.