1
% Short manual that explains the end user how to use the simulator (pt_PT).
3
\documentclass[11pt,a4paper,twoside,titlepage]{article}
5
\usepackage[utf8x]{inputenc}
6
\usepackage[portuguese]{babel}
7
\usepackage[T1]{fontenc}
17
\newcommand{\Author}{Bruno Nova}
18
\newcommand{\Title}{DrMIPS -- Manual de Utilizador}
22
\hypersetup{pdfauthor={Bruno Nova},pdftitle={\Title}}
23
\definecolor{cloudwhite}{cmyk}{0,0,0,0.025}
24
\graphicspath{{figures/}}
29
literate={ç}{{\c{c}}}1,
30
basicstyle=\footnotesize\ttfamily,
31
keywordstyle=\bfseries,
33
numberstyle=\scriptsize\texttt,
40
backgroundcolor=\color{cloudwhite},
42
showstringspaces=false,
47
breakatwhitespace=false,
48
escapeinside={\%*}{*)},
49
morekeywords={*,var,template,new}
52
\definecolor{orange}{RGB}{255,128,0}
53
\definecolor{cyan2}{RGB}{0,170,230}
55
\newcommand{\menupath}[1]{\textbf{\emph{#1}}}
65
\section{Composição da Interface Gráfica}
67
A interface gráfica do simulador DrMIPS é composta pela barra de menus, pela
68
barra de ferramentas e pela área onde os conteúdos principais do simulador são
70
Os ícones na barra de ferramentas são atalhos para algumas acções usadas
71
frequentemente nos menus. Pode pairar o cursor do rato sobre cada ícone para
72
descobrir o que ele faz.
74
A interface é mostrada com um tema claro, por omissão. Mas pode mudar para o
75
tema escuro ao seleccionar \menupath{Ver > Tema escuro} no menu.
76
O DrMIPS suporta múltiplos idiomas, portanto estes nomes podem ser diferentes.
77
Pode escolher outro idioma no menu \menupath{Ver > Idioma}.
79
Os conteúdos principais do simulador são divididos em separadores, por omissão.
80
Cada separador pode ser posicionado no lado esquerdo da janela ou no lado
82
Pode mover um separador para o outro lado se clicar com o botão direito do rato
83
no separador e seleccionar \menupath{Mudar de lado} no menu que aparece.
84
Se, em vez disso, preferir ver os conteúdos divididos em janelas, pode fazê-lo
85
seleccionando \menupath{Ver > Janelas internas} no menu.
86
As posições e tamanhos dos separadores/janelas são recordadas ao sair.
88
Os separadores ou janelas mostrados são:
90
\item \textbf{Código}: o editor de código, onde pode criar ou editar um
91
programa em \emph{assembly} para ser executado pelo simulador.
92
\item \textbf{Assemblado}: após o código ser assemblado com sucesso,
93
este mostra as instruções máquina resultantes.
94
\item \textbf{Registos}: lista todos os registos e seus valores.
95
\item \textbf{Memória de dados}: mostra todos os valores na memória de
97
\item \textbf{Caminho de dados}: a representação gráfica do caminho de
98
dados, e o seu estado, é mostrada aqui.
102
\section{Separadores/Janelas}
106
Este é o editor de código, onde pode escrever um programa em \emph{assembly}.
107
O editor mostra os números das linhas e realça a sintaxe válida.
109
Pode desfazer/refazer alterações, cortar/copiar/colar texto e
110
procurar/substituir palavras no código. Estas acções podem ser acedidas pelo
111
menu \menupath{Editar} ou com um clique com o botão direito do rato no editor.
112
O código pode ser gravado para ou lido de um ficheiro. Estas acções estão
113
disponíveis no menu \menupath{Ficheiro}.
115
Pode premir \emph{Ctrl+Espaço} para auto-completar a palavra que está a escrever.
116
Ao fazer isso será mostrada uma lista de instruções, pseudo-instruções,
117
directivas e etiquetas que podem completar essa palavra.
118
Também será mostrada uma janela que explica o que a palavra seleccionada na lista
120
Ao premir \emph{Ctrl+Espaço} num espaço vazio serão listadas todas as instruções,
121
pseudo-instruções, directivas e etiquetas disponíveis.
122
Também pode ver esta informação no menu \menupath{CPU > Instruções suportadas}.
124
Após escrever um programa em \emph{assembly}, terá de o assemblar.
125
Isto é feito seleccionando \menupath{Executar > Assemblar} no menu ou pressionando
126
o respectivo botão na barra de ferramentas.
127
Se o programa tiver erros, uma mensagem irá indicar o primeiro erro e um ícone de
128
exclamação irá aparecer ao lado dos números das linhas que têm um erro.
129
Pode pairar o cursor do rato sobre estes ícones para descobrir qual é o erro.
130
Se o programa estiver correcto, nenhuma mensagem será mostrada e pode prosseguir
134
\subsection{Assemblado} \label{sec:assembled}
136
Após o programa ser assemblado com sucesso, as instruções em código máquina
137
resultantes serão mostradas aqui numa tabela.
139
Cada linha da tabela corresponde a uma instrução ``assemblada'', contendo o seu
140
endereço, código máquina e instrução original.
141
A instrução a ser executada no momento é realçada.
143
Se estiver a simular um processador pipeline, todas as instruções que estão no
144
pipeline são realçadas com diferentes cores, cada uma representando uma uma etapa
146
As diferentes cores significam:
148
\item \textbf{\textcolor{cyan2}{Azul}}: Etapa \textbf{I}nstruction
149
\textbf{F}etch (\textbf{IF}).
150
\item \textbf{\textcolor{green}{Verde}}: Etapa \textbf{I}nstruction
151
\textbf{D}ecode (\textbf{ID}).
152
\item \textbf{\textcolor{magenta}{Magenta}}: Etapa \textbf{Ex}ecute
154
\item \textbf{\textcolor{orange}{Laranja}}: Etapa \textbf{Mem}ory access
156
\item \textbf{\textcolor{red}{Vermelho}}: Etapa \textbf{W}rite \textbf{B}ack
160
Ao pairar o cursor do rato sobre uma instrução na tabela irá exibir uma dica.
161
Esta dica mostra o tipo da instrução e os valores dos seus campos. \footnote{Na
162
versão para Android, toque na instrução para ver a sua dica.}
164
Os valores são mostrados em formato decimal, por omissão.
165
Pode alterar esse formato para binário ou hexadecimal usando a caixa de
166
combinação no fundo do separador/janela.
167
Esta caixa de combinação está disponível em todos os separadores/janelas,
168
excepto no separador/janela de código.
170
Para controlar a simulação, pode usar o menu \menupath{Executar} ou a barra de
171
ferramentas. Prima \menupath{Passo} para executar uma instrução,
172
\menupath{Passo atrás} para reverter uma instrução, \menupath{Executar} para
173
executar o programa inteiro e \menupath{Reiniciar} para reverter para a primeira
177
\subsection{Registos e Memória de Dados}
179
Estes dois separadores/janelas são bastante semelhantes.
180
O separador/janela dos registos mostra os valores dos registos e do contador do
181
programa, enquanto que o separador/janela da memória de dados mostra os valores
184
Os valores que estão actualmente a ser acedidos são realçados em diferentes
185
cores. As cores significam:
187
\item \textbf{\textcolor{green}{Verde}}: o registo/endereço está a ser lido
188
no banco de registos/memória de dados.
189
\item \textbf{\textcolor{red}{Vermelho}}: o registo/endereço está a ser
190
escrito no bando de registos/memória de dados.
191
\item \textbf{\textcolor{orange}{Laranja}}: o registo/endereço está a ser
192
lido e escrito no mesmo ciclo no banco de registos/memória de dados.
195
Pode editar o valor de qualquer registo ou endereço de memória fazendo
196
duplo-clique nele na respectiva tabela. Isto inclui o contador do programa.
197
Registos constantes (como o registo \verb+$zero+) não podem ser editados.
198
\footnote{Na versão para Android, toque durante alguns segundos no
199
registo/endereço para o editar.}
201
Por omissão, os valores dos registos e da memória de dados são reiniciados
202
sempre que o código é assemblado.
203
Se não quiser que isto aconteça, desmarque
204
\menupath{Executar > Reiniciar dados antes de assemblar} no menu.
207
\subsection{Caminho de dados}
209
A representação gráfica do caminho de dados do processador é exibida aqui.
210
É aqui que pode ver como o CPU funciona internamente.
212
O DrMIPS pode simular vários caminhos de dados uniciclo e pipeline diferentes.
213
O nome do caminho de dados a ser usado actualmente é mostrado no fundo deste
214
separador/janela. Pode escolher outro caminho de dados seleccionando
215
\menupath{CPU > Carregar} no menu.
216
Note que caminhos de dados diferentes podem suportar instruções diferentes.
218
Os caminhos de dados fornecidos por omissão são:
220
\item \textbf{Caminhos de dados uniciclo}
222
\item \textbf{unicycle.cpu}: O caminho de dados uniciclo por omissão.
223
\item \textbf{unicycle-no-jump.cpu}: Variante mais simples do caminho
224
de dados uniciclo que não suporta a instrução \verb+j+
226
\item \textbf{unicycle-no-jump-branch.cpu}: Uma variante ainda mais
227
simples do caminho de dados uniciclo que não suporta \emph{jumps}
229
\item \textbf{unicycle-extended.cpu}: Uma variante os caminho de dados
230
uniciclo que suporta algumas instruções adicionais, como
231
multiplicações e divisões.
234
\item \textbf{Caminhos de dados pipeline}
236
\item \textbf{pipeline.cpu}: O caminho de dados pipeline por omissão,
237
que implementa resolução de conflitos. Os caminhos de dados
238
pipeline não suportam a instrução \verb+j+ (\emph{jump}).
239
\item \textbf{pipeline-only-forwarding.cpu}: Variante do caminho de
240
dados pipeline que, em termos de resolução de conflitos, só
241
implementa atalhos (dando resultados errados).
242
\item \textbf{pipeline-no-hazard-detection.cpu}: Uma variante do
243
caminho de dados pipeline que não implementa nenhum tipo de
244
resolução de conflitos (dando resultados errados).
245
\item \textbf{pipeline-extended.cpu}: Uma variante que suporta algumas
246
instruções adicionais, tal como o \emph{unicycle-extended.cpu}.
250
No topo do separador/janela, a instrução ou instruções actualmente a serem
251
executadas são mostradas. Elas são realçadas com as mesmas cores explicadas
252
na sub-secção~\ref{sec:assembled}.
254
O caminho de dados é mostrado por baixo das instruções.
255
Os componentes são representados por rectângulos ou quadrados e os fios por
256
linhas que terminam em setas.
257
Os fios relevantes que estão no caminho de controlo são mostrados em azul.
258
Fios que são considerados irrelevantes no ciclo de relógio actual são
259
mostrados em cinzento.
260
Um fio é considerado irrelevante se for um sinal de controlo colocado a
261
\verb+0+, se o seu valor for ignorado por um componente, se for a saída da
262
\emph{unidade de detecção de conflitos} e não estiver a ocorrer um
265
Os valores em algumas entradas e saídas importantes de alguns componentes são
266
mostrados no caminho de dados como umas pequenas ``dicas'' com
268
Pode pairar o cursor do rato sobre estas ``dicas'' para descobrir qual é o
269
identificador da entrada/saída.
271
Ao pairar o cursor do rato sobre um componente, uma dica com alguns detalhes
272
sobre o mesmo será mostrada \footnote{Na versão para Android, toque no
273
componente para ver a sua dica.}.
274
A dica apresenta o nome do componente, uma descrição do que faz e os valores
275
em todas as entradas e saídas.
277
Pode ocultar o caminho de controlo desmarcando
278
\menupath{Caminho de dados > Caminho de controlo}.
279
Pode ocultar as setas no fim dos fios desmarcando
280
\menupath{Caminho de dados > Setas nos fios}.
281
E pode ocultar as ``dicas'' das entradas/saídas desmarcando
282
\menupath{Caminho de dados > Dados sobrepostos}.
286
O caminho de dados também pode ser mostrado num ``modo de desempenho''.
287
Pode mudar para este modo seleccionando
288
\menupath{Caminho de dados > Modo de desempenho} no menu.
289
Neste modo, o desempenho do processador é simulado, e o caminho crítico
290
é mostrado a vermelho.
292
Pode ver ou o caminho crítico da instrução que está actualmente a ser
293
executada ou o caminho crítico global do CPU (independente da instrução).
294
A caixa de combinação no fundo do separador/janela é usada para escolher
295
entre estas duas opções.
297
Cada componente tem uma latência, que pode ser consultada na sua dica.
298
A dica também mostra as latências acumuladas nas entradas (o tempo que
299
demora para a entrada receber o valor correcto após a transição do relógio)
300
e nas saídas (o tempo que o componente demora a gerar o valor correcto para
303
As latências dos componentes podem ser alteradas fazendo um duplo-clique
304
neles no modo de desempenho \footnote{Na versão para Android, toque durante
305
alguns segundos no componente no modo de desempenho para editar a sua
307
Para além disso, pode seleccionar
308
\menupath{Caminho de dados > Restaurar latências} no menu para restaurar as
309
latências de todos os componentes para os seus valores originais, e
310
\menupath{Caminho de dados > Remover latências} para colocar todas as
311
latências a \verb+0+.
313
Também pode ver algumas estatísticas sobre a simulação, como a frequência de
314
relógio e o CPI (\emph{Ciclos Por Instrução}), seleccionando
315
\menupath{Caminho de dados > Estatísticas} no menu.