OpenCores
URL https://opencores.org/ocsvn/avs_aes/avs_aes/trunk

Subversion Repositories avs_aes

[/] [avs_aes/] [trunk/] [doc/] [manual/] [src/] [avs_aes.tex] - Blame information for rev 16

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 11 ruschi
\documentclass{ruschidoc}
2
 
3
\usepackage[
4
        bookmarks,
5
        plainpages={false}]{hyperref}
6
 
7
\usepackage[
8
        style=altlist,
9
        hyper=true,
10
        number=none,
11
        acronym=true,
12
        header=none]{glossary}
13
\usepackage{capt-of}
14
 
15
%%% Water mark
16
%\usepackage{draftwatermark}
17
%\SetWatermarkText{\shortstack{DRAFT}}
18
%\SetWatermarkScale{0.9}
19
%\SetWatermarkLightness{0.85}
20
 
21
\makeacronym
22
\makeglossary
23
\input{acronym}
24
\input{glossary}
25
\bibliographystyle{IEEEtran}
26
 
27
%%%%%%%%%%%%%%%%%
28
% Document variables
29
%%%%%%%%%%%%%%%%%
30
\docDate{ \today }
31
\docID{avs\_aes\_doc}
32
\docRevision{0.5}
33
\docStatus{Final}
34
\docTitle{\mbox{AES 128/192/256 (ECB)}  \mbox{Avalon\rtm-MM Slave}}
35
\keywords{Avalon, bus, slave, cryptography, AES, ecb, IP core }
36
 
37
\authorName{\mbox{Thomas Ruschival} \\ and opencores.org}
38
\authorURL{www.opencores.org}
39
\authorAddress{\mbox{}}
40
\authorEmail{ruschi@opencores.org}
41
 
42
 
43
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
44
% FORMAT: Rev | Chapter |  Description | Date | Reviewer \\
45
\revisionList{
46
0.1 & all & initial document & 2009/02/01  & T. Ruschival \\
47
0.2 & all & added interrupt  & 2009/03/25  & T. Ruschival \\
48
0.3 & all & added generics  & 2009/04/20  & T. Ruschival \\
49
0.4 & all & cleanup for opencores.org  & 2009/05/20  & T. Ruschival \\
50
0.5 & all & final release  & 2010/03/07  & T. Ruschival \\
51
0.6 & 3,6 & fixed memory map, added testbench description  & 2010/04/02  & T. Ruschival \\
52 16 ruschi
0.7 & 3,6 & fixed typos  & 2010/04/03  & T. Ruschival \\
53 11 ruschi
}
54
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
55
 
56
 
57
\begin{document}
58
\maketitle
59
\newpage
60
\tableofcontents
61
\newpage
62
 
63
\section{Introduction}
64 16 ruschi
\label{sec:intro} The \AES is a symmetric block cipher operating on fixed block sizes
65 11 ruschi
of 128 Bit and is specified for key sizes of 128, 192 and 256 Bit designed by Joan
66
Daemen and Vincent Rijmen. The algorithm was standardized by \NIST. For more
67
information on the algorithm see \cite{NIST:Fips197}.\\
68 16 ruschi
This component implements an AES encryption decryption data path in \ECB mode with
69
either 128,192 or 256 Bit keys.  The key length is determined by generics at compile
70
time. Also the decryption data path can be disabled by generics if it is not needed
71 11 ruschi
for the application.\\
72
The component provides an Avalon\rtm\ Memory Mapped (Avalon-MM) slave interface to
73
connect to an Altera\rtm\ Avalon\rtm\ switch fabric. The Avalon\rtm\ interface is
74
implemented in a way that it can also be used to connect to a Whishbone master if the
75
signals are correctly mapped, see \cite{Wiki:AvWb}. For further information about the
76
Whishbone bus refer to \cite{OC:WBspec}. \\
77
 
78
\section{Interface}
79
\label{sec:interface}
80
The AES core is accessed by the interface described in this section. An Avalon\rtm\
81
interface was chosen for its simplicity and compatibility with wishbone.  Furthermore
82
Avalon\rtm\ defines interrupt request signals for slaves which would be separate
83
signals in a Wishbone implementation.The component can be used both in polling
84
mode or can provide an interrupt for signalling. \\
85
Unfortunately Avalon\rtm\ is an Altera\rtm\ proprietary technology. The actual AES
86 16 ruschi
core however is a self contained entity and can be embedded into other \SoC\ bus
87
interfaces as well or used independently.
88 11 ruschi
 
89
\subsection{Configuration Generics}
90
\label{sec:generics}
91
The AES core can be configured by generics shown in table \ref{tab:generics},
92
consequently they are provided by the Avalon\rtm\ interface.
93
 
94
\begin{tabularx}{\textwidth}{|p{33mm}|p{25mm}|X|}
95
  \hline
96
  \bf{Generic name} & \bf{type} & \bf{Description}\\ \hline
97 16 ruschi
  \texttt{KEYLENGTH}  \label{gen:keylength}     & NATURAL   & Size of initial user key. Must be 128, 192 or 256 \footnotemark[1] . \\ \hline
98
  \texttt{DECRYPTION} \label{gen:decryption}  & BOOLEAN  & Enables the instantiation of the decrypt data path if true. \\
99 11 ruschi
\hline
100
\end{tabularx}
101
\footnotetext[1]{All other values raise a compilation failure}
102
\captionof{table}{Component generics}
103
\label{tab:generics}
104
Note: \texttt{KEYLENGTH} of 192 fail synthesis with Xilinx ISE \rtm\ because of division by 6 in key schedule that cannot be mapped to shift operations (\texttt{keyexpansion.vhd}).
105
 
106
\subsection{Signals}
107
\label{sec:signals}
108
The Avalon\rtm\-MM Slave interface is described in \cite{Altera:Avalon}, the component
109
implements the signals shown in table \ref{tab:signals}. All signals are synchronous,
110
sampled at the rising edge of the clock. The type for all signals is \texttt{IEEE1164
111
    std\_logic} or \texttt{std\_logic\_vector}. For signals wider that 1 Bit the range
112
is \MSB\ \texttt{downto} \LSB\. \\
113
This components has only output signals driven by registers no input signals are directly combinatorially connected to the
114
output signals, thus combinational loops are avoided.  All signals are active
115
high. This component does not support burst transfers.
116
 
117
\begin{tabularx}{\textwidth}{|p{30mm}|p{11mm}|p{11mm}|X|}
118
  \hline
119
  \bf{Signal name} & \bf{Width} & \bf{In/Out} & \bf{Description}\\ \hline
120
  \texttt{clk}  \label{sig:clk} & 1  &  in  & Avalon\rtm\ bus clock, also used to drive the core. \\ \hline
121
  \texttt{reset} \label{sig:reset}& 1   &  in  & \emph{Synchronous} reset signal for Avalon\rtm\ bus interface.
122
  The core itself is designed without need for reset signals.
123
        \\ \hline
124
  \texttt{writedata} \label{sig:writedata} & 32 &  in  & Input data to write to location designated by \texttt{address}. Bit 31 is most significant Bit.
125
        \\  \hline
126
  \texttt{address}   \label{sig:address}    & 5   &  in & Word offset to the components base address. The memory map of the component for the
127 16 ruschi
  respective offset is described in \ref{sec:memmap}. Only full 32-Bit words can be addressed no byte addressing is implemented.
128 11 ruschi
        \\  \hline
129
  \texttt{write}\footnotemark[1] \label{sig:write}  & 1 &  in  & If asserted enable write of data at \texttt{writedata} to location designated by \texttt{address}.
130
        \\  \hline
131
  \texttt{read}\footnotemark[1] \label{sig:read}   & 1 &  in  & If asserted output data at location designated by \texttt{address} to \texttt{readdata}.
