Commit 6271cc20 authored by Christian Fibich's avatar Christian Fibich Committed by Stefan Tauner
Browse files

Extended userguide / fixed TRM

parent 9af519e7
\makeatletter
\let\bf@leftcurly=\bsp
\begin{bytefield}[bitwidth=2em]{8}
\bitheader[endianness=big]{0-7} \\
\begin{leftwordgroup}{\texttt{CONF\_DONE}}
\bitbox{1}{P} & \bitbox{1}{0} & \bitbox{1}{1} & \bitbox{1}{F1} & \bitbox{1}{F0} & \bitbox{1}{U} & \bitbox{1}{I} & \bitbox{1}{C}
\end{leftwordgroup} \\
\bitheader[endianness=big]{0-7} \\
\begin{leftwordgroup}{\texttt{READY}}
\bitbox{1}{P} & \bitbox{1}{0} & \bitbox{1}{1} & \bitbox{1}{F1} & \bitbox{1}{F0} & \bitbox{3}{Rsvd}
\end{leftwordgroup} \\
\bitheader[endianness=big]{0-7} \\
\begin{leftwordgroup}{\texttt{UNDERRUN}}
\bitbox{1}{P} & \bitbox{1}{0} & \bitbox{1}{1} & \bitbox{1}{F1} & \bitbox{1}{F0} & \bitbox{3}{Rsvd}
\end{leftwordgroup} \\
\end{bytefield}
\let\bf@leftcurly=\{
\makeatother
\begin{bytefield}[bitwidth=2em]{8}
\bitheader[endianness=big]{0-7} \\
\begin{rightwordgroup}{2 fault patterns (e.g., for 3 FIUs) \\[.1em]
\footnotesize{FIU\#~$\frac{\text{Pattern\#}}{\text{Bit}}$}}
\bitbox{1}{2 $\frac{1}{1}$} & \bitbox{1}{2 $\frac{1}{0}$} & \bitbox{6}{Stuffing} \\
\bitbox{1}{1 $\frac{2}{0}$} & \bitbox{1}{1 $\frac{1}{2}$} & \bitbox{1}{1 $\frac{1}{1}$} & \bitbox{1}{1 $\frac{1}{0}$} & \bitbox{1}{2 $\frac{2}{2}$} & \bitbox{1}{2 $\frac{2}{1}$} & \bitbox{1}{2 $\frac{2}{0}$} & \bitbox{1}{2 $\frac{1}{2}$} \\
\bitbox{1}{0 $\frac{2}{2}$} & \bitbox{1}{0 $\frac{2}{1}$} & \bitbox{1}{0 $\frac{2}{0}$} & \bitbox{1}{0 $\frac{1}{2}$} & \bitbox{1}{0 $\frac{1}{1}$} & \bitbox{1}{0 $\frac{1}{0}$} & \bitbox{1}{1 $\frac{2}{2}$} & \bitbox{1}{1 $\frac{2}{1}$}\end{rightwordgroup} \\
\bitbox{8}{Duration $t_1$ [7:0]} \\
\bitbox{8}{\ldots} \\
\bitbox{8}{Duration $t_1$ [N-1:N-8]} \\
\bitbox{8}{Duration $t_2$ [7:0]} \\
\bitbox{8}{\ldots} \\
\bitbox{8}{Duration $t_2$ [N-1:N-8]} \\
\bitbox{1}{U} & \bitbox{4}{Reserved} & \bitbox{1}{R} & \bitbox{1}{XT} & \bitbox{1}{TE} \\
\bitbox{8}{ID [7:0]} \\
\bitbox{8}{ID [15:8]} \\
\bitbox{8}{CRC8 (CCITT)} \\
\end{bytefield}
\section{FIJI Setup Tool}
\label{sec:setup}
\begin{figure}[h]
The \textit{FIJI Setup} Tool provides a graphical user interface to
create and edit a \textit{FIJI Configuration} that can be used to
instrument a netlist and run fault injection tests. It helps the user
by checking the sanity of entered values, and eases
net and driver selection by displaying suggestions parsed from the
netlist.
Although \textit{FIJI Setup} is a graphical tool, it accepts the
following \underline{optional} command-line arguments:
\begin{itemize}
\item \texttt{-s, {-}{-}settings-file=<filename>}
Specifies a \textit{FIJI Settings} file to load at startup
\item \texttt{-n, {-}{-}netlist-file=<filename>}
Specifies a netlist file to load at startup
\item \texttt{-h, {-}{-}help}
Displays usage information on the terminal and exits
\end{itemize}
The main GUI elements can be seen in Figure~\ref{fig:setup}. The user
interface consists of (1) the \textit{Control Area}, (2) \textit{Tabs}
for selecting different categories of values to be entered, (3) the
\textit{Main Panel}, (4) the \textit{Resource Panel} and (5) the \textit{Navigation Panel}.
\begin{figure}[ht]
\centering
\includegraphics[width=0.85\linewidth]{img/fiji_setup_screenshot.png}
\input{img/fiji_setup_screenshot_marked}
%\includegraphics[width=0.85\linewidth]{img/fiji_setup_screenshot.png}
\caption{FIJI Setup Tool}
\end{figure}
\ No newline at end of file
\label{fig:setup}
\end{figure}
Using the \textit{Control Area}, file operations can be performed:
The user can select to load a \textit{FIJI Configuration} file from disk
or save the current configuration to a file. Additionally, a Verilog
netlist file can be loaded.
These actions can be performed both via the buttons in the \textit{Control
Area} and the Menubar above. The settings file currently edited is
displayed along with the currently loaded netlist.
Using the \textit{Help} menu entry, license information as well as
this help document can be retrieved.
Upon startup, when no configuration file is specified via command-line
options, \textit{FIJI Setup} starts with a default configuration with
some values already filled in. This configuration can either be used to
create a customized configuration using the GUI, or saved to a file and
edited manually using a text editor.
A netlist must be loaded to perform netlist-related tasks
(choosing nets, pin names, and drivers). When a netlist is loaded, FIJI
analyzes the contained Verilog modules and builds an internal representation
using Perl Objects. Thus, larger netlists may take a while to load. During
this time, a loading screen barring the user from interaction with the
GUI is displayed.
For clarity, the GUI separates the different configuration topics into
different \textit{Tabs}. The following topics are available for
configuration:
\begin{itemize}
\item \underline{General Settings}
Settings for the instrumentation and synthesis process,
as well as settings for the serial communication between FIJI and host
and the fault injection timers are subsumed under this tab.
\item \underline{Clock Settings}
The \textit{FIJI} fault injection logic is clocked from the
clock of the clock domain in the DUT where faults are injected.
The name and frequency of this clock net need to be specified.
\item \underline{LFSR Settings}
\textit{FIJI} emulates floating nets caused by \textit{Stuck-open}
faults by forcing pseudo-random binary levels onto the respective
net. These levels are derived from the value of a \textit{Linar
Feedback Shift Register}. In this tab, the width, polynomial,
and starting value of this register can be configured.
See \ref{sec:lfsrtable} for a list of complete LFSR polynomials
for different lengths.
\item \underline{External Reset}
The FIJI logic can be configured to be reset from an external
pin. This feature can be turned on and off in this tab.
If an external reset pin is desired, the polarity and name must be entered.
\item \underline{Reset from DUT to FIJI}
In addition to the external reset via pin, also any net of the
DUT can be used to reset the FIJI logic. This feature can be
turned on and off in this tab. If an internal reset from the
DUT is desired, the polarity and source net name must be entered.
When the \textit{Reset from DUT to FIJI} feature is used, the
\textit{Reset from FIJI to DUT} feature cannot be used at the
same time.
If both the external reset feature and the reset from DUT to
FIJI are enabled, the reset sources are ORed together and used
as the FIJI logic's asynchronous reset signal.
\item \underline{Reset from FIJI to DUT}
In contrast to the feature described above, the FIJI logic can
also be used as a source for a reset net in the DUT.
When the \textit{Reset from FIJI to DUT} feature is used, the
\textit{Reset from DUT to FIJI} feature cannot be used at the
same time. If an internal reset from FIJI to the DUT is desired,
the polarity, target net name, and desired reset pulse duration
must be entered.
\item \underline{Trigger Settings}
In order to support dynamic test execution depending on
events external to FIJI, trigger signals can be used to
continue a suspended test execution.
Both an external trigger via an FPGA pin as well as an internal
trigger using a net in the DUT as a source can be used. The
FIJI logic can be instructed at runtime if it shall wait for
the internal or external trigger signal.
For both the internal and the external trigger facilities,
the respective pin or net name and polarity must be specified.
\item \underline{Fault Detection Settings}
The value of up to two nets in the DUT can be communicated back to the
host as a means for fault detection. The names and \textit{error}
levels of these nets need to be specified when they are used.
\item \underline{FIUs}
Here, the actual fault injection capabilities of the instrumented
design are configured. For each net into which faults shall be
injected at runtime, a \textit{Fault Injection Unit} needs to
be added. Each FIU has an associated net, a driver for this net,
and fault injection capabilities to be configured.
\end{itemize}
The left hand side of the \textit{Main Area} displays a graphical representation
of the current hardware configuration in all tabs. Changes in the configuration
such as added FIUs and changed signal polarities are reflected in this
block diagram immediately. Some blocks and signals provide additional
information when the cursor hovers above them. On the right hand side
of the \textit{Main Area} the configuration items for the current tab
are displayed. Each time a value is updated in one of the configuration
items, \textit{FIJI Setup} checks for sanity and validity of the entered
value. If a check fails, the corresponding field is marked in red until
a valid value is entered. Also fields which cannot yet be verified
(e.g., net names, when no netlist is loaded) are marked in this way.
Nevertheless, it is possible to save a configuration with values deemed
invalid by \textit{FIJI Setup}. A warning is issued before such configuration
is saved.
In the FIU tab as shown in Figure~\ref{fig:fiutab}, the user may add fault
injection units using the \textit{Append Empty FIU} button and remove
them selectively using the trash can icon next to each FIU.
Added FIUs are ``empty'', i.e., they have no associated net and driver.
The FIUs can be configured in the following way:
Once the user starts to enter a net name (and a valid netlist is loaded),
suggestions for nets are displayed below the net name entry field (1).
When a net is selected, \textit{FIJI Setup} checks if this net is actually
present in the DUT netlist. The user must then select the driver for
this net using the \textit{Driver} button (3). This opens up a dialog
with all possible driver objects for this net prompting the user to select
one of these options.
Additionally, the supported fault model can be selected (2). If the fault
model \textit{RUNTIME} is selected, all fault models are supported by
this FIU and can be activated at runtime. In order to save resources and
timing budget, each FIU can also be configured to support only a single
fault model. At runtime, this FIU can then only be switched between the
selected fault model and fault-free operation.
For the emulation of a floating net, the output of an LFSR is used (see above).
Using the \textit{LFSR mask} element (4), the user needs to select a
bit mask at most as wide as the LFSR. The bits of the
LFSR corresponding to `1`s in the \textit{mask} are ANDed together,
resulting in the ``floating'' value of the
corresponding net.
\begin{figure}[ht]
\centering
\input{img/fiji_setup_fius_marked}
%\includegraphics[width=0.85\linewidth]{img/fiji_setup_screenshot.png}
\caption{FIJI Setup Tool: FIU Tab}
\label{fig:fiutab}
\end{figure}
At the bottom of the user interface (see Figure~\ref{fig:setup}),
the \textit{Resource Panel} (4) displays the combinational resources
(i.e., LUTs) and the registers needed to implement the current
configuration \textit{in relation to the default configuration}.
Absolute resource numbers for different FPGA families are shown
in Table~\ref{tab:resources}.
Within the \textit{Button Panel} (5), the \text{Next} and \textit{Back}
buttons provide additional navigation through the tabs. The \textit{Open
Documentation} button displays this document in a PDF reader.
Alternatively, a \textit{FIJI Configuration} can be created manually using
a text editor. A template file can be generated by saving the default
configuration out of the \textit{FIJI Setup Tool}.
\ No newline at end of file
\section{Runtime Fault Injection Tool}
\label{sec:runtime}
Blabla
\subsection{Command-line tool}
\label{sec:download-cli}
\begin{figure}[h]
The \textit{FIJI Download} tool is a command-line tool which facilitates
downloading test patterns to the \textit{FIJI} logic embedded in the
instrumented netlist in the target FPGA device. It communicates with the
\textit{FIJI} logic embedded in the instrumented netlist in the target
FPGA device, downloads test patterns and reads back status information.
\textit{FIJI Download} works with \textit{FIJI Tests} files, which can
contain (1) overall test execution parameters such as the serial device
to be used for communication with the fault injection logic, (2)
a succession of test patterns for sequenced tests along with test
execution information, and (3) test execution information for random
tests such as fault probabilities and minimum and maximum timer values.
\textit{FIJI Download} may be invoked as follows:
\texttt{perl fiji\_download.pl [OPTIONS]}
The following command-line parameters are required regardless of operation mode:
\begin{itemize}
\item \texttt{-m, {-}{-}mode=<mode>}
The download mode to use:
\begin{itemize}
\item[] \texttt{manual}: Prompt for fault patterns and timer values
\item[] \texttt{auto}: Download tests in the \textit{FIJI Tests} file
\item[] \texttt{random}: Download randomly generated tests
\end{itemize}
\item \texttt{-s, {-}{-}settings=<filename>}
Specifies the \textit{FIJI Settings} file to use
\item \texttt{-t, {-}{-}tests=<filename>}
Specifies the \textit{FIJI Tests} file to use
\end{itemize}
The script also accepts the following \underline{optional} command-line arguments:
\begin{itemize}
\item \texttt{-p, {-}{-}port=<port>}
The serial port to use. Defaults to the value configured in the \textit{FIJI Settings} file
\item \texttt{-h, {-}{-}help}
Displays usage information on the terminal and exits
\end{itemize}
\subsection{GUI Tool}
The \textit{FIJI Download GUI} tool provides a graphical user interface to
the functionality described in Section~\ref{sec:download-cli}. It also
provides the possibility to edit \textit{FIJI Tests} files in a guided
manner, where entered values are checked for validity and sanity.
Although \textit{FIJI Download} is a graphical tool, it accepts the
following \underline{optional} command-line arguments:
\begin{itemize}
\item \texttt{-s, {-}{-}settings-file=<filename>}
Specifies a \textit{FIJI Settings} file to load at startup
\item \texttt{-t, {-}{-}tests-file=<filename>}
Specifies a \textit{FIJI Tests} file to load at startup
\item \texttt{-h, {-}{-}help}
Displays usage information on the terminal and exits
\end{itemize}
\begin{figure}[ht]
\centering
\includegraphics[width=0.85\linewidth]{img/fiji_download_sequence_screenshot.png}
\input{img/fiji_download_sequence_screenshot_marked.tex}
\caption{FIJI Download Tool: Sequence Mode}
\end{figure}
BlablaBlabla
\begin{figure}[h]
\begin{figure}[ht]
\centering
\includegraphics[width=0.85\linewidth]{img/fiji_download_manual_screenshot.png}
\caption{FIJI Download Tool: Manual Mode}
......@@ -18,7 +94,7 @@ BlablaBlabla
BlablaBlablaBlabla
\begin{figure}[h]
\begin{figure}[ht]
\centering
\includegraphics[width=0.85\linewidth]{img/fiji_download_random_screenshot.png}
\caption{FIJI Download Tool: Random Mode}
......
\section{LFSR polynomials}
Bla Test
\label{sec:lfsrtable}
\begin{table}[H]
\caption{Maximal period LFSR polynomials for lengths 2-64 \cite{tableLFSR}}
\label{tab:lfsrtable}
\begin{center}
\input{content/lfsrtable4col.tex}
\end{center}
......
\section{Absolute Resource Usage}
The estimated resource values for LUTs and registers displayed in the
\textit{FIJI Setup} tool (see Section~\ref{sec:setup}) are relative to
the resources needed by the initial default configuration shown in the
listing below. Table~\ref{tab:resources} provides absolute resource
usage values of this default configuration for different FPGA families.
\begin{table}[H]
\caption{Absoulte resource usage of FIJI logic for different FPGA families}
\label{tab:resources}
\begin{center}
\begin{tabular}{ l l l l }
\hline
......
% For longer reports use: (starts with chapter) %
% \documentclass[a4paper,bibtotoc,oneside,halfparskip]{scrbook}
% For short reports use: (starts with section) %
\documentclass[a4paper,bibtotoc,oneside,halfparskip]{scrartcl}
\documentclass[a4paper,bibliography=totoc,oneside,halfparskip]{scrartcl}
\usepackage[colorlinks=true,
linkcolor=black,
......@@ -54,7 +54,7 @@
\cfoot[\fancyplain{}{\footnotesize\thepage}]{\fancyplain{}{\footnotesize\thepage}}
\lhead[\fancyplain{}{\footnotesize\nouppercase\leftmark}]{\fancyplain{}{}}
\chead{}
\rhead[\fancyplain{}{}]{\fancyplain{}{\footnotesize\nouppercase\sc\leftmark}}
\rhead[\fancyplain{}{}]{\fancyplain{}{\footnotesize\nouppercase\scshape\leftmark}}
% Use of an extended color table %
\usepackage{xcolor}
......@@ -256,10 +256,6 @@
\input{content/05-synthesis.tex}
\input{content/06-runtime.tex}
\input{content/07-demo.tex}
\input{content/08-appendix-LFSR.tex}
\input{content/09-appendix-resources.tex}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newpage
% Bibliography
......@@ -277,4 +273,12 @@
% List of Abbreviations %
\printglossary[style=myAcroStyle,type=acronym,title=List of Abbreviations,toctitle=List of Abbreviations]
% Appendix
\newpage
\appendix
\input{content/08-appendix-LFSR.tex}
\input{content/09-appendix-resources.tex}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\end{document}
\begin{tikzpicture}
\node[anchor=south west,inner sep=0] at (0,0) {\includegraphics[width=0.9\textwidth]{img/fiji_download_sequence_screenshot.png}};
\node[anchor=south west, minimum width=4.45cm, minimum height=0.8cm, rectangle,red,thick,rounded corners,draw] (err) at (0,0.1) {} ; % Error
\node[anchor=south west, minimum width=6.15cm, minimum height=0.8cm, rectangle,red,thick,rounded corners,draw] (stat) at (4.45,0.1) {} ; % status
\node[anchor=south west, minimum width=4.7cm, minimum height=0.8cm, rectangle,red,thick,rounded corners,draw] (btn) at (10.6,0.1) {} ; % Buttons
\node[anchor=south west, minimum width=15.3cm, minimum height=3cm, rectangle,red,thick,rounded corners,draw] (log) at (0,0.9) {} ; % Logging
\node[anchor=south west, minimum width=15.3cm, minimum height=7cm, rectangle,red,thick,rounded corners,draw] (main) at (0,3.9) {} ; % Main
\node[anchor=south west, minimum width=15.3cm, minimum height=0.7cm, rectangle,red,thick,rounded corners,draw] (tabs) at (0,10.9) {} ; % Tabs
\node[anchor=south west, minimum width=15.3cm, minimum height=2.3cm, rectangle,red,thick,rounded corners,draw] (ctrl) at (0,11.6) {} ; % Control
% \draw[red,thick,rounded corners] (0,0.9) rectangle (15.3,5.7); % Main Area
% \draw[red,thick,rounded corners] (0,5.7) rectangle (15.3,6.3); % Tab Area
% \draw[red,thick,rounded corners] (0,6.3) rectangle (15.3,8.4); % Control Area
\node[below=0.2cm of ctrl.north,inner sep=0.2mm,circle,red,draw] {\footnotesize 1};
\node[left=0.3cm of tabs.east,inner sep=0.2mm,circle,red,draw] {\footnotesize 2};
\node[below left=0.5cm of main.north east,inner sep=0.2mm,circle,red,draw] {\footnotesize 3};
\node[below left=0.5cm of log.north east,inner sep=0.2mm,circle,red,draw] {\footnotesize 4};
\node[below=0.2cm of err.south,inner sep=0.2mm,circle,red,draw] {\footnotesize 5};
\node[below=0.2cm of stat.south,inner sep=0.2mm,circle,red,draw] {\footnotesize 6};
\node[below=0.2cm of btn.south,inner sep=0.2mm,circle,red,draw] {\footnotesize 7};
\end{tikzpicture}
\ No newline at end of file
\begin{tikzpicture}
\node[anchor=south west,inner sep=0] at (0,0) {\includegraphics[width=0.9\textwidth]{img/fiji_setup_fius.png}};
\draw (12,3.15) node[inner sep=0.2mm,circle,red,draw] {\footnotesize 4};
\draw (8.5,3.15) node[inner sep=0.2mm,circle,red,draw] {\footnotesize 3};
\draw (12,4.55) node[inner sep=0.2mm,circle,red,draw] {\footnotesize 2};
\draw (8.5,4.55) node[inner sep=0.2mm,circle,red,draw] {\footnotesize 1};
\draw[red,thick,rounded corners] (6.2,3.85) rectangle (10.6,4.35); % Net
\draw[red,thick,rounded corners] (6.2,3.35) rectangle (10.6,3.85); % Driver
\draw[red,thick,rounded corners] (10.6,3.85) rectangle (13.7,4.35); % Net
\draw[red,thick,rounded corners] (10.6,3.35) rectangle (13.7,3.85); % Net
% \draw[red,thick,rounded corners] (10.7,0.1) rectangle (15.3,0.75); % Buttons
% \draw[red,thick,rounded corners] (0,0.75) rectangle (15.3,5.7); % Main Area
% \draw[red,thick,rounded corners] (0,5.7) rectangle (15.3,6.3); % Tab Area
% \draw[red,thick,rounded corners] (0,6.3) rectangle (15.3,8.4); % Control Area
\end{tikzpicture}
\ No newline at end of file
\begin{tikzpicture}
\node[anchor=south west,inner sep=0] at (0,0) {\includegraphics[width=0.9\textwidth]{img/fiji_setup_screenshot.png}};
\draw (10.45,0.4) node[inner sep=0.2mm,circle,red,draw] {\footnotesize 5};
\draw (6.75,0.4) node[inner sep=0.2mm,circle,red,draw] {\footnotesize 4};
\draw (0.25,1) node[inner sep=0.2mm,circle,red,draw] {\footnotesize 3};
\draw (15.55,6) node[inner sep=0.2mm,circle,red,draw] {\footnotesize 2};
\draw (13,8.05) node[inner sep=0.2mm,circle,red,draw] {\footnotesize 1};
\draw[red,thick,rounded corners] (0,0.1) rectangle (6.5,0.75); % Resources
\draw[red,thick,rounded corners] (10.7,0.1) rectangle (15.3,0.75); % Buttons
\draw[red,thick,rounded corners] (0,0.75) rectangle (15.3,5.7); % Main Area
\draw[red,thick,rounded corners] (0,5.7) rectangle (15.3,6.3); % Tab Area
\draw[red,thick,rounded corners] (0,6.3) rectangle (15.3,8.4); % Control Area
\end{tikzpicture}
\ No newline at end of file
......@@ -27,6 +27,9 @@ view: $(TEX_OUT)
clean:
rm -f $(OUTDIR)*.aux $(OUTDIR)*.bcf $(OUTDIR)*.bbl $(OUTDIR)*-blx.bib $(OUTDIR)*.run.xml $(OUTDIR)*.idx $(OUTDIR)*.ilg $(OUTDIR)*.lot $(OUTDIR)*.lof $(OUTDIR)*.blg $(OUTDIR)*.alg $(OUTDIR)*.ind $(OUTDIR)*.toc $(OUTDIR)*.acl $(OUTDIR)*.acn $(OUTDIR)*.acr $(OUTDIR)*.out $(OUTDIR)*.log $(OUTDIR)*.gls $(OUTDIR)*.glo $(OUTDIR)*.glg $(OUTDIR)*.ist $(OUTDIR)*.brf $(OUTDIR)*.ver $(OUTDIR)*.hst $(OUTDIR)*.glsdefs
distclean: clean
rm -f $(TEX_OUT)
$(JOB).pdf: *.tex content/*.tex img/*.pdf *.bib
$(TEX) $(TEX_MAIN)
$(BIB) $(OUTDIR)$(JOB)
......@@ -36,4 +39,4 @@ $(JOB).pdf: *.tex content/*.tex img/*.pdf *.bib
#$(ACR) $(JOB)
$(TEX) $(TEX_MAIN)
.PHONY = clean view all fast
.PHONY = clean view all fast distclean
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment