Automatic Formal Verification of Digital Components of IoTs Using CBMC

These days, internet of things (IoT) are being widely used in many safety-critical domains, like healthcare and transportation. Thus, their functional correctness is very important. However, simulation based analysis is based on sampling methods and thus their results are not complete and cannot be termed as accurate. Formal verification has been recently proposed to verify the digital components of IoT devices and thus overcome the incompleteness issues of simulation. However, formal verification process requires manual development of a formal model of the given circuit and its desired properties. Moreover, the verification of the relationship between the formally specified model and its properties sometimes also requires manual interventions. These manual efforts can be quite cumbersome while verifying large systems and thus make formal verification of IoT devices somewhat infeasible for industrial usage. To overcome these limitations, we present a tool chain to automatically formally verify digital components of IoT devices, which are usually expressed in the Verilog language. The proposed methodology primarily leverages upon the strong verification support for the C language. The idea is to convert the given Verilog code and its properties to C language and use bounded model checking to verify the obtained C code. The formally verified C code is then converted back to Verilog to facilitate circuit design steps i.e., synthesis, timing analysis etc., and thus continue with the regular digital system design flow. For illustration, we present the verification of several widely used components of IoT devices, including an ALU and a 64-bit processor, which are fairly complex and to the best of our knowledge have never been formally verified automatically before.

[1]  Sofiène Tahar,et al.  Formal Verification Methods , 2015 .

[2]  Dirk Beyer,et al.  CPAchecker: A Tool for Configurable Software Verification , 2009, CAV.

[3]  Daniel Kroening,et al.  Word level predicate abstraction and refinement for verifying RTL Verilog , 2005, Proceedings. 42nd Design Automation Conference, 2005..

[4]  Sergey Tverdyshev A verified platform for a gate-level electronic control unit , 2009, 2009 Formal Methods in Computer-Aided Design.

[5]  Jason Helge Anderson,et al.  LegUp: high-level synthesis for FPGA-based processor/accelerator systems , 2011, FPGA '11.

[6]  Sanjit A. Seshia,et al.  Modeling and Verifying Systems Using a Logic of Counter Arithmetic with Lambda Expressions and Uninterpreted Functions , 2002, CAV.

[7]  Osman Hasan,et al.  A Library for Combinational Circuit Verification Using the HOL Theorem Prover , 2018, IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems.

[8]  Jorge A. Navas,et al.  SeaHorn: A Framework for Verifying C Programs (Competition Contribution) , 2015, TACAS.

[9]  Thomas A. Henzinger,et al.  The software model checker Blast , 2007, International Journal on Software Tools for Technology Transfer.

[10]  Thomas Braibant,et al.  Coquet: A Coq Library for Verifying Hardware , 2011, CPP.

[11]  E. Clarke,et al.  Hardware verification using ANSI-C programs as a reference , 2003, Proceedings of the ASP-DAC Asia and South Pacific Design Automation Conference, 2003..

[12]  Osman Hasan,et al.  A HOL Library for Hardware Verification using Theorem Proving , 2017 .

[13]  Robert K. Brayton,et al.  ABC: An Academic Industrial-Strength Verification Tool , 2010, CAV.

[14]  Daniel Kroening,et al.  v2c - A Verilog to C Translator , 2016, TACAS.

[15]  David J. Greaves A Verilog to C compiler , 2000, Proceedings 11th International Workshop on Rapid System Prototyping. RSP 2000. Shortening the Path from Specification to Prototype (Cat. No.PR00668).

[16]  Karem A. Sakallah,et al.  Reveal: A Formal Verification Tool for Verilog Designs , 2008, LPAR.

[17]  Thomas Bollaert Catapult Synthesis: A Practical Introduction to Interactive C Synthesis , 2008 .

[18]  Zohar Manna,et al.  Checking Safety by Inductive Generalization of Counterexamples to Induction , 2007, Formal Methods in Computer Aided Design (FMCAD'07).

[19]  Daniel Kroening,et al.  Hardware Verification Using Software Analyzers , 2015, 2015 IEEE Computer Society Annual Symposium on VLSI.

[20]  Fabrizio Ferrandi,et al.  Bambu: A modular framework for the high level synthesis of memory-intensive applications , 2013, 2013 23rd International Conference on Field programmable Logic and Applications.

[21]  Youngsik Kim,et al.  PROVERIFIC: experiments in employing (PSL) standard assertions in theorem-proving-based verification , 2005, 48th Midwest Symposium on Circuits and Systems, 2005..

[22]  Tiziano Villa,et al.  VIS: A System for Verification and Synthesis , 1996, CAV.