132
        \\  \hline
133
  \texttt{readdata} \label{sig:readdata}  & 32  &  out & Data output port for reading data at the location defined by \texttt{address}. Bit 31 is most significant Bit.
134
        \\  \hline
135
 \texttt{waitrequest} \label{sig:waitrequest}  & 1  &  out & Asserted if writedata was not accepted, this is the case if the keyexpansion is
136
         not yet complete and a new is written to the \texttt{KEY} address range without previous deassertion of  the \texttt{KEY\_VALID} Bit
137
        \\  \hline
138 16 ruschi
  \texttt{irq}\label{sig:irq}   & 1 &  out & If Interrupt behavior is enabled \texttt{IRQ}
139 11 ruschi
  will be asserted when the operation has terminated. For use of interrupt see \ref{sec:irq}
140
        \\ \hline
141
\end{tabularx}
142 16 ruschi
\footnotetext[1]{\texttt{read} and \texttt{write} are mutually exclusive and must not be asserted simultaneously.}
143 11 ruschi
\label{tab:signals}
144
\captionof{table}{Avalon\rtm\ Bus interface signals}
145
 
146
 
147
\section{Memory Map}
148
\label{sec:memmap}
149 16 ruschi
The AES core Avalon\rtm\ slave has an address space of 31 words accessible through the
150 11 ruschi
offset described by the signal \texttt{address}, see \ref{sig:address}. This address
151 16 ruschi
space is divided into three main sections for the 4-word input data, the 4-word
152
result of the operation and the user key. The actual length of the user key can vary
153 11 ruschi
between 4, 6 and 8 words depending on the keysize. For control signals and status
154
information of the component and a control word is provided. The memory mapping is
155 16 ruschi
described in table \ref{tab:memmap}.\\
156 11 ruschi
 
157
\begin{tabularx}{\textwidth}{|p{18mm}|p{14mm} |X|}
158
  \hline
159
  \bf{Offset}     & \bf{Name} & \bf{Description}\\ \hline
160
  \texttt{0x00-0x07} & \texttt{KEY}  & Initial user key that will be used for encryption and decryption.
161
        The most significant word is written to offset \texttt{0x00}. This memory section is \emph{write-only} to the Avalon\rtm\ interface.\\
162
\hline
163
  \texttt{0x08-0x0B} & \texttt{DATA} & Input data, can be either interpreted as cyphertext for decryption or plain text for encryption.
164
        The most significant word shall be written to offset \texttt{0x08}. This memory section is \emph{write-only} to the Avalon\rtm\ interface. \\
165
\hline
166
  \texttt{0x10-0x13} & \texttt{RESULT} & Result of the operation. The most significant word of the result at offset \texttt{0x10}.
167
        This memory section is \emph{read-only} to the Avalon\rtm\ Interface.  \\
168
\hline
169
   \texttt{0x14-0x1E} & --- &  reserved  \\ \hline
170
 \texttt{0x1F} & \texttt{CTRL} & Control and status word of the component can be read and written. Detailed description see \ref{sec:ctrl}\\
171
\hline
172
\end{tabularx}
173
\label{tab:memmap}
174
\captionof{table}{Memory map of the AES core Avalon\rtm\ slave}
175
 
176
\subsection{Control Register}
177
\label{sec:ctrl}
178
The AES Core offers the register \texttt{CTRL} to control the function of the core
179
and poll its status. The control register can be accessed in read and write mode.
180 16 ruschi
 When writing to the register reserved Bits shall be assigned a value of \texttt{0}.
181
 Individual Bits have following functionality described in table \ref{tab:ctrlreg}. \\
182 11 ruschi
In case of a Avalon\rtm\ Bus reset this register is set to \texttt{0x00000000} thus
183
invalidating all previously written keys and resetting the AES core.
184
 
185
\begin{tabularx}{\textwidth}{|p{13mm}|p{18mm} |X|}
186
  \hline
