\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: