mips monociclo implementação em vhdl

15
MIPS Monociclo Implementação em VHDL Moraes 03/maio/2011 Incrementada por Calazans em maio/2013

Upload: murray

Post on 29-Jan-2016

152 views

Category:

Documents


6 download

DESCRIPTION

MIPS Monociclo Implementação em VHDL. Moraes 03/ maio /2011 Incrementada por Calazans em maio /2013. Instruções suportadas. ADDU, SUBU, AND, OR, XOR, NOR Formato R ORI, LW, SW Formato I. Hardware. Bloco de Controle. Puramente combinacional - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: MIPS  Monociclo Implementação em  VHDL

MIPS MonocicloImplementação em VHDL

Moraes 03/maio/2011Incrementada por Calazans em maio/2013

Page 2: MIPS  Monociclo Implementação em  VHDL

Instruções suportadas

• ADDU, SUBU, AND, OR, XOR, NOR– Formato R

• ORI, LW, SW– Formato I

Page 3: MIPS  Monociclo Implementação em  VHDL

Hardware

Page 4: MIPS  Monociclo Implementação em  VHDL

Bloco de Controle

• Puramente combinacional– Recebe código objeto da instrução em execução– Decodifica a instrução– Gera a microinstrução, ou seja, o conjunto de microoperações (sinais de

controle) para:• Controle dos multiplexadores (uins.i)• Controle de escrita no banco de registradores (uins.wreg)• Controle de leitura/escrita da/na memória (uins.ce, uins.rw (uins.bw))• Operação na ULA (uins.i)

control_unit IR_out

MIPS_V0 uins

uins.rwuins.ce

uins.wreguins.i

pcincpc

Page 5: MIPS  Monociclo Implementação em  VHDL

Código VHDL do controlelibrary IEEE;use IEEE.Std_Logic_1164.all;use work.p_MI0.all;

entity control_unit isport(ck, rst: in std_logic; -- estes sinais são inúteis nesta versão da

-- Unidade de Controle, pois ela é combinacional uins : out microinstruction; ir : in reg32 );end control_unit; architecture control_unit of control_unit is signal i : inst_type;begin uins.i <= i; i <= ADDU when ir(31 downto 26)="000000" and ir(10 downto 0)="00000100001" else SUBU when ir(31 downto 26)="000000" and ir(10 downto 0)="00000100011" else AAND when ir(31 downto 26)="000000" and ir(10 downto 0)="00000100100" else OOR when ir(31 downto 26)="000000" and ir(10 downto 0)="00000100101" else XXOR when ir(31 downto 26)="000000" and ir(10 downto 0)="00000100110" else NNOR when ir(31 downto 26)="000000" and ir(10 downto 0)="00000100111" else ORI when ir(31 downto 26)="001101" else LW when ir(31 downto 26)="100011" else SW when ir(31 downto 26)="101011" else invalid_instruction ; -- IMPORTANTE: condição "default" é invalid instruction; assert i /= invalid_instruction report "******************* INVALID INSTRUCTION *************" severity error; uins.ce <= '1' when i=SW or i=LW else '0'; uins.rw <= '0' when i=SW else '1';

uins.wreg <= '0' when i=SW else '1'; end control_unit;

Esta atribuição corresponde ao processo de decodificação da instrução em si

Demais sinais de controle

Page 6: MIPS  Monociclo Implementação em  VHDL

Bloco de dados• Cada código objeto de uma instrução define seus operandos• Instruções tipo R:

• Processo de controle dos multiplexadores:– instR <= '1' when uins.i=ADDU or uins.i=SUBU or uins.i=AAND or uins.i=OOR or

uins.i=XXOR or uins.i=NNOR else'0'; -- sinal auxiliar que define quando instruçaõ é tipo R

– adD <= instruction(15 downto 11) when instR='1' else instruction(20 downto 16); -- Mux: gera endereço de escrita no banco

– op2 <= R2 when instR='1' else ext32; -- Mux: gera entrada inferior da ULA

control_unit

Memória de

Instruções

address data

PCck

D Q

25..21

20..16

15..11

20..16

adRs

adRt

adRD

R1

R2

RD

ck wreg

ext_sinal

ULA

uins.i

