Você está na página 1de 6

Instituto Politécnico do Cávado e do Ave Ano lectivo de 2013/2014

Curso: Mestrado em Engenharia 1º Teste Prof. Nuno Peixoto


Eletrónica e de Computadores Data: 9 de Janeiro de 2014
UC: Sistemas Embebidos e de Tempo-Real Duração: 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 Endereço Memória Variáveis Valor


… … … hexadecimal
float f = 0.123; 0x3DFBE76D
0x3423FA00
char c = ‘A’; 0x41
0x3423FA01
char ch[4] = 0x41 (A)
0x3423FA02 {‘A’, ‘B’, ‘C’, ‘D’};
0x3423FA03 0x42 (B)
0x3423FA04 0x43 (C)
0x3423FA05 0x44 (D)
Tabela 1 - Variáveis.
0x3423FA06
0x3423FA07
0x3423FA08
0x3423FA09
0x3423FA0A
… … …
Big-endian 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)

mov r0, #0
mov r8, #0
adr r2, N
(…) ldr r1, [r2]
int f = 0; mov r2, #0
int i = 0; adr r3, c
while (i < N) { adr r5, x
f = f + c[i]*x[i]; loop ldr r4, [r3, r8]
i++; ldr r6, [r5, r8]
} mul r4, r4, r6
(…) add r2, r2, r4
add r0, r0, #1
cmp r0, r1
blt loop

Tabela 3 - Código em linguagem C. 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; *num_ptr =
init(&myData, *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; a =
myDataPtr = myData;
int b = (++myDataPtr)->id; b =
char c = (myDataPtr++)->c; c =
int size = sizeof(struct data); size =
printf(myDataPtr->name); Print:
end(&myData);

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 rs rt rd shamt funct
6 bits 5 bits 5 bits 5 bits 5 bits 6 bits
Opcode Operando Operando Operando Operações de operação
(zero) fonte fonte destino deslocamento

 Conjunto de instruções R-Type:


Categoria Instrução Exemplo Significado
add add $s1, $s2, $s3 $s1 = $s2 + $s3
Aritmética
subtract sub $s1, $s2, $s3 $s1 = $s2 - $s3
and and $s1, $s2, $s3 $s1 = $s2 & $s3
Lógica or or $s1, $s2, $s3 $s1 = $s2 | $s3
nor nor $s1, $s2, $s3 $s1 = ~($s2 | $s3)
slt slt $s1, $s2, $s3 if ($s2 < $s3) $s1 = 1;
Salto condicional
else $s1 = 0;

 Codificação das instruções I-Type


op rs rt imm
6 bits 5 bits 5 bits 16 bits
Opcode Operando Operando Operando fonte imediato
fonte destino ou
fonte

 Codificação das instruções I-Type


Categoria Instrução Exemplo Significado
Transferência de load word lw $s1, 100($s2) $s1 = Memory [100+$s2]
dados store word sw $s1, 100($s2) Memory [100+$s2] = $s1
and immediate andi $s1, $s2, 100 $s1 = $s2 & 100
or immediate ori $s1, $s2, 100 $s1 = $s2 | 100
Lógica
shift left logical sll $s1, $s2, 10 $s1 = $s2<<10
shift right logical srl $s1, $s2, 10 $s1 = $s2>>10
branch on equal beq $s1, $s2, L if ($s1 == $s2) go to L
branch on not equal bne $s1, $s2, L if ($s1 != $s2) go to L
Salto condicional
set on less than slti $s1, $s2, 100 if ($2 < 100) $s1 = 1;
immediate else $s1 = 0;

 Codificação da instrução J-Type


op addr
6 bits 26 bits
Opcode Endereço de salto

 Instrução J-Type
Categoria Instrução Exemplo Significado
Salto incondicional jump jL Vai para L

5
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 Exemplo Significado
add R2, R1, R3 R2 = R1 + R3
add
add R2, R1, #240 R2 = R1 + 240
sub R2, R1, R3 R2 = R1 – R3
subtract
sub R2, R1, #240 R2 = R1 – 240
multiply mul R3, R2, R1 R3 = R2 x R1
signed divide sdiv R4, R3, R2 R4 = R3/R2
multiply with accumulate mla R4, R3, R2, R1 R4 = R3 x R2 + R1

 Instruções lógicas:
Instrução Exemplo Significado
and R9, R2, R3 R9 = R2 & R3
and
and R9, R2, #0xFF00 R9 = R2 & 0xFF00
orr R9, R2, R3 R9 = R2 | R3
or
orr R9, R2, #0xFF00 R9 = R2 | 0xFF00
eor R9, R2, R3 R9 = R2 ^ R3
exclusive or
eor R9, R2, #0xFF00 R9 = R2 ^ 0xFF00

 Instruções de acesso à memória:


Instrução Exemplo Significado
ldr R8, [R10, R4] R8 = Memory [R10 + R4]
load word
ldr R8, [R10, #200] R8 = Memory [R10 + 200]
str R8, [R10, R4] Memory [R10 + R4] = R8
store word
str R8, [R10, #200] Memory [R10 + 200] = R8
load PC-relative address adr R2, label R2 = literal data on label

 Instruções de movimentação de dados de e para os registos


Instrução Exemplo Significado
move mov R2, #1200 R2 = 1200
 Instruções de comparação
Instrução Exemplo Significado
cmp R0, R1 Compara R0 < R1
Compare (afeta Z e N)
cmp R1, #100 Compara R1 < 100

 Instruções de salto:
Instrução Exemplo Significado
branch immediate b label Vai para o endereço label
branch on less than or equal ble label if(Z == 1 || N == 1)
vai para o endereço label
branch on greater than or equal bge label if(Z == 1 || N == 0)
vai para o endereço label
branch on less than blt label if(Z == 0 && N == 1)
vai para o endereço label
branch on greater than bgt label if(Z == 0 && N == 0)
vai para o endereço label
*Nota: Z = 1 -> Resultado da operação é zero; N = 1 -> Resultado da operação é negativo.

Você também pode gostar