inclusao mult

4
INSTRUÇÕES PARA A AULA RELATIVA À INCLUSÃO DO MULTIPLICADOR NO MIPS MULTICICLO Descrevem-se abaixo as principais modificações necessárias para a inclusão do multiplicador serial na implementação VHDL do MIPS multiciclo. Sinais e comandos podem estar faltando e cabe ao aluno analisar/julgar outras alterações necessárias. Além disto inclui-se aqui apenas a instrução MULT e as suas auxiliares MFLO e MFHI, embora alguns dos novos sinais sejam preparados para uma inclusão futura da instrução DIVU, que fica como trabalho para os alunos. A) Iniciar criando um projeto no ISE, com os seguintes arquivos: - mult_div.asm e mult_div.txt (para simulação, arquivo txt lido pelo test bench) - muti_div.vhd, código VHDL com a multiplicação e divisão seriais - mips_multiciclo.vhd, código VHDL do processador - mrStd_tb.vhd, código VHDL do test bench B) NO PACKAGE: - Acrescentar as quatro novas instruções no inst_type: MULTU, MFLO, MFHI. - Acrescentar 2 sinais na micro-instrução: o start_mult_div : responsável por inicializar (reset) a multiplicação ou a divisão (no futuro); o whilo : responsável por comandar a escrita nos registradores HI e LO. C) BLOCO DE DADOS: alterar o bloco de dados conforme o desenho abaixo: Professor Ney Laert Vilar Calazans - 21/junho/2013

Upload: cesar-lamounier

Post on 09-Nov-2015

2 views

Category:

Documents


0 download

DESCRIPTION

mips

TRANSCRIPT

INSTRUES PARA A AULA RELATIVA INCLUSO DO MULTIPLICADOR/DIVIDOR NO MIPS MULTICICLO

INSTRUES PARA A AULA RELATIVA INCLUSO DO MULTIPLICADOR NO MIPS MULTICICLO

Descrevem-se abaixo as principais modificaes necessrias para a incluso do multiplicador serial na implementao VHDL do MIPS multiciclo. Sinais e comandos podem estar faltando e cabe ao aluno analisar/julgar outras alteraes necessrias. Alm disto inclui-se aqui apenas a instruo MULT e as suas auxiliares MFLO e MFHI, embora alguns dos novos sinais sejam preparados para uma incluso futura da instruo DIVU, que fica como trabalho para os alunos.A) Iniciar criando um projeto no ISE, com os seguintes arquivos:

mult_div.asm e mult_div.txt (para simulao, arquivo txt lido pelo test bench)

muti_div.vhd, cdigo VHDL com a multiplicao e diviso seriais

mips_multiciclo.vhd, cdigo VHDL do processador

mrStd_tb.vhd, cdigo VHDL do test benchB) NO PACKAGE: Acrescentar as quatro novas instrues no inst_type: MULTU, MFLO, MFHI. Acrescentar 2 sinais na micro-instruo:

start_mult_div : responsvel por inicializar (reset) a multiplicao ou a diviso (no futuro);

whilo : responsvel por comandar a escrita nos registradores HI e LO.

C) BLOCO DE DADOS: alterar o bloco de dados conforme o desenho abaixo: Localizar o terceiro estgio do bloco de dados e instanciar o multiplicador e o divisor. Exemplo de cdigo:

multi1: entity work.multiplica

generic map(N=>32)

port map(clock=>ck, M1=>RA, M2=>RB, start=>uins.start_mult_div,

produto=>produto, endop=> end_mult); Acrescentar 1 sinal de sada no bloco de dados:

end_mult: sinaliza final da multiplicao. No futuro, algo similar deve ser feito para a diviso. Criar os multiplexadores para seleo das entradas LO e HI

Criar os registradores LO e HI. Estes so como qualquer registrador de 32 bits do MIPS (PC, IR, etc.). Exemplo de cdigo para o registrador LO:

REG_LO: entity work.regnbit port map(ck=>ck, rst=>rst, ce=>uins.whilo, D=>low, Q=>LO);

A declarao dos sinais intermedirios do desenho devem ser includa entre a architecture e o begin do bloco de dados/controle.

Para as instrues MFLO e MFHI, localizar o multiplexador que implementa o sinal result e alter-lo conforme necessrio (ver a figura ao lado). No esquecer de alterar, no quinto estgio, o multiplexador que controla o sinal de escrita no banco de registradores (sinal adD).

D) BLOCO DE CONTROLE: alterar o bloco de dados conforme o desenho abaixo:

Acrescentar 1 sinal de entrada no bloco de controle:

end_mult: sinaliza final da multiplicao; Iniciar a alterao do bloco de controle decodificando as quatro novas instrues. Vejam a nova mquina de estados abaixo. Ela referencia alguns sinais que ainda no existem, tais como End_div. Omita o que for necessrio na sua implementao.

Alterar o estado SALU para considerar a espera pelo final ou da multiplicao ou da diviso. Importante: deve-se colocar o sinal end_mult na lista de sensitividade (porqu?):

process(PS, i, end_mult)

Trs sinais de escrita em registradores precisam ser alterados e/ou criados:

uins.wpc: precisa tambm ser ativado quando (PS=salu and i=MULTU and end_mult='1') or (PS=salu and i=DIVU and end_div='1'); uins.start_mult_div: deve ser ativado quando PS=Sreg and (i=MULTU or i=DIVU); uins.whilo: deve ser ativado quando (PS=salu and i=MULT and end_mult='1');E) Arquivo top: acertar os comandos port map relativos ao bloco de dados e controle, levando-se em considerao os novos sinais da interface de comunicao.

F) Exemplo de simulao, utilizando o arquivo de teste fornecido:Descrio dos eventos:

1 Decodificao de uma instruo de multiplicao e a respectiva ativao do sinal uins.start_mult_div;

2 Final da multiplicao e escrita dos resultados da multiplicao nos registradores HI e LO;

3 Execuo das instrues MFLO e MFHI para escrita nos registradores 16 ($s0) e 17 ($s1).

Apresentar para o professor o cdigo VHDL e a simulao operando corretamente.1

2

2

3

4

3

Professor Ney Laert Vilar Calazans-21/junho/2013

_1433306541.doc

Sfetch

CY1

IR=LBU/LW

Swbk

wreg

wpc

Sld

ce

wmdr

Reset=1

Reset=0

Sreg

CY2start_mult_div se IR=MULTU/DIV

Reset=1

(todos os registradores so zerados)

IR=(MULTU e End_mul=0) ou

(DIVU e End_div=0)

IR=SB/ SW

Sst

rw(0, ce, wpc

bw(0 se IR=SB

IR =J/JAL/JALR/JR /BEQ/

BGEZ/BLEZ/BNE

Ssalta

wpcwreg se IR=JAL/JALR

Salu

wAlu

Caso geral

(IR=MULTU e End_mul=1) ou (IR=DIVU e End_div=1)

wpc, whilo

Sidle