Prova P2 isciplina: Organização Computadores Professor: Ney aert Vilar Calazans luno: 6/junho/212 Para realizar a prova, refiram-se as propostas organização MIPS monociclo e multiciclo vistas em aula. O senho da versão monociclo apare abaixo, com talhamento do Bloco ados. O Bloco ados da versão multiciclo encontra-se no verso. ssuma que as instruções às quais o prossador monociclo dá suporte execução são apenas as seguintes, exto se a questão particular especificar outra forma:, SB, N, OR, XOR, NOR, W, SW e ORI. control_unit IR_out path reg_st MIPS_V incpc +4 pc i_ uins uins. 2..16 2..16 15.. R adrs adrt adrd ext_sinal ext32 d_ zero uins. uins.bw ados uins. ext_ 1. [4 pontos] Seja uma frequência operação 4 MHz para o prossador MIPS monociclo e assuma que a organização original foi alterada para dar suporte à execução todas as instruções do programa abaixo, mantendo sua característica monociclo. Calcule para o programa abaixo: a) O número ciclos que leva a execução do programa, com a área dados fornecida; b) O tempo execução do programa em s (1 s=1-6 segundos); c) iga o que faz este programa, do ponto vista semântico; d) Este programa possui subrotinas? Se sim, on esta se encontra (em que linhas)? 1.. 2. num:.word 3 3. :.word 4..text 5. main: la $t,num 6. lw $a,($t) 7. addiu $sp,$sp,-4 8. sw $ra,($sp) 9. jal func 1. lw $ra,($sp) 11. addiu $sp,$sp, 4 12. la $t, 13. sw $v,($t) 14. li $v,1 15. syscall 16. func: addiu $sp,$sp,-8 17. sw $ra,($sp) 18. sw $a,4($sp) 19. sltiu $t,$a,1 2. beq $t,$zero,rec 21. addiu $v,$zero,1 22. lw $ra,($sp) 23. addiu $sp,$sp,8 24. jr $ra 25. rec: addiu $a,$a,-1 26. jal func 27. lw $a,4($sp) 28. lw $ra,($sp) 29. addiu $sp,$sp,8 3. multu $v,$a 31. mflo $v 32. jr $ra
Organização Multiciclo. a que esta organização dá suporte:, SB, N, OR, XOR, NOR, S, SV, S, SV, SR, SRV, I, NI, ORI, XORI, I, B, W, SB, SW, ST, ST, STI, STI, BE, BGEZ, BEZ, BNE, J, J, JR, JR. dtpc M1 uins.wpc 4 + pc=i_ inc_pc N IR IR=IR_OT 15... 15... 15... 25... M3 2..16 2..16 2..16 11111 M4 M2 ads ad -extend s-extend s-extend*4 IR[25:] RIN R drs RS drt BREG M6 dr RT clo M5 cte_im IME IME op1 op2 C o m p outalu salta uins.walu =d_ ados M8 x [7:] 2. [2, pontos] O código VH dado abaixo representa um dos sinais auxiliares scritos no início do Bloco ados multiciclo do MIPS, usado para tectar se uma dada instrução perten à classe instruções saltos condicionais. Consire que o sinal é codificado com o menor número possível bits, e que as instruções são codificadas com valores binários cresntes a partir, na sequência dada acima do senho do Bloco ados monociclo (ou seja, rebe código, SB rebe código 1, etc.). partir stes pressupostos, senhe um diagrama portas lógicas que poria ar da síntese sta linha do VH do prossador. se apenas portas lógicas quaisquer (inversores, portas E, O, Não-E, Não-O, etc.) e fios. ual(is) é(são) a(s) entrada(s) do circuito e qual(is) sua(s) saída(s)? uins. MR_int MR uins.wmdr MR M9 inst_branch <= '1' when =BE or =BGEZ or =BEZ or =BNE else ''; 3. [2 pontos] Consire o bloco dados monociclo apresentado na página anterior. Suponha que existe uma falha, que afeta apenas o multiplexador mais à direita no senho, que gera a entrada dados do Banco Registradores (R). falha é que este componente sempre ixa passar a sua entrada superior para a saída, inpennte do valor do sinal controle. iga quais instruções ainda pom ser executadas corretamente, justificando sua resposta. lguma instrução po ser executada forma correta às vezes e forma incorreta outras vezes? Se sim, qual instrução é esta e em que condições tais situações ocorrem? 4. [2 pontos] se a documentação do MIPS (pêndi ) e o VH da versão multiciclo para esta questão. efina a partir da funcionalida da instrução SR, do Bloco ados multiciclo e sua implementação em VH quais os caminhos do Bloco ados multiciclo realmente transportam informação relevante para executar esta instrução. Marque este caminho no senho do Bloco ados acima e marque os blocos hardware nessários a sua execução. ue operação é realizada na para esta instrução? uais condições são fixadas nos multiplexadores para executar esta instrução (use a numeração dos multiplexadores para intificá-los, se achar interessante)? iga se alguma condição algum multiplexador é irrelevante.
Gabarito Para realizar a prova, refiram-se as propostas organização MIPS monociclo e multiciclo vistas em aula. O senho da versão monociclo apare abaixo, com talhamento do Bloco ados. O Bloco ados da versão multiciclo encontra-se no verso. ssuma que as instruções às quais o prossador monociclo dá suporte execução são apenas as seguintes, exto se a questão particular especificar outra forma:, SB, N, OR, XOR, NOR, W, SW e ORI. control_unit IR_out path reg_st MIPS_V incpc +4 pc i_ uins uins. 2..16 2..16 15.. R adrs adrt adrd ext_sinal ext32 d_ zero uins. uins.bw ados uins. ext_ 1. [4 pontos] Seja uma frequência operação 4 MHz para o prossador MIPS monociclo e assuma que a organização original foi alterada para dar suporte à execução todas as instruções do programa abaixo, mantendo sua característica monociclo. Calcule para o programa abaixo: a) O número ciclos que leva a execução do programa, com a área dados fornecida; b) O tempo execução do programa em s (1 s=1-6 segundos); c) iga o que faz este programa, do ponto vista semântico; d) Este programa possui subrotinas? Se sim, on esta se encontra (em que linhas)? 1.. 2. num:.word 3 # número cujo fatorial será calculado 3. :.word # local on armazenar ado do cálculo do fatorial 4..text 5. main: la $t,num # 2 ciclos - Obtém enreço do número 6. lw $a,($t) # 1 ciclo - valor armazenado em num em $a, parâmetro entrada 7. addiu $sp,$sp,-4 # 1 ciclo - aloca 1 palavra na pilha 8. sw $ra,($sp) # 1 ciclo - guarda end retorno p/ SO na pilha 9. jal func # 1 ciclo - chama subrotina 1. lw $ra,($sp) # 1 ciclo - na volta, recupera end retorno da pilha 11. addiu $sp,$sp, 4 # 1 ciclo - saloca pilha 12. la $t, # 2 ciclos obtém enreço on guardar fatorial 13. sw $v,($t) # 1 ciclo - escreve ado fatorial em 14. li $v,1 # 1 ciclo - prepara-se para sair do programa SO 15. syscall # 1 ciclo - volta ao SO 16. func: addiu $sp,$sp,-8 # 1 ciclo - loca pilha para eventual recursão 17. sw $ra,($sp) # 1 ciclo - guarda end retorno no topo 18. sw $a,4($sp) # 1 ciclo - guarda argumento entrada abaixo do topo 19. sltiu $t,$a,1 # 1 ciclo - $t rebe 1 se argumento < 1, senão 2. beq $t,$zero,rec # 1 ciclo - vai para chamada recursiva se arg >=1 21. addiu $v,$zero,1 # 1 ciclo - senão, gera cte 1 em $v, valor retorno 22. lw $ra,($sp) # 1 ciclo - recupera end retorno da pilha 23. addiu $sp,$sp,8 # 1 ciclo - saloca pilha alocado no inicio da rotina 24. jr $ra # 1 ciclo - retorna ao programa principal 25. rec: addiu $a,$a,-1 # 1 ciclo - uando chega aqui, recursão. arg <= arg-1 26. jal func # 1 ciclo - e recorre 27. lw $a,4($sp) # 1 ciclo - Na volta da recursão, recupera arg da pilha 28. lw $ra,($sp) # 1 ciclo - recupera enreço retorno da pilha 29. addiu $sp,$sp,8 # 1 ciclo saloca pilha 3. multu $v,$a # 1 ciclo - gera ado =res recursão*arg original da chamada 31. mflo $v # 1 ciclo - recupera valor para $v da parte baixa do ado 32. jr $ra # 1 ciclo - e retorna ao programa principal
Solução: a) s linhas 5-15 são executadas exatamente uma vez, gastando 13 ciclos relógio. subrotina recursiva func tem dois tipos execução: não-folha, quando a execução implica uma chamada a ela mesma e folha, caso contrário. Cada chamada func não-folha executa uma vez as linhas 16-2 e 25-32, gastando 13 ciclos relógio. chamada folha executa as linhas 16-24, gastando 9 ciclos. Com o dado inicial 3, se executa func com este valor do dado e se realiza uma chamada recursiva passando o dado crementado uma unida. Como a folha da recursão só ocorre quando o dado for menor que 1, isto implica 3 execuções não-folha func. ogo o número total ciclos do programa com esta área dados é 13+3*13+9=61 ciclos relógio. b) m relógio 4MHz implica um período (1/(4*1 6 ))s ou 2,5ns=2,5*1-3 s. ogo o tempo execução do programa é 61*2,5*1-3 s=,1525 s. c e d) Este programa calcula o fatorial do número armazenado na posição memória num, usando a subrotina recursiva func, localizada entre as linhas 16 a 32 do programa. O ado é armazenado na posição memória. Organização Multiciclo. a que esta organização dá suporte:, SB, N, OR, XOR, NOR, S, SV, S, SV, SR, SRV, I, NI, ORI, XORI, I, B, W, SB, SW, ST, ST, STI, STI, BE, BGEZ, BEZ, BNE, J, J, JR, JR. dtpc M1 uins.wpc 4 + pc=i_ inc_pc N IR IR=IR_OT 15... 15... 15... 25... M3 2..16 2..16 2..16 11111 M4 M2 ads ad -extend s-extend s-extend*4 IR[25:] RIN R drs RS drt BREG M6 dr RT clo M5 cte_im IME IME op1 op2 C o m p outalu salta uins.walu =d_ ados M8 x [7:] 2. [2, pontos] O código VH dado abaixo representa um dos sinais auxiliares scritos no início do Bloco ados multiciclo do MIPS, usado para tectar se uma dada instrução perten à classe instruções saltos condicionais. Consire que o sinal é codificado com o menor número possível bits, e que as instruções são codificadas com valores binários cresntes a partir, na sequência dada acima do senho do Bloco ados monociclo (ou seja, rebe código, SB rebe código 1, etc.). partir stes pressupostos, senhe um diagrama portas lógicas que poria ar da síntese sta linha do VH do prossador. se apenas portas lógicas quaisquer (inversores, portas E, O, Não-E, Não-O, etc.) e fios. ual(is) é(são) a(s) entrada(s) do circuito e qual(is) sua(s) saída(s)? uins. MR_int MR uins.wmdr MR M9 inst_branch <= '1' when =BE or =BGEZ or =BEZ or =BNE else ''; Solução: sando os pressupostos da questão, e notando que existem 33 instruções que vem ser intificadas pelo sinal, perbe-se que um mínimo 6 bits são nessários para codificar este sinal em formato binário. inda, dos pressupostos codificação po-se notar que às instruções BE, BGEZ, BEZ e BNE vem ser associados os códigos 25, 26, 27 e 28, respectivamente, o que em binário correspon a 111, 111, 1111 e 111. partir daí, po-se conber a implementação da linha VH como um circuito on portas N 6 entradas tectam cada uma das instruções, e as saídas stas pom ser combinadas através uma porta O 4 entradas para gerar a saída inst_branch. O senho abaixo mostra o circuito ante. o senho nota-se que o circuito possui como entrada os seis bits do sinal (5 downto ) e como única saída o sinal inst_branch. Note-se que o circuito mostrado ainda poria ser simplificado. sem um mapa Karnaugh, por exemplo.
(5) (3) (1) (4) (2) () =BE BE =25 = 111 BGEZ =26 = 111 BEZ =27 = 1111 BNE =28 = 111 =BGEZ inst_branch =BEZ =BNE 3. [2 pontos] Consire o bloco dados monociclo apresentado na página anterior. Suponha que existe uma falha, que afeta apenas o multiplexador mais à direita no senho, que gera a entrada dados do Banco Registradores (R). falha é que este componente sempre ixa passar a sua entrada superior para a saída, inpennte do valor do sinal controle. iga quais instruções ainda pom ser executadas corretamente, justificando sua resposta. lguma instrução po ser executada forma correta às vezes e forma incorreta outras vezes? Se sim, qual instrução é esta e em que condições tais situações ocorrem? Solução: s únicas instruções que pom ser afetadas são as que fazem asso à memória. Mais ainda apenas as que leem dado da memória, pois a escrita não passa pelo multiplexador com falha. ogo, todas as instruções pom ser executadas sem nenhuma falha, exto a instrução W. única possibilida a falha ser mascarada seria no caso em que o enreço da memória ao qual se quer fazer asso conter um dado exatamente igual ao enreço on ele está armazenada, um fato bastante incomum. 4. [2 pontos] se a documentação do MIPS (pêndi ) e o VH da versão multiciclo para esta questão. efina a partir da funcionalida da instrução SR, do Bloco ados multiciclo e sua implementação em VH quais os caminhos do Bloco ados multiciclo realmente transportam informação relevante para executar esta instrução. Marque este caminho no senho do Bloco ados acima e marque os blocos hardware nessários a sua execução. ue operação é realizada na para esta instrução? uais condições são fixadas nos multiplexadores para executar esta instrução (use a numeração dos multiplexadores para intificá-los, se achar interessante)? iga se alguma condição algum multiplexador é irrelevante. Solução: primeira parte da questão está resolvida na figura abaixo que coloca em relevância (usando linhas vermelhas) os caminhos que realmente transportam informação relevante para executar a instrução. No senho, se nota que o único multiplexador irrelevante para esta instrução e o M8, pois por ele não passa nenhuma informação relevante. Todos os mais são usados para transportar informação útil.
cte_im MR_int IR=IR_OT ad outalu ads =d_ neste caso rebe dois operandos: em op1 vem o conteúdo do registrador RT do formato da instrução (aquele enreçado pelos bits 2-16 do IR, quando este contém o código objeto uma instrução SR); em op2 vem o valor ante da extensão sinal dos bits 15- do IR. estes 32 bits, os únicos relevantes são os bits 6-1, que contém o valor do campo shamt da instrução SR (shamt significa shift amount ou quantida slocamento, um valor entre e 31). usa estes 5 bits e sloca o valor na entrada op1 tantos bits para a direita quanto seja o valor nos bits 6-1 op2, inserindo zeros à esquerda. Por exemplo, se op1=11 11 1111 11 11 111 11 e op2= 1 11 1, o ado na saída da será opula=1 11 11 111 1 1 111 111. Ou seja, o valor op1 foi slocado 3 bits para a direita, entrando 3 zeros à esquerda e os TRE bits menos significativos op1 sendo perdidos. O valor do slocamento riva do fato os bits 1-6 op2 serem 11, ou seja 3 em cimal. dtpc M1 uins.wpc 4 + pc=i_ inc_pc N IR 15... 15... M3 2..16 15... 25... 2..16 2..16 11111 M4 M2 R drs drt dr -extend s-extend s-extend*4 IR[25:] clo RIN BREG RS RT M5 M6 IME IME op1 op2 C o m p salta uins.walu ados M8 x [7:] uins. MR uins.wmdr MR M9