2017-06-28 19:06:26 +02:00
|
|
|
\documentclass[11pt,a4paper]{article}
|
|
|
|
\usepackage[utf8]{inputenc}
|
|
|
|
\usepackage[T1]{fontenc}
|
|
|
|
\usepackage{amsmath}
|
|
|
|
\usepackage{amsfonts}
|
|
|
|
\usepackage{amssymb}
|
|
|
|
\usepackage{graphicx}
|
|
|
|
\usepackage{indentfirst}
|
|
|
|
\usepackage{enumerate}
|
|
|
|
\usepackage{caption}
|
2017-08-19 12:30:11 +02:00
|
|
|
\usepackage[backend=biber,style=trad-alpha]{biblatex}
|
2017-06-28 19:06:26 +02:00
|
|
|
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
|
|
|
|
|
|
|
|
|
|
|
|
% Custom packages
|
|
|
|
\usepackage{todo}
|
|
|
|
\usepackage{leftrule_theorems}
|
|
|
|
\usepackage{my_listings}
|
|
|
|
\usepackage{my_hyperref}
|
2017-08-19 16:35:11 +02:00
|
|
|
\usepackage{../common/internship}
|
2017-06-28 19:06:26 +02:00
|
|
|
|
2017-08-19 12:30:11 +02:00
|
|
|
\bibliography{../common/refs}
|
|
|
|
|
2017-06-28 19:40:32 +02:00
|
|
|
\title{Pattern-matching and substitution in electronic circuits}
|
2017-08-19 12:30:11 +02:00
|
|
|
\author{Théophile Bastian, under supervision of Carl-Johan Seger
|
|
|
|
and Mary Sheeran\\
|
2017-06-28 19:40:32 +02:00
|
|
|
\small{Chalmers University, Göteborg, Sweden}}
|
|
|
|
\date{February~--~June 2017}
|
2017-06-28 19:06:26 +02:00
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
|
|
|
|
\begin{document}
|
|
|
|
\maketitle
|
|
|
|
|
|
|
|
\begin{abstract}
|
|
|
|
\todo{abstract}
|
|
|
|
\end{abstract}
|
|
|
|
|
|
|
|
\tableofcontents
|
|
|
|
|
2017-06-28 19:40:32 +02:00
|
|
|
\pagebreak
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\section{Introduction}
|
|
|
|
|
2017-08-19 10:56:04 +02:00
|
|
|
In the previous years, verification and proved software has gathered an
|
|
|
|
increasing interest in the computer science community, as people realised how
|
|
|
|
hard bugs are to track down. But hardware bugs are even more tedious to find
|
|
|
|
and fix, and can easily lead to disastrous consequences, as those cannot be
|
|
|
|
patched on existing hardware. For instance, the well-known Pentium
|
2017-08-19 12:30:11 +02:00
|
|
|
``\textsc{fdiv}'' bug~\cite{pratt1995fdiv} that affected a large number of
|
2017-08-19 10:56:04 +02:00
|
|
|
Pentium processors lead to wrong results for some floating point divisions.
|
2017-08-19 16:35:11 +02:00
|
|
|
Intel had to offer to replace all the defective CPUs, leading to an announced
|
|
|
|
loss of 475 million dollars~\cite{nicely_fdiv}. Even recently, the Skylake and
|
|
|
|
Kaby Lake hyperthreading bug had to be patched using microcode, loosing
|
|
|
|
performance and reliability.
|
2017-08-19 10:56:04 +02:00
|
|
|
|
|
|
|
To avoid such disasters, the industry nowadays uses a wide range of techniques
|
2017-08-19 16:35:11 +02:00
|
|
|
to catch bugs as early as possible --- which, hopefully, is before the product's
|
2017-08-19 10:56:04 +02:00
|
|
|
release date. Among those are \todo{list + cite}, but also proved hardware. On
|
|
|
|
circuits as complex as processors, usually, only sub-components are proved
|
2017-08-19 16:35:11 +02:00
|
|
|
correct in a specified context --- that should, but is not proved to, be
|
2017-08-19 10:56:04 +02:00
|
|
|
respected by the other parts of the circuit. Yet, this trade-off between proved
|
|
|
|
correctness and engineer's work time already gives a pretty good confidence in
|
|
|
|
the circuit.
|
|
|
|
|
2017-08-19 16:35:11 +02:00
|
|
|
In this context, Carl Seger was one of the main developers of fl at Intel, a
|
|
|
|
functional ml-inspired programming language integrating many features useful to
|
|
|
|
get insights of a circuit, testing it and proving it. It mostly features
|
|
|
|
symbolic trajectory evaluation based model checking and theorem proving, and is
|
|
|
|
intended to be an all-purpose toolbox for the hardware prover.
|
|
|
|
|
2017-08-19 10:56:04 +02:00
|
|
|
Among other features, it includes a ``search and replace'' feature, which can
|
|
|
|
search every occurrence of a given gates pattern in a circuit, and replace it
|
2017-08-19 16:35:11 +02:00
|
|
|
by some other gates pattern, proved observationally equivalent beforehand.
|
2017-08-19 10:56:04 +02:00
|
|
|
Time has proved this method very efficient to design circuits: this way, one
|
|
|
|
can start from an inefficient, yet simple circuit, prove it, and then refine it
|
|
|
|
into an equivalent, yet efficient one, through proved transformations. It is
|
|
|
|
also possible to go the other way, and start with an optimized circuit, hard to
|
|
|
|
understand, and make it easier to understand to work more efficiently.
|
|
|
|
|
2017-08-19 16:35:11 +02:00
|
|
|
\paragraph{My internship} lies amid a project shared between Carl-Johan Seger
|
|
|
|
and Mary Sheeran, aiming to develop tools for proved design of FPGA circuits.
|
|
|
|
One of the keystones of this project is an open-sourced and publicly available
|
|
|
|
version of fl, used for the proving part, and is still at the moment under
|
|
|
|
development.
|
|
|
|
|
|
|
|
My part of the work resided on this ``search and replace'' tool. More
|
|
|
|
specifically, I focused on writing a C++ library, \emph{isomatch}, which is
|
|
|
|
interfaced with the C core of fl and provides it with low-level and very fast
|
|
|
|
functions for this task.
|
|
|
|
|
2017-08-19 10:56:04 +02:00
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
2017-06-28 19:40:32 +02:00
|
|
|
\section{Context \& AST}
|
|
|
|
|
2017-08-19 16:35:11 +02:00
|
|
|
\todo{Rename this section}
|
|
|
|
|
|
|
|
\begin{figure}[!h]
|
|
|
|
\begin{align*}
|
|
|
|
\textbf{Integer constant } n, m, \ldots \qquad& \\
|
|
|
|
\\
|
|
|
|
\textbf{Wire } in0, out0, ctl0, \ldots \qquad& \\
|
|
|
|
\\
|
|
|
|
\textbf{Vector } \evec{v}{n} & & \textit{($n$ elements of type $v$)} \\
|
|
|
|
\\
|
|
|
|
\textbf{Circuit } c, d, \ldots ::=~
|
|
|
|
&\text{delay} (in0, out0) &\textit{(delay 1 clock tick)} \\
|
|
|
|
\vert~&\text{tristate} (in0, out0, ctl0)
|
|
|
|
&\textit{(three-state gate)} \\
|
|
|
|
\vert~&\text{comb} (\evec{in0}{n}, \evec{out0}{m}, \evec{e}{m})
|
|
|
|
&\textit{(combinatorial gate)} \\
|
|
|
|
\vert~&\text{assert} (\evec{in0}{n}, \evec{e}{m)}
|
|
|
|
&\textit{(assertion gate)} \\
|
|
|
|
\vert~&\text{group} (\evec{c}{n})
|
|
|
|
&\textit{(circuit hierarchical group)} \\
|
|
|
|
\\
|
|
|
|
\textbf{Binary operator } \otimes ::=~
|
|
|
|
&\wedge & \textit{(and)} \\
|
|
|
|
\vert~&\vee & \textit{(or)} \\
|
|
|
|
\vert~&\oplus & \textit{(xor)} \\
|
|
|
|
\vert~&+ & \textit{(add)} \\
|
|
|
|
\vert~&- & \textit{(sub)} \\
|
|
|
|
\vert~&\times & \textit{(times)} \\
|
|
|
|
\vert~&\div & \textit{(div)} \\
|
|
|
|
\vert~&\% & \textit{(mod)} \\
|
|
|
|
\vert~&\lsl & \textit{(logical shift left)} \\
|
|
|
|
\vert~&\lsr & \textit{(logical shift right)} \\
|
|
|
|
\vert~&\asr & \textit{(arithmetic shift right)} \\
|
|
|
|
\\
|
|
|
|
\textbf{Unary and constant operator } \otimes_0 ::=~
|
|
|
|
&\clsl & \textit{(logical shift left of constant)} \\
|
|
|
|
\vert~&\clsr & \textit{(logical shift right of constant)} \\
|
|
|
|
\vert~&\casr & \textit{(arithmetic shift right of constant)} \\
|
|
|
|
\\
|
|
|
|
\textbf{Unary operator } \ominus ::=~
|
|
|
|
&\lnot & \textit{(logical negation)} \\
|
|
|
|
\\
|
|
|
|
\textbf{Expression } e, f, \ldots ::=~
|
|
|
|
& x & \textit{(variable)} \\
|
|
|
|
\vert~& n & \textit{(integer constant)} \\
|
|
|
|
\vert~& e \otimes f & \textit{(binary operator)} \\
|
|
|
|
\vert~& e \otimes_0 n & \textit{(unary operator with constant)} \\
|
|
|
|
\vert~& \ominus e & \textit{(unary operator)} \\
|
|
|
|
\vert~& e_{\vert~n \ldots m} & \textit{(slicing: take a subword)}\\
|
|
|
|
\vert~& e~\vert~f & \textit{(merging: concatenate two words)} \\
|
|
|
|
\end{align*}
|
|
|
|
\caption{AST of circuits used}\label{fig:ast}
|
|
|
|
\end{figure}
|
2017-06-28 19:40:32 +02:00
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\section{General approach}
|
2017-08-19 12:30:11 +02:00
|
|
|
|
2017-06-28 19:40:32 +02:00
|
|
|
\todo{}
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\section{Signatures}
|
|
|
|
\todo{}
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\section{Group equality}
|
|
|
|
\todo{}
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
\section{Pattern-match}
|
|
|
|
\todo{}
|
|
|
|
|
2017-06-28 19:06:26 +02:00
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
2017-06-28 19:40:32 +02:00
|
|
|
\section{Performance}
|
|
|
|
\todo{}
|
2017-06-28 19:06:26 +02:00
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
|
2017-08-19 12:30:11 +02:00
|
|
|
\printbibliography{}
|
2017-06-28 19:06:26 +02:00
|
|
|
|
|
|
|
\end{document}
|