scispace - formally typeset
Open AccessProceedings ArticleDOI

Methodology for hardware/software co-verification in C/C++

TLDR
This paper presents a C/C++-based design environment for hardware/software co-verification, and shows how co- Verification can be done efficiently and effectively at the various levels of abstraction.
Abstract
In this paper we present our C/C++-based design environment for hardware/software co-verification. Our approach is to use C/C++ to describe both hardware and software throughout the design flow. Our methodology supports the efficient mapping of C/C++ functional descriptions directly into hardware and software. The advantages of a C/C++-based flow from the verification point of view are presented. The use of C/C++ to model all parts of the system provides great flexibility and enables faster simulation compared to existing methodologies. We show how co-verification can be done efficiently and effectively at the various levels of abstraction, how co-verification can be used to drive co-design through performance estimation and give an example of implementation for the 8051 architecture.

read more

Content maybe subject to copyright    Report

Citations
More filters
Journal ArticleDOI

C-based SoC design flow and EDA tools: an ASIC and system vendor perspective

TL;DR: This paper discusses the problems of the design productivity gap caused by the SoC's complexity and the timing closure caused by deep-submicrometer technology, and proposes a C-based SoC design environment that features integrated high-level synthesis (HLS) and verification tools.
Journal ArticleDOI

SystemC cosimulation and emulation of multiprocessor SoC designs

TL;DR: The authors describe a simulation environment that targets heterogeneous multiprocessor systems and is currently working to extend their methodology to more complex on-chip architectures.
Patent

Structured algorithmic programming language approach to system design

TL;DR: An algorithmic programming language approach to system design enables design, synthesis, and validation of structured, system-level specifications, and integrates system level design into the rest of the design process as mentioned in this paper.
Journal ArticleDOI

Synthesis of hardware models in C with pointers and complex data structures

TL;DR: This work presents a solution for efficiently mapping arbitrary C code with pointers and malloc/free into hardware and presents an implementation based on the SUIF framework along with case studies such as the realization of a video filter and an ATM segmentation engine.
References
More filters
Book

Reuse Methodology Manual: For System-on-a-Chip Designs

TL;DR: The reuse Methodology Manual for System-on-a-Chip Designs, Third Edition outlines a set of best practices for creating reusable designs for use in an SoC design methodology based on the authors' experience in developing reusable designs, as well as the experience of design teams in many companies around the world.
Proceedings ArticleDOI

Hardware/Software Co-Simulation

TL;DR: This paper surveys the techniques available for co-simulation with an eye toward the strengths and weaknesses of each and examines the need to verify correct functionality before the hardware is built.
Proceedings ArticleDOI

Synthesis and simulation of digital systems containing interacting hardware and software components

TL;DR: The authors consider software and interface synchronization schemes that facilitate communication between system components and present tools to perform synthesis and simulation of a system description into hardware and software components.
Proceedings ArticleDOI

An efficient implementation of reactivity for modeling hardware in the scenic design environment

TL;DR: This paper presents Scenic's implementation of concurrency (signals and processes) and reactivity (waiting andwatching) and introduces the notion of delayed expression objects, orlambdas, to reduce context-switching when C++ is used as an HDL.
Proceedings ArticleDOI

Hardware synthesis from C/C++ models

TL;DR: Novel approaches have helped in reducing the semantic gap, and in easing the creation of design flows that support system-level specifications in C/C++.
Frequently Asked Questions (15)
Q1. What have the authors contributed in "Methodology for hardware/software co-verification in c/c++" ?

In this paper the authors present their C/C++-based design environment for hardware/software co-verification. Their approach is to use C/C++ to describe both hardware and software throughout the design flow. The use of C/C++ to model all parts of the system provides great flexibility and enables faster simulation compared to existing methodologies. The authors show how co-verification can be done efficiently and effectively at the various levels of abstraction, how coverification can be used to drive co-design through performance estimation and give an example of implementation for the 8051 architec- 

When an instruction set simulator is used, the software will make calls to the device drivers which will ultimately get converted to execution of memory read/write instructions. 

Using one language for the description of both hardware and software makes mapping easier, allows the designer to move functionality from hardware to software and vice versa, thereby allowing the exploration of different architectures and partitions between hardware and software. 

One of the most common architectures in systems-on-chips consists of CPUs and hardware devices connected to one or multiple memory buses. 

Since the hardware and software teams work separately and in parallel, co-simulation has to be used constantly to ensure that the system still works. 

The BFM performs the appropriate bus transactions and, in the case of a memory read, sends the received data back to the caller of the method. 

CPU cores often have multiple modes of operation (e.g. little/ big endian, multiple timer or serial modes, masked interrupts, etc.) according to the value set on the configuration ports and stored in internal configuration registers. 

The BFM keeps track of the number of clock cycles used to perform various bus transactions and can provide a detailed report at the end of the simulation (or during each bus transaction). 

By proper design of the BFM and ISS, performance estimates can be obtained for software execution, which can be used to drive the codesign process. 

A BFM provides the following methods to read and write memory:void bfm_read_mem(sc_address addr, sc_data *dat,int num_bytes)void bfm_write_mem(sc_address addr, sc_data dat, int num_bytes)The sc_address and sc_data types are types defined in the BFM. 

The handler function is provided by the user and when this function is invoked, it is provided with the details of the interrupt through its argument. 

Since the software runs on the host processor (on which development is done), this model is untimed because the software execution time is not accurate. 

The various pre-defined types like sc_address, sc_data, sc_register, etc. (see below) can be specialized inside each BFM, therefore allowing complete freedom for each BFM to define these types appropriately. 

In addition, one can also ease the verification bottleneck by reusing the testbenches that were developed during system validation. 

The function to execute for a particular interrupt is specified using the following BFM method:void bfm_register_handler(sc_interrupt intr, void (*handler)(sc_interrupt))