Lab 9 Implementação do MIPS em VHDL e teste na FPGA

Documentos relacionados
LAB04 Circuitos digitais combinacionais: descodificadores, multiplexers, demultiplexers, e codificadores i

LAB03 Circuitos digitais combinacionais: alarme do museu, multiplexers, e descodificador de 4 bits para visor de 7 segmentos i

LAB05 Flip-Flops, Circuitos Lógicos Sequenciais e Autómatos Finitos i

Exercícios resolvidos (aula de 4 de Maio) Resolução:

O Processador: Via de Dados e Controle

Relembrando desempenho...

Relembrando desempenho...

UM PROCESSADOR SIMPLES

Pipelining - analogia

CAPÍTULO 4 CAMINHO DE DADOS E CONTROLE

PARTE II - CONJUNTO DE INSTRUÇÕES ARQUITETURA DE COMPUTADORES ANTONIO RAMOS DE CARVALHO JÚNIOR

Sistemas Processadores e Periféricos Aula 5 - Revisão

Universidade Federal de Campina Grande Unidade Acadêmica de Sistemas e Computação Curso de Bacharelado em Ciência da Computação.

UNIVERSIDADE FEDERAL FLUMINENSE INSTITUTO DE COMPUTAÇÃO DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO

ção de Computadores II

Especificação, síntese e implementação em VHDL de um. processador MIPS Single Cycle Simplificado

EPUSP PCS 2355 Laboratório Digital. Contadores em VHDL

SSC0611 Arquitetura de Computadores

Organização e Arquitetura de Computadores I

Departamento de Engenharia Elétrica e de Computação SEL 606 Laboratório de Sistemas Digitais Prof. Dr. Maximiliam Luppe

Exercícios de Laboratório 1

O Porcessador: Via de Dados e Controle (Parte B: multiciclo) 1998 Morgan Kaufmann Publishers Ch5B 1

Introdução. Os mesmos princípios se aplicam a processadores. No MIPS as instruções são divididas normalmente em cinco etapas:

Registradores na Arquitetura MIPS. 29/4/2016 MIPS - Instruction Set Architecture

Sistemas Processadores e Periféricos Aula 2 - Revisão

Data Path / Control Path Controle do MIPS

O Funcionamento do Processador

Organização e Arquitetura de Computadores I

Laboratório de Eletrônica Digital Tutorial Quartus II (Procedimentos para Criação e Simulação de Projetos Digitais)

Organização e Projetos de Computadores. Capítulo 2. Organização e Projetos de Computadores. Instruções

Aula 14 Funcionamento de Processadores (Visão específica)

Unidade Central de Processamento UCP (CPU)

Organização de um computador. O que é um computador Organização de um computador Arquitectura de von Neumann