187
  \bf{Offset}     & \bf{Name} & \bf{Description}\\ \hline
188
  \texttt{31-8} & --- & reserved \\ \hline
189 16 ruschi
  \texttt{7}     &\texttt{KEY\_VALID} &If asserted key data in the \texttt{KEY} memory range is regarded valid and will be expanded to round keys.
190 11 ruschi
        When deasserted all keys are invalidated and the current operation of the core is aborted. It must be asserted as long as the key shall be
191 16 ruschi
        used for either encryption or decryption. This bit must be cleared for one clock cycle to load a new key. \\ \hline
192 11 ruschi
  \texttt{6}   & \texttt{IRQ\_ENA}  & Enable use of the interrupt request signal. If asserted the component will set \texttt{IRQ} after
193
                                        completing an operation. If not set the component operates in polling mode only.\\ \hline
194
  \texttt{5-2}   & --- &reserved  \\ \hline
195
  \texttt{1}    &  \texttt{DEC} \footnotemark[1] &  If asserted memory content of the \texttt{DATA} range is regarded to be valid and will be
196
        \emph{decrypted}. This Bit shall only be deasserted externally if a running AES operation is aborted by deasserting \texttt{KEY\_VALID}. 1
197
        It will be set \texttt{0} by the core to signal completion of the operation.\\ \hline
198
  \texttt{0}    &  \texttt{ENC} \footnotemark[1] & If asserted memory content of the \texttt{DATA} range is regarded to be valid and will be
199
        \emph{encrypted}. This Bit shall only be deasserted externally if a running AES operation is aborted by deasserting \texttt{KEY\_VALID}.
200
         It will be set \texttt{0} by the core to signal completion of the operation. \\ \hline
201
\end{tabularx}
202 16 ruschi
\footnotetext[1]{\texttt{ENC} and \texttt{DEC} are mutually exclusive and must not be asserted simultaneously.}
203 11 ruschi
\label{tab:ctrlreg}
204
\captionof{table}{Bits in the control register}
205
 
206
 
207
\section{Protocol Sequence}
208
\label{sec:usage}
209
The AES component appears as memory mapped peripheral. All writes are fundamental slave write transfers, see \cite{Altera:Avalon} and take one
210
clock cycle of the Avalon\rtm\ bus clock \texttt{clk}. It is not necessary to write all words of a input parameter successively or in one transfer.
211
Bursts are not supported.\\
212
\\
213 16 ruschi
Before any AES operation can be started the initial user key has to be written to
214 11 ruschi
\texttt{KEY} segment of the memory map.After the user key is transferred
215
to the component the \texttt{KEY\_VALID} Bit must be set to start the key
216 16 ruschi
expansion. This Bit can be set simultaneously with \texttt{DEC} or \texttt{ENC} Bit of
217 11 ruschi
the control register. To invalidate the previous key and use another key the
218
\texttt{KEY\_VALID} must be deasserted for at least one Avalon\rtm\ bus clock cycle
219
During this cycle the new key can already be transferred.\\
220
\\
221
Once a key is passed and marked valid data blocks can be transferred to the
222
\texttt{DATA} segment of the memory map.
223
The AES operation is started by asserting the \texttt{ENC} Bit for
224
encryption or \texttt{DEC} Bit for decryption.
225
While asserting \texttt{ENC} or \texttt{DEC} the \texttt{KEY\_VALID} Bit must be
226
kept asserted.\\
227
The \texttt{ENC} or \texttt{DEC} Bit respectively is deasserted by the component
228
after completing the requested operation.
229
The result of the operation can be read from the \texttt{RESULT} area of the memory
230
and is not cleared. It will be overwritten by succeeding operations.
231
 
232
The underlying AES core uses the \FSM\ shown in \ref{fig:aesFSM} for processing of
233
the data. The signals \texttt{data\_stable} and \texttt{key\_stable} are accessible
234
over the control status word \texttt{CTRL} \ref{sec:ctrl}. \texttt{key\_ready} is a
235 16 ruschi
signal driven by the key generator when all keys are expanded. The signal
236 11 ruschi
\texttt{round\_index} is the counter for the rounds and the address to select a
237 16 ruschi
round key. \\
238 11 ruschi
\texttt{NO\_ROUNDS} is the total number of rounds the processing takes, a constant
239
defined by the generic \texttt{KEYLENGTH} \ref{sec:generics}. The AES standard
240
in\cite{NIST:Fips197} defines 10 rounds for 128 Bit key, 12 rounds for a 192 Bit key
241
and 14 rounds for a 265 Bit key.\\
242 16 ruschi
Thus depending on the key length the processing of a data block needs at maximum 15
243
clock cycles from \texttt{data\_stable=1} to completion, if the key is already expanded.
244 11 ruschi
 
245
\begin{figure}[!ht]
246
  \centering
247
  \includegraphics[width=100mm]{encrypt_FSM}
248
  \caption{Finite State Machine of encryption and decryption process}
249
  \label{fig:aesFSM}
250
\end{figure}
251
 
252
 
253 16 ruschi
\subsection{Interrupt Behavior}
254 11 ruschi
\label{sec:irq}
255
By setting \texttt{IRQ\_ENA} in the control register \ref{sec:ctrl} the
256
component is configured to issue interrupt requests.
257
If \texttt{IRQ\_ENA} is asserted the interrupt request \texttt{IRQ} \ref{sig:irq} will be set when the
258
computation has completed in addition to clearing the \texttt{ENC} or \texttt{DEC}
259
Bit.
260
The \texttt{IRQ} \ref{sig:irq}  signal will remain set until clearing \texttt{IRQ\_ENA}
261
or a read operation on the \texttt{RESULT} area of the components address range.
262
 
263 16 ruschi
\section{The Inner Core}
264
\label{sec:core}
265
The algorithmic core is divided into two separate data paths one for encryption and a
266
second for decryption operation. The two data paths are independent, however they
267
share the keyexpansion component which provides decrypt and encrypt keys (which are
268
the same only in opposite order). Each data path is controlled by its own \FSM\.  If
269
configured by the generic \texttt{DECRYPTION} \ref{gen:decryption} the decryption
270
data path is included and some multiplexers are generated for the shared signals,
271
e.g. \texttt{result} or \texttt{roundkey\_index}.\\
272
For reference the encryption data path of \texttt{aes\_core.vhd} is given in figure
273
\ref{fig:aescore}. The decryption data path is left for the reader or any other author
274
of this document.
275
\newpage
276
\begin{figure}[!ht]
277
  \centering
278
  \includegraphics[width=0.9\textwidth]{CoreEncDP}
279
  \caption{Encrypt data path of the AES core as implemented in aes\_core.vhd}
280
  \label{fig:aescore}
281
\end{figure}
282
\newpage
283
\section{Throughput Calculation}
284
\label{sec:throughput}
285
The Avalon\rtm\ interface communicates a 32-Bit DWORD per clock cycle. Therefore a key is transmitted in 4 to 8 cycles
286
plus one cycle to activate keyexpansion with the control word \ref{sec:ctrl}. A payload data block or the result consist
287
always of 4 DWORDs, thus it takes 4 cycles to send data to the core, one cycle to activate the computation with the
288 11 ruschi
control register \ref{sec:ctrl} and 4 cycles to retrieve the data.
289
 
290 16 ruschi
The keyexpansion component computes one column of a roundkey each clock cycle. AES takes, depending on the key length,
291 11 ruschi
10, 12 or 14 roundkeys with each 4 columns, see \cite{NIST:Fips197}. The keyexpansion therefore takes 40, 48 or 56
292
cycles until the encryption or decryption can start. The roundkeys are stored until invalidated, see \ref{sec:usage}
293
thus this step is is only needed once after power-up until the key changes.
294
 
295 16 ruschi
The AES core computes one iteration (round) of the Rijndael-Algorithm each clock cycle, thus a 128 Bit data block is
296
encrypted or decrypted in 10, 12 or 14 cycles plus an initial round.
297 11 ruschi
 
298 16 ruschi
The maximum throughput $T_{max}[Bits]$ depends on the maximum operation frequency $f_{max}$ and the key length which
299 11 ruschi
influences the number of rounds $N_{rnd} \epsilon \lbrace 10,12,14 \rbrace $.
300
\begin{equation}
301
  T_{max}=\frac{ (1+N_{rnd}) \cdot 128 Bit}{f_{max}}
302
\label{eqn:tmax}
303
\end{equation}
304
 
305
Note: Equation \ref{eqn:tmax} assumes that the roundkeys are already generated and does not include the constant of 4+1+4
306 16 ruschi
Avalon\rtm\ bus cycles for transmission of data, activation and result retrieval.
307
\newpage
308
\section{FPGA implementations}
309
\label{sec:fpga}
310
The component has only be implemented and tested on an Altera\rtm\ Cyclone-II EP2C35
311
FPGA. For this setup a Makefile is provided in \texttt{./sys/Altera\_Quartus9.1}.  All
312 11 ruschi
other values in the table are only results of synthesis\footnotemark[0] and are not
313
verified on actual hardware.
314
 
315 16 ruschi
\footnotetext[0]{Synthesized with Altera\rtm\ Quartus-II\rtm\ Web edition Version 9.1 or Xilinx\rtm\ ISE 9.1 Webpack}
316 11 ruschi
 
317 16 ruschi
The design is kept vendor independent in generic VHDL.
318
AES SubByte component is specially designed using M4K block RAM as dual-port ROM. For
319 11 ruschi
non-Altera\rtm\ FPGAs a second VHDL architecture exists also trying to make use of
320
ROM functions of the target chips however the success varies on RTL compiler
321 16 ruschi
capabilities. Later versions of  Altera\rtm\ Quartus-II\rtm\ show the same results whether M4K blocks are used or the generic version in selected.
322 11 ruschi
 
323
\begin{tabularx}{\textwidth}{|p{30mm}|X|p{20mm}|p{30mm}|p{18mm}|}
324
  \hline
325
  \bf{Configuration} & \bf{Target FPGA}\footnotemark[1] & \bf{LE / Slices} & \bf{HW RAM} & $\mathbf{f_{max}[Mhz]}$  \\ \hline
326
        \multirow{4}{30mm}{256 Bit Key, encrypt + decrypt} & \mbox{Xilinx\rtm\ Spartan3A} XC3S1400A-5FG484 &  - / 1609 & 18 RAMB16BWE & 91 \\ \cline{2-5}
327
        & \mbox{Xilinx\rtm\ Virtex5}   XC5VLX30-3FF324 &  - / 297 & \mbox{18 18k-Blocks}  \mbox{4 36k-Blocks} & 224 \\ \cline{2-5}
328 16 ruschi
        & \mbox{Altera\rtm\ Cyclone-II} EP2C35F484C8 & 1937 / - &  \mbox{39912 Bits} in  \mbox{22 M4K-Blocks} & 65 \\ \cline{2-5}
329 11 ruschi
        & \mbox{Altera\rtm\ StratixII} EP2S30F484C5 & 585 / - &  \mbox{39912 Bits} in  \mbox{22 M4K-Blocks} & 103  \\
330
        \hline
331
%%%%%%
332
        \multirow{2}{30mm}{128 Bit Key, encrypt + decrypt} & \mbox{Xilinx\rtm\ Spartan3A} XC3S1400A-5FG484 &  - / 1523 & 18 RAMB16BWE & 91 \\ \cline{2-5}
333 16 ruschi
                & \mbox{Altera\rtm\ Cyclone-II} EP2C35F484C8 & 1776 / - &  \mbox{39912 Bits} in  \mbox{22 M4K-Blocks} & 65 \\
334 11 ruschi
        \hline
335
%%%%%%
336
        \multirow{4}{30mm}{256 Bit Key, encrypt} & \mbox{Xilinx\rtm\ Spartan3A}  XC3S1400A-5FG484 &  - / 680 & 14 RAMB16BWE & 159 \\ \cline{2-5}
337
        & \mbox{Xilinx\rtm\ Virtex5}   XC5VLX30-3FF324 &  - / 297 & \mbox{10 18k-Blocks}  \mbox{4 36k-Blocks} & 268 \\ \cline{2-5}
338 16 ruschi
        & \mbox{Altera\rtm\ Cyclone-II} EP2C35F484C8 & 969 / - &  \mbox{22528 Bits} in  \mbox{14 M4K} & 97 \\ \cline{2-5}
339 11 ruschi
        & \mbox{Altera\rtm\ StratixII} EP2S30F484C5 & 524 / - &  \mbox{22528 Bits} in \mbox{ 14 M4K} & 145  \\
340
        \hline
341
%%%%%%
342
        \multirow{2}{30mm}{128 Bit Key, encrypt} & \mbox{Xilinx\rtm\ Spartan3A}  XC3S1400A-5FG484 &  - / 594 & 14 RAMB16BWE & 159 \\ \cline{2-5}
343 16 ruschi
        & \mbox{Altera\rtm\ Cyclone-II} EP2C35F484C8 & 797 / - & \mbox{22528 Bits} in  \mbox{ 14 M4K} & 95  \\ \cline{2-5}
344 11 ruschi
        \hline
345
\end{tabularx}
346
\footnotetext[1]{This table is not meant to be a benchmark between FPGAs of different vendors, it is only a rough
347
  estimation for the user of the core.
348
        The FPGA families cannot  be compared easily, see also \cite{Xilinx:wp284} and \cite{Altera:01007}for further details. }
349
\label{tab:ressources}
350
\captionof{table}{ressource usage on different targets and configuration}
351
 
352 16 ruschi
All configurations in table \ref{tab:ressources} use hardware key
353 11 ruschi
expansion. Downloading of software generated roundkeys is not yet supported. The
354 16 ruschi
decryption and encryption data paths share a common keyexpansion block, multiplexing
355 11 ruschi
the address signals is one of the main reasons for regression of the maximum
356
frequency $f_{max}$ of the configuration compared to encryption only versions.
357
 
358 16 ruschi
\section{Simulation}
359
\label{sec:simulation}
360 11 ruschi
\subsection{Testbench}
361
\label{sec:testbench}
362 16 ruschi
In \texttt{./bench/VHDL/} a ``self-checking testbench'' is provided which runs tests
363 11 ruschi
for a default \texttt{TESTKEYSIZE} is 256 Bit . For different key lengths the
364
constant \texttt{TESTKEYSIZE} has to be changed appropriately. Expected results for
365 16 ruschi
all test cases and key lengths are included. The expected results were generated by
366 11 ruschi
AES Calculator applet, written by Lawrie Brown from ADFA, Canberra Australia \cite{LaBr05}.  The
367
testbench consists of a sequence of 5 test cases:
368
\begin{enumerate}
369
\item load key1, load data1, encrypt : (basic encryption test)
370
\item key1, data1, decrypt: (basic decryption test)
371
\item key1, data1, encrypt: (test if internal state was changed)
372
\item key1, data2, encrypt: (encryption test with new data)
373
\item key2, data2, encrypt: (encryption test with new key)
374
\end{enumerate}
375
 
376 16 ruschi
\subsection{Simulation}
377 11 ruschi
\label{sec:simulation}
378
The component library is ``\texttt{avs\_aes\_lib}''. All files are expected to be
379
compiled into this library as all files depend at least on the package
380
\texttt{avs\_aes\_lib.avs\_aes\_pkg}. \\
381
A Makefile for Mentor Graphics\rtm\ Modelsim\rtm\ is given in \texttt{./sim/}. The
382
default make target \texttt{simaes} will create the library
383
``\texttt{avs\_aes\_lib}'' and a ``\texttt{work}'' library, compile all files and run
384
a testbench. \\
385
 
386 16 ruschi
\section{Software Driver}
387 11 ruschi
\label{sec:software}
388
This AES Core Avalon\rtm\ slave was also tested on a NiosII\rtm\ processor.  To use
389
it in software a simple driver is provided in \texttt{./sw/} among with an example
390 16 ruschi
program of the basic usage.
391
The driver consist of the two files \texttt{avs\_aes.c} and \texttt{avs\_aes.h}.
392
Find more detailed description in the doxygen documentation in \texttt{./doc/sw/html}.
393
 
394
\subsection{Configuration}
395 11 ruschi
To be adapted to different address mappings and key sizes two macros are use in \texttt{avs\_aes.h}:
396
 \begin{tabularx}{\textwidth}{|p{25mm}|p{25mm} |X|}
397
  \hline
398
  \bf{define}     &  \bf{default} & \bf{Description}\\ \hline
399
  \texttt{KEYWORDS} & \texttt{8}  & Key size in 32 Bit words \\
400
\hline
401 16 ruschi
  \texttt{AES\_BASEADDR} & \texttt{0x40000} & Base address at which the AES Core is mapped to the Avalon\rtm\ switch-fabric \\
402 11 ruschi
\hline
403
\end{tabularx}
404
\label{tab:macros}
405
\captionof{table}{user changeable macros in header}
406
 
407
 
408
\newpage
409
\section{License and Liability}
410
\label{sec:license}
411
The ``AES 128/192/256 (ECB) Avalon\rtm-MM Slave'' component, all its subcomponents
412
and documentation (like this document you are reading) are published under following
413
license:\\
414
 
415
Copyright (c) 2009, Thomas Ruschival - All rights reserved.
416
 
417
Redistribution and use in source and binary forms, with or without modification, are
418
permitted provided that the following conditions are met:
419
\begin{itemize}
420
\item Redistributions of source code must retain the above copyright notice, this
421
  list of conditions and the following disclaimer.
422
\item Redistributions in binary form must reproduce the above copyright notice, this
423
  list of conditions and the following disclaimer in the documentation and/or other
424
  materials provided with the distribution.
425
\item Neither the name of the organization nor the names of its contributors may be
426
  used to endorse or promote products derived from this software without specific
427
  prior written permission.
428
\end{itemize}
429
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
430
 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
431
 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
432
 ARE DISCLAIMED. \\
433
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
434
 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
435
 OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
436
 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
437
 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
438
 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
439
 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
440
 THE POSSIBILITY OF SUCH DAMAGE\\
441
 
442
 Note: The term ``SOFTWARE'' in the above licence applies in this case not only to
443
 software as executable code but also to documentation, hardware description or
444
 compiled netlists for actual target hardware. As Chips generally don't just
445
 reproduce ``the above copyright notice, this list of conditions and the following
446
 disclaimer in the documentation and/or other materials provided with the
447 16 ruschi
 distribution'' the data sheet of the product must also contain it.\\
448 11 ruschi
 
449 16 ruschi
 Altera, Cyclone-II, Stratix-II, Quartus, NIOS and Avalon are registered trademarks of the Altera
450 11 ruschi
 Corporation
451
 101 Innovation Drive, San Jose CA USA \\
452
 Xilinx, Spartan3A and Virtex5 are registered trademarks of Xilinx Inc. 2100 Logic Drive, San Jose CA USA \\
453
 Mentor Graphics and ModelSim are registered trademarks of Mentor Graphics
454
 Corporation 8005 SW Boeckman Road, Wilsonville OR USA \newpage
455
 
456
\printacronym
457
\printglossary
458
 
459
\bibliography{cited}
460
\revisionTable
461
 
462
\end{document}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.