Prova P2 isciplina: Organização Computadores Professor: Ney aert Vilar Calazans luno: 9/novembro/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 rst pc i_ uins uins. 15.. R adrs adrt adrd wreg rst ext_sinal ext32 d_ zero uins. uins.bw ados uins. ext_ 1. [4 pontos] Seja uma frequência operação 5 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: 1.1. O número ciclos que leva a execução do programa, com a área dados fornecida; 1.2. O tempo execução do programa em segundos (1ns=1-9 segundos); 1.3. iga o que faz este programa, do ponto vista semântico; 1.4. Este programa possui subrotinas? Se sim, on esta se encontra (em que linhas)? 1..text 2..globl main 3. main: la $t,dor 4. lw $t,($t) 5. la $t1,ndo 6. lw $t1,($t1) 7. li $t2, 8. loop: subu $t1,$t1,$t 9. bltz $t1,end 1. addiu $t2,$t2,1 11. j loop 12. end: addu $t1,$t1,$t 13. la $t,q 14. sw $t2,($t) 15. la $t,r 16. sw $t1,($t) 17. li $v,1 18. syscall 19.. 2. ndo:.word 122 21. dor:.word 2 22. q:.word 23. r:.word
Bloco ados da organização MIPS 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 11111 M4 M2 ads ad -extend s-extend s-extend*4 & IR[25:] & RIN R drs RS drt BREG M6 dr RT clo wreg M7 M5 cte_im IME IME M7 op1 op2 C o m p outalu salta uins.walu =d_ ados M8 x & [7:] 2. [3, pontos] Consire o bloco dados multiciclo apresentado acima. Suponha que existe uma falha, que afeta apenas o multiplexador que gera a entrada do registrador IME. falha é que este componente sempre ixa passar a sua entrada superior (saída do bloco -extend) para a saída, inpennte do valor do sinal controle M5 (que fato correspon ao sinal ). iga: 2.1. uais instruções (ou grupos instruções) ainda pom ser executadas corretamente, justificando sua resposta. 2.2. 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? uins. MR_int MR uins.wmdr MR M9 3. [3, pontos] O código VH dado abaixo representa um dos sinais importantes para a execução saltos condicionais na organização MIPS multiciclo (instruções BE, BGEZ, BEZ e BNE). Pe-se: 3.1. esenhe a interfa externa do hardware gerado por este código. Mostre quem são as entradas e saídas e mencione o tamanho cada sinal interfa, em número fios. Se você não souber o tamanho exato algum sinal, calcule o valor mínimo para o mesmo, a partir das informações disponíveis. Isto é possível para todos os sinais. 3.2. Este código VH gera um comparador com quatro funcionalidas distintas. Escolha uma das quatro funcionalidas e dê um exemplo implementação do hardware sta em portas lógicas. Se o hardware escolhido for muito gran, apenas esbo sua estrutura e explique-a. 3.3. O programa da primeira questão sta prova usa a instrução BTZ. Como você alteraria o comparador que gera o sinal salta tratado aqui para dar suporte à instrução BTZ? Modifique o VH abaixo para realizar isto. salta <= '1' when ( (= and =BE) or (>= and =BGEZ) or (<= and =BEZ) or (/= and =BNE) ) else '';
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. MIPS_V incpc +4 rst pc control_unit i_ IR_out uins uins. 15.. path adrs adrt adrd ext_sinal ext_ R rst wreg ext32 reg_st d_ zero uins. uins.bw ados 1. [4 pontos] Seja uma frequência operação 5 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: 1.1. O número ciclos que leva a execução do programa, com a área dados fornecida; 1.2. O tempo execução do programa em segundos (1ns=1-9 segundos); 1.3. iga o que faz este programa, do ponto vista semântico; 1.4. Este programa possui subrotinas? Se sim, on esta se encontra (em que linhas)? 1..text 2..globl main # 3. main: la $t,dor # 2 ciclos Gera enreço do divisor 4. lw $t,($t) # 1 ciclo - Carrega valor do divisor em $t 5. la $t1,ndo # 2 ciclos - Gera enreço do divindo 6. lw $t1,($t1) # 1 ciclo - Carrega valor do divindo em $t1 (vira resto pois) 7. li $t2, # 1 ciclo - Inicializa $t2 com (vira quociente ao final) 8. loop: subu $t1,$t1,$t # 1 ciclo - Subtrai divisor do divindo 9. bltz $t1,end # 1 ciclo - Se chegou a negativo, fim da divisão 1. addiu $t2,$t2,1 # 1 ciclo - Senão, incrementa quociente 11. j loop # 1 ciclo - E volta para nova subtração 12. end: addu $t1,$t1,$t # 1 ciclo o fim, sfaz subtração que gerou negativo 13. la $t,q # 2 ciclos Obtém enreço do quociente 14. sw $t2,($t) # 1 ciclo - Escreve quociente na memória 15. la $t,r # 2 ciclos - Obtém enreço do resto 16. sw $t1,($t) # 1 ciclo - Escreve resto na memória 17. li $v,1 # 1 ciclo - Prepara saída do programa 18. syscall # 1 ciclo - E sai 19.. # 2. ndo:.word 122 # Valor do divindo 21. dor:.word 2 # Valor do divisor 22. q:.word # ugar para guardar o quociente da divisão 23. r:.word # ugar para guardar o resto da divisão uins.
Solução: 1.1. s linhas 1-2 não possuem instruções. s linhas 3-7(7 ciclos) e 12-18 (9 ciclos) são executadas exatamente uma vez, gastando um total 16 ciclos relógio. ma execução intermediária do laço nas linhas 8-11 gasta 4 ciclos relógio. última vez que este é executado gasta 2 ciclos apenas. O trecho antes entra no laço carrega o divisor (2) no registrador $t e o divindo (122) no registrador $t1, além inicializar o quociente em $t2 com. O laço subtrai o divisor do divindo e atualiza este último a cada execução do laço com o ado da subtração. pós cada subtração, testa-se o ado ste para ver se ele é negativo, o que constitui a condição para ixar o laço. ssim, com os valores dados, o laço é executado exatamente 7 vezes, testando os valores <12, 82, 62, 42, 22, 2, - 18(condição saída)>. ogo o número total ciclos do programa com esta área dados é 7+9+6*4+2=42 ciclos relógio. 1.2. m relógio 5MHz implica um período (1/(5*1 6 ))s ou 2ns=2*1-9 s. ogo o tempo execução do programa é 42*2*1-9 s= 84*1-9 s. 1.3. Este programa calcula o ado inteiro da divisão dois números naturais armazenados nas posições memória ndo (o divindo) e dor (o divisor), armazenando o quociente na posição memória q e o resto na posição memória r. O algoritmo usado é divisão por subtrações sussivas. 1.4. O programa não possui subrotinas, pois em nenhum ponto do mesmo se encontra uma das instruções jal ou jalr. 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... 11111 M3 M4 M2 ads ad drs drt dr -extend s-extend s-extend*4 & IR[25:] & R RIN BREG clo wreg RS RT M5 cte_im IME IME M6 2. [3, pontos] Consire o bloco dados multiciclo apresentado acima. Suponha que existe uma falha, que afeta apenas o multiplexador que gera a entrada do registrador IME. falha é que este componente sempre ixa passar a sua entrada superior (saída do bloco -extend) para a saída, inpennte do valor do sinal controle M5 (que fato correspon ao sinal ). iga: 2.1. uais instruções (ou grupos instruções) ainda pom ser executadas corretamente, justificando sua resposta. 2.2. 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? M7 M7 op1 op2 C o m p outalu salta uins.walu =d_ ados x & [7:] uins. M8 MR_int MR MR uins.wmdr M9 Solução: 2.1. Note-se que a MIPS multiciclo dá suporte a 33 instruções divididas nos grupos R, I e J. s instruções que não usam o registrador IME forma alguma são todas as instruções R que não usam slocamento como dado imediato (ou seja,, SB, N, OR, XOR, NOR, SV, SV, SRV, ST, ST) e as instruções salto sem dado imediato, JR, JR. Todas estas continuam a executar (obviamente) sem problema, pois não penm do registrador afetado pela falha. Outras instruções que penm ste registrador mas continuarão a funcionar são as que usam extensão (NI, ORI, XORI), ou as que não penm do ado da extensão nos 16 bits superiores, ou seja I, S, S e SR. s mais instruções não funcionarão mais corretamente (quais sejam: I, B, W, SB, SW, STI, STI, BE, BGEZ, BEZ, BNE, J, J), pois penm IME reber um valor diferente extensão.
2.2. que pom eventualmente funcionar e eventualmente não funcionar são aquelas que penm IME reber o ado do bloco extensão sinal (I, B, W, SB, SW, STI, STI) Elas funcionarão corretamente sempre que o dado imediato for um número não-negativo em 16 bits e funcionarão incorretamente sempre que o dado imediato for um número negativo. 3. [3, pontos] O código VH dado abaixo representa um dos sinais importantes para a execução saltos condicionais na organização MIPS multiciclo (instruções BE, BGEZ, BEZ e BNE). Pe-se: 3.1. esenhe a interfa externa do hardware gerado por este código. Mostre quem são as entradas e saídas e mencione o tamanho cada sinal interfa, em número fios. Se você não souber o tamanho exato algum sinal, calcule o valor mínimo para o mesmo, a partir das informações disponíveis. Isto é possível para todos os sinais. 3.2. Este código VH gera um comparador com quatro funcionalidas distintas. Escolha uma das quatro funcionalidas e dê um exemplo implementação do hardware sta em portas lógicas. Se o hardware escolhido for muito gran, apenas esbo sua estrutura e explique-a. 3.3. O programa da primeira questão sta prova usa a instrução BTZ. Como você alteraria o comparador que gera o sinal salta tratado aqui para dar suporte à instrução BTZ? Modifique o VH abaixo para realizar isto. salta <= '1' when ( (= and =BE) or (>= and =BGEZ) or (<= and =BEZ) or (/= and =BNE) ) else ''; Solução: 3.1. Ver senho abaixo. São duas entradas 32 bits ( e ) e uma no mínimo 6 bits () saída é o sinal salta 1 bit. (mín. 6 bits) (32 bits) salta(1 bit) (32 bits) 3.2. Note-se que a saída salta po ser gerada por uma porta lógica O 4 entradas (Já que cada comparação é exclusiva em relação às mais. Ou seja, quando uma las gera ado verdairo na comparação, todas as mais dão ado falso). Para simplificar o problema escolhe-se aqui a comparação (>= and =BGEZ), pois o primeiro teste resume-se a verificar apenas o bit mais significativo, (31) (Se este bit é, o número em rtamente é positivo). ssume-se que será representado com o número mínimo bits (6), e que os códigos binários cada instrução serão atribuídos a partir em orm cresnte, na orm citada no senho da MIPS multiciclo acima. ados estes pressupostos, o código da instrução BGEZ será 26 ou em binário 111. partir sta proposta codificação, fica fácil construir o circuito que gera 1 na sua saída quando a instrução em execução é BGEZ e é um número positivo. O circuito tecta esta situação com apenas uma porta N 7 entradas, on algumas stas estão invertidas (precisamente (31), (5), (2) e ()), conforme mostra o senho. (5) (3) (1) (4) (2) () (31) & =BGEZ BE =25 = 111 BGEZ =26 = 111 BEZ =27 = 1111 BNE =28 = 111 salta
3.3. instrução BTZ salta se um registrador passado como operando contiver um dado menor que zero. modificação do VH para dar suporte a esta nova instrução é simples, basta adicionar um teste específico, como feito abaixo: salta <= '1' when ((= and =BE) or (>= and =BGEZ) or (<= and =BEZ) or (/= and =BNE) or (< and =BTZ)) else '';