Pipelines. João Canas Ferreira. Mar-Abr Contém figuras de: Computer Organization & Design, D. A Patterson e J. L. Hennessy, 2 a ed. (cap.

Arquitectura de Computadores LEEC/MEEC (2006/07 2º Sem.)

O estudo da arquitectura de computadores efectua-se com recurso à Abstracção

Projeto com Linguagens de Descrição de Hardware

Organização e Arquitetura de Computadores I

ISE com VHDL estrutural

Capítulo MC10 Organização Básica de Processadores

Introdução ao Altera DE2. Edson Midorikawa

Arquitectura de Computadores LEEC/MEEC (2006/07 2º Sem.)

Figura 1. Datapath do MIPS Superescalar Especulativo CES SE

O Funcionamento do Processador

Tiago Alves de Oliviera

INTRODUÇÃO À ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES. Função e Estrutura. Introdução Organização e Arquitetura. Organização e Arquitetura

Nível da Lógica Digital

Introdução ao Projeto de Circuitos com Altera DE2. Edson Midorikawa. Setembro/2012. Altera DE2

EPUSP PCS 3335/3635 Laboratório Digital. Circuito em VHDL

Circuitos Integrados. Nível da Lógica Digital (Aula 7) Circuitos Combinacionais. Circuitos Lógicos Digitais Básicos. Multiplexadores (1)

Fundamentos de Microprocessadores ENGENHARIA ELECTROTÉCNICA

Multiplicador Binário com Sinal

Calculadora Simples em VHDL

Desenho do Processador

ARQUITECTURA DE COMPUTADORES

CONTROLE DE UM SERVO MOTOR

Fundamentos de Microprocessadores ENGENHARIA ELECTROTÉCNICA

ARQUITECTURA DE COMPUTADORES CAPÍTULO II AULA VII

Organização de um processador

09 Unidade de controlo. v0.1

Arquitetura de Computadores I Prof. Ricardo Santos (Cap 2)

ORGANIZAÇÃO DE COMPUTADORES

Introdução aos Computadores Introdução à Ciência de Computadores Outubro / 16

Introdução ao desenho de circuitos digitais usando Xilinx WebPACK 4.1 e linguagem ABEL

Aula Expositiva 03. DCC 001 Programação de Computadores 2 o Semestre de 2011 Prof. Osvaldo Carvalho DCC

INSTITUTO SUPERIOR DE ENGENHARIA DE LISBOA

ALTERA Quartus II. Manual

Arquitectura de Computadores II. Revisão e implementação do datapath do MIPS

Conjunto de instruções do CPU. Arquitectura de um computador. Definição das instruções (1) Definição das instruções (2)

UM PROCESSADOR SIMPLES

CPU Implementação. Multiciclo. Prof. Carlos Bazilio

Organização e Arquitetura de Computadores I

Instituto Superior Técnico Departamento de Engenharia Electrotécnica e de Computadores Arquitectura de Computadores. 2º sem.

Microprocessadores MICROPROCESSADORES. Unidade de Processamento. Sumário

Comunicação Serial Assíncrona

William Stallings Organização de computadores digitais. Capítulo 14 Operação da Unidade de Controle

Departamento de Sistemas de Computação - SSC. SSC-110 Elementos de lógica digital I SSC-111 Laboratório de elementos de lógica digital I.

Índice. Tudo! (datapath de um ciclo)

EPUSP PCS 3635 Laboratório Digital I. Trena Digital

Lic. Engenharia de Sistemas e Informática

Aula 21: UCP: Instrução Jump, Monociclo vs. Multiciclo, Pipeline

Prof. Frank Sill Torres DELT Escola de Engenharia UFMG

1 Objetivos. 2 Material utilizado. 3 Normas de segurança e conduta no laboratório. 4 Contextualização. Pág 1/6

Plano de Aula 26/8/13. VHDL - Visão Geral. Obje%vos: VHDL - Visão Geral. Descrição de circuito digital em VHDL

Organização de Sistemas de Computadores

Implementação da UCP. Construção do caminho de dados Controle Implementação monociclo. Organização de Computadores

Curso de Engenharia de Computação DESENVOLVIMENTO DE UM PROCESSADOR RISC EM VHDL

12/11/13. Obje%vos do laboratório. SST20707 Síntese de Sistemas de Telecomunicações. Síntese de máquinas de estado (FSM) Finite State Machine (FSM)

Circuitos Sequenciais Escola Naval - Dep. Armas e Electrónica v

Prof. Marcos Quinet Universidade Federal Fluminense UFF Pólo Universitário de Rio das Ostras - PURO

RISC simples. Aula de Março de

Sistemas de Computação. Instruções de Linguagem de Máquina

Arquitetura de Computadores I. Prof. Ricardo Santos (Cap 2)

Organização e Arquitetura de Computadores I

Departamento de Sistemas de Computação - SSC. Sistemas Digitais. 2 o Semestre Projeto CPU. Data da apresentação: 26/27 de outubro

Licenciatura em Engenharia Informática e Computação. Arquitectura de Computadores Exame Modelo

Eletrônica Digital para Instrumentação. Herman Lima Jr.

INSTITUTO SUPERIOR DE ENGENHARIA DE LISBOA

PROJECTO DE UM SISTEMA DE FECHADURA ELECTRÓNICA

Arquitectura de Computadores

Transcrição:

Sistemas de Microprocessadores DEP. DE ENG.ª ELECTROTÉCNICA E DE COMPUTADORES FACULDADE DE CIÊNCIAS E TECNOLOGIA UNIVERSIDADE DE COIMBRA Lab 9 Implementação do MIPS em VHDL e teste na FPGA Neste trabalho de laboratório vamos trabalhar com um MIPS descrito em VHDL e implementado numa FPGA.. Descrição da implementação do MIPS em VHDL O arquivo FPGA_MIPS.zip fornecido para estes trabalho contém um projecto para o Quartus II com a implementação single clock cycle do MIPS em VHDL 2. Neste trabalho vamos utilizar a implementação dada (fig. ), não alterando a sua estrutura. 0 4 Add Instruction [3 26] Control RegDst Branch Mem MemtoReg ALUOp MemWrite ALUSrc RegWrite 4 Shift left 2 Add ALU result 2 M u x PC address Instruction memory Instruction [3 0] Instruction [25 2] Instruction [20 6] Instruction [5 ] 0 M u x register data register 2 Registers Write data 2 register Write data 0 M u x Zero ALU ALU result Address Write data Data memory data 5 M u x 0 Instruction [5 0] Instruction [5 0] 6 32 Sign extend 3 ALU control Fig.. Implementação single clock cycle do MIPS. Altera Quartus II disponível em: http://www.deec.uc.pt/~jlobo/altera/ 2 Implementação adaptada do livro Rapid Prototyping of Digital Systems de Jim Hamblen, baseada modelo descrito no livro Computer Organization & Design de Patterson and Hennessy. SMP-MiEEC Pág. /8.º ano, 2.º sem., 205/6, DEEC 206

Fig. 2. Módulo de topo TOP_SPIM.VHD e modelo hierárquico da implementação em VHDL. A implementação do MIPS em VHDL recorre a uma hierarquia de dois níveis (fig. 2), tendo ao topo um VHDL estrutural, TOP_SPIM.VHD, que interliga os 5 modelos comportamentais que ficam no segundo nível, nomeadamente: - IFETCH.VHD (Instruction fetch stage): memória de intruções e o PC; - CONTROL.VHD (Control unit): lógica do controlador do datapath; - IDECODE.VHD (Decode stage): contém o ficheiro de registos dual-port; - EXECUTE.VHD (Execute stage): ALU de dados e de endereço de salto; - DMEMORY.VHD (Data memory stage): memória de dados e I/O mapeado. Nesta implementação é utilizado o formato completo de instruções de 32 bits, mas o datapath é limitado a 8 bits para permitir a simulação e síntese rápida, e o teste nas placas disponíveis no laboratório. Temos apenas os registos $R0..$R7 limitados a 8 bits, a memória de instruções tem apenas 6 elementos, e a memória de dados 4 posições, sendo as duas últimas de I/O mapeado. Após um reset cada registo fica com o seu número de índice, e as duas primeiras posições de memória de dados são inicializadas com 0x55, 0xAA, sendo as outras duas posições só de leitura, correspondendo a interruptores da placa. Para este trabalho apenas será necessário alterar o módulo IFETCH.VHD para testar diferentes programas, e o esquemático de topo onde se liga o processador com os diversos módulos para trabalhar com as placas disponíveis no laboratório. SMP-MiEEC Pág. 2/8.º ano, 2.º sem., 205/6, DEEC 206

O modelo segue o formato das instruções de 32 bits para MIPS (fig. 3), embora depois o datapath seja limitado como referido acima. Fig. 3. Formato das instruções MIPS de 32 bits A implementação dada suporta apenas as instruções de add, sub, and, or e slt de formato R, e lw, sw e beq de formato I, como indicado na figura 4. Mnemonic Format Opcode Field Function Field Instruction add R 0 32 Add sub R 0 34 Subtract and R 0 36 Bitwise And or R 0 37 Bitwise Or slt R 0 42 Set if Less Than lw I 35 - Load Word sw I 43 - Store Word beq I 4 - Branch on Equal Fig. 4. Instruções implementadas no modelo VHDL do MIPS. Para escrever um programa temos que ter em conta o formato das instruções e traduzir para código máquina para colocar no módulo IFETCH.VHD, como no seguinte exemplo que corresponde à instrução add $,$2,$3 3 : constant mem2 : std_logic_vector(3 downto 0) := ( To_Stdlogicvector(B"000000 0000 000 0000 00000 00000"));--add $,$2,$3 O módulo recorre a constantes directas em VHDL e não blocos de memória para ocupar menos espaço na FPGA, facilitando a simulação, e libertando espaço para outros elementos que serão implementados na placa de testes DE2 da altera, como a saída VGA, ou mesmo múltiplos MIPS na mesma FPGA. 3 O valor constante binário indicado em VHDL não pode ter espaços. Neste enunciado foram colocados espaços apenas para facilitar a leitura. SMP-MiEEC Pág. 3/8.º ano, 2.º sem., 205/6, DEEC 206

Fig. 5. Módulo TOP_CYCLONEII.VHD e saída VGA correspondente. O modulo de topo, TOP_SPIM, e a sua variante com VGA, TOP_ CYCLONEII, colocam nas saídas sinais adicionais para ver o funcionamento do processador. A saída VGA pode assim mostrar os valores hexadecimais dos principais BUSes do processador, nomeadamente: PC: (32bits) program counter com endereço da próxima instrução INST: (32bits) instrução REG: (32 bits) porto do ficheiro de registos REG2: (32 bits) porto2 do ficheiro de registos ALU: (32 bits) saída da ALU W.B.: (32 bits) porto de escrita do ficheiro de registos BRAN: (bit) controlo de salto ZERO: (bit) zero da ALU MEMR: (bit) ler de memória MEMW: (bit) escrever em memória CLK: (bit) clock RST: (bit) reset Para controlar o funcionamento do processador, temos as teclas de reset (KEY[]) e o clock (KEY[0]). Pulsando o clock uma vez vamos executar uma nova instrução. O reset vai por o PC a zero, coloca 0x55 e 0xAA nas duas primeiras localizações da memória, e cada registo com o valor do seu índice. SMP-MiEEC Pág. 4/8.º ano, 2.º sem., 205/6, DEEC 206

2. Tarefa : Analisar o circuito da Fig. Estude com cuidado o circuito da Fig. que implementa o processador MIPS single cycle acima descrito. Tente responder às seguintes questões: 2.) Para que serve o somador assinalado com o número em vermelho? 2.2) Qual a função da porta AND assinalada com o número 2 em vermelho? 2.3) O que serão os 6 bits da instrução que entram na lógica de controlo da ALU? 2.4) Para que serve o deslocamento de 2 bits assinalado com o número 4? 2.5) Qual o papel do MUX assinalado com o número 5? 3. Tarefa 2: Testar implementação na FPGA O projecto incluído no arquivo FPGA_MIPS.zip tem como entidade de topo um esquemático MIPS_DE2.bdf com o módulo TOP_ CYCLONEII.VHD ligado aos pinos da DE2. Deve verificar se o device corresponde à placa que estiver a utilizar, e recorrer ao ficheiro DE2_pin_assignments.csv para importar as respectivas atribuição de pinos. O projecto tem outros esquemáticos que irá utilizar mais à frente neste trabalho, que utilizam uma biblioteca de módulos UP-Core da Altera para trabalhar com algumas das funcionalidades da placa DE2 da Altera, como VGA, teclado e rato. Estes módulos estão disponíveis no arquivo de2.zip, fornecido com este trabalho. Os respectivos ficheiros devem ficar nas directoria C:\altera\##\quartus\libraries\de2 4, devendo no projecto indicar a localização da biblioteca para a placa pretendida em Project > Add/Remove Files in Project > User Libraries (Current Project). Depois de ajustar o projecto para a placa que estiver a utilizar, recompile e programe a placa. Se analisar o conteúdo de IFETCH.VHD encontra o seguinte código VHDL: -- Insert SPIM Machine Language Test Program Here constant mem0 : std_logic_vector(3 downto 0) := ( -- Field op rs rt rd?addr/immed To_Stdlogicvector(B"000 00000 0000 0000000000000000")); -- lw $2,0($0) constant mem : std_logic_vector(3 downto 0) := ( To_Stdlogicvector(B"000 00000 000 000000000000000")); -- lw $3,($0) constant mem2 : std_logic_vector(3 downto 0) := ( To_Stdlogicvector(B"000000 0000 000 0000 00000 00000"));-- add $,$2,$3 constant mem3 : std_logic_vector(3 downto 0) := ( To_Stdlogicvector(B"00 00000 0000 00000000000000")); -- sw $,3($0) constant mem4 : std_logic_vector(3 downto 0) := ( To_Stdlogicvector(B"00000 0000 0000 ")); -- beq $,$2,- constant mem5 : std_logic_vector(3 downto 0) := ( To_Stdlogicvector(B"00000 0000 0000 00")); -- beq $,$,-6 constant mem6 : std_logic_vector(3 downto 0) := ( To_Stdlogicvector(B"00000000000000000000000000000000")); -- nop 4 Se não tiver permissões de escrita/leitura pode colocar os ficheiros de2.zip directamente na pasta do seu projecto, não sendo necessário configurar a biblioteca. SMP-MiEEC Pág. 5/8.º ano, 2.º sem., 205/6, DEEC 206

