Instituto Politécnico do Cávado e do Ave
Curso:
Ano lectivo de 2013/2014
Mestrado em Engenharia
Eletrónica e de Computadores
Sistemas Embebidos e de Tempo-Real
UC:
1º Teste
Data:
Duração:
Prof. Nuno Peixoto
9 de Janeiro de 2014
1h:30m + 10m tol.
Nº_________Nome__________________________________________________________
A prova escrita está cotada para um máximo de 20 valores. No final de cada questão é apresentada a cotação da
mesma em valores. Em todas as questões cuja resposta seja de justificação obrigatória a ausência desta implica a
anulação da resposta, ainda que a resposta esteja correta. A codificação de algumas das instruções da arquitetura
MIPS bem como parte do conjunto de instruções da arquitetura ARM encontram-se em anexo para consulta.
1. Comente, justificando, a veracidade da seguinte afirmação: “A mesma arquitetura de
computador poderá ser implementada por diferentes circuitos digitais.” (1,0 Valores)
2. Indique, justificando, qual o tipo de arquitetura, RISC ou CISC, que exige maiores recursos
de memória de código para o mesmo programa. (1,0 Valores)
3. Represente as variáveis , e , Tabela 1, nas memórias endereçáveis ao byte, Tabela 2,
tendo em conta que ocupa a posição 0x3423FA01 e as restantes as posições seguintes.
(2.0 Valores)
Memória
…
…
Big-endian
Endereço
…
0x3423FA00
0x3423FA01
0x3423FA02
0x3423FA03
0x3423FA04
0x3423FA05
0x3423FA06
0x3423FA07
0x3423FA08
0x3423FA09
0x3423FA0A
…
Memória
…
Variáveis
Valor
hexadecimal
float f = 0.123;
0x3DFBE76D
0x41
0x41 (A)
0x42 (B)
0x43 (C)
0x44 (D)
char c = ‘A’;
char ch[4] =
{‘A’, ‘B’, ‘C’, ‘D’};
Tabela 1 - Variáveis.
…
Little-endian
Tabela 2 - Memórias endereçáveis ao byte.
4. A maioria dos DSPs utiliza pipeline. Enumere as principais vantagens do pipeline? (1,0
Valores)
5. Numa instrução de salto condicional o que acontece às instruções que estão no pipeline no
caso do salto se concretizar? (1,0 Valores)
1
Instituto Politécnico do Cávado e do Ave
Ano lectivo de 2013/2014
6. A arquitetura ARMv7E-M é do tipo load/store. O que entende por arquitetura load/store
no que diz respeito aos modos de endereçamento? (1,0 Valores)
7. Considere o processador de ciclo único (arquitetura MIPS) cujo diagrama lógico se
apresenta na Figura 1.
Figura 1 - Processador de ciclo único.
a) Trata-se de uma arquitetura Harvard ou Von Neumann? Justifique. (1,0
Valores)
b) Qual das instruções que se seguem deveria ser utilizada para definir o período
do sinal de relógio? (1,0 Valores)
1. add $s1, $s2, $s3
2. lw $s1, 4($s2)
3. sw $s3, 0($s2)
4. slt $s6, $t1, $t3
5. j 4000
c) Qual o estado das linhas de controlo, com exceção das linhas de controlo da
ALU (ALUOp), na execução da instrução que se segue? (1,5 Valores)
Instrução: beq $s1, $s2, 4000
$s1 = 120; $s2 = 120
2
Instituto Politécnico do Cávado e do Ave
Ano lectivo de 2013/2014
d) Quais as instruções que necessitam das unidades Sign Extend e Shift Left 2?
(1,5 Valores)
e) De que forma alteraria o datapath do processador para incluir a instrução jr
(jump register)? Esta instrução permite o salto direto para o endereço da
memória de código armazenado no registo 1. (2,0 Valores)
8. Comente a seguinte afirmação: “Um sistema dispensador de senhas baseado num
computador de uso geral não é um sistema embebido.” (1,0 Valores)
9. Classifique os seguintes sistemas tempo-real como hard ou soft:
a) Deteção da presença de um peão na passadeira através de uma câmara, a qual
permite ligar um semáforo vermelho para os automóveis. (0,5 Valores)
b) Sistema de defesa antimíssil num porta-aviões. (0,5 Valores)
c) Máquina de vending. (0,5 Valores)
d) Sistema que efetua o check-in de um passageiro no aeroporto. (0,5 Valores)
10. Na Tabela 3 encontra-se parte do código de uma função em linguagem C. A Tabela 4
apresenta o código correspondente a essa função em linguagem assembly da arquitetura
ARM. Partindo do pressuposto de que todas as instruções ARM executam num único ciclo
de relógio aumente o desempenho da função, reescrevendo, para isso, o código em
assembly. (1,5 Valores)
(…)
int f = 0;
int i = 0;
while (i < N) {
f = f + c[i]*x[i];
i++;
}
(…)
loop
Tabela 3 - Código em linguagem C.
mov
mov
adr
ldr
mov
adr
adr
ldr
ldr
mul
add
add
cmp
blt
r0, #0
r8, #0
r2, N
r1, [r2]
r2, #0
r3, c
r5, x
r4, [r3, r8]
r6, [r5, r8]
r4, r4, r6
r2, r2, r4
r0, r0, #1
r0, r1
loop
Tabela 4 - Códigos em assembly.
3
Instituto Politécnico do Cávado e do Ave
Ano lectivo de 2013/2014
11. Indique os valores das variáveis em cada linha da Tabela 5, de acordo com a execução do
código C. Deve considerar o valor da variável após a execução da linha. (1,5 Valores)
Código
Valores das variáveis
#include <stdio.h>
struct data {
int id;
char* name;
char c;
};
void init(struct data** dados, int num)
{
*dados = new struct data[num];
num = 50;
}
void end(struct data** dados)
{
delete[] *dados;
}
int main()
{
int num = 5;
int *num_ptr;
int IDS[5] = {0, 1, 2, 3, 4};
char name[10] = {'m', 'e', 'e', 'c', '_', 't',
'e', 's', 't', '\0'};
struct data * myData = NULL;
struct data * myDataPtr = NULL;
num_ptr = &num;
init(&myData, *num_ptr);
*num_ptr =
*num_ptr =
myDataPtr = myData;
for(int i = 0; i < num; i++)
{
myDataPtr->id = IDS[i];
myDataPtr->name = name;
myDataPtr->c = name[i];
myDataPtr++;
}
int a = myData->id;
myDataPtr = myData;
int b = (++myDataPtr)->id;
char c = (myDataPtr++)->c;
int size = sizeof(struct data);
printf(myDataPtr->name);
end(&myData);
a =
b =
c =
size =
Print:
return 0;
}
Tabela 5 - Código em linguagem C.
4
Instituto Politécnico do Cávado e do Ave
Ano lectivo de 2013/2014
Anexos
Codificação de parte do conjunto de instruções da arquitetura MIPS (32-bit):
Codificação das instruções R-Type:
op
6 bits
Opcode
(zero)
rs
5 bits
Operando
fonte
Instrução
add
subtract
and
or
nor
slt
Aritmética
Lógica
Salto condicional
rs
5 bits
Operando
fonte
Lógica
Salto condicional
Exemplo
add $s1, $s2, $s3
sub $s1, $s2, $s3
and $s1, $s2, $s3
or $s1, $s2, $s3
nor $s1, $s2, $s3
slt $s1, $s2, $s3
rt
5 bits
Operando
destino ou
fonte
Instrução
load word
store word
and immediate
or immediate
shift left logical
shift right logical
branch on equal
branch on not equal
set
on
less
than
immediate
Significado
$s1 = $s2 + $s3
$s1 = $s2 - $s3
$s1 = $s2 & $s3
$s1 = $s2 | $s3
$s1 = ~($s2 | $s3)
if ($s2 < $s3) $s1 = 1;
else $s1 = 0;
imm
16 bits
Operando fonte imediato
Exemplo
lw $s1, 100($s2)
sw $s1, 100($s2)
andi $s1, $s2, 100
ori $s1, $s2, 100
sll $s1, $s2, 10
srl $s1, $s2, 10
beq $s1, $s2, L
bne $s1, $s2, L
slti $s1, $s2, 100
Significado
$s1 = Memory [100+$s2]
Memory [100+$s2] = $s1
$s1 = $s2 & 100
$s1 = $s2 | 100
$s1 = $s2<<10
$s1 = $s2>>10
if ($s1 == $s2) go to L
if ($s1 != $s2) go to L
if ($2 < 100) $s1 = 1;
else $s1 = 0;
Codificação da instrução J-Type
op
6 bits
Opcode
funct
6 bits
operação
Codificação das instruções I-Type
Categoria
Transferência de
dados
shamt
5 bits
Operações de
deslocamento
Codificação das instruções I-Type
op
6 bits
Opcode
rd
5 bits
Operando
destino
Conjunto de instruções R-Type:
Categoria
rt
5 bits
Operando
fonte
addr
26 bits
Endereço de salto
Instrução J-Type
Categoria
Salto incondicional
Instrução
jump
Exemplo
jL
5
Significado
Vai para L
Instituto Politécnico do Cávado e do Ave
Ano lectivo de 2013/2014
Parte do conjunto de instruções da arquitetura ARMv7E-M (execução em 1 ciclo de relógio):
Instruções aritméticas:
Instrução
add
subtract
multiply
signed divide
multiply with accumulate
and
or
exclusive or
load word
store word
load PC-relative address
R2 = R1 + R3
R2 = R1 + 240
R2 = R1 – R3
R2 = R1 – 240
R3 = R2 x R1
R4 = R3/R2
R4 = R3 x R2 + R1
Exemplo
Significado
and R9, R2, R3
and R9, R2, #0xFF00
orr R9, R2, R3
orr R9, R2, #0xFF00
eor R9, R2, R3
eor R9, R2, #0xFF00
R9 = R2 & R3
R9 = R2 & 0xFF00
R9 = R2 | R3
R9 = R2 | 0xFF00
R9 = R2 ^ R3
R9 = R2 ^ 0xFF00
Exemplo
Significado
ldr R8, [R10, R4]
ldr R8, [R10, #200]
str R8, [R10, R4]
str R8, [R10, #200]
adr R2, label
R8 = Memory [R10 + R4]
R8 = Memory [R10 + 200]
Memory [R10 + R4] = R8
Memory [R10 + 200] = R8
R2 = literal data on label
Instruções de acesso à memória:
Instrução
Significado
add R2, R1, R3
add R2, R1, #240
sub R2, R1, R3
sub R2, R1, #240
mul R3, R2, R1
sdiv R4, R3, R2
mla R4, R3, R2, R1
Instruções lógicas:
Instrução
Exemplo
Instruções de movimentação de dados de e para os registos
Instrução
Exemplo
Significado
move
Instruções de comparação
mov R2, #1200
R2 = 1200
Instrução
Exemplo
Significado
Compare (afeta Z e N)
cmp R0, R1
cmp R1, #100
Compara R0 < R1
Compara R1 < 100
Instrução
Exemplo
Significado
branch immediate
branch on less than or equal
b label
ble label
branch on greater than or equal
bge label
branch on less than
blt label
branch on greater than
bgt label
Vai para o endereço label
if(Z == 1 || N == 1)
vai para o endereço label
if(Z == 1 || N == 0)
vai para o endereço label
if(Z == 0 && N == 1)
vai para o endereço label
if(Z == 0 && N == 0)
vai para o endereço label
Instruções de salto:
*Nota: Z = 1 -> Resultado da operação é zero; N = 1 -> Resultado da operação é negativo.
6