La compilazione nel mio sistema non da errori di licenze. Utilizzo Quartus 13.0 SP1 Web Edition con talkback abilitato.
Ad ogni modo vedo che stai iniziando ad ingranare, molto bene.
Ecco alcune note:
- In QSys i timing della SDRAM non sono ben tarati, potresti avere dei problemi ad usare la memoria esterna. Esiste un template atto proprio a testare la memoria in Eclipse, potresti provarlo.
- Non è necessario collegare all' Instruction Master tutti i componenti, bastano le memorie dove la CPU reperirà le istruzioni del programma (e il componente JTAG per il debug).
- Se hai notato nel report la voce TimeQuest Timing Analyzer diventa rossa, questo indica dei potenziali problemi. Devi creare un file SDC ed aggiungerlo al progetto contenente i vincoli temporali. Il più importante è la frequenza del clock del tuo sistema. Come fa a sapere che frequenza emette l'oscillatore sulla tua scheda altrimenti? Il discorso dei timing è abbastanza complex però, in prima battuta puoi limitarti proprio alla frequenza dei clock se il componente generatore di clock della SDRAM attua già di suo eventuali compensazioni richieste.
Adesso come potrai notare in Eclipse hai due progetti, Prova_tutorial_5 e Prova_tutorial_5_bsp.
Nel BSP hai in sostanza delle definizioni e delle funzioni di basso livello generate automaticamente che puoi richiamare da Prova_tutorial_5.
Seppur il BSP è generato inizialmente automaticamente puoi in qualche modo configurarlo tramite il NIOS II BSP Editor. Ti consiglio visto che non è appurato che la SDRAM funzioni correttamente di utilizzare la memoria on-chip per tutte le sezioni del programma che compilerai. Devi andare nelle impostazioni del Linker nel BSP Editor e cambiare la Linker Region Name da sdram a onchip_mem per tutte le voci.
Ricordati di generare il BSP dopo ogni modifica hw del tuo sistema (con Quartus o QSys per intenderci), altrimenti il compilatore te lo ricorderà con degli errori.
Procedendo per gradi come primo passo devi riuscire ad avere un blink dei led funzionante sulla scheda.
- Ho notato che scrivi manualmente gli indirizzi mappati in memoria delle periferiche (es. PIO), se in QSys cambi l'address map poi cosa fai? Ti butti? In system.h hai delle definizioni che vengono generate automaticamente dal file di QSys, terminante con _BASE, ad esempio
- Code: Select all
#define LEDG_BASE 0x1109020
#define LEDR_BASE 0x1109040
..
che contengono proprio l'indirizzo base della periferica nell'address map. Nel codice ti consiglio di utilizzare queste definizioni al posto dell'indirizzo diretto.
Poi per poter utilizzare le funzionalità del core audio come prima cosa devi aggiungere
- Code: Select all
#include "altera_up_avalon_audio.h"
Nel BSP nella cartella drivers/inc troverai questo file.
Nel datasheet del componente audio core (
ftp://ftp.altera.com/up/pub/Altera_Material/13.0/University_Program_IP_Cores/Audio_Video/Audio.pdf ) trovi poi tutte le informazioni che ti servono e un esempio di codice completo.
In alternativa è possibile fare come stai facendo nel codice allegato, scrivendo e leggendo direttamente nello spazio di memoria associato al core audio, però prima ti consiglio di utilizzare le routine già scritte e testate di Altera
Buon divertimento
Ciao