Sviluppo di sistemi a microprocessore con softcore … ISEXilinx ISE permettepermette didi...

53
Sviluppo di sistemi a microprocessore Sviluppo di sistemi a microprocessore con softcore con softcore Microblaze Microblaze Elisabetta Primo Ricercatrice VIALAB

Transcript of Sviluppo di sistemi a microprocessore con softcore … ISEXilinx ISE permettepermette didi...

Sviluppo di sistemi a microprocessoreSviluppo di sistemi a microprocessore

con softcore con softcore MicroblazeMicroblaze

Elisabetta Primo

Ricercatrice VIALAB

Xilinx EDK

EDK è un insieme di software integrati, documentazione, IP e licenze.EDK è un insieme di software integrati, documentazione, IP e licenze.

CARATTERISTICHE

Xilinx ISE permette di eseguire la sintesi e l’analisi di progetti HDL.Xilinx ISE permette di eseguire la sintesi e l’analisi di progetti HDL.

Xilinx ISE Design Suite

Xilinx ISE consente di sintetizzare progetti, effettuare l’analisi dei tempi, esaminare i diagrammi RTL, stimolare con segnali diversi il progetto e configurare il target device.

PROCESS PANE

HIERARCHY PANE

MESSAGE WINDOW: CONSOLE/ERRORS/WARNING/FIND IN FILES RESULTS

DESIGN SUMMARY /REPORT VIEWER / CODE

ISE Simulator (ISim)Xilinx ISim è un simulatore HDL(Hardware Description Language) che consente di eseguire simulazioni comportamentali e di timing per progetti in linguaggi VHDL, e Verilog .

INSTANCES AND PROCESS 

PANEL OBJECT PANEL

WAVE WINDOW

CONSOLE/COMPILATION LOG/BREAKPOITS/FIND IN FILES RESULTS/SEARCH RESULTS

Xilinx Platform Studio

XPS permette al progettista hardware di configurare i sistemi embedded basati su processori (controllore di memoria, periferiche di I/O, processori, etc.)XPS permette al progettista hardware di configurare i sistemi embedded basati su processori (controllore di memoria, periferiche di I/O, processori, etc.)

XPS converte le specifiche della piattaforma in descrizioni RTL sintetizzabili(Verilog o VHDL) e scrive un set di script per automatizzare l’implementazione del sistema embedded (da RTL al bitstream).

PROJECT NAVIGATOR 

AREA

CONNECTIVITY PANEL SYSTEM ASSEMBLY VIEWFILTERS PANE

CONSOLE/ WARNINGS/ERRORS

TOOL SUITE

• Xilinx Microprocessor Project(XMP) file

• Microprocessor Hardware  Specification (MHS) file

• Bus  Functional Model (BFM)         Simulation

• ChipScope Pro

Xilinx Software Development Kit

SDK lavora con il design hardware creato tramite i tool di sviluppo forniti da XPS SDK è basato sullo standard open source Eclipse

SDK fornisce un ambiente per la creazione di piattaforme software e applicazioni mirate  per processori embedded XilinxSDK fornisce un ambiente per la creazione di piattaforme software e applicazioni mirate  per processori embedded Xilinx

CARATTERISTICHE

• Consente di  scrivere,  compilare,  fare il debug e  il profiling delle applicazioni per sistemi embedded;• Contiene un instruction set simulator (ISS)  che  consente  di  testare   l’applicazione  software  in  simulazione o  utilizzando  una  FPGA‐board sulla quale  dare  il  download  del  sistema  e eseguirlo.

PROJECT OUTLINE VIEW PROBLEMS, CONSOLE & PROPERTIES VIEWS

CODE OUTLINE VIEWCONTEXT SENSITIVE EDITORTOOL SUITE

• Project workspace• Hardware platform definition(XMD)• Board Support Package (BSP)• Software application• Software debugging

Library Generator

CARATTERISTICHE

Libgen è un tool invocato per creare la piattaforma software.

