Post on 03-May-2018
transcript
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.
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
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.
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