constant mem7 : std_logic_vector(3 downto 0) := ( To_Stdlogicvector(B"00000000000000000000000000000000")); -- nop que corresponde ao seguinte programa: [00] lw $2, 0($0) # rs=00000 = $0 [04] lw $3, ($0) [08] add $, $2, $3 # 00000 = 32 = function field do Add [2] sw $, 3($0) [6] beq $, $2, - # =- para ter -4 = -*4 (ver fig.) [20] beq $, $, -6 # 00=-6 para ter -24 = -6*4 (ver fig.) [24] nop Para testar deve primeiro fazer reset, i.e. carregar em reset (KEY[]) e pulsar o clock (KEY[0]) uma vez, no ecrã deve ver as setas do sinal de clock e reset a variar. O reset vai por o PC a zero, coloca 0x55 e 0xAA nas duas primeiras localizações da memória, e cada registo com o valor do seu índice. Siga passo a passo a execução do programa, tendo em conta o diagrama da figura na interpretação dos diversos sinais visualizados no ecrã. Para a realização das alíneas seguintes, pode utilizar o mesmo projecto e ir alterando os ficheiros, se criar um novo ficheiro do desenho esquemático do seu circuito, não esquecer de o indicar como o principal do seu projecto (top-level entity), seleccionando essa opção com o botão do lado direito do rato sobre o ficheiro na janela do Project Navigator. Para a atribuição de pinos da FPGA às entradas e saídas do circuito, utilize nomes de acordo coma lista standard da placa DE2, de forma a recorrer ao ficheiro DE2_pin_assignments.csv para importar a atribuição de pinos. 4. Passar de assembly para código máquina Converta o seguintes programas para código máquina, edite o ficheiro IFETCH.VHD (guardando a versão anterior com outro nome), recompile e teste na FPGA o seu funcionamento, recordando que ao fazer reset fica com 0x55 e 0xAA nas duas primeiras localizações da memória, e cada registo com o valor do seu índice. SMP-MiEEC Pág. 6/8.º ano, 2.º sem., 205/6, DEEC 206

) init: lw $2, ($0) sub $3, $7, $3 and $4, $4, $5 or $5, $6, $7 add $6, $2, $ beq $, $, init 2) init: sub $2, $, $3 and $4, $2, $5 or $5, $2, $6 add $3, $4, $2 slt $, $7, $6 beq $, $0, init 5. Codificar e testar um ciclo for Implemente o seguinte ciclo for com o modelo do MIPS em VHDL dado, tendo em conta as instruções disponíveis. for($6=0;$6!=0;$6--){ $7=$6; } Para conseguir o valor inicial 0 pode ter que somar dois registos, tendo em conta que após o reset eles ficam com o valor do índice. Compile e teste na placa, vendo na saída VGA o funcionamento passo a passo do programa. SMP-MiEEC Pág. 7/8.º ano, 2.º sem., 205/6, DEEC 206