• Creazione automatica e definizione di :

Board support packageDriver per le perifericheLibrerie softwareInterrupt hardwareEccezioni

MICROPROCESSOR HARDWARE AND SOFTWARE SPECIFICATION

XILINX DRIVERS & LIBRARY SOURCE

SOFTWARE SERVICES

SOFTWARE SERVICES

BOARD SUPPORT PACKAGE

LIBRARY ARCHIVE 

LibGen

MicroBlaze soft processor

CARATTERISTICHE

• 32 bit fixed point soft‐processor RISC core• Configurazione

Dimensione della cachePeriferiche embeddedMemory Management Unit (MMU)Interfaccia al bus Floating Point Unit (FPU)HW multiplierHW divider…

• 32 x 32 bit general purpose register,big‐endian

MicroBlaze è un soft core progettato da Xilinx per i loro FPGA. Ѐ implementato interamente in FPGA con memorie general purpose (BRAM e memoria distribuita)  e unità logiche. 

MicroBlaze soft processorMicroBlaze ha un versatile sistema di interconnessioni per supportare una varietà di applicazioni embedded.

Processor Local Bus  (PLB) vs AxiTradizionale bus di transazioni mappate tra sistema e memoria con capacità master/slave.Versioni più recenti di FPGA quali Spartan‐6, Virtex‐6,Serie 7 (Artix, Kintex, Virtex) supportano le specifiche AXI.LMB busBus dedicato utilizzato per accedere alla memoria locale(BRAM), in questo modo viene ridotto il carico sugli altri bus. Fast Simplex Link (FSL)Connessione dedicata FIFO‐style utilizzata dai coprocessori definiti dall’utente. L’interfaccia coprocessore può accelerare computazionalmente gli  algoritmi  di  calcolo  facendoli  eseguire  in  parte  e  nella  totalità a moduli  hardware  progettati dall’utente.

Xilinx® Spartan®‐6 LX9 MicroBoard

CARATTERISTICHE

• Xilinx Spartan‐6 FPGA: XC6SLX9‐2CSG324• USB JTAG Circuit• 10/100 Ethernet• Micro USB‐UART port• Pushbuttons/ LED’s• 4‐bit DIP Switches• Programmable clock chip: 

Texas Instruments CDCE9133 outputs, upto 230MHz

•�64‐MB LPDDR SDRAM(on back): Micron MT46H32M16•� 128 Mb Multi‐I/O SPI Flash: Micron N25Q128•Very compact 3‐rail•Power: 5x5 mm•USB over‐voltage and ESD protection•Hi‐Speed JTAG Access : Requires External Cable

System Design Flow

ISE XPS SDK

CREAZIONE PIATTAFORMA HARDWARE

BITSTREAM

EXPORT  TO SDK

NETLIST

BSB

EXPORT  TO SDK

SVILUPPO DELL’APPLICAZIONE

CREATE BSP

DOWNLOAD FPGA.bit.bmm.bit

.bmm

BOARDBOARD

HDLHDL

Esercitazione 1: Creazione di un Sistema Embedded AXI‐based

OBIETTIVI

1. Definizione di un sistema embedded utilizzando il tool Project Navigator

2. Definizione della piattaforma hardware utilizzando il tool XPS

3. Creazione di una semplice applicazione su SDK per testare le periferiche 

IMPORTANTE

1) Creare la cartella Avnet in Xilinx/14.1/ISE_DS/EDK/board

2) copiare all'interno il contenuto dell'archivio Avnet.rar

Creazione di un sistema Embedded ISEISE

Project Location

Project Setting

STEP 1

STEP 2

NON INSERIRE SPAZI ALL’INTERNO DEL PERCORSO 

• EVALUATION DEVELOPMENT BOARD :Avnet Spartan6 LX9 MicroBoard

• FAMILY : Spartan6• PACKAGE : CSG324• SPEED : ‐2

Specifiche del dispositivo

Proprietà del progetto

• PREFERRED LANGUAGE : VHDL

