Program slicing for VHDL

Abstract.Hardware description languages (HDLs) are used today to describe circuits at all levels. In large HDL programs, there is a need for source code reduction techniques to address a myriad of problems in design, simulation, testing, and formal verification. Program slicing is a static program analysis technique that allows an analyst to automatically extract portions of programs relevant to the aspects being analyzed. Slicing is fundamentally based on data and control dependences between program points. However, program slicing algorithms have traditionally been designed for sequential languages, and the presence of concurrent constructs such as those found in HDLs complicates slicing considerably. In this paper, we develop the concepts needed for slicing VHDL. The techniques extend readily to other HDLs such as Verilog. Our techniques are based on a slicing-oriented VHDL execution semantics that augments traditional dependences with inter-procedural dependences between VHDL processes. Based on these concepts, we have developed an automatic VHDL slicing tool composed of a traditional slicer and a front-end that captures VHDL simulation semantics. This paper discusses our techniques for VHDL slicing, the slicer tool, and slicing applications in design, simulation, testing, and formal verification of VHDL programs. A particularly important application of HDL slicing is source code reduction leading to reduced state spaces for model checking, and we also present empirical results for this.

[1]  Susan Horwitz,et al.  Incremental program testing using program dependence graphs , 1993, POPL '93.

[2]  Thomas W. Reps,et al.  Integrating non-intering versions of programs , 1988, POPL '88.

[3]  Susan Horwitz,et al.  Identifying the semantic and textual differences between two versions of a program , 1990, PLDI '90.

[4]  Frank Tip,et al.  A survey of program slicing techniques , 1994, J. Program. Lang..

[5]  Karl J. Ottenstein,et al.  The program dependence graph in a software development environment , 1984, SDE 1.

[6]  Thomas W. Reps,et al.  Speeding up slicing , 1994, SIGSOFT '94.

[7]  Thomas W. Reps,et al.  Integrating noninterfering versions of programs , 1989, TOPL.

[8]  David W. Binkley,et al.  Program slicing , 2008, 2008 Frontiers of Software Maintenance.

[9]  Keith Brian Gallagher,et al.  Using Program Slicing in Software Maintenance , 1991, IEEE Trans. Software Eng..

[10]  Edmund M. Clarke,et al.  Model Checking VHDL with CV , 1998, FMCAD.

[11]  David Binkley,et al.  Using semantic differencing to reduce the cost of regression testing , 1992, Proceedings Conference on Software Maintenance 1992.

[12]  Joe D. Warren,et al.  The program dependence graph and its use in optimization , 1984, TOPL.

[13]  David W. Binkley,et al.  Precise executable interprocedural slices , 1993, LOPL.

[14]  Daniel Jackson,et al.  A new model of program dependences for reverse engineering , 1994, SIGSOFT '94.

[15]  Thomas W. Reps,et al.  Precise interprocedural chopping , 1995, SIGSOFT FSE.

[16]  Wojtek Kozaczynski,et al.  Automated support for legacy code understanding , 1994, CACM.

[17]  Jens Krinke,et al.  Static slicing of threaded programs , 1998, PASTE '98.

[18]  Thomas W. Reps,et al.  Program analysis via graph reachability , 1997, Inf. Softw. Technol..

[19]  Mark David Weiser,et al.  Program slices: formal, psychological, and practical investigations of an automatic program abstraction method , 1979 .

[20]  K. C. Chang Digital Systems Design with VHDL and Synthesis , 1999 .

[21]  Robert P. Kurshan,et al.  Computer-Aided Verification of Coordinating Processes: The Automata-Theoretic Approach , 2014 .

[22]  David W. Binkley,et al.  Interprocedural slicing using dependence graphs , 1988, SIGP.

[23]  Thomas W. Reps,et al.  Program Specialization via Program Slicing , 1996, Dagstuhl Seminar on Partial Evaluation.