Speaking Bluntly about SharpHDL: Some Old Stuff and Some Other Proposed Future Extensions Gordon J. Pace & Christine Vella Synchron’05 Malta, November.

Slides:



Advertisements
Similar presentations
Vilmos Zsombori , Shanghai
Advertisements

Agenda Definitions Evolution of Programming Languages and Personal Computers The C Language.
Verilog Fundamentals Shubham Singh Junior Undergrad. Electrical Engineering.
ENEL111 Digital Electronics
Introducing Formal Methods, Module 1, Version 1.1, Oct., Formal Specification and Analytical Verification L 5.
25 February 2009Instructor: Tasneem Darwish1 University of Palestine Faculty of Applied Engineering and Urban Planning Software Engineering Department.
Evolution and History of Programming Languages Software/Hardware/System.
Background information Formal verification methods based on theorem proving techniques and model­checking –to prove the absence of errors (in the formal.
ISBN Chapter 3 Describing Syntax and Semantics.
CS 355 – Programming Languages
1 Introduction to Computability Theory Lecture3: Regular Expressions Prof. Amos Israeli.
Algorithms and Problem Solving-1 Algorithms and Problem Solving.
Algorithms and Problem Solving. Learn about problem solving skills Explore the algorithmic approach for problem solving Learn about algorithm development.
ECE Synthesis & Verification1 ECE 667 Spring 2011 Synthesis and Verification of Digital Systems Verification Introduction.
Describing Syntax and Semantics
About the Presentations The presentations cover the objectives found in the opening of each chapter. All chapter objectives are listed in the beginning.
Copyright 2008 Koren ECE666/Koren Part.6a.1 Israel Koren Spring 2008 UNIVERSITY OF MASSACHUSETTS Dept. of Electrical & Computer Engineering Digital Computer.
Spring 2002EECS150 - Lec0-intro Page 1 EECS150 - Digital Design Lecture 8 - Hardware Description Languages February 14, 2002 John Wawrzynek.
O VERVIEW OF DIGITAL SYSTEMS Hardware Description Language 1.
1 An introduction to design patterns Based on material produced by John Vlissides and Douglas C. Schmidt.
Data Structures and Programming.  John Edgar2.
The chapter will address the following questions:
Principles of Programming Chapter 1: Introduction  In this chapter you will learn about:  Overview of Computer Component  Overview of Programming 
02/06/05 “Investigating a Finite–State Machine Notation for Discrete–Event Systems” Nikolay Stoimenov.
Programming Languages – Coding schemes used to write both systems and application software A programming language is an abstraction mechanism. It enables.
CSET 4650 Field Programmable Logic Devices
1 VERILOG Fundamentals Workshop סמסטר א ' תשע " ה מרצה : משה דורון הפקולטה להנדסה Workshop Objectives: Gain basic understanding of the essential concepts.
High level & Low level language High level programming languages are more structured, are closer to spoken language and are more intuitive than low level.
Chap. 1 Overview of Digital Design with Verilog. 2 Overview of Digital Design with Verilog HDL Evolution of computer aided digital circuit design Emergence.
Access to Circuit Generators in Embedded HDLs Gordon Pace Christian Tabone University of Malta March 2008.
Mathematical Modeling and Formal Specification Languages CIS 376 Bruce R. Maxim UM-Dearborn.
Programming Paradigms Procedural Functional Logic Object-Oriented.
An Introduction to Design Patterns. Introduction Promote reuse. Use the experiences of software developers. A shared library/lingo used by developers.
1 Introduction Programming Language Design and Implementation (4th Edition) by T. Pratt and M. Zelkowitz Prentice Hall, 2001 Sections
Chapter 6 Programming Languages (2) Introduction to CS 1 st Semester, 2015 Sanghyun Park.
Joseph Cordina 1/11 The Use of Model-Checking for the Verification of Concurrent Algorithms Joseph Cordina Department of C.S.&A.I.
Languages for HW and SW Development Ondrej Cevan.
1 SystemVerilog Enhancement Requests Daniel Schostak Principal Engineer February 26 th 2010.
An OO schema language for XML SOX W3C Note 30 July 1999.
QuickCheck: A Lightweight Tool for Random Testing of Haskell Programs By Koen Claessen, Juhn Hughes ME: Mike Izbicki.
Introduction to VHDL Spring EENG 2920 Digital Systems Design Introduction VHDL – VHSIC (Very high speed integrated circuit) Hardware Description.
Fall 2004EE 3563 Digital Systems Design EE 3563 VHSIC Hardware Description Language  Required Reading: –These Slides –VHDL Tutorial  Very High Speed.
Electrical and Computer Engineering University of Cyprus LAB 1: VHDL.
Introduction to VLSI Design – Lec01. Chapter 1 Introduction to VLSI Design Lecture # 11 High Desecration Language- Based Design.
Compiler Design Introduction 1. 2 Course Outline Introduction to Compiling Lexical Analysis Syntax Analysis –Context Free Grammars –Top-Down Parsing –Bottom-Up.
ELEE 4303 Digital II Introduction to Verilog. ELEE 4303 Digital II Learning Objectives Get familiar with background of HDLs Basic concepts of Verilog.
CSCI-365 Computer Organization Lecture Note: Some slides and/or pictures in the following are adapted from: Computer Organization and Design, Patterson.
04/26/20031 ECE 551: Digital System Design & Synthesis Lecture Set : Introduction to VHDL 12.2: VHDL versus Verilog (Separate File)
Institute for Software Integrated Systems Vanderbilt University On Metamodel Composition Akos Ledeczi, Greg Nordstrom, Gabor Karsai, Peter Volgyesi and.
Formal Verification. Background Information Formal verification methods based on theorem proving techniques and model­checking –To prove the absence of.
21/1/ Analysis - Model of real-world situation - What ? System Design - Overall architecture (sub-systems) Object Design - Refinement of Design.
CS223: Software Engineering
Chapter 1: Introduction to Visual Basic.NET: Background and Perspective Visual Basic.NET Programming: From Problem Analysis to Program Design.
T imed Languages for Embedded Software Ethan Jackson Advisor: Dr. Janos Szitpanovits Institute for Software Integrated Systems Vanderbilt University.
Lecture #1: Introduction to Algorithms and Problem Solving Dr. Hmood Al-Dossari King Saud University Department of Computer Science 6 February 2012.
Evolution of C and C++ n C was developed by Dennis Ritchie at Bell Labs (early 1970s) as a systems programming language n C later evolved into a general-purpose.
Program Design. Simple Program Design, Fourth Edition Chapter 1 2 Objectives In this chapter you will be able to: Describe the steps in the program development.
Algorithms and Problem Solving. Learn about problem solving skills Explore the algorithmic approach for problem solving Learn about algorithm development.
EECE 320 L8: Combinational Logic design Principles 1Chehab, AUB, 2003 EECE 320 Digital Systems Design Lecture 8: Combinational Logic Design Principles.
1 A hardware description language is a computer language that is used to describe hardware. Two HDLs are widely used Verilog HDL VHDL (Very High Speed.
Human Computer Interaction Lecture 21 User Support
Advanced Computer Systems
Algorithms and Problem Solving
Lexical and Syntax Analysis
Overview Part 1 – Design Procedure Beginning Hierarchical Design
Logical architecture refinement
VHDL Introduction.
Algorithms and Problem Solving
강의 내용 및 방법 접근방법 리포트 시험 Lambda Calculus, Proof of Correctness
Digital Designs – What does it take
Presentation transcript:

Speaking Bluntly about SharpHDL: Some Old Stuff and Some Other Proposed Future Extensions Gordon J. Pace & Christine Vella Synchron’05 Malta, November 2005

Part I: SharpHDL – An Object-Oriented Approach to Circuit Description

In the beginning there was… Lava –A HDL embedded in Haskell – a functional programming language. –Circuits are expressed as functions. –It allows simulation and formal verification of circuits. –It includes implementations of various Connection Patterns. –Circuit descriptions are concise and elegant.

... and there was... JHDL –A HDL embedded in Java – an object-oriented programming language. –Circuits are treated as objects and classes. –It provides simulation and analysis tools and also a CAD suite. –… but It does not provide formal verification No connection patterns are implemented.

SharpHDL – An Introduction SharpHDL is an object-oriented structural HDL embedded in C# It consists of: –A library of basic components which are needed to build a circuit structurally, such as wires, logic gates and ports; –A Connection Patterns library; –The ability to perform model-checking via external tools (right now, we only link to to SMV); –The ability to convert SharpHDL circuit description to standard HDLs or netlist (right now, we can only export to Verilog).

Example I: Regular Expression Circuits Regular expression circuits are circuits that describe regular expressions. The language is embedded in SharpHDL. Being that it is a SharpHDL-embedded language –The new language is an embedded language, –Its library constructs are objects in SharpHDL, –It can use the various facilities offered by SharpHDL, including tools like generating SMV code which can be used for verification. Creation of language hierarchy: C# - SharpHDL - Regular Expression Circuits

Regular Expression Language Implemented Constructs The implemented constructs are: –The Empty String –Signal Input –Sequential Composition –Iteration –Non-Deterministic Choice All constructs compile down to a circuit having one input start and two outputs match and prefix, with each construct having its own structure.

Example II: Fast Fourier Transform Circuits Fast Fourier Transform (FFT) is a computationally efficient algorithm for implementing the Discrete Fourier Transform which is used to transform discrete data from the domain of time or space to the frequency domain. Various FFT algorithms exist including radix-2 and radix-2 2 algorithms. These are the most popular due to their simple structure with regular butterfly geometry. SharpHDL was used to implement and verify the circuits describing these Fast Fourier Transform algorithms. Butterfly circuits are implemented in SharpHDL as another type of generic circuit having a recursive structure.

Verifying the equivalence of two FFT circuits The two FFT circuits were verified to be equivalent via a translation to SMV. Radix-2 FFT Radix-2 2 FFT Equivalent?

Advantages of the SharpHDL approach As with all embedded languages, reusability of –The host language’s syntax; –The powerful features; –The well-tested tools like parser generators, lexical analyzers etc. SharpHDL circuits are treated as objects in the C# programming language, hence enabling straightforward hierarchical organization. Imperative nature of C# gives us names of objects for free, and updating of blocks is easier than in Lava-like FP based languages.

Conclusions for Part I Original aim was to explore a Lava-like but more imperative approach to hardware description and design. We did not manage to sufficiently exploit the imperative-nature, inheritance, etc to enable more abstract descriptions. Haskell’s syntax, and (syntactically) lightweight high-level abstraction techniques are difficult to beat.

A Short Part II: What about aspects of circuits which may be changed/updated?

Specifications We chose to look at the refinement process – a meta-aspect of the circuit. We enrich our embedded language to enable the designer to specify and document the refinement process, also enabling compositional verification. Eventually we would like to give the designer more control over the verification process.

Specifications We extend circuit descriptions by a specification construct – allowing us to create a circuit assumed to behave according to synchronous observer; We cheat by viewing the specification in both senses – either we assume a block to behave as specified, and verify it when refined. We use it both as an assumption and a proof obligation.

Specifications Model-checking systems not only returns success/failure/etc, but also internally stores what has been proved. Refinement of sub-circuits will open up new proof- obligations. However, reproof of a higher-level circuit may (sometimes) be avoided thanks to compositionality and monotonicity of the refinement relation. Since we assume that the description will be compiled into a deterministic synchronous circuit we safely assume that common blocks have the same behaviour all over the circuit (for different refinements, the user would be creating two instances of the object).

Sub-Circuit 1 Sub-Circuit 2 Observer Whatever

Observer Sub-Circuit 2 Observer Sub-Circuit 1 Another copy of sub-circuit 1

Observer Sub-Circuit 2 Observer Sub-Circuit 1 Another copy of sub-circuit 1

Observer Sub-Circuit 2 Observer Sub-Circuit 1 Another copy of sub-circuit 1 Can be verified, assuming sub-circuits satisfy their specification, and that the two copies of sub-circuit 1 behave in the same manner.

Observer Sub-Circuit 2 Observer Sub-Circuit 1 Another copy of sub-circuit 1 always ( outs1 = Observer1(sub_circuit 1) outs1’= outs1 circuit = f(outs1, outs2, outs1’) )  Observer (circuit)

Observer Sub-Circuit 2 Observer Sub-Circuit 1 Another copy of sub-circuit 1 But we can now refine sub-circuit 1 Implementation

Observer Sub-Circuit 2 Observer Sub-Circuit 1 Another copy of sub-circuit 1 Implementation And re-verifying the main circuit will result in just verifying that sub-circuit 1 really implements the specification. Compositionality and the monotonicity of refinement relation guarantees the rest.

The sort of thing we write c_sub.property(sub_observer); c.circuit(...,c_sub,...); c.property(observer); if (c.verify()) then { c_sub.refine(sub_observer’); c.verify();... } else {... }

Observer Sub-Circuit 2 Observer Sub-Circuit 1 Another copy of sub-circuit 1 Observer Yet another copy of sub-circuit 1 Implementation Although refining on the observer side would require a re-proof.

Where Are We Going? Build a full language for refinement and interaction with model-checking tools. We’re still looking for a cool case-study to show the use of this library on an interesting situation. As already noted, refining stuff on the observer side will require reproof. Should we allow refinement on the observer?

Longer Term Goals & Extensions Add more verification tools, and control over their use (eg timeouts, memory usage, etc) to be able to interact with via this same embedded language (a la Koen Claessen, Per Bjesse, Prover); Abstraction refinement via the embedded language; What about looking at interaction with testing instead of verification?