DE2_pin_assignments.csv # Altera s DE2 board # Cyclone II # EP2C35F672C6 # To,Location # push-buttons KEY[0],PIN_G26 KEY[],PIN_N23 KEY[2],PIN_P23 KEY[3],PIN_W26 # Switches SW[0],PIN_N25 SW[],PIN_N26 SW[2],PIN_P25 SW[3],PIN_AE4 SW[4],PIN_AF4 SW[5],PIN_AD3 SW[6],PIN_AC3 SW[7],PIN_C3 SW[8],PIN_B3 SW[9],PIN_A3 SW[0],PIN_N SW[],PIN_P SW[2],PIN_P2 SW[3],PIN_T7 SW[4],PIN_U3 SW[5],PIN_U4 SW[6],PIN_V SW[7],PIN_V2 # Red LEDs LEDR[0],PIN_AE23 LEDR[],PIN_AF23 LEDR[2],PIN_AB2 LEDR[3],PIN_AC22 LEDR[4],PIN_AD22 LEDR[5],PIN_AD23 LEDR[6],PIN_AD2 LEDR[7],PIN_AC2 LEDR[8],PIN_AA4 LEDR[9],PIN_Y3 LEDR[0],PIN_AA3 LEDR[],PIN_AC4 LEDR[2],PIN_AD5 LEDR[3],PIN_AE5 LEDR[4],PIN_AF3 LEDR[5],PIN_AE3 LEDR[6],PIN_AE2 LEDR[7],PIN_AD2 # Green LEDs LEDG[0],PIN_AE22 LEDG[],PIN_AF22 LEDG[2],PIN_W9 LEDG[3],PIN_V8 LEDG[4],PIN_U8 LEDG[5],PIN_U7 LEDG[6],PIN_AA20 LEDG[7],PIN_Y8 LEDG[8],PIN_Y2 # # 7 segments # hex0 HEX0[0],PIN_AF0 HEX0[],PIN_AB2 HEX0[2],PIN_AC2 HEX0[3],PIN_AD HEX0[4],PIN_AE HEX0[5],PIN_V4 HEX0[6],PIN_V3 # hex HEX[0],PIN_V20 HEX[],PIN_V2 HEX[2],PIN_W2 HEX[3],PIN_Y22 HEX[4],PIN_AA24 HEX[5],PIN_AA23 HEX[6],PIN_AB24 # hex2 HEX2[0],PIN_AB23 HEX2[],PIN_V22 HEX2[2],PIN_AC25 HEX2[3],PIN_AC26 HEX2[4],PIN_AB26 HEX2[5],PIN_AB25 HEX2[6],PIN_Y24 # hex3 HEX3[0],PIN_Y23 HEX3[],PIN_AA25 HEX3[2],PIN_AA26 HEX3[3],PIN_Y26 HEX3[4],PIN_Y25 HEX3[5],PIN_U22 HEX3[6],PIN_W24 # hex4 HEX4[0],PIN_U9 HEX4[],PIN_U HEX4[2],PIN_U2 HEX4[3],PIN_T4 HEX4[4],PIN_R7 HEX4[5],PIN_R6 HEX4[6],PIN_T3 # hex5 HEX5[0],PIN_T2 HEX5[],PIN_P6 HEX5[2],PIN_P7 HEX5[3],PIN_T9 HEX5[4],PIN_R5 HEX5[5],PIN_R4 HEX5[6],PIN_R3 # hex6 HEX6[0],PIN_R2 HEX6[],PIN_P4 HEX6[2],PIN_P3 HEX6[3],PIN_M2 HEX6[4],PIN_M3 HEX6[5],PIN_M5 HEX6[6],PIN_M4 # hex7 HEX7[0],PIN_L3 HEX7[],PIN_L2 HEX7[2],PIN_L9 HEX7[3],PIN_L6 HEX7[4],PIN_L7 HEX7[5],PIN_P9 HEX7[6],PIN_N9 # 50MHz clock CLOCK_50,PIN_N2 # PS2 PS2_CLK,PIN_D26 PS2_DAT,PIN_C24 # VGA VGA_R[9],PIN_E0 VGA_G[9],PIN_D2 VGA_B[9],PIN_B2 VGA_HS,PIN_A7 VGA_VS,PIN_D8 VGA_CLK, PIN_B8 VGA_BLANK, PIN_D6 SMP-MiEEC Pág. 8/8.º ano, 2.º sem., 205/6, DEEC 206