\documentclass{article}
\usepackage{timing-diagrams}
\usepackage{pifont}
\begin{document}
\section{Basic diagram}
\begin{tikzpicture}
% Define timelines with their names, and ordinate as #2:
\tline{A}{2};
\tline{B}{0};
% Actually draw the timelines (#2 is the horizontal length):
\ttimeline{A}{5};
\ttimeline{B}{5};
% Provide captions for timelines:
\tcaption{A}{A's caption};
\tcaption{B}{B's caption};
% Draw the actual content:
% tick = vertical line accros the timeline
\ttick{A};
% advance time
\tskip{A}{2};
% This one will be drawn 2 time units after the previous, because of
% the \tskip:
\ttick{A};
% One more with the same principle:
\tskip{A}{1};
\ttick{A};
% Same as above, but on timeline B:
\ttick{B};
\tskip{B}{1};
% \tbox creates a box with non-null width, and text inside:
\tbox{B}{3}{Box on B};
\end{tikzpicture}
\section{Timeline, ticks and tasks}
\begin{tikzpicture}
\draw (-1,1.5) node[rotate=90] (systemc) {\textsf{\large SystemC}};
\draw[dashed] (-1,0) -- (9,0);
\draw (-1,-2) node[rotate=90] (jtlm) {\textsf{\large jTLM}};
% SystemC
\tline{A}{2.1};
\tcaption{A}{A};
\tline{B}{1};
\tcaption{B}{B};
\ttimeline{A}{5};
\ttimeline{B}{5};
% jTLM
\tline{P}{-1.5};
\tcaption{P}{P};
\tline{Q}{-2.6};
\tcaption{Q}{Q};
\ttimeline{P}{5};
\ttimeline{Q}{5};
\ttick{A};
\ttextU{A}{f()};
\tskiptext{A}{2}{\texttt{wait(20)}};
\ttick{A};
\tskip{A}{1};
\ttick{A};
\ttick{B}
\tskip{B}{1};
\ttick{B};
\tskip{B}{1};
\ttick{B};
\tskip{B}{2};
\ttick{B};
\ttick{P}
\ttextU{P}{g()};
\tskiptext{P}{2}{awaitTime}
\ttick{P};
\tbox{P}{1.5}{h()};
% just so that the final picture looks pretty
\tbox{Q}{1.3}{i()};
\tskip{Q}{1};
\ttick{Q};
\tskip{Q}{.5};
\tbox{Q}{2}{j()};
\end{tikzpicture}
\section{Annotations over a diagram}
\begin{tikzpicture}
\tline{real}{0};
\tline{model}{2};
\ttimeline{real}{8.5};
\ttimeline{model}{8.5};
\tcaption{real}{Real system};
\tcaption{model}{SystemC model};
\tskip{real}{.5};
\tskip{model}{.5};
\path (currentrealU) coordinate (endzooma);
\tbox{real}{7}{\texttt{compute()}};
\path (currentrealU) ++(-.04, 0) coordinate (endzoomb);
\tstrongtick{real};
\ttextarrowU{real}{\texttt{commit()}};
\tstrongtick{model};
\path (currentmodelL) ++(-.04, 0) coordinate(startzooma);
\path (currentmodelL) ++( .04, 0) coordinate(startzoomb);
\ttextarrowU{model}{\texttt{compute()}};
\tskip{model}{.04};
\tskiptext{model}{6.92}{\texttt{wait()}};
\tskip{model}{.04};
\tstrongtick{model};
\ttextarrowU{model}{\texttt{commit()}};
\path (startzoomb -| endzoomb) coordinate (topright);
\path (barycentric cs:startzoomb=.5,endzooma=.5) coordinate (tmpa);
\path (barycentric cs:topright=.5,endzoomb=.5) coordinate (tmpb);
\draw[very thin,color=black!70!white] (startzooma) -- (endzooma);
\draw[very thin,color=black!70!white] (startzoomb) .. controls (tmpa) and (tmpb) .. (endzoomb);
\end{tikzpicture}
\section{Annotations with callouts, synchronizations between timelines}
\newcommand{\one}{\raisebox{-2pt}{\large\ding{192}}}
\newcommand{\two}{\raisebox{-1.5pt}{\large\ding{193}}}
\newcommand{\three}{\raisebox{-2pt}{\large\ding{194}}}
\tikzstyle{arrow}=[->,line width=.05cm,draw=red!90!blue!60!black]
\begin{tikzpicture}[scale=.8]
\tline{A}{3};
\tcaption{A}{A};
\tline{B}{2};
\tcaption{B}{B};
\tline{C}{1};
\tcaption{C}{C};
\tline{T}{-1.5}
\tcaption{T}{OS thread};
\ttimeline{A}{10};
\ttimeline{B}{10};
\ttimeline{C}{10};
\ttimeline{T}{10};
\tbox{B}{1}{};
\tcatchup{C}{B};
%
\tbox{C}{1}{};
\tcalloutU[(-.8,2.5)]{C}{\texttt{during(42, routine);}}
%
%
\tcatchup{B}{C};
\tcatchup{T}{C};
\draw[arrow] (currentCL) -- node[left] {
\begin{tabular}{r}
\one{} create\\thread
\end{tabular}
} (currentTU);
\tbox{T}{4}{\texttt{routine}};
%
%
\tskiptextL{C}{4}{\two{} \texttt{wait(42)}\vspace{-2em}};
%
%
\tbox{B}{1.5}{};
\tcatchup{A}{B};
\tbox{A}{1}{};
\tcatchup{B}{A};
\tbox{B}{1}{};
%
%
\draw[arrow] (currentTU) -- node[right] {
\begin{tabular}{l}
\three{} join\\thread
\end{tabular}
} (currentCL);
\tbox{C}{1}{};
%
%
\tcatchup{A}{C};
\tbox{A}{1}{};
\tcatchup{B}{A};
\tbox{B}{1}{};
%
\end{tikzpicture}
\section{Arrows between timelines}
\begin{tikzpicture}[scale=.7]
\tline{sc}{2};
\tcaption{sc}{SystemC};
\tline{ace}{0};
\draw (currentace) ++ (9,-.3) node {Simulated time};
\tcaption{ace}{P/T Solver};
\ttimeline{sc}{10};
\ttimeline{ace}{10};
\tremember{sc}{before};
\tlonglighttick{sc};
\tskip{sc}{1.5};
\tlonglighttick{sc};
\tskip{sc}{1.5};
\tlonglighttick{sc};
\tskip{sc}{2};
\trecall{sc}{before};
\tbox{sc}{6}{Functional (1)};
\ttextarrowU{sc}{\begin{tabular}{c}
SystemC reads\\temperature
\end{tabular}
};
\tarrowUL{sc}{ace}{};
\draw (tmpmid) node[fill=white,inner sep=1pt] {(2)};
\tremember{ace}{before};
\tlonglighttick{ace};
\tskip{ace}{1.5};
\tlonglighttick{ace};
\tskip{ace}{1.5};
\tlonglighttick{ace};
\tskip{ace}{2};
\trecall{ace}{before};
\tbox{ace}{6}{Non-functional (3)};
\tarrowLU{ace}{sc}{};
\draw (tmpmid) node[anchor=west] {(4)};
\tbox{sc}{2}{...};
\end{tikzpicture}
\vspace{1em}
\begin{tikzpicture}[scale=.7]
\tline{sc}{2};
\tcaption{sc}{SystemC};
\tline{ace}{0};
\tcaption{ace}{P/T Solver};
\draw (currentace) ++ (9,-.3) node {Simulated time};
\ttimeline{sc}{10};
\ttimeline{ace}{10};
\tbox{sc}{1}{(1)};
\ttextarrowU{sc}{end of instant $t_{i}$};
\tcatchup{ace}{sc};
\coordinate (sceoi) at (currentscL);
\tskip{sc}{6};
\ttick{sc};
\ttextarrowU{sc}{next instant $t_{i+1}$};
\tarrowCoord{(sceoi)}{(currentaceU)}{};
\draw (tmpmid) node[anchor=east] {(2)};
\tbox{ace}{6}{non-functional simu (3)};
% \tcalloutL{ace}{No IT};
\ttick{sc};
\tarrowLU{ace}{sc}{};
\draw (tmpmid) node[anchor=west] {(4)};
% \tcalloutU{sc}{Continue};
\tbox{sc}{1}{...};
\end{tikzpicture}
\section{Events as vertical arrows, mix between timing diagrams and others}
\begin{tikzpicture}
\tline{S}{6};
\tline{M}{5};
\tline{E}{2};
\tline{T}{0}
\tline{F}{-2};
\tline{Eb}{-5};
\tline{Tb}{-7}
\coordinate (n1) at (-2.5,-.5);
\coordinate (n2) at (-2.5,4);
\draw [decoration={brace,amplitude=10pt},decorate] (n1) to (n2);
\coordinate (o1) at (-2.5,-7.5);
\coordinate (o2) at (-2.5,-1.5);
\draw [decoration={brace,amplitude=10pt},decorate] (o1) to (o2);
\draw (barycentric cs:n1=.5,n2=.5) ++(-10pt,0) node[anchor=south,rotate=90] {\large\textsf{(a) Naive Temperature Model}};
\draw (barycentric cs:o1=.5,o2=.5) ++(-10pt,0) node[anchor=south,rotate=90] {\large\textsf{(b) Proposed Approach}};
\tcaption{S}{Real System};
\ttimeline{S}{8};
\tskip{S}{.3};
\tstartbrace{S};
\tevent{S}; \tskip{S}{1.5};
\tevent{S}; \tskip{S}{1.3};
\tevent{S}; \tskip{S}{1.2};
\tendbrace{S}{\texttt{f(); wait(40);}};
\tstartbrace{S};
\tskip{S}{.2};
\tevent{S}; \tskip{S}{.8};
\tevent{S}; \tskip{S}{.7};
\tevent{S}; \tskip{S}{.5};
\tevent{S}; \tskip{S}{.5};
\tevent{S}; \tskip{S}{.8};
\tevent{S};
\tendbrace{S}{\texttt{g(); wait(35);}};
\tcaption{M}{
\begin{tabular}{r}
Loosely-Timed\\Model
\end{tabular}
};
\ttimeline{M}{8};
\tskip{M}{.3};
\foreach \x in {10,0,-10} {
\teventA{M}{\x};
}
\tskip{M}{4};
\foreach \x in {25,15,5,-5,-15,-25} {
\teventA{M}{\x};
}
\tskip{M}{2.5};
\tcaption{E}{Energy};
\ttimeline{E}{8};
\draw[red!50!black,thick] (currentE) ++(0,.3) -- ++(.3,0) --
node[right] {+3} ++(0,.6) -- ++(4,0) --
node[right] {+6} ++(0,1.2) -- node[near end,below]{total=9} ++(3.5,0)
;
\tcaption{T}{Temperature};
\ttimeline{T}{8};
\draw[blue!50!black,thick] (currentT) ++(0,.3) -- ++(.3,0) --
coordinate[at end](peak1) ++(0,.6) .. controls +(1,-.2) .. ++(4,-.3) --
coordinate[at end](peak2) ++(0,1) .. controls +(1,-.5) .. ++(3.5,-.8)
;
\draw (peak1) node[draw,circle,thick](peak1){};
\draw (peak2) node[draw,circle,thick](peak2){};
\draw (barycentric cs:peak1=.5,peak2=.5) ++(0,.1) node[inner sep=0](peaks){
\begin{tabular}{c}
Unrealistic\\peaks
\end{tabular}
};
\draw [arrow] (peaks) -- (peak1);
\draw [arrow] (peaks) -- (peak2);
\tcaption{F}{Frequency};
\ttimeline{F}{8};
\tskip{F}{.3};
\tbox{F}{4}{$\frac{3}{40}$ trans/sec};
\tbox{F}{3.5}{$\frac{6}{35}$ trans/sec};
\tcaption{Eb}{Energy};
\ttimeline{Eb}{8};
\draw[red!50!black,thick] (currentEb) ++(0,.3) -- ++(.3,0) --
++(4,.6)
-- node[at end,right]{total=9} ++(3.5,1.2)
;
\tcaption{Tb}{Temperature};
\ttimeline{Tb}{8};
\draw[blue!50!black,thick] (currentTb) ++(0,.3) -- coordinate[at end](start)++(.3,0);
\path (start)
++(4,.6) coordinate (x1)
++(3.5,.3) coordinate(x2);
\draw[blue!50!black,thick,bend left=5] (start) to (x1);
\draw[blue!50!black,thick,bend left=5] (x1) to (x2);
;
\end{tikzpicture}
\end{document}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End: