Sie sind auf Seite 1von 15

-1-

V 1.2 - De: 17/novembro/2010 por ey Calazans

Organizao de Computadores

PROCESSADOR MULTICICLO MIPS_MULTICICLO


1 CARACTERSTICAS GERAIS DA ARQUITETURA MIPS
A arquitetura MIPS do tipo load-store, ou seja, as operaes lgicas e aritmticas so executadas exclusivamente entre registradores da arquitetura ou entre constantes imediatas e registradores. As operaes de acesso memria s executam ou uma leitura da memria (load) ou uma escrita na memria (store). Devido caracterstica load-store, o processador disponibiliza um conjunto relativamente grande de registradores, para reduzir o nmero de acessos memria externa, pois estes ltimos representam perda de desempenho em relao a operaes entre registradores internos ao processador. Esta caracterstica difere de arquiteturas baseadas em acumulador, que mantm todos os dados em memria, realizando operaes aritmticas entre um contedo que est em memria e um, ou poucos registradores de dados, os denominados acumuladores. Considere o exemplo do cdigo C a seguir: for(i=0; i<1000; i++). Neste exemplo, caso i esteja armazenado em memria, tem-se 2000 acessos memria, realizando leitura e escrita a cada iterao do lao for. Caso se tenha o valor de i armazenado em um registrador interno, apenas opera-se sobre este, sem acesso memria externa durante a maior parte do tempo. Considerando-se que o tempo de acesso a um registrador normalmente de uma a duas ordens de grandeza (10 a 100 vezes) menor que o tempo de acesso a uma posio de memria, percebe-se o ganho de desempenho que arquiteturas load-store podem auferir em relao a arquiteturas baseadas em acumulador(es). Dados e endereos na arquitetura MIPS so de 32 bits. Logo, diz-se que a palavra deste processador de 32 bits, ou simplesmente que se trata de um processador de 32 bits. Obviamente, existem processadores com outro tamanho de palavra, tal como o 8051 da Intel (8 bits), o TMS9900 da Texas (16bits) e o Itanium da Intel (64 bits). O endereamento de memria no MIPS orientado a byte, ou seja, cada endereo de memria um identificador de uma posio de memria onde se guarda apenas 1 byte (8 bits). Ento, uma palavra do processador armazenada em memria ocupa 4 posies de memria, tipicamente em quatro endereos consecutivas. O banco de registradores da arquitetura possui 32 registradores de uso geral, de 32 bits cada um, denominados $0 a $31. O registrador $0 no realmente um registrador, mas a constante 0 representada em 32 bits, que pode ser referenciada como um registrador ordinrio. Este disponibilizado para uso em instrues que usam modo de endereamento a registrador e que necessitem usar este importante valor constante. No MIPS h um formato regular para as instrues. Todas possuem exatamente o mesmo tamanho, e ocupam 1 palavra em memria (32 bits), ou seja, o equivalente a 4 endereos consecutivos em memria. A instruo contm o cdigo da operao e o(s) operando(s), caso exista(m). Acesso a instrues so sempre alinhados em uma fronteira de palavra inteira. Assim, todo endereo vlido de uma instruo possui os dois ltimos bits iguais a 0 (e.g. endereo 0, 4, 16, 32004, etc). Os modos de endereamento mais importantes nesta arquitetura so os modos a registrador, basedeslocamento e relativo ao PC. O processador no possui suporte em hardware para gerenciar estruturas do tipo pilha em memria, mas existe um registrador do banco, (o $sp ou $29) que associado a instrues operando sobre este registrador, e a duas instrues especiais (JAL/JALR) permitem simular estruturas do tipo pilha em memria para salvamento de contexto de programas, por exemplo. No existem registradores para armazenar explicitamente qualificadores sobre a execuo de operaes, tais como as informaes de que a execuo de uma instruo resultou na constante 0, ou que uma instruo aritmtica gerou vai-um (em ingls, carry), ou ainda que seu resultado no correto porque necessita recursos de armazenamento de maior capacidade que os disponveis no processador (situao chamada de transbordo, ou, em ingls, overflow). A deteco destas situaes deve ser realizada usando instrues especficas de comparao disponveis na arquitetura especificamente para isto (ver instrues com prefixo SLT). O que descrito aqui um processador que implementa um subconjunto da arquitetura do MIPS (donde o nome MIPS_S, de MIPS Subset). Trata-se praticamente uma mquina RISC completa. Faltam, contudo algumas caractersticas que existem em qualquer RISC, tal como pipelines, assunto que ser introduzido e estudado em profundidade maior na disciplina Arquitetura de Computadores I.

-2-

2 A RELAO PROCESSADOR - MEMRIAS - AMBIENTE EXTERNO


A Figura 1(a) mostra como uma proposta de organizao para implementar o processador MIPS_S. Nela, est explicitada a relao entre processador, memrias externas e mundo exterior ao subsistema processador memrias de dados e instrues. O mundo externo o responsvel por gerar os sinais de clock e reset. Uma caracterstica primordial desta organizao que ela uma organizao Harvard, ou seja, o processador usa interfaces distintas para comunicao com as memrias de instrues e de dados. Outra possibilidade seria o uso de uma interface de memria unificada para instrues e dados, caracterizando uma organizao von Neumann. Segue agora uma breve discusso da organizao MIPS_S. Esta ser detalhada em Sees posteriores deste documento.
ESBOO DO VHDL DO PROCESSADOR NO NVEL DE HIERARQUIA MAIS ALTO
entity MIPS_S is port( clock,reset: in std_logic; ce,rw,bw: out std_logic; i_address: out reg30; d_address: out reg32; instruction: in reg32; data: inout reg32); end MIPS_S; architecture MIPS_S of MIPS_S is signal IR: reg32; signal end_mul, end_div: std_logic; signal uins: microinstrucao; begin dp: entity work.datapath port map(ck=>clock, rst=>reset, IR=>IR, uins=>uins, end_mul=>end_mul,end_div=>end_div, i_address=>i_address, instruction=>instruction, d_address=>d_address, data=>data); ct: entity work.controlpath port map(ck=>clock, rst=>reset, end_mul=>end_mul,end_div=>end_div, IR=>IR, uins=>uins); ce <= uins.ce; rw <= uins.rw; bw <= uins.bw; end MIPS_S;

BLOCO DE CONTROLE (controlpath)


clock reset IR

uins
end_di v end_mul

ce rw bw

Memria de Instrues

instruction i_address

BLOCO DE DADOS (datapath)

Memria de Dados

data d_address

DIAGRAMA DE BLOCOS DO PROCESSADOR

(a) Diagrama de blocos processador-memria para a organizao MIPS_S.

(b) Descrio VHDL do nvel mais alto da hierarquia de descrio do processador MIPS_S.

Figura 1 Proposta de uma organizao para o processador MIPS_S. Ilustra-se a relao entre o processador, ambiente externo, memrias externas e esboo da descrio VHDL de nvel hierrquico mais alto para a organizao.

O processador MIPS_S recebe do mundo externo dois sinais de controle. O primeiro, denominado clock, sincroniza todos os eventos internos do processador. O sinal reset leva o processador a reiniciar a execuo de instrues a partir do endereo 0x004000001 da memria (este endereo definido por compatibilidade com o endereo assumido pelo simulador MARS como incio da rea de programas). O sinal reset pode ser usado para provocar o reincio da operao do processador. Os sinais providos pelo processador MIPS_S para a troca de informaes com as memrias so: i_address um barramento unidirecional de 30 bits que define sempre o endereo da posio de memria contendo a instruo a ser buscada a seguir. O motivo de este barramento ser de 30 e no 32 bits (a dimenso total de um endereo de memria) explorado em mais detalhe na Seo 2.1 abaixo, quando se discute a estrutura de acesso memria; instruction um barramento unidirecional de 32 bits, apresentando a instruo contida na posio de memria dada por i_address; d_address um barramento unidirecional de 32 bits, contendo o endereo da posio de memria a ser lida ou escrita, da ou para a memria de dados, respectivamente; data - um barramento bidirecional de 32 bits transportando dados do ou para o processador MR4; O bloco de controle gera a palavra de microinstruo (uins) para comandar a execuo passo a passo das instrues pelo bloco de dados. A microinstruo responsvel por especificar cada uma das aes unitrias que sero executadas pelo hardware do bloco de dados a cada ciclo de relgio, ou seja, as microoperaes. Exemplos destas so cada uma das trs selees de registradores a serem escrito/lidos no/do banco de registradores, a

A notao introduzida aqui, 0x00400000 uma forma de representar nmeros na base hexadecimal. Adota-se a conveno usada no montador/simulador MARS do MIPS, que emprega o prefixo 0x para indicar que um nmero est representado na base 16.

-3-

operao que a ALU (do ingls, Arithmetic Logic Unit) executar, e os sinais de controle de acesso memria de dados externa. O bloco de dados envia para o bloco de controle a instruo corrente (contedo do registrador IR). O bloco de dados tambm responsvel pela troca de informaes com a memria externa. Os sinais de controle end_mul e end_div so produzidos no Bloco de Dados pelas operaes de multiplicao e diviso, informando ao bloco de controle o final de sua execuo. Isto necessrio porque estas operaes mais complexas e gastam, nesta organizao, mltiplos ciclos de relgio para executar. O bloco de controle comanda o incio da execuo destas e aguarda pela informao de seu trmino para seguir com o fluxo normal de ciclos de controle. importante ressaltar que os blocos de dados e de controle operam sempre em fases distintas do sinal clock. Na borda de subida de clock, o bloco de controle gera a microinstruo, e na borda de descida o bloco de dados executa esta, modificando seus registradores internos. Com isto, sempre se tem dado estvel nas transies de relgio em cada um dos blocos2. A Figura 1(b) representa um exemplo de codificao do nvel mais alto da hierarquia do processador, em linguagem VHDL. Nesta Figura, deve-se notar que os blocos de dados e de controle so instanciados e conectados entre si por sinais, conforme definido pelos comandos port map no processo de instanciao.

2.1

Estrutura de Acesso Memria

A partir da discusso da Figura 1, percebe-se que ambas as interfaces de memria so assncronas, ou seja, no dependem de sinais de relgio tais como o sinal clock. Cada uma das interfaces de acesso define um mapa de memria, conforme ilustrado na Figura 2. Um mapa de memria uma abstrao que permite organizar as informaes acessadas pelo processador segundo uma tabela. Cada posio deste mapa possui um endereo associado e armazena um valor. Na arquitetura MR4, ambos os mapas (de instrues e de dados) possuem endereos de 32 bits e contedos de 8 bits associados a cada posio da tabela. Assim, diz-se que as memrias de instrues e de dados so endereadas a byte (8 bits) e cada um destes mapas possui 232 posies (4.294.967.296 posies, correspondendo ao nmero de endereos diferentes de 32 bits, entre 0x00000000 e 0xFFFFFFFF).
Memria de Instrues FFFFFFFF
REA DE PROGRAMAS

Memria de Dados FFFFFFFF FFFFFFFE FFFFFFFD FFFFFFFC FFFFFFFF FFFFFFFE FFFFFFFD FFFFFFFC ... 8AB00006 8AB00005 8AB00004 8AB00003 ... 80000000 7FFFFFFF ... 000001B2 000001B1 000001B0 000001AF 000001AE 000001AD 000001AC 000001AB ... ... 00000001 00000000

REA DE DADOS

...

Inteiro 2

Inteiro 1

... Caracter 4 Caracter 3 Caracter 2 Caracter 1

... 90000000 90000001 ... 80000000 7FFFFFFF ... 000001AC 000001AB ... 00000007 00000006 00000005 00000004 00000003 00000002 00000001 00000000

...

...

...

Nmero Ponto Flutuante (64bits)

Instruo 2

Instruo 1

...

Figura 2 - Ilustrao da estrutura dos mapas de memria da MR4. Cada mapa possui 4Gposies de 1 byte. Cada instruo ocupa exatamente 4 bytes consecutivos na memria de instrues, e sempre comea em um endereo onde os 2 ltimos bits so 00 (alinhamento a palavra).

A memria de instrues armazena apenas instrues. Cada instruo na MR4 ocupa exatamente 32 bits. Assim, uma instruo ocupa 4 posies de memria. Como visto na Figura 1, contudo, o barramento de instrues de 32bits. Logo, uma leitura da memria de instrues busca desta no apenas o byte cujo endereo est no barramento i_address, mas este e os trs seguintes (esta a regra ditada pela arquitetura). Uma limitao imposta
Deve estar claro que esta ltima afirmao verdade apenas se a freqncia de relgio for suficientemente baixa para permitir que os sinais estabilizem em no mximo meio perodo de relgio (entre duas bordas opostas consecutivas do sinal clock).
2

-4-

pela arquitetura para facilitar o acesso memria de instrues alinhar instrues em uma fronteira de palavra. Esta expresso significa que cada instruo da MR4 s pode comear a partir de um endereo mltiplo de 4, ou seja, aqueles cujos 2 ltimos bits so 00. Assim, por exemplo, uma instruo pode ocupar os endereos de 0xAAA00004 a 0xAAA00007 na memria de instrues, mas nunca os endereos 0xFF004677 a 0xFF00467A da mesma memria, embora ambas as faixas representem 4 bytes consecutivos na memria. Dada esta situao, o barramento i_address no precisa ter 32 bits, apenas 30, pois os 2 ltimos so sempre 00. No existem sinais de controle para acesso memria de instrues. Isto no necessrio, pois no h fluxo bidirecional de informao. A memria de instrues vista pala organizao MIPS-S como uma memria de apenas leitura, que fornece informaes na sua sada (instrues) a partir do estabelecimento do endereo de memria pelo processador, via o barramento i_address. A memria de dados um pouco mais complicada, devido a duas necessidades. Primeiro, os dados podem ter tamanho varivel. Segundo, deve-se poder no apenas ler, mas tambm escrever nesta memria. A primeira necessidade faz com que os acessos s informaes tenham de ser mais flexveis. Por exemplo, um inteiro tpico ocupa 32 bits, mas um caracter ocupa exatamente 1 byte, e um nmero em ponto flutuante pode ser de 32 ou de 64 bits. Alm disto, estruturas complexas, tais como usadas em programao de alto nvel (e.g. struct de C/Java ou record de Pascal), podem ter qualquer tamanho. Vetores e arranjos multidimensionais de nmeros ou caracteres e de estruturas complexas complicam ainda mais a situao. Logo, a interface de acesso a dados da memria de dados deve ser flexvel para prover desempenho e economia de memria. Ainda assim, o barramento de dados (data) fixo, de 32 bits. Logo, se l sempre 4 bytes (ou posies) de memria de cada vez. O que lido pode ser 1 inteiro, 4 caracteres, ou metade de um nmero em ponto flutuante. Como a leitura alinhada em qualquer fronteira, at mesmo possvel ler metade de um inteiro e dois caracteres. O controle de acesso memria de dados feito pelo processador atravs dos sinais ce, rw e bw. O sinal ce indica se est em curso uma operao com a memria de dados (quando ce = 1) e o sinal rw indica se esta operao de escrita (quando rw = 0) ou de leitura (quando rw = 1). Obviamente, quando ce = 0 o valor do sinal rw irrelevante. O sinal bw serve para indicar se uma operao de escrita na memria deve escrever apenas um byte na posio da memria de dados cujo endereo aparece no barramento d_address (bw = 0) ou se esta deve escrever 4 bytes (ou seja, na posio explicitada e nas trs seguintes). Isto ocorre quando se faz uma escrita de palavra com bw = 1.

2.2

Uma palavra sobre Endianismo

Processadores podem numerar os bytes dentro de uma palavra fazendo o byte com menor nmero ser ou o byte mais esquerda ou o byte mais direita. A conveno usada por uma mquina a ordem escolhida. Processadores que usam a arquitetura MIPS podem operar com qualquer das ordens. A ordem escolhida denominada o endianismo do processador (ou da organizao deste processador) e pode ser big-endian ou little-endian. Processadores big-endian assumem os 8 bits mais esquerda de uma palavra (para nmeros a parte mais significativa deste) como sendo o byte 0, os 8 bits imediatamente direita deste como o byte 1, etc. Processadores little-endian assumem os 8 bits mais direita de uma palavra (para nmeros a parte menos significativa deste) como sendo o byte 0, os 8 bits imediatamente esquerda deste como o byte 1, etc. O simulador a ser usado (MARS) opera com ambas as ordens. A ordem especfica do MARS determinada pela ordem dos bytes da mquina que executa o simulador. Assim, ao rodar o simulador em um PC, MARS littleendian, enquanto que ao rodar MARS em uma Sun, MARS big-endian.

3 CONJUNTO DE INSTRUES
A Tabela 1 descreve resumidamente cada instruo da arquitetura MR4, usando as convenes a seguir.
Convenes Utilizadas na Tabela 1: Rd (destination register) o registrador usado na maioria das instrues como destino dos dados processados, especificado por um cdigo binrio de 5 bits. Ver Seo 4; Rs (source register) e Rt (target register) so registradores usados em muitas instrues como origem dos operandos para obter os dados. So especificados por cdigos binrios de 5 bits. Ver Seo 4; Registradores especficos da mquina so indicados por $xx, onde xx o nmero decimal do registrador. Ver Seo 4; Os registradores HI e LO so registradores especiais (que se encontram fora do banco de registradores de uso geral) usados para armazenar os resultados das operaes de multiplicao e diviso (MULTU e DIVU);

-5-

O sinal usado para designar atribuio (escrita) de valores resultantes da avaliao da expresso direita do sinal ao registrador ou posio de memria identificada esquerda do sinal; Os identificadores imed16 e imed26 representam operandos imediatos de 16 e 26 bits, respectivamente; O identificador shamt (do ingls, shift amount) representa a quantidade de bits a deslocar nas instrues SLL, SLLV, SRA, SRAV, SRL e SRLV. O operador mod representa o resto da diviso inteira; O operador & representa a concatenao de vetores de bits; A expresso PMEMD(X) representa o contedo de uma posio de memria de dados cujo endereo X (na leitura) ou a prpria posio da memria de dados (na escrita). A quantidade de bits relevantes depende da instruo especfica executada. Por exemplo, em LW so 32 bits, em LBU so 8 bits; Est implcito em todas as instrues o incremento do registrador PC aps a busca da instruo. Na organizao, isto se reflete no uso de um registrador temporrio denominado NPC, que contm o valor do PC incrementado aps a busca de uma instruo. Qualquer outra referncia manipulao do PC parte da semntica da instruo particular; Extenso de sinal a operao que transforma um dado vetor de bits em outro maior, mas cujo valor em complemento de 2 equivalente. Consiste em copiar o bit de sinal do vetor, ou seja, o seu bit mais significativo, localizado na extrema esquerda deste, tantas vezes quanto seja necessrio, para gerar o vetor maior. Por exemplo, na instruo ADDIU, se imed16 for 1111 1111 1111 1111 (-1 em complemento de 2, 16 bits), a extenso de sinal transforma este vetor em 1111 1111 1111 1111 1111 1111 1111 1111 (-1 em complemento de 2, 32 bits). A operao trivialmente correta tambm para nmeros positivos, onde o bit de sinal estendido o bit 0. Quando se menciona extenso de sinal, os valores imediatos representam nmeros em complemento de 2. Caso contrrio, os nmeros so representaes binrias puras, como 3 ocorre na instruo J ; Os operandos imediatos das instrues de salto tm um tratamento diferente dos operandos das instrues que no se referem a saltos. Como o endereamento de ambas as memrias (instrues e dados) feito byte (ou seja, cada byte de memria possui um endereo distinto), uma instruo ocupa quatro endereos de memria. A CPU manipula operandos de salto multiplicando eles por 4 antes de operar (o que equivale a deslocar o operando dois bits esquerda, inserindo zeros). Isto vale apenas para as instrues BEQ, BGEZ, BLEZ, BNE, J e JAL.

CUIDADO!!: Existe um outro simulador bem conhecido, o SPIM, onde a extenso de sinal feita sobre os 14 bits, e no sobre 16 bits (pode ser um bug do simulador ou uma definio da arquitetura, e este afeta a implementao do processador aqui especificado).

-6-

Tabela 1 Mnemnicos, codificao e semntica resumida das instrues do processador MR4. As constantes numricas dos cdigos de instruo so valores hexadecimais.
Instruo 31 - 26 ADDU SUBU AND OR XOR NOR SLL SLLV SRA SRAV SRL SRLV ADDIU ANDI ORI XORI Rd, Rs, Rt Rd, Rs, Rt Rd, Rs, Rt Rd, Rs, Rt Rd, Rs, Rt Rd, Rs, Rt Rd, Rt, shamt Rd, Rt, Rs Rd, Rt, shamt Rd, Rt, Rs Rd, Rt, shamt Rd, Rt, Rs Rt, Rs, Imed16 Rt, Rs, Imed16 Rt, Rs, Imed16 Rt, Rs, Imed16 00 00 00 00 00 00 00 00 00 00 00 00 09 0C 0D 0E 25 - 21 Rs Rs Rs Rs Rs Rs 00 Rs 00 Rs 00 Rs Rs Rs Rs Rs FORMATO DA INSTRUO 20 - 16 Rt Rt Rt Rt Rt Rt Rt Rt Rt Rt Rt Rt Rt Rt Rt Rt 15 - 11 Rd Rd Rd Rd Rd Rd Rd Rd Rd Rd Rd Rd 10 - 6 00 00 00 00 00 00 shamt 00 shamt 00 shamt 00 Imed16 Imed16 Imed16 Imed16 5-0 21 23 24 25 26 27 00 04 03 07 02 06 Rd Rd Rd Rd Rd Rd Rd Rd Rd Rd Rd Rd Rt Rt Rt Rt Rs + Rt Rs Rt Rs and Rt Rs or Rt Rs xor Rt Rs nor Rt Rt deslocado shamt bits esquerda (0s direita) Rt deslocado (Rs mod 32) bits esquerda (0s direita) Rt deslocado shamt bits direita (mantendo sinal) Rt deslocado (Rs mod 32) bits direita (mantendo sinal) Rt deslocado shamt bits direita (0s esquerda) Rt deslocado (Rs mod 32) bits direita (0s esquerda) Rs + (Imed16 com sinal estendido) Rs and (0x0000 & (Imed16)) Rs or (0x0000 & (Imed16)) Rs xor (0x0000 & (Imed16)) AO

LUI LBU LW SB SW

Rt, Imed16 Rt, Imed16(Rs) Rt, Imed16(Rs) Rt, Imed16(Rs) Rt, Imed16(Rs)

0F 24 23 28 2B

0 Rs Rs Rs Rs

Rt Rt Rt Rt Rt

Imed16 Imed16 Imed16 Imed16 Imed16

Rt Rt Rt

(Imed16 & 0x0000) 0x000000 & PMEMD(Imed16 com sinal estendido+Rs) PMEMD(Imed16 com sinal estendido+Rs) (4 bytes) Rt [7:0] (1 byte) Rt (4 bytes)

PMEMD(Imed16 com sinal estendido+Rs) PMEMD(Imed16 com sinal estendido+Rs)

SLT SLTU SLTI SLTIU BEQ BGEZ BLEZ BNE J JAL JALR JR

Rd, Rs, Rt Rd, Rs, Rt Rt, Rs, Imed16 Rt, Rs, Imed16 Rs, Rt, rtulo Rs, rtulo Rs, rtulo Rs, Rt, rtulo rtulo rtulo Rd, Rs Rs

00 00 0A 0B 04 01 06 05 02 03 00 00

Rs Rs Rs Rs Rs Rs Rs Rs

Rt Rt Rt Rt Rt 01 00 Rt

Rd Rd

00 00 Imed16 Imed16 Imed16 Imed16 Imed16 Imed16

2A 2B

Rd Rd Rt Rt PC PC PC PC PC $31

1 se Rs menor que Rt (c/sinal), seno Rd 1 se Rs menor que Rt (s/sinal), seno Rd

0 0 0 0

1 se Rs menor que Imed16 (c/sinal), seno Rt 1 se Rs menor que Imed16 (s/sinal), seno Rt

PC + (Imed16 & 00 com sinal estendido), se Rs=Rt PC + (Imed16 & 00 com sinal estendido), se Rs=>0 PC + (Imed16 & 00 com sinal estendido), se Rs<=0 PC + (Imed16 & 00 com sinal estendido), se RsRt PC[31:28] & Imed26 & 00 NPC; PC NPC; PC Rs PC[31:28] & Imed26 & 00 Rs

Imed26 Imed26 Rs Rs 00 Rd 0000 00 09 08

Rd PC

-7MULTU DIVU MFHI MFLO Rs, Rt Rs, Rt Rd Rd 00 00 00 00 Rs Rs 000 000 Rt Rt Rd Rd 000 000 00 00 19 1B 10 12 HI & LO LO Rd Rd Rs * Rt Rs mod Rt

Rs / Rt; HI HI LO

-8-

3.1

Classes Funcionais de Instrues


A partir da Tabela 1, prope-se a seguinte diviso das instrues em classes funcionais: As instrues aritmticas so ADDU, SUBU, ADDIU, MULTU, DIVU; As instrues lgicas so AND, OR, XOR, NOR, ANDI, ORI, XORI, SLL, SLLV, SRA, SRAV, SRL e SRLV; As instrues de movimentao de dados so LUI, LBU, LW, SB, SW, MFHI, e MFLO; As instrues de controle de fluxo de execuo so BEQ, BGEZ, BLEZ, BNE, J, JAL, JALR, e JR; Existem tambm instrues miscelneas, SLT, SLTI, SLTU, e SLTIU.

3.2

Observaes sobre a Semntica de Instrues no Processador MR4


Algumas observaes gerais e particulares sobre o conjunto de instrues so apresentadas a seguir. A arquitetura MIPS foi elaborada para privilegiar a simplicidade do conjunto de instrues sem, contudo, sacrificar sua flexibilidade. Devido grande limitao de todas as instrues possurem exatamente o mesmo tamanho, instrues em geral disponveis em processadores mais poderosos esto ausentes no MIPS. Contudo, foi tomado cuidado no projeto desta para que tal funcionalidade possa ser suprida de forma simples via o conceito de pseudo-instrues. Pseudo-instrues so instrues inexistentes em uma arquitetura, mas disponibilizadas ao programador em linguagem de montagem. Sua implementao mediante uso de uma seqncia de instrues existentes feita no cdigo objeto pelo programa montador. Por exemplo, uma instruo capaz de carregar uma constante imediata de 32 bits em um registrador no existe, mas pode ser implementada por uma seqncia de duas instrues, LUI e ORI. Seria possvel a um programa montador para o processador MR4 disponibilizar uma pseudo-instruo LDI com um operando imediato de 32 bits, gerando como cdigo para esta uma seqncia de LUI e ORI. Por exemplo, existe no montador/simulador MARS uma pseudo-instruo (LA, do ingls load address) que usa LUI e ORI para implementar uma funo bastante til, carregar um registrador com o endereo de um rtulo (em ingls, label) do programa, seja este da regio de dados ou da regio de programas. As instrues SLT, SLTU, SLTI e SLTIU servem para suprir a ausncia de biestveis qualificadores de estado na arquitetura MR4. Elas escrevem no registrador destino da instruo a constante 0 ou a constante 1, para indicar o resultado de uma comparao de magnitude. Aps executar uma destas instrues, pode-se testar o valor escrito no registrador de destino contra a constante 0 (por exemplo, usando as instrues BEQ ou BNE, tendo como um dos operandos a constante 0, disponvel no registrador $0 ou $zero). Tais seqncias de instruo permitem implementar todas as comparaes de igualdade ou magnitude (menor ou maior). Tarefa: Proponha uma seqncia de instrues do processador MR4 para implementar as seguintes pseudoinstrues: JGTR, JGER, JLTR e JLER (respectivamente, salta se maior, se maior ou igual, se menor e se menor ou igual relativo). Note-se ainda que as variaes destas instrues permitem executar comparaes de nmeros naturais (as com sufixo U, do ingls unsigned) e de nmeros inteiros representados em complemento de 2 (as sem sufixo U).

4 REGISTRADORES DO PROCESSADOR MIPS_S - BLOCO DE DADOS


A partir desta Seo da especificao, apresenta-se uma possvel organizao para o processador MIPS_S. Algumas das caractersticas mencionadas aqui so partes da arquitetura, sendo assim obrigatrias. Isto ser explicitado no texto abaixo, quando for o caso. A organizao aqui proposta contm, pelo menos, o seguinte conjunto de registradores: IR (instruction register): armazena o cdigo de operao (opcode) da instruo atual e o(s) cdigo(s) do(s) operando(s) desta. Possui 32 bits. PC (program counter): o contador de programa. Possui 32 bits. Um banco de registradores contendo 32 registradores de uso geral, cada um de 32 bits, denominados $0 a $31. Esta uma caracterstica definida pela arquitetura. Existe uma denominao textual alternativa para cada um dos registradores. Ela est apresentada na Tabela 2 abaixo, retirada do Apndice A do livro Organizao e Projeto de Computadores de D. A. Patterson e J. L. Hennessy. Este Apndice de domnio pblico e pode ser facilmente encontrado na Internet. O banco de registradores proposto aqui tem uma porta de escrita e duas de leitura. Isto significa que possvel escrever em apenas um registrador por vez, porm possvel fazer, em

-9-

paralelo com a escrita mencionada, duas leituras simultneas, colocando o contedo de um registrador no barramento de sada R1 e o contedo de outro registrador (ou o mesmo) no barramento de sada R2. MDR (memory data register): registrador que recebe dados provenientes da memria ou de outro local que produza um valor que necessite ser escrito no banco de registradores no ltimo ciclo de uma instruo. Possui 32 bits. HI e LO: so dois registradores de 32 bits usados para armazenar o resultado da execuo das instrues MULTU e DIVU. Para manipular estes resultados, existem as instrues MFHI e MFLO, que movem valores de HI e LO para um registrador de uso geral. A necessidade destes registradores se explica pelo fato de uma multiplicao de dois nmeros de 32 bits gerar um valor de 64 bits, bem como pelo fato de uma diviso (inteira) gerar dois resultados de 32 bits, o quociente e o resto. No caso da instruo DIVU, o quociente colocado em LO e o resto colocado em HI.
Tabela 2 Denominaes dos registradores da arquitetura MIPS_S. Aconselha-se que os registradores a serem usados como registradores de trabalho em programas sejam os registradores 2 a 25 ($v0 a $t9). Os demais so reservados para operaes de controle do montador, sistema operacional, simulao de pilhas, etc. O montador MARS aceita a denominao da primeira coluna da tabela, ou da segunda coluna, precedida do caracter $.
Nome $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 $17 $18 $19 $20 $21 $22 $23 $24 $25 $26 $27 $28 $29 $30 $31 Nmero (hexa/binrio) 00 / 00000 01 / 00001 02 / 00010 03 / 00011 04 / 00100 05 / 00101 06 / 00110 07 / 00111 08 / 01000 09 / 01001 0A / 01010 0B / 01011 0C / 01100 0D / 01101 0E / 01110 0F / 01111 10 / 10000 11 / 10001 12 / 10010 13 / 10011 14 / 10100 15 / 10101 16 / 10110 17 / 10111 18 / 11000 19 / 11001 1A / 11010 1B / 11011 1C / 11100 1D / 11101 1E / 11110 1F / 11111 Nome Alternativo $zero $at $v0 $v1 $a0 $a1 $a2 $a3 $t0 $t1 $t2 $t3 $t4 $t5 $t6 $t7 $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $t8 $t9 $k0 $k1 $gp $sp $fp $ra Significado ou Conveno de Utilizao constante 0 reservado para o programa montador resultado de funo resultado de funo argumento para funo argumento para funo argumento para funo argumento para funo temporrio temporrio temporrio temporrio temporrio temporrio temporrio temporrio temporrio (salvo nas chamadas de funo/subrotina) temporrio (salvo nas chamadas de funo/subrotina) temporrio (salvo nas chamadas de funo/subrotina) temporrio (salvo nas chamadas de funo/subrotina) temporrio (salvo nas chamadas de funo/subrotina) temporrio (salvo nas chamadas de funo/subrotina) temporrio (salvo nas chamadas de funo/subrotina) temporrio (salvo nas chamadas de funo/subrotina) temporrio temporrio reservado para o SO reservado para o SO apontador de rea global stack pointer frame pointer armazena endereo de retorno de subrotinas

Normalmente, sempre h a necessidade de existirem registradores adicionais, dependendo da organizao implementada. Na organizao proposta aqui, o valor do registrador PC atualizado aps a busca, mas o novo valor no imediatamente escrito em PC, mas em um registrador auxiliar NPC, sigla derivada da terminologia new program counter, em ingls. Apenas no ltimo ciclo de relgio de uma instruo o valor de NPC (ou outro, dependendo da instruo) escrito no PC. Os valores lidos do banco de registradores so armazenados nos registradores Rs e Rt, e o valor obtido pela execuo de uma dada operao lgico-aritmtica armazenado no registrador RALU. Apresentam-se detalhes nas Sees a seguir.

5 ORGANIZAO DO BLOCO DE DADOS DO PROCESSADOR MIPS_S


Com a organizao proposta nesta Seo para o processador MIPS_S, a execuo de qualquer instruo requer 3 a 5 ciclos de relgio, com a exceo das instrues MULTU e DIVU. Cada um dos 3/4/5 ciclos executa um conjunto limitado de partes de uma instruo e so assim denominados: Ciclo 1: busca da instruo. Comum a todas as instrues. Ciclo 2: decodificao e leitura de registradores. Comum a todas as instrues.

- 10 -

Ciclo 3: operao com a ALU. Comum a quase todas as instrues. Ciclo 4: acesso memria. Realizado conforme a instruo. Ciclo 5: atualizao do banco de registradores (write-back). Comum a quase todas as instrues. Em todas as instrues que no fazem acesso memria, o Ciclo 4 no existe e o ciclo 5 passa a ser o Ciclo 4. Esta Seo discute uma proposta de organizao para o bloco de dados do processador MIPS_S. A Figura 3 mostra a proposta completa de bloco de dados para o processador MIPS_S. O bloco de dados necessita 23 sinais de controle, organizados em 5 classes: habilitao de escrita em registradores (7): wpc, CY1, wreg, CY2, walu, HILO_ce, wmdr. controle de leitura/escrita na memria externa (3): ce , rw e bw. as operaes que a unidade lgica-aritmtica, executa (1). a seleo da operao do comparador (1). os controles dos multiplexadores, resultantes da decodificao da instruo (11).
wHILO

DIV
result

Lo data

MULT
+4
Inc PC

Hi
wHILO ce r w bw
x000000 & data

NPC NPC
CY1
IR[20:16] IR[25:21]

R IN

OP1

PC

AdRs Rd

Memria de Instrues

ALU

IR[20:16]

AdRt
banco de registrad ores

ou talu

dtPC

11111 IR[15:11] IR[20:16]

wpc

CY1

Rt
AdRd w reg CY2

Rb OP2

walu

D_address

PC

IR

CY2

RALU

Memria de Dados

Rs

Ra

MDR
wmdr

I_address

instruction
IR [15:0]

EXT S INAL

ce/r w
c te_im

comparador

<< 2
IR[25:0]

Rs IMED
CY2

Rt salta

0000 & I R[25:0] & 00 EXT ZERO

Rt

IR[15:0]

Figura 3 - Bloco de dados completo, com as memrias externas (de instrues e de dados) mostradas para fins de clareza. Esto representados todos os 23 sinais que o bloco de controle deve gerar (a maioria em verde). Os sinais clock e reset no esto representados, porm so utilizados em todos os registradores, bem como no banco de registradores. Os sinais sem nome so derivados diretamente da instruo corrente (contedo do registrador IR).

Os sinais de controle dos multiplexadores no precisam ser gerados pelo bloco de controle. A partir da instruo corrente, eles podem ser derivados diretamente do contedo do registrador IR. Para se ter uma idia geral em mais detalhe da implementao do bloco de dados do processador MIPS_S, resta apresentar as organizaes internas do banco de registradores, da unidade aritmtica e lgica e da operao de multiplicao. As Sees a seguir discutem estas organizaes.

5.1

Banco de Registradores

A Figura 4 ilustra a organizao do banco de registradores, sob forma de um diagrama de blocos. A ALU ser discutida em parte na Seo 5.2. A organizao do banco de registradores inclui os 32 registradores em si e a implementao das duas portas de leitura e da porta de escrita, bem como da decodificao do endereo de escrita para gerao da habilitao de escrita do registrador em causa. As portas de leitura consistem de multiplexadores (32X32):(1X32), controladas pelos endereos de leitura.

- 11 32 regist radores de 32 bits REG0 REG1 REG2 REG3 REG4 ... REG28 REG29 REG30 REG31

Rd 32

32

Rs

clock
32

reset

AdRs

en able

Decodificador 5 32 5

32

Rt

wreg

AdRd

AdRt

Figura 4 - Diagrama em blocos do banco de registradores de uso geral.

5.2

Resumo das Operaes Executadas pela ALU

A Tabela 3 ilustra a estrutura de hardware para efetuar operaes da ALU. Esta ltima um hardware combinacional que possui duas entradas de dados e uma sada de dados. Alm disto, a ALU possui uma entrada de controle para informar a operao a ser realizada em cada instante, derivada da instruo em execuo no momento. O ciclo de operao com a ALU comum a quase todas as operaes, embora algumas instrues apenas a utilizem para transportar um valor da entrada para a sada e outras (como MULTU e DIVU) sequer utilizam a ALU. O resultado da operao na ALU armazenado no registrador RALU. A Tabela 3 define quais devem ser as operaes da ALU, para cada instruo.
Tabela 3 Operaes da ALU no processador MR4, para cada instruo.
Instrues ADDU, ADDIU, LBU, LW, SB, SW, BEQ, BGEZ, BLEZ, BNE SUBU AND, ANDI OR, ORI XOR, XORI NOR SLL SLLV SRA SRAV SRL SRLV LUI SLT, SLTI SLTU, SLTIU J, JAL JR, JALR MULTU, DIVU, MFHI, MFLO Operao da ALU OP2 + OP1 OP2 OP1 OP2 and OP1 OP2 or OP1 OP2 xor OP1 OP2 nor OP1 OP1 << OP2[10:6] c/ 0s entrando direita OP2 << OP1[4:0] c/ 0s entrando direita OP1 >> OP2[10:6] c/ bit 31 entrando esquerda OP2 >> OP1[4:0] c/ bit 31 entrando esquerda OP1 >> OP2[10:6] c/ 0s entrando esquerda OP2 >> OP1[4:0] c/ 0s entrando esquerda OP2[15:0] & 0x0000 1 se OP1<OP2 (com sinal), seno 0 1 se OP1<OP2 (sem sinal), seno 0 OP1[31:28] & OP2[27:0] OP1 Nenhuma operao

- 12 -

5.3

Organizao para as instrues MULTU e DIVU

As instrues MULTU e DIVU, que realizam a multiplicao e a diviso de nmeros inteiros sem sinal, devido a sua intrnseca maior complexidade, so implementadas fora da ALU. Na presente proposta de implementao as instrues DIVU e MULTU so ser implementadas de maneira estrutural, usando texto VHDL sintetizvel. Para tanto, pode-se usar um algoritmo de implementao de um multiplicador em hardware, tal como descrito nas transparncias 10 a 17 da apresentao disponvel no link mostrado abaixo. http://www.inf.pucrs.br/~calazans/undergrad/arq1/aulas/aritcomp.pdf. O algoritmo de multiplicao pode ser aquele descrito nas transparncias acima. O algoritmo de diviso deve ser o algoritmo sem restaurao. Estes e outros algoritmos fceis de implementar sob a forma de um pequeno bloco de dados e uma mquina de estados de controle esto descritos em algum detalhe no do livro Organizao e Projeto de Computadores de D. A. Patterson e J. L. Hennessy, na Seo 4.6 da Segunda Edio.

6 CICLOS PARA EXECUTAR INSTRUES DA ORGANIZAO MIPS_S


Dada a descrio da organizao do bloco de dados da MIPS_S apresentada na Seo anterior, possvel sumarizar o tempo de execuo de todas as instrues em termos de ciclos de relgio, o que ento mostrado na Tabela 4 abaixo.
Tabela 4 mero de ciclos gastos para buscar e executar instrues na organizao do processador MIPS_S.
INSTRUO ADDU SUBU AND OR XOR NOR SLL SLLV SRA SRAV SRL SRLV ADDIU ANDI ORI XORI LUI LBU LW NUMERO DE CICLOS 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 INSTRUO SB SW SLT SLTU SLTI SLTIU BEQ BGEZ BLEZ BNE J JAL JALR JR MULTU DIVU MFHI MFLO NUMERO DE CICLOS 4 4 4 4 4 4 4 4 4 4 4 4 4 4 674 675 4 4 -

7 BLOCO DE CONTROLE
Para comandar a execuo de instrues neste processador, define-se uma mquina de estados de controle. A Figura 5 ilustra esta mquina de estados em linhas gerais, onde o prximo estado funo apenas do estado atual e da instruo armazenada no registrador IR. Tambm se indica nesta Figura quais registradores so alterados em cada estado. No se mostra as ativaes dos sinais de controle dos multiplexadores, ou as operaes da ALU. A funo dos 8 estados mostrados na Figura :
4 5

Idle: estado inicial aps o reset, serve para garantir que a primeira borda de subida de relgio aps este sinal defina o incio da operao do processador MR4; Sfetch: primeiro ciclo, busca de instruo; SReg: segundo ciclo, leitura dos registradores fonte; SAlu: terceiro ciclo, operao com a ALU e eventual uso do comparador do hardware de multiplicao ou do hardware de diviso;

Valor tpico, depende do algoritmo escolhido. Valor tpico, depende do algoritmo escolhido.

- 13 -

Wbk: quarto ciclo para a maioria das instrues, onde se escreve o resultado no banco de registradores e atualiza-se o contador de programa (quinto ciclo para as instrues LW e LBU); Sld: quarto ciclo das instrues LW e LBU, onde se l um dado da memria de dados externa; Sst: ltimo ciclo das instrues SW e SB, onde se escreve um dado na memria de dados externa; Ssalta: ltimo ciclo das instrues de salto condicional ou incondicional, apenas atualiza valor do PC.

Reset=1 Reset=1 (todos os registradores so zerados)

Sidle
Reset=0

Sfetch
CY1

Sreg
CY2 Init_mul, se IR=MULTU Init_div, se IR=DIVU IR=(MULTU e End_mul=0) ou (DIVU e End_div=0) (IR=MULTU e End_mul=1) ou (IR=DIVU e End_div=1) wpc, wHILO

Salu
wAlu

Caso geral IR=LBU/ LW IR=SB/ SW IR =J/JAL/JALR/JR /BEQ/ BGEZ/BLEZ/BNE

Swbk
wreg wpc

Sld
ce wmdr

Sst
rw 0, ce, wpc bw 0, se IR=SB

Ssalta
wpc wreg, se IR=JAL/JALR

Figura 5 - Mquina de estados de controle para a organizao MIPS_S proposta.

PROGRAMA PARA TESTAR TODAS AS INSTRUES DA MIPS_S

Recomenda-se escrever os programas em linguagem de montagem (assembly), gerando-se o cdigo objeto automaticamente, a partir do montador/simulador MARS. A ferramenta de simulao, assim como documentao de como utilizar a ferramenta encontra-se na homepage da disciplina, podendo tambm serem encontradas facilmente na Internet. A Figura 6 abaixo apresenta um programa escrito em linguagem de montagem para o processador MIPS_S, contendo pelo menos uma instncia de cada uma das instrues do processador. Recomenda-se o uso do simulador MARS para executar este programa e verificar sua funcionalidade, descrita linha a linha do programa, atravs do campo de comentrios.

- 14 ### ##### ###### ##### ##### ###### ##### ##### ##### ###### ##### ##### ###### ## ## ARQUI TETURA MIPS _S - teste de to das a s ins true s ## Autor : Ney Calaz ans ( calaza ns@in f.puc rs.br ) ## Teste exa ustiv o qua nto ao tota l de instr ues, no quant o a ## cobe rtura de c aso d e test es po ssve is ## ltim a alte rao : 08/ 12/200 9 ### ##### ###### ##### ##### ###### ##### ##### ##### ###### ##### ##### ###### ## .tex t # Dec lara o de inci o do segme nto de text o .glo bl main # Dec lara o de que o rtu lo ma in g lobal ### ##### ###### ##### ##### ###### ##### ##### # t estes de in stru es i ndivid uais ### ##### ###### ##### ##### ###### ##### ##### mai n: lui $t0, 0xf3 # ori $t0, $t0,0 x23 # $t0 <= 0x 00f300 23 lui $t1, 0x52 # ori $t1, $t1,0 xe2 # $t1 <= 0x 005200 e2 lui $t2, 0x00 # ori $t2, $t2,0 x8f # $t2 <= 0x 000000 8f beq $t1, $t2,l oop # Obv iamen te, es ta in stru o nu nc a de ve sa ltar bne $t1, $t2,n ext_i # Obv iamen te, es ta in stru o se mpre d eve s altar addi u $t2, $t2,0 x8f # Obv iamen te, es ta in stru o nu nca de ve ex ecuta r nex t_i: addu $t3, $t0,$ t1 # $t3 <= 0x 00f300 23 + 0x005 200e2 = 0x0 14501 05 subu $t4, $t0,$ t1 # $t4 <= 0x 00f300 23 - 0x005 200e2 = 0x0 0a0ff 41 subu $t5, $t1,$ t1 # $t5 <= 0x 0 and $t6, $t0,$ t1 # $t6 <= 0x 00f300 23 an d 0x0 05200 e2 = 0 x0052 0022 or $t7, $t0,$ t1 # $t7 <= 0x 00f300 23 or 0x0 05200 e2 = 0 x00f3 00e3 xor $t8, $t0,$ t1 # $t8 <= 0x 00f300 23 xo r 0x0 05200 e2 = 0 x00a1 00c1 nor $t9, $t0,$ t1 # $t9 <= 0x 00f300 23 no r 0x0 05200 e2 = 0 xff0c ff1c mult u $t0, $t1 # Hi & Lo <= 0x0 0f300 23 * 0x005 200e 2 = 0x0 0004d d6e1bc 1ee6 mfhi $s0 # $s0 <= 0x 00004d d6 mflo $s1 # $s1 <= 0x e1bc1e e6 divu $t0, $t1 # Hi, Lo<= 0x00f3 0023 mod,/ 0x00 5200e2 = 0x 4efe5 f,0x00 00000 2 addi u $t0, $t0,0 x00ab # $t0 <= 0x 00f300 23 + 0x0 000 00 ab = 0 x00f3 00ce andi $t0, $t0,0 x00ab # $t0 <= 0x 00f300 ce an d 0x0 0000 0 ab = 0 x0000 008a xori $t0, $t0,0 xffab # $t0 <= 0x 000000 8a xo r 0x0 000f f ab = 0 x0000 ff21 sll $t0, $t0,4 # $t0 <= 0x 000ff2 10 (d esloc ado 4 bits para a esq uerda) srl $t0, $t0,9 # $t0 <= 0x 000007 f9 (d esloc ado 9 bits para a dir eita) addi u $s2, $zero ,8 # $s2 <= 0x 000000 08 sllv $t0, $t9,$ s2 # $t0 <= 0x 0007f9 00 sllv $t0, $t0,$ s2 # $t0 <= 0x 07f900 00 sllv $t0, $t0,$ s2 # $t0 <= 0x f90000 00 sra $t0, $t0,4 # $t0 <= 0x ff9000 00 srav $t0, $t0,$ s2 # $t0 <= 0x ffff90 00 srlv $t0, $t0,$ s2 # $t0 <= 0x 00ffff 90 la $t0, array # col oca e m $t0 o end ereo inic ial do veto r arr ay (0x 10010 000) lbu $t1, 6($t0 ) # $t1 <= 0x 000000 ef (p rimer o byt e te rceir o byt e do s egund o ele mento ) xori $t1, $t1,0 xff # $t1 <= 0x 000000 10, i nvert e byt e infe rior sb $t1, 6($t0 ) # seg undo byte d o seg undo eleme nto do veto r <= 10 (re sto n o mu da) # CUI DADO, mudou elem ento do ar ray a ser p roces sado p or so ma_ct addi u $t0, $zero ,0x1 # $t0 <= 0x 000000 01 subu $t0, $zero ,$t0 # $t0 <= 0x ffffff ff bgez $t0, loop # Est a ins truo nunc a dev e sal tar, p ois $ t0 = -1 slt $t3, $t0,$ t1 # $t3 <= 0x 000000 01, p ois - 1 < 1 0 sltu $t3, $t0,$ t1 # $t3 <= 0x 000000 00, p ois ( 2^32) -1 > 1 0 slti $t3, $t0,0 x1 # $t3 <= 0x 000000 01, p ois - 1 < 1 slti u $t3, $t0,0 x1 # $t3 <= 0x 000000 00, p ois ( 2^32) - 1 > 1 ### ##### ###### ##### ##### ###### ##### ##### # s oma u ma con stant e a u m veto r ### ##### ###### ##### ##### ###### ##### ##### som a_ct: la $t0, array # col oca e m $t0 o end ereo do v etor ( 0x100 10000 ) la $t1, size # col oca e m $t1 o en dereo do t amanh o do v etor lw $t1, 0($t1 ) # col oca e m $t1 o tam anho do ve tor la $t2, const # col oca e m $t2 o end ereo da c onstan te lw $t2, 0($t2 ) # col oca e m $t2 a con stant e loo p: blez $t1, end_a dd # se/ quand o tama nho /torn a-se 0, fim do p roces sament o lw $t3, 0($t0 ) # col oca e m $t3 o pr ximo eleme nto do veto r addu $t3, $t3,$ t2 # som a con stante sw $t3, 0($t0 ) # atu aliza no ve tor o valo r do elemen to addi u $t0, $t0,4 # atu aliza ponte iro d o vet or. L embrar , 1 p alavr a=4 po sie s de memr ia addi u $t1, $t1,- 1 # dec remen ta con tador de t amanh o do v etor j loop # con tinua execu o ### ##### ###### ##### ##### ###### ##### ##### # t este de sub rotin as an inhada s ### ##### ###### ##### ##### ###### ##### ##### end _add: addiu $sp, $sp,- 4 # ass ume-s e $sp inici aliza do, a loca e spao na p ilha # no SPIM $sp in icial izado com 0x7FFF EFFC. Usam os 0x1 00108 00. sw $ra, 0($sp ) # sal va en dereo de r etorn o de quem c hamou (tra p hand ler) jal sum_ tst # sal ta pa ra sub rotin a sum _tst lw $ra, 0($sp ) # ao retor nar, r ecupe ra en dere o de r etorn o da pilha addi u $sp, $sp,4 # atu aliza apont ador de pi lha end : jr $ra # vol ta pa ra o " siste ma op eraci onal" F IM D O PRO GRAMA AQUI # I ncio da pr imeir a sub rotina : sum _tst sum _tst: la $t0, var_a # peg a end ereo da pr imeir a va r ivel (pseu do-in stru o) lw $t0, 0($t0 ) # tom a o v alor d e var _a e coloc a em $ t0 la $t1, var_b # peg a end ereo da se gunda vari vel ( pseud o-ins truo ) lw $t1, 0($t1 ) # tom a o v alor d e var _b e coloc a em $ t1 addu $t2, $t1,$ t0 # som a var _a com var_ b e c oloca r esul tado em $t 2 addi u $sp, $sp,- 8 # alo ca es pao n a pil ha sw $t2, 0($sp ) # no topo da pil ha co loca o res ultado da s oma sw $ra, 4($sp ) # aba ixo d o topo colo ca o ender eo de reto rno la $t3, ver_e v # peg a end ereo da su broti na ve r_ev ( pseud o-ins truo ) jalr $ra, $t3 # cha ma su brotin a que veri fica se res ultad o da soma par lw $ra, 4($sp ) # ao retor nar, r ecupe ra en dere o de r etorn o da pilha addi u $sp, $sp,8 # atu aliza apont ador de pi lha jr $ra # PRO GRAMA ACABA AQUI . Ret orna para q uem c hamou # I ncio da se gunda subr otina: ver_ ev. T rata- se de subro tina folha, que no u sa pi lha ver _ev: lw $t3, 0($sp ) # tir a dad os to topo da pi lha ( parme tro) andi $t3, $t3,1 # $t3 <= 1 se pa rmet ro mpar , 0 ca so co ntrr io jr $ra # e r etorn a ### ##### ###### ##### ##### ###### ##### ##### .dat a # re a de dados ### ##### ###### ##### ##### ###### ##### ##### # p ara t recho que s oma c onstan te a vetor arr ay: .wor d 0xab cdef0 3 0xcd efab1 8 0xe fabcd3 5 0xb ad cfe ab 0x dcfeba cd 0x febad c77 0x defab c53 0 xcbaf ed45 # ter ceiro byte da se gunda pala vra (0 xef) vira 0x10 antes de ex ec so ma_c t siz e: .wor d 0x8 con st: .wor d 0xff fffff f # con stant e -1 e m com pleme n to d e 2 # p ara t recho de te ste d e cham adas de su broti nas var _a: .wor d 0xff # var _b: .wor d 0x10 0 #

Figura 6 - Programa exemplo para teste da organizao MIPS_S.

- 15 -

O simulador MARS pode gerar arquivos de sada contendo o cdigo objeto das reas de dados e de instrues de qualquer programa, entre outras informaes. Tais arquivos podem ser salvos usando a opo de menu File Dump Memory do simulador. Ele ser til para gerar a entrada do processo de simulao da implementao de hardware a ser realizada neste trabalho. A Figura 7 mostra a interface grfica do simulador, composta de 5 subjanelas (4 subjanelas esto ocultas, aquela da aba File, que mostra o editor de textos do ambiente Mars, duas outras para uso de coprocessadores e uma para operaes de entrada e sada): a subjanela Text Segment mostra as instrues do programa ora em simulao, em trs formatos: cdigo-objeto, cdigo intermedirio e cdigo fonte; a subjanela Data Segment mostra os dados do programa ora em simulao; a subjanela Labels mostra dados sobre os rtulos do programa, tanto da rea de instrues como da rea de dados; a subjanela Registers mostra os contedos dos registradores da arquitetura; a subjanela Mars Messages mostra mensagens que o montador/simulador gera para o usurio durante a carga, montagem e execuo de programas. A ferramenta de montagem tem como entrada o nome do programa descrito em linguagem de montagem (tipicamente com nome <file>.asm). possvel gerar um arquivo de sada com o contedo de todas as janelas, incluindo o cdigo objeto gerado. Este mais tarde poder, aps algum tratamento manual, ser usado como entrada para a simulao VHDL do processador. O cdigo objeto pode ser gerado aps a leitura e montagem de um arquivo contendo um programa em linguagem de montagem correto. Para tanto, basta salvar como em arquivos texto as reas de instrues e dados como visto em aula.

Figura 7 - Interface grfica do montador/simulador MARS.