Memória de

Dados

d_address data

result

uins.ceuins.rw

R1

R2

R2

ext_0

zero

+4

i_address instruction

uins.i

uins.i

uins.i

15..0

IR_out

uins.i

uins.ceuins.rw

MIPS_V0

uins.wreg

uins

uins.rwuins.ce

uins.wreguins.i

rst

rst

reg_dest

pcincpc

datapath

ext32

Page 7: MIPS  Monociclo Implementação em  VHDL

Bloco de dados• Instrução ORI:

• 3 multiplexadores:– adD <= instruction(15 downto 11) when instR='1' else

instruction(20 downto 16);

– op2 <= R2 when instR='1' else ext32; -- Mux: gera segunda entrada da ULA

– ext32 <=x"FFFF" & instruction(15 downto 0) when (instruction(15)='1’ and (uins.i=LW or uins.i=SW))

else x"0000" & instruction(15 downto 0); -- extensão de zero!

control_unit

Memória de

Instruções

address data

PCck

D Q

25..21

20..16

15..11

20..16

adRs

adRt

adRD

R1

R2

RD

ck wreg

ext_sinal

ULA

uins.i

Memória de

Dados

d_address data

result

uins.ceuins.rw

R1

R2

R2

ext_0

zero

+4

i_address instruction

uins.i

uins.i

uins.i

15..0

IR_out

uins.i

uins.ceuins.rw

MIPS_V0

uins.wreg

uins

uins.rwuins.ce

uins.wreguins.i

rst

rst

reg_dest

pcincpc

datapath

ext32

Page 8: MIPS  Monociclo Implementação em  VHDL

Bloco de dados• Instruções LW / SW

• 3 multiplexadores:– adD <= instruction(15 downto 11) when instR='1' else

instruction(20 downto 16) ;

– op2 <= R2 when instR='1' else ext32; -- Mux: gera segunda entrada da ULA

– ext32 <=x"FFFF" & instruction(15 downto 0) when (instruction(15)='1’ and (uins.i=LW or uins.i=SW)) else

x"0000" & instruction(15 downto 0);

control_unit

Memória de

Instruções

address data

PCck

D Q

25..21

20..16

15..11

20..16

adRs

adRt

adRD

R1

R2

RD

ck wreg

ext_sinal

ULA

uins.i

Memória de

Dados

d_address data

result

uins.ceuins.rw

R1

R2

R2

ext_0

zero

+4

i_address instruction

uins.i

uins.i

uins.i

15..0

IR_out

uins.i

uins.ceuins.rw

MIPS_V0

uins.wreg

uins

uins.rwuins.ce

uins.wreguins.i

rst

rst

reg_dest

pcincpc

datapath

ext32

ENDEREÇO É A SOMA DO REG BASE+DESLOCAMENTO

Page 9: MIPS  Monociclo Implementação em  VHDL

Código VHDL

Page 10: MIPS  Monociclo Implementação em  VHDL

Memória de

Instruções

address dataPC

ck

D Q

+4

i_address instruction

IR_out

uins

uins.rwuins.ce

uins.wreguins.i

rst

pcincpc

Código VHDL

• Memória de instruções é externa ao processador – ver

testbench

Page 11: MIPS  Monociclo Implementação em  VHDL

Código VHDL25..21

20..16

15..11

20..16

adRs

adRt

adRD

R1

R2

RD

ck wreg

ext_sinal

ULA

uins.i

R1

R2

ext_0

instruction

uins.i

uins.i

15..0

uins.i

uins.wreg

uins.i

rst

ext32

Page 12: MIPS  Monociclo Implementação em  VHDL

Código VHDL

adRs

adRt

adRD

R1

R2

RD

ck wreg

ULA

uins.i

Memória de

Dados

d_address data

result

uins.ceuins.rw

R1

R2

R2

zero

uins.i

uins.i

uins.i

uins.ceuins.rw

uins.wreg

rst

reg_dest

ext32

Page 13: MIPS  Monociclo Implementação em  VHDL

ULA

Page 14: MIPS  Monociclo Implementação em  VHDL

BANCO DE REGISTRADORES

Page 15: MIPS  Monociclo Implementação em  VHDL

TOP