Embedded Processor ISEISE

New Sorce Wizard

STEP 3

NON INSERIRE SPAZI ALL’INTERNO DEL PERCORSO 

Al termine della creazione della nuova risorsa apparirà un messaggio che chiederà se si vuole creare un Base System usando il BSB Wizard ‐> cliccate “YES”

NEXT

XPSXPS

Base System Builder (BSB)

Considerata una data board, il BSB :• Consente agli utenti di aggiungere al design periferiche on‐chip• Crea il Microprocessor Hardware Specification(MHS)• Crea il Microprocessor Software Specifcation(MSS)• Crea il pinout e i constrain (UCF)• Crea degli esempi di applicazioni software

Memory TestPeripheral Test

BSB è un wizard per la definizione del hardware

Hardware Platform

XPSXPS

System configuration

Hardware Platform

BOARD VENDOR:Avnet

BOARD NAME:Avnet Spartan6 LX9 MicroBoard

BOARD REVISION:B

Select System

Board

• Single MicroBlaze ProcessorSystem

XPSXPS

CACHE CONFIGURATION

Base System Builder Peripherals

Periferiche disponibili sulla Spartan‐6 LX9 MicroBoard

CONFIGURAZIONE PERIFERICA

REMOVE: • CDCE913_I2C core• DIP_Switch_4Bits core• Ethernet_Lite core

ADD : • Axi_timer core

INSTRUCTION CACHE SIZE : 2 KBDATA CACHE SIZE : 2KB

Selezionare nella checkbox Use Interrupt

Hardware Platform

XPSXPSSystem Assembly View

BUS INTERFACE

Mostra le connessioni tra le periferiche e il processore attraverso un’interfaccia AXI.

PORTS

Lista delle connessioni interne e esterne.

ADDRESSES

Mostra gli indirizzi mappati per il sistema.

Chiudere XPS e ritornare in Project NavigatorChiudere XPS e ritornare in Project Navigator

ISEISEGenerazione bitstream

Generate Top HDL Source Exporting Hardware Design to SDK

STEP 1STEP 2

1. Aprire Project Navigator 2. Inserire i constraint al progetto: 

• Add Copy of Source • Selezionare mb_system.ucf che si trova nel percorso :

cartella_progetto\mb_system\data

3. Doppio‐click su Generate Top HDL Source

In questo modo si crea un template HDL per il processore MicroBlaze

4. Doppio‐click su Export Hardware ToSDK Bitstream

Compilazione di un’applicazione di Test su SDK

Workspace

SDKSDK

Creazione di un Workspace

OBIETTIVO

Definizione di una semplice applicazione Standalone che faccia il Test delle periferiche del sistema.

Creazione di un nuovo progetto CFile > New > Xilinx C Project 

C:\..\LX9_Tutorial\mb_system\SDK\SDK_Export\workspace

Adding C Application Creating a Board Support Package

SDKSDK

Selezionare l’applicazione  PERIPHERAL TEST dal  Project Template

Cambiare il nome del progetto Board SupportPackage con Standalone_BSP

HARDWARE PLATFORM

C   APPLICATION

BOARD SUPPORT PACKAGE

PERIPHERAL_TEST_O

Contiene file C per testare ogni periferica 

SDKSDK

Il sistema contiene sia una BRAM interna che una memoria esterna DDR

Occorre selezionare dove il codice saràfisicamente localizzato attraverso un linkerscript

Tasto destro su peripheral_test_0 e selezionare Generate Linker Script

Selezionare:MCB3_LPDDR_AXI_BASEADDR

Linker Script Configuration

SDKSDKProgrammazione FPGA

CONNECT LX9 MICROBOARD 

Start  ‐>  Control Panel ‐>  System ‐>  System Properties(Hardware)  ‐>  Device Manager

COM Port Selection

STEP 1

STEP 2

Program FPGA 

Cliccare sull’icona Program FPGA

IMPORTANTEVerificare che si è selezionato il corretto bitstream e il BMM file:• Bitstream…/EDK/EDK_Tutorial/mb_system_top.bit• BMM…/EDK/EDK_Tutorial/edkBmmFile_db.bmm

SDKSDK

Run Configuration

Tasto destro su peripheral_test_0 ‐> Run As > Run Configurations

STDIO configuration

STEP 3

Run Configuration contiene le impostazioni per far eseguire l’applicazione sulla board. 

Selezionare il Tab STDIO Connection:

• PORT => selezionare la porta COM   precedentemente selezionata.• BAUD Rate => 9600

Esercitazione 2:Aggiungere un IP EDK al sistema embedded

OBIETTIVI

1. Aggiungere una periferica in EDK

2. Connessione della  nuova periferica al sistema definito nell’ esercitazione precedente

3. Modificare una periferica di un sistema esistente

4. Definire dei constraint per la nuova periferica

5. Aggiungere un’applicazione software

IMPORTANTE1) Aprire Project Navigator 2) Doppio click su  “mb_system_i – mb_system(mb_system.xmp)”

XPSXPSAggiungere una nuova periferica Hardware

IP Catalog: Select axi_gpio

GPIO Peripheral Configuration

Selezionare dal catalogo IP General Purpose IO  ‐>  axi_gpio

Verrà chiesto di connettere il nuovo IP al MicroBlaze ‐> cliccare OK

GPIO Data Channel Width : 4Channel 1 In Input Only : 1

1

2

3

4

XPSXPS

Connecting IP to AXI Bus

Rinominare la periferica con DIP_Switches

Cliccando sull’icona Generate Address è possibile ri‐mappare gli indirizzi delle periferiche del sistema

Aggiungere una nuova periferica Hardware

BUS INTERFACES

ADDRESSES

Connessioni tra le periferiche / connessioni delle porte esterne

BUS INTERFACES

XPSXPS

1. Espandere (IO_IF)gpio_02. Selezionare GPIO_IO_I  (tasto destro su Connected port ) => No Connection3. Selezionare Make External in modo da inserirla all’interno della lista delle porte 

esterne: 

Connessioni delle porte esterne XPSXPS

In External Port si trova la connessione esterna appena creata.

Project > Clean All Generated Files

XPSXPS

CHIUDERE XPS

Poiché nei passi precedenti sono state introdotte delle nuove porte al MicroBlaze, occorre aggiungerle alla periferica hardware ‐> Aprire Project Navigator dove è stato creato mb_system:Seguire i seguenti passi:

1) Elimiare il modulo vhdl : mb_system_top.vhd2) Modificare il file ucf : 

Selezionare mb_system.ucf  Espandere User Constrains nella finestra Processes ;Fare doppio click su Edit Constraints (Text) e scrivere le seguenti righe di codice: 

NET DIP_Switches_GPIO_IO_I_pin[0] LOC = "B3" | IOSTANDARD = "LVCMOS33" | PULLDOWN;NET DIP_Switches_GPIO_IO_I_pin[1] LOC = "A3" | IOSTANDARD = "LVCMOS33" | PULLDOWN;NET DIP_Switches_GPIO_IO_I_pin[2] LOC = "B4" | IOSTANDARD = "LVCMOS33" | PULLDOWN;NET DIP_Switches_GPIO_IO_I_pin[3] LOC = "A4" | IOSTANDARD = "LVCMOS33" | PULLDOWN;

ISEISE

Generate Top HDL Source

Doppio‐click su Generate Top HDL Source

1

Exporting Hardware Design to SDK

Doppio‐click su Export Hardware To SDK Bitstream

2

ISEISE

Workspace

Scegliere lo stesso workspacedell’esercitazione 1

Applicazione C per la nuova periferica

AXI GPIO  REGISTER

New C Project

SDKSDK

Per testare la nuova periferica occorre creare una nuova applicazione software in SDK e utilizzare i driver per i device GPIO

In system.xml è possibile leggere il base address della periferica axi_gpio :

0x40020000

Creazione di un’ applicazione C:

1.File > New > Xilinx C Project2.Inserire il nome del progetto: Tutorial_Test3.Selezionare Empty Application

SelezionareTarget Existing Board Support Package

Applicazione C per la nuova periferica SDKSDK

• Selezionare Tutorial_Test/src• Tasto destro : New > Source File• Source File : main.c

Aggiungere al progetto C un main:

SDKSDK

• Come fatto nell’esercitazione 1 generare il Linker script : Tutorial_Test‐> tasto destro > Generate Linker Script

Selezionare:

MCB3_LPDDR_AXI_BASEADDR

• All’interno del file main.c inserire il codice:

SDKSDK

Codice per leggere dal DIP switches

Codice per scrivere il DIP switches

Occorre scrivere il codice che accenda il LEDs quando i DIP Switches sono  attivi

Scrivere all’interno del main.c le seguenti righe di codice:

Salvare e compilare

• Includere header file per il GPIO

• Dichiarare una nuova variabile globale

• Aggiungere all’interno della funzione main il codice per poter leggere e scrivere dal DIP Switches

SDKSDKProgrammazione FPGA

CONNECT LX9 MICROBOARD 

Program FPGA

Run Configuration

Tasto destro Tutorial_Test• Run As > Run Configurations• New Lauch Configuration

STDIO configuration

Selezionare il Tab STDIO Connection:• PORT => selezionare la porta COM   precedentemente selezionata.• BAUD Rate => 9600

Esercitazione 3:Aggiungere un custom IP a un Sistema Embedded

OBIETTIVI

1. Creazione di un AXI IP custom usando il wizard

2. Aggiungere l’ IP al progetto

3. Scrivere l’applicazione C per il nuovo IP

Creazione di un nuovo custom IP XPSXPSSelezionare in XPS Hardware > Create or Import Peripheral:

Peripheral Flow Repository or Project

Name and Version AXI Interface Options

XPSXPS

IPIF (IP Interface)

Creazione di un nuovo custom IPIPIF:è un modulo di isolamento dell’user interface con il bus.Inoltre fornisce servizi opzionali quali: registri software, FIFO, reset software, supporto per interrupt e un accesso al bus da master.

Selezionare User logic software register

User S/W Register

Per comunicare con la periferica HW utilizzeremo un registro a 32 bit ( anche se ci serviranno solo 12 bit)

XPSXPS

IP Interconnection (IPIC)

Creazione di un nuovo custom IPIPIC:Ip Interconnect usa un set di segnali tra la user logic e il bus AXI

Peripheral Simulation Support

Bus Functional Models (BFM)  può essere generato per accelerare la verifica dell’IP.

La periferica custom appena creata è in: Project Local Pcores ‐> USER ‐> AXI_PWM

Adding IP to AXI Interface

OsservazioniLa periferica appena creata si trova all’interno della directory mb_system > pcores

OBIETTIVI

Aggiungere il codice VHDL per realizzare le fuzionalità del PWM nella periferica custom creata nelle slide precedenti.

CARATTERISTICHE PWM

• Singola porta di output• il duty cycle dell’impulso verrà controllato da un User logic software register definito durante la creazione della   periferica ( utilizzeremo 12 bit dei 32 del registro definito)• Il duty cycle verrà comparato al valore di un contatore a 12 bit in modo da controllare l’impulso PWM

In ISE Project Navigator aprite la cartella: File> Open mb_system\ pcores\axi_pwm_v1_00_a\hdl\vhdl ‐>  axi_pwm.vhd

È il top level della periferica instanziata

• IP legge i dati attraverso AXI interface• PWM output è utilizzato per pilotare i LED sulla board• Aggiungere una porta alla periferica custom che rappresenta l’output PWM• Mappare la porta aggiunta all’interno del modulo user_logic

NOTE

ISEISE

Aggiungere alla dichiarazione delle porte esterne nel file axi_pwm.vhd

axi_pwm.vhd

Aggiungere la porta all’ istanza del component user_logic

Chiudere il file axi_pwm.vhdl e salvare

ISEISEUser_logic.vhdl

axi_pwm_v1_00_a\data \axi_pwmv2_1_0.mpd

Aggiungere dopo il begin il contatore

Aggiungere le porte da mappare all’interno del file axi_pwmv2_1_1.mpd

Aggiungere i segnali:  

La PWM legge un valore duty cycle dai registri AXI Interfeace, in particolare sono utilizzati 12 bit dal registro software slv_reg0.

All’interno del file user_logic.vhdl l’utente inserisce il codice custom. Il codice per accedere ai registri a 32 bit ècreato automaticamente dal wizard. 

Aggiungere la porta alla definizione del component user_logic

XPSXPS

Adding IP to Design

Occorre  fare una scansione degli user IP  in modo da aggiornare il sistema delle modifiche fatte alla periferica custom istanziata :In XPS: Project > Rescan User Repositories

Aggiungere la periferica custom al Sistema

Dopo la scansione la periferica creata è disponibile:Project LocalPcores/USER

• Selezionare AXI_PWM e trascinarla all’interno della System Assembly View• Cliccare OK per collegare l’IP al MicroBlaze

XPSXPS

IP Addresses

Alla periferica è stato associato uno spazio di indirizzi che è mostrato sulla tabella degli indirizzi:

Removing IP

CANCELLARE L’INSTANZIA  DELLA PERIFERICA GPIO PER I LEDs

• System Assembly > Bus Interfaces view

• Tasto destro su LEDS_4Bit ‐> selezionare Delete Instance

• Selezionare Delete instance but do not remove the nets

XPSXPS

Ports Tab

Adding IP Ports

Espandendo la periferica axi_pwm_0 dalla lista vengono mostrate le connessioni disponibili 

Selezionare New Connection: la connessione si chiamerà axi_PWM_0_Out

XPSXPSPer connettere la singola porta di output dalla periferica PWM ai 4 LED di output occorre usare la concatenazione:• Selezionare dalle connessioni  dell’ External Ports la porta  LEDs_4Bits_TRI_O;• Sostituire la corrente Net con axi_pwm_0_PWM & axi_pwm_0_PWM & axi_pwm_0_PWM& axi_pwm_0_PWM (Aprire il file mb_system.mhs)

In questo modo lo stesso segnale pilota i 4 LED con la stessa intensità.

1) CHIUDERE XPS 2) IN PROJECT NAVIGATOR : cliccare sul modulo mb_system_top e fare doppio click su Export Hardware Design to SDK with Bitstream

Applicazione C per la nuova periferica SDKSDK

Per testare la nuova periferica aggiungiamo il codice al progetto Tutorial_Test creato con PlatformStudio SDK.

• Per controllare l’impulso del duty cycle utilizziamo i DIP Switch.• I DIP Switch saranno usati selezionando i 4 MSB del duty cycle.

CARATTERISTICHE

Aprire SDK e selezionare il workspace utilizzato nelle precedenti esercitazioni

IMPORTANTE• L’applicazione non compilerà finché non si rimuove la periferica GPIO che era usata per i LED.• Il duty cycle è controllato con un registro software localizzato all’indirizzo BaseAddress + 0x00.

BSP Included Hearder Files

Aprire il file “xparameters.h” dove sono indicati i parametri dei driver di tutte le periferiche

Indirizzi della periferica AXI_PWM_0:

SDKSDK

SDKSDK

Occorre modificare il codice nel modulo main.c in modo da utilizzare la periferica custom piuttosto che la periferica GPIO

• Aggiungere  un nuovo puntatore globale:

• Definire il BaseAddress per la periferica PWM trovato nel file “xparameters.h”

Aggiungere la definizione dopo il loop infinitowhile(1) { 

• Fare uno shift

Il codice finale è: 

Applicazione C per la nuova periferica