71
Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel Software Defined Radio mit FPGA Projektteam Jonas Walter Patrick Studer Auftraggeber Prof. Dr. Markus Hufschmid Fachbetreuung Prof. Dr. Markus Hufschmid Michael Pichler Experte Dr. Jürg Stettbacher

Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

  • Upload
    lemien

  • View
    231

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

Technische Dokumentation

Jonas Walter, Patrick Studer

Modul Projekt 6

Projekttitel Software Defined Radio mit FPGA

Projektteam Jonas WalterPatrick Studer

Auftraggeber Prof. Dr. Markus Hufschmid

Fachbetreuung Prof. Dr. Markus HufschmidMichael Pichler

Experte Dr. Jürg Stettbacher

Page 2: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

I

ZusammenfassungSoftware Defined Radios (kurz SDR) sind moderne Funkempfänger, welche einen Teil der Emp-

fangsstufe digital realisiert haben. Das Ziel der Projekte 5 + 6 (Bachelorthesis) ist es, einen solchenEmpfänger für 150 kHz - 30 MHz selbst zu bauen. Das Analog-Frontend ist bereits in Projekt 5 ent-wickelt worden. Nun steht die Weiterverarbeitung der digitalisierten Daten im Vordergrund. Es wurdeeine FPGA-Logik entwickelt, welche das digitalisierte Empfangssignal ins Basisband heruntermischtund filtert. Der SDR, der ein Codec-Interface emuliert, sendet die Daten über eine I2S-Schnittstellean ein DSP-Board. Dort kann eine Endverarbeitung (z.B. eine Demodulation) stattfinden. Eine selbstgeschriebene C-Library hilft dabei, den SDR über eine I2C-Schnittstelle vom DSP-Board aus zu kon-figurieren. Die Tests ergaben sehr positive Ergebnisse. Die FPGA-Logik ist voll einsatzfähig. Es gibtlediglich zwei Verbesserungsvorschläge, die aber keinen Einfluss auf den Betrieb haben. In einer Wei-terführung des Projektes ist die Erweiterung der DSP-Anbindung denkbar. Diese könnte beispielswei-se die Softwareimplementation für verschiedene Demodulationsverfahren oder auch Bedienhardwa-re (Display, Inkrementgeber, ...) beinhalten. Weiter kann auch die Problembehandlung am Analog-Frontend aus Projekt 5 angegangen werden.

Keywords: Software Defined Radio (SDR), Digital-Down-Converter (DDC), Altera DSP Builder

Page 3: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

INHALTSVERZEICHNIS II

Inhaltsverzeichnis

1 Einleitung 1

2 Ausgangslage und Ziele 2

2.1 Gesamtkonzept SDR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2.2 Analog-Frontend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2.2.1 Eingangsfilter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2.2.2 Verstärkerstufe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.2.3 Analog-Digital-Wandler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.2.4 Weitere Schnittstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.2.5 Bekannte Probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.3 FPGA-Logik mit Schnittstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.4 Digital-Down-Converter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.4.1 Mischer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.4.2 CIC-Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.4.3 Unterabtastung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2.4.4 FIR-Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

3 FPGA-Logik 7

3.1 Übersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

3.2 I2S . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3.3 Clocksynchronisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3.4 DDC-Register . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

3.5 I2C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3.6 NIOS Softcore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

3.7 Avalon-Switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

3.8 PWM-Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

4 Digital-Down-Converter (Simulink) 13

4.1 Übersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

4.2 Numerically-Controlled-Oscillator (NCO) . . . . . . . . . . . . . . . . . . . . . . . . . 14

4.2.1 Beschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

4.2.2 Theorie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

4.2.3 Realisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

4.3 Mixer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

Page 4: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

INHALTSVERZEICHNIS III

4.3.1 Beschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4.3.2 Realisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4.4 Cascaded-Integrator-Comb-Filter (CIC) . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4.4.1 Beschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4.4.2 Theorie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4.4.3 Realisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

4.5 Finite-Impulse-Response-Filter (FIR) . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.5.1 Beschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.5.2 Theorie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.5.3 Realisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4.6 Automatic-Gain-Controller (AGC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4.6.1 Beschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

4.6.2 Realisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

5 Design-Flow 28

6 Anbindung des DSP-Board 30

6.1 Übersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

6.2 Pinbelegung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

6.3 Clock-Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

6.3.1 Anbindung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

6.4 Audio-Interface (I2S) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

6.4.1 Anbindung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

6.4.2 Signalverlauf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

6.5 Control-Interface (I2C) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

6.5.1 Anbindung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

6.5.2 Signalverlauf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

6.6 Anwendungsbeispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

7 Anbindung über Entwicklerschnittstelle 36

7.1 Übersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

7.2 UART-Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

7.2.1 Anbindung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

7.2.2 Protokoll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

7.3 MATLAB-GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

Page 5: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

INHALTSVERZEICHNIS IV

8 C-Library 38

8.1 sdr_regs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

8.2 sdr_if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

8.3 sdr_lib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

9 Verifikation 39

9.1 AGC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

9.2 NCO und Mixer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

9.3 CIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

9.4 FIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

9.5 Gesamtsystem mit DSP Anbindung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

9.6 Gesamtsystem mit Entwicklerschnittstelle . . . . . . . . . . . . . . . . . . . . . . . . . 42

10 Schlusswort 43

A Pinout 45

B Digital-Down-Converter (Simulink) 46

B.1 Numerically-Controlled-Oscillator (NCO) . . . . . . . . . . . . . . . . . . . . . . . . . 47

B.2 Mixer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

B.3 Clock-Enable (48kHz) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

B.4 Cascaded-Integrator-Comb-Filter (CIC) . . . . . . . . . . . . . . . . . . . . . . . . . . 49

B.5 Finite-Impulse-Response-Filter (FIR) . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

B.6 Automatic-Gain-Controller (AGC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

B.7 VGA-Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

B.8 AGC-Correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

C Registermap 53

D C-Library API 58

D.1 Defines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

D.2 Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

E NIOS Kommandos 62

F Pflichtenheft 63

G CD 66

Page 6: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

1

1 Einleitung

Software Defined Radio (SDR) beschreibt Konzepte für Hochfrequenz-Sender und -Empfänger, welcheeinen gewissen Anteil der Signalverarbeitung mit Software verwirklichen. Dazu gehört hauptsächlichdie Verarbeitung in digitalen Signalprozessoren (DSP) oder auf programmierbarer Logik (FPGA). Heutewerden diese SDR in weiten Bereichen des Amateurfunks, beim Militär und auch in zivilen Bereichenangewendet. Ihr grösster Vorteil ist ihre gute Anpassungsfähigkeit an neue Standards, da meistens nurdie Software angepasst werden muss. Ein SDR-Empfänger muss aus einer Vielzahl von Signalen das ge-wünschte herausfiltern und verstärken. Grundsätzlich kann dies auf zwei Arten erfolgen. Das gewünsch-te Signal kann bereits analog ins Basisband gemischt werden und anschliessend wird nur eine geringeBandbreite digitalisiert. Inzwischen sind aber auch schnelle Analog-Digital-Wandler erhältlich, die eserlauben ein grosses Frequenzband zu digitalisieren und das Mischen erst mittels digitaler Signalverar-beitung erfolgt.

Das Ziel der Projektarbeit ist es, einen SDR-Empfänger nach dem zweiten Ansatz zu realisieren. Wäh-rend dem Projekt 5 wurde bereits ein analoger Frontend-Prototyp umgesetzt, welcher das Empfangssi-gnal digitalisiert. Schwerpunkt in Projekt 6 bildet die digitale Signalverarbeitung in einem FPGA. Dabeiwird das Empfangssignal orthogonal ins Basisband gemischt und gefiltert. Die endgültige Demodulationund Aufbereitung findet dann in einem abgesetzten DSP statt.

Nach Abschluss des Projektes ist die FPGA-Logik voll einsatzfähig. In der vorliegenden Dokumentationwird zuerst eine Übersicht zum Konzept SDR gezeigt und dabei auch das bereits entwickelte Analog-Frontend vorgestellt. Danach rückt die Realisierung der digitalen Signalverarbeitung im FPGA in denVordergrund, welche grösstenteils in MATLAB Simulink und Quartus Prime erfolgte. Schliesslich wer-den noch die verschiedenen Interfaces erklärt und jeweils ein Anwendungsbeispiel vorgestellt.

Page 7: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

2

2 Ausgangslage und Ziele

Die Projektarbeit SDR ist in zwei Teile aufgeteilt. In Projekt 5 wurde bereits das Gesamtkonzept undein Analog-Frontend für den Empfang des HF-Signals entworfen. Der Schwerpunkt in Projekt 6 bildetdie Weiterverarbeitung der bereits digitalisierten Daten in einem FPGA und die Kommunikation miteinem DSP-Board. Nachfolgend wird das Konzept der SDR-Empfänger erläutert und die Ergebnisse desProjektes 5 zusammengefasst. Diese bilden die Basis der Zielsetzung dieser Projektarbeit.

2.1 Gesamtkonzept SDR

Antenne: Peripherie: FPGA-Logik mit Schnittstellen:

Digital-Down-Converter (DDC): Analog-Frontend (AFE):

Gain A/D

Wandler

cos()

sin()

I

Q CIC

fs

FIR LW, MW, KW

I2C

Lokalfrequenz Gain Control

I2S

UART

DSP-Board

Computer

Abbildung 1: Blockschaltbild eines kompletten SDR-Empfängers

In Abbildung 1 ist eine Übersicht über den kompletten SDR-Empfänger dargestellt. Grundsätzlich be-steht dieser aus den drei farblich hervorgehobenen Bereichen:

• Analog-Frontend: Es filtert, verstärkt und digitalisiert das Signal.• FPGA-Logik mit Schnittstellen: In ihr sind der DDC und die drei Schnittstelleninterfaces einge-

bettet. Der SDR emuliert mit der I2S-Schnittstelle ein Codec, damit er einfach an ein DSP-Boardangebunden werden kann. Es besteht auch die Möglichkeit zu Debug- und Entwicklerzweckeneinen Computer anzubinden.

• Digital-Down-Converter: Er mischt das Signal in einen tieferen Frequenzbereich (Basisband) undverringert die Datenrate und Bandbreite (Dezimation).

2.2 Analog-Frontend

Im vorausgegangenen Projekt 5 wurde das Analog-Frontend (AFE) für den SDR-Empfänger entwickeltund getestet. Obwohl noch bekannte Mängel vorhanden sind, wurden diese im Projekt 6 nicht noch ein-mal angegangen. In diesem Kapitel wird kurz der Aufbau und die Spezifikationen des AFE zusammen-gefasst. Für detailliertere Angaben ist die Technische Dokumentation vom Projekt 5 [1] zu konsultieren.

2.2.1 Eingangsfilter

Der SDR-Empfänger ist für einen Frequenzbereich von 150 kHz bis 30 MHz spezifiziert. Das Eingangs-filter verhindert, dass beim Abtasten Aliasing durch Sender in höheren Frequenzbänder (z.B. UKW-Radio) entsteht. Umgesetzt wurde ein sogenanntes Tor-symmetrisches, reziprokes L-Ladder-Filter derOrdnung 9. Dieses hat eine Grenzfrequenz von 35 MHz, eine Durchlassdämpfung von maximal 0.5 dBund bei 70 MHz eine Dämpfung von ca. 60 dB. Die Streuparameter des ausgemessenen Filters sind inder Abbildung 2 aufgezeigt.

Page 8: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

2.2 Analog-Frontend 3

Abbildung 2: Ausgemessene Filterkurven

2.2.2 Verstärkerstufe

Die Aufgabe der Verstärkerstufe ist, den Pegel des Eingangsignals dynamisch zu verstärken, damit derA/D-Wandler immer möglichst gut ausgesteuert wird. Dynamisch bedeutet hier, dass beim Übersteuern(des ADC) die Verstärkung zurückgefahren, respektive bei längerer Untersteuerung erhöht wird. Na-türlich macht das die Verstärkerstufe nicht selbständig, sondern ein Automatic-Gain-Controller (AGC),welcher Steuersignale an die Verstärkerstufe sendet. Die Stufe besteht aus zwei einzelnen Verstärkernund ist in Abbildung 3 abbgebildet. Der erste ist eine Kombination aus Low-Noise-Amplifier (LNA)und Variable-Gain-Amplifier (VGA), mit welchem ein variabler Verstärkungsbereich von −4.5 dB bis55.5 dB möglich ist. Der zweite Nachverstärker hat dann noch einen konstanten Gain von 28.5 dB (kannmit der Widerstandsbeschaltung geändert werden).

19dB LNA

0…48dB Attenuator 21dB

3.5dB/ 15.5dB

28.5dB

Gain [0…1V] HILO [0;1]

AD8331 ISL55210

Abbildung 3: Aufbau der zweistufigen Verstärkerstufe.

2.2.3 Analog-Digital-Wandler

Auf dem Analog-Frontend wurde ein 12 Bit ADC mit einer Samplingfrequenz von maximal 105 MHzverbaut. Vor dem Analog-Digital-Wandler ist noch ein differentielles Filter eingesetzt. Dieses soll durchdie Verstärkerstufe hinzugefügtes Rauschen dämpfen und somit Rausch-Aliasing beim Abtasten verhin-dern.

Page 9: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

2.3 FPGA-Logik mit Schnittstellen 4

2.2.4 Weitere Schnittstellen

Um den ADC, das FPGA und auch das DSP-Board zu Takten ist ein 98.304 MHz Quarzoszillator ver-baut. Diese Frequenz wurde speziell gewählt, um bei der Dezimierung mit Faktor 2048 eine Ausgangs-rate von genau 48 kHz zu erhalten (typische Audioabtastrate).

Weiter ist noch eine UART-Schnittstelle, 2 LEDs und ein Taster mit dem FPGA verbunden.

2.2.5 Bekannte Probleme

Am Ende des Projekt 5 waren immer noch ein paar Probleme offen, welche nicht behoben werden konn-ten. Deswegen muss man sich bei der Anwendung des Frontends ein paar Punkte bewusst sein.

• Das Speisungskonzept muss überarbeitet werden. Eventuell sollte auf die Auftrennung auf zweiGroundplanes verzichtet werden, um Ansprüche an die EMV besser zu erfüllen (niederfrequenteStromschleifen).

• Auf dem ADC-Signal treten sporadisch grosse Spikes auf, welche den Wandler mehrfach über-steuern. Die Quelle ist noch unklar, wir vermuten jedoch, dass über die Luft oder Speisung vomDE0-nano ein Übersprechen stattfindet.

• Bei tiefen Eingangsfrequenzen unter 2 MHz weist die Verstärkerstufe eine um bis zu 25 dB gerin-gere Verstärkung auf. Der Grund dafür muss in den Verstärkerstufen im Analog-Frontend analysiertwerden.

• Ein Gainoffset von ca. 10 dB wurde in der Verstärkerstufe festgestellt. Der LNA wurde einzelnuntersucht und somit muss der Fehler im VGA oder noch wahrscheinlicher im Post-AMP liegen.

• Der Taster auf dem Analog-Frontend kann nicht eingelesen werden. Der Fehler wird behoben in-dem man C27 (1µF) entfernt und R16 von 10 kΩ auf 1 kΩ verringert.

2.3 FPGA-Logik mit Schnittstellen

Der SDR-Empfänger besitzt zwei Anbindungsarten. Einerseits kann im normalen Betrieb ein DSP-Boardoder eine eigene Peripherie mit I2S- (Daten) und I2C-Schnittstelle (Konfiguration) angeschlossen werden(erklärt im Kapitel 6). Andererseits ist eine UART-Anbindung für den Entwicklerbetrieb möglich. DieserModus ist vor allem für Inbetriebnahme, Experimentieren und Fehlersuche sehr hilfreich und wird imKapitel 7 genauer erklärt.

2.4 Digital-Down-Converter

Der Digital-Down-Converter (DDC) ist das Herzstück des Projekt 6. Er ist dafür verantwortlich, dass dasdigitalisierte Eingangssignal ins Basisband heruntergemischt und die Samplingrate auf 48 kHz reduziertwird. Die Entwicklung und Verifikation hat komplett in MATLAB Simulink stattgefunden (vgl. Kapitel4).

Um die theoretischen Grundlagen eines DDC ein wenig aufzufrischen wird im Folgenden ein einfachesBeispiel durchgerechnet. In Abbildung 4 und 5 ist der Signalverlauf und die dazugehörigen Spektrenabgebildet. Als Eingangssignal wurde ein Spektrum um f0 mit zusätzlichem Rauschen angenommen.

Page 10: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

2.4 Digital-Down-Converter 5

Abbildung 4: Signalpfad des DDC

Abbildung 5: Spektren eines Beispielsignals am DDC

Page 11: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

2.4 Digital-Down-Converter 6

2.4.1 Mischer

Das Eingangsspektrum (A) zeigt, dass Frequenzen grösser als fg (Grenzfrequenz des Eingangfilters imAnalog-Frontend) entfernt werden. Dieses Eingangssignal wird nun im Mixer in zwei Kanäle aufgetrenntund mit 2·cos(2πf0t), respektive 2·sin(2πf0t) multipliziert. f0 entspricht der gewünschen Empfangsfre-quenz (Lokaloszillatorfrequenz), welche digital vom einem Nummerically-Controlled-Oscillator (NCO)erzeugt wird. Interpretiert man die beiden Mischsignale als analytisches Signal (B), erhält man einenDirac bei f0, welcher mittels Faltung zur Frequenzschiebung verwendet werden kann (vgl. Formel 3):

sB,I(t) = 2cos(2πf0t) = ej2πf0t + e−j2πf0t (1)

sB,Q(t) = 2sin(2πf0t) =ej2πf0t − e−j2πf0t

j(2)

sB(t) = sB,I(t) + j · sB,Q(t) = 2 · ej2πf0t s cSB(f) = 2δ(f − f0) (3)

Das Ausgangssignal ist in Spektrum (C) ersichtlich. Es wurde um f0 nach rechts geschoben, wodurchsich das Signal nun Basisband befindet. Das Spektrum ist nicht mehr symmetrisch (Spiegelfrequenz bei2f0) und wird dadurch als komplex bezeichnet. Ein komplexes Signal wird mittels inphase- (I, real-Anteil) und quadraturphase-Anteil (Q, imaginär-Anteil) beschrieben.

2.4.2 CIC-Filter

Das CIC-Filter (D) besitzt folgende Übertragungsfunktion, wobei die Parameter N, M und R natürlicheZahlen und Designparameter sind:

|HCIC(f)| =

∣∣∣∣∣∣sin(π ·M · f)

sin(π·fR

)∣∣∣∣∣∣N

(4)

Durch das CIC-Filter wird die Signalbandbreite stark begrenzt. Die durchs Mischen entstandene Spie-gelfrequenz wird abgeschnitten, wodurch sich die Signalleistung halbiert. Dies wurde aber bereits imMischer durch die Multiplikation mit 2 · cos(2πf0t) und 2 · sin(2πf0t) kompensiert. In Spektrum (E) istnun das bandbegrenzte Signal aufgezeigt, welches durch das CIC-Filter zusätzlich sinc()-verzerrt wurde.

2.4.3 Unterabtastung

Hier wird das Signal mit fs = 48 kHz (typische Audiosamplingrate) neu abgetastet. Dieser Vorgangkann mit der Formel 5 und dem dazugehörigen Spektrum (F) beschrieben werden.

|HDownsampling(f)| = δ(f − k · fs) | k = ganzzahlig (5)

Dabei werden alle Vielfachen der Frequenz fs ins Basisband kopiert. Praktisch dabei ist, dass sich beiVielfachen von fs durch das CIC-Filter hinzugefügte Nullstellen befinden. Das Unterabtastete Signal mitneuem „Lebensraum“ von −fs bis fs ist in (G) ersichtlich.

2.4.4 FIR-Filter

Das FIR-Filter ermöglicht dem Benutzer die Ausgangsbandbreite zu beschneiden (fB) und kompensiertzusätzlich die sinc()-Verzerrung des CIC-Filters. In Spektrum (H) ist eine mögliche Wahl des FIR-Filterssichtbar. Durch die Faltung von Spektrum (G) und (H) folgt schlussendlich das gewünschtes Ausgangs-signal sI(t) mit dem Spektrum (I).

Page 12: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

7

3 FPGA-Logik

Die digitalisierten Daten vom ADC werden in einem Field Programmable Gate Array (FPGA) verarbei-tet. Dazu wird das DE0-Nano-Evaluation-Board der Firma Terasic eingesetzt. Es besitzt ein FPGA derCyclone IV-Familie von Altera. Das Analog-Frontend wird direkt auf das Board aufgesteckt, welchesauch die einfache Anbindung an das DSP-Board ermöglicht.

3.1 Übersicht

In Abbildung 6 wird der Aufbau der FPGA-Logik aufgezeigt. Auf der obersten Ebene Top (grau) befin-det sich ein PLL für das Erzeugen des Systemtakts von 98.304 MHz. Weiter hat diese Ebene die Funk-tion, asynchrone Eingangssignale auf den Systemclock zu synchronisieren, um metastabile Zustände inRegistern zu vermeiden. Die darunterliegende Ebene Main (gelb) stellt das VHDL-Framework dar. Inihr sind der Digital-Down-Converter (DDC), der NIOS-Softcore und weitere benötigte VHDL-Moduleeingebettet.

Die digitalen Daten des ADCs gelangen in das DDC-Modell (orange), welches im Kapitel 4 erklärt wird.Dessen Ausgangsdaten werden dann über das I2S-Interface an einen angeschlossenen DSP weiterge-geben. Der I2S-Controller (Slave) und der DDC sind zwar mit derselben Frequenz getaktet, jedoch istDie Phasenlage nicht bekannt bzw. wird bei jedem Start unterschiedlich sein. Aus diesem Grund ist eineClock-Synchronisation nötig.

Das DDC-Modell - oder genauer gesagt der darin enthaltene Automatic-Gain-Control (AGC) - ist fürdie Gain-Steuerung verantwortlich. Er steuert mit den Signalen HILO und PWM den Variable-Gain-Amplifier (VGA) auf dem Analog-Frontend. Dazu wird der zusätzliche PWM-Controller verwendet, umeine analogen Spannung mittels Tiefpassfilter zu erzeugen.

Im FPGA befindet sich ein Avalon Memory-Mapped Bus (Wishbone-Kompatibel). Die Spezifikationdieses Interfaces ist auf der Webseite von Altera erhältlich [2]. Das DDC-Register (violett) verfügt überein Avalon-MM-Slave-Interface, über welches sich die im DDC verwendeten Registerwerte setzen undlesen lassen. Avalon-MM-Master ist standardmässig das I2C-Interface (DSP). Eine Umschaltung auf denNIOS-Softcore ist mit den Avalon-Switch möglich.

In Blau dargestellt sind die Schnittstellen zum DSP-Board. Dies ist einerseits das Clock-Interface be-stehend aus dem Ready- und Clockout-Signal. Ready wechselt nach der FPGA-Initialisierung seinenZustand von HIGH-Z zu LOW und kann somit dem DSP-Board Bereitschaft signalisieren. Clockoutkann einen 6 MHz-Systemtakt für den DSP ausgeben, damit die beiden Geräte synchron getaktet sind.Schliesslich bilden I2C und I2S die Schnittstelle für die Steuerung und Audioübermittlung.

Der letzte Block ist der grün dargestellte NIOS-Softcore. Er dient zu Entwicklungszwecken und kannüber eine UART-Schnittstelle die DDC-Register beschreiben und auslesen. Weiter ist das Auslesen ge-pufferter Abtastwerte des ADCs möglich, um an echte Daten für Simulationszwecke zu gelangen. DieserEntwicklermodus wird ausführlich in Kapitel 7 erklärt.

Page 13: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

3.2 I2S 8

Abbildung 6: Aufbau der FPGA-Logik

3.2 I2S

Die I2S-Schnittstelle (Inter-IC Sound) ist eine Schnittstelle für die serielle Übertragung von Audiodaten.Sie besteht aus den Signalen Data-In (DIN) und Data-Out (DOUT) für die Datenübertragung, einem Bit-Clock (BCLK) zur Bitsynchronisation und einem Word-Clock (WCLK) zur Framesynchronisation. Beijeder WCLK-Flanke werden die Daten in aneinandergereihten Slots à 16 Bit übertragen. Die komple-xen Daten liegen jeweils in Slot 0 an. Der Inphase-Anteil (I, Real-Anteil) bei WCLK=0 (linken Kanal),der Quadraturphase-Anteil (Q, Imaginär-Anteil) bei WCLK=1 (rechten Kanal). Abbildungen des Si-gnalverlaufs sind in der Interfacespezifikation in Kapitel 6.4.2 ersichtlich. Da kein existierender Codevorzufinden war, wurde dieses Interface in VHDL eigenhändig erstellt.

Die Umsetzung besteht wie in Abbildung 7 aufgezeigt aus 3 Modulen. Das Modul „i2s_slave“ wandeltdie Daten von einem seriellen in einen parallelen Datenstrom. An rx_data/tx_data liegen die Daten an,die zum entsprechenden Slot rx_slot/tx_slot gehören. Das Signal wclk zeigt den entsprechenden Kanalan. Mit rx_write wird angezeigt, wenn die empfangenen Daten gültig sind. Mit tx_read werden die zuübermittelnden Daten angefragt, die dann ein Taktzyklus später an tx_data anlegen müssen. Das Modul„i2s_slave_core“ bestimmt, welche Daten auf welchem Slot/Kanal gesendet werden. Dies sind in Slot 0die Daten des SDRs. In Slot 1 werden die Daten durchgeschlauft, die auf Slot 0 empfangen wurden.

Page 14: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

3.3 Clocksynchronisation 9

Abbildung 7: Aufbau des I2S-Controllers

3.3 Clocksynchronisation

Die Clocksynchronisation ist notwendig, weil die Phasenlage des internen 48 kHz Taktes gegenüberdes Frameclocks (WCLK) des I2S-Interfaces nicht bekannt ist. Die Funktionsweise ist in Abbildung 8illustriert. Dies funktioniert so, indem die Daten in Abhängigkeit des Lesezugriffs entweder unverzögert(A) oder um 180° phasenverschoben (B) an den Ausgang gegeben werden. Zu Beginn wird Kanal Ban den Ausgang gelegt. Verlässt jetzt der Lesetakt den gültigen Bereich (B gültig), wird auf Kanal Aumgeschaltet und umgekehrt. Da sich die Gültigkeitsbereiche von A und B überschneiden, ist ein Clock-Jitter zulässig. Durch diese Methode gehen keine Daten verloren, da die Taktfrequenz des SDR mitdessen des DSP-Boards synchron ist. Falls die Taktfrequenz asynchron wäre, würde durch diese Methodeein Abtastwert kopiert (doppelt gesendet) oder weggelassen.

Abbildung 8: Funktion der Clocksynchronisation

3.4 DDC-Register

Das DDC-Register ist ein Avalon-MM-Slave-Interface, welches den Zugriff auf die einzelnen Regis-terwerte ermöglicht. Wird über den Avalon-Bus auf ein gültiges Register zugegriffen, wird dieses be-schrieben oder ausgelesen. Ungültige Lesezugriffe werden mit dem Wert 0x00 gelesen und ungültigeSchreibzugriffe werden ignoriert. Ein Auszug der Register und dessen Adressierung ist im Anhang Caufzufinden.

Page 15: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

3.5 I2C 10

3.5 I2C

Die I2C-Schnittstelle (Inter-Integrated Circuit) ist ein serieller Bus für die Gerätekommunikation. Er be-steht aus dem Clocksignal (SCL) und dem Datensignal (SDA). Abbildungen des Signalverlaufs sind imKapitel 6.5.2 vorzufinden. Der I2C-Controller stellt ein Slave-Interface dar, womit auf die DDC-Registerzugegriffen werden kann. Für den Registerzugriff ist ein Avalon-MM-Master-Interface notwendig. Auchhier konnte kein existierendes Projekt übernommen werden, weshalb der Controller eigenständig inVHDL umgesetzt wurde.

Die Umsetzung besteht wie in Abbildung 9 aufgezeigt aus 3 Modulen. Das Modul „i2c_slave“ regelt alleZugriffe auf den I2C-Bus. Es erkennt Start- und Stop-Bedingungen, Datenbytes und Acknowledge-Bits.In data_rx und ack_rx liegen die Empfangsdaten an, welche jeweils bei einem Impuls an data_rx_stroberespektive ack_rx_strobe gültig sind. Über data_tx und ack_tx können Daten gesendet werden. Der Buswird im entsprechenden Buszustand getrieben, sofern data_tx_drive respektive ack_tx_drive gesetzt ist.Die gesendeten Daten werden zusätzlich an die rx-Signale zurückgelesen (Loopback-Prinzip).

Das Modul „i2c_slave_core“ regelt die Datenströme. Es wertet die empfangenen Daten aus und gibtentsprechend Antworten zum senden. In einer Zustandsmaschine wird als erstes nach einer Startbedin-gung die Geräteadresse erwartet, gefolgt von 2 Bytes für die Registeradresse. Das Core-Modul beschreibtoder liest dann über den Avalon-Bus die entsprechenden Register, beginnend bei der geforderten Regis-teradresse mit automatischer Adress-Inkrementierung nach jedem Byte.

Abbildung 9: Aufbau des I2C-Controllers

3.6 NIOS Softcore

Der NIOS-Softcore wurde mit Qsys gemäss Abbildung 10 umgesetzt. Auf ihm ist eine kleine Softwarenamens Testprogramm umgesetzt, mit der auf die DDC-Register zugegriffen werden kann. Die Kommu-nikation mit dem NIOS wird in Kapitel 7 beschrieben.

Page 16: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

3.6 NIOS Softcore 11

Abbildung 10: Aufbau des NIOS-Softcores

On-Chip-MemoryIm 20 kByte grossen Programmspeicher ist das Programm und RAM des NIOS abgelegt. Es wird mit derDatei nios_progmem.hex initialisiert, so wird die Software jeweils beim Start des FPGAs automatischgeladen. Ist ein umfangreicheres Programm auf dem NIOS erforderlich, müsste der Programmspeicherauf das externe SDRAM und ECPS-Flash ausgelagert werden. Dies ist in [3] erklärt.

System-Timer & IDDer Systemtimer ist im NIOS für zeitgesteuerte Abläufe verfügbar. Dank der System-ID wird verhindert,dass fälschlicherweise nicht kompatible Software auf den NIOS geladen werden kann (z.B. mittels Flash-Programmer in Eclipse).

JTAGÜber die JTAG-Schnittstelle kann Software mit dem Flash-Programmer aus Eclipse auf den NIOS gela-den werden. Normalerweise wird die Software aber über die Datei nios_progmem.hex automatisch beimFPGA-Start geladen.

UARTDank der UART-Schnittstelle kann der NIOS mit einem Computer kommunizieren (siehe Kapitel 7).

Buttons & LEDsDiese wurden zu Debug-Zwecken implementiert. An Buttons sind die 4 Dip-Switches des DE0-Nano-Boards, sowie der Button des Analog-Frontends verfügbar. Die LED-Signale sind momentan unbenutzt,lassen sich aber in main.vhd rasch auf ein gewünschtes Ziel routen.

Sample-FIFODiese Custom-Peripheral wurde bereits in Projekt 5 entwickelt [1]. Mit ihr können jetzt 8192 Samplesdes AD-Wandlers aufgezeichnet werden.

Avalon-TranslatorMit dem Avalon-Translator wird vom NIOS ein neues Avalon-MM-Master-Interfaces zur Verfügunggestellt. So ist es möglich vom NIOS auf das DDC-Register Modul zuzugreifen. Per Default hat jedochder I2C-Controller den Zugriff, daher muss zuerst der Avalon-Switch durch setzen auf 1 umgeschaltetwerden (siehe Kapitel 3.7).

Page 17: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

3.7 Avalon-Switch 12

3.7 Avalon-Switch

Mit dem Avalon-Switch wird der Bus-Master festgelegt. Dieser ist per Default der I2C-Controller (0).Durch Umschalten wird der Bus zum NIOS (1) aktiviert. Das deaktivierte Gerät wird jeweils 0x00 ausden Registern auslesen und Schreibzugriffe werden ignoriert.

3.8 PWM-Controller

Mit dem PWM-Controller wird aus dem 8 Bit Eingangswert ein pulsweitenmoduliertes Signal mitfPWM ≈ 384 kHz erstellt. Dieses Signal wird auf dem Analog-Frontend durch ein Tiefpassfilter in eineanaloge Spannung umgewandelt, damit der stufenlose VGA eingestellt werden kann.

Page 18: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

13

4 Digital-Down-Converter (Simulink)

4.1 Übersicht

Der Digital-Down-Converter (DDC) ist für das Dezimieren des digitalen Signals verantwortlich. Zu-sätzlich überwacht er die Aussteuerung des A/D-Wandlers und korrigiert gegebenenfalls den Gain derVerstärkerstufe vom Analog-Frontend. In der Abbildung 11 ist das ganze DDC-Modell abgebildet. Manbeachte, dass es sich dabei um den blauen Ausschnitt aus Abbildung 1 handelt. Auf der linken Seitebefinden sich die Eingänge und auf der rechten Seite alle Ausgänge. Diese bilden die Schnittstelle zurrestlichen VHDL-Logik. Erzeugt wurde der komplette DDC in MATLAB Simulink mit Hilfe des AlteraDSP-Builders. Dieser ermöglicht das direkte exportieren des Modells in VHDL-Code.

DE0-nano

Digital-Down-Converter (DDC):

ClkEn

ClkEn_48k

D1

Correction_Up

Correction_Down

CorrectionAverage

AGC_CorrectionAverage

D1

VGA_Gain

VGA_PWM

VGA_HILO

VGA_Controller

D1

D1

AGC_Blocksize

AGC_InputHighLevel

AGC_InputLowLevel

AGC_BlockHighLevel

AGC_BlockLowLevel

AGC_Stepsize

AGC_Enable

AGC_GainPresetEnable

AGC_GainPresetData

AGC_In

AGC_Gain

AGC_Up

AGC_Down

AGC

D1

D1

D1

MIXER_Signal

MIXER_Cos

MIXER_Sin

MIXER_I

MIXER_Q

MIXER

D1

D1NCO_FCW

NCO_COS

NCO_SIN

NCO

D1

D1

SignalCompiler

1.0172526041666666E-8 sec

Clock

i11:0

ADC_Data

D1

i31:0

NCO_FCW

D1

o7:0VGA_PWM

obitVGA_HILO

o7:0AGC_Gain

ibit

AGC_Enable

D1

i23:0

AGC_BlockLowLevel

D1

i23:0

AGC_BlockHighLevel

D1

i[4]:[20]

AGC_Stepsize

D1

i11:0

AGC_InputLowLevel

D1

i11:0

AGC_InputHighLevel

D1

i23:0

AGC_Blocksize

D1

o15:0OUT_I

o15:0OUT_Q

o[0]:[8]AGC_Correction

obitOUT_ClkEn_48k

FIR_I_In

FIR_Q_In

FIR_ClkEn

FIR_Enable

FIR_I_Out

FIR_Q_Out

FIR

D1

D1

ibit

FIR_Enable

D1

ibit

AGC_GainPresetEnable

D1

i7:0

AGC_GainPresetData

D1

CIC_in

CIC_ClkEnCIC_out

CIC_Filter_Q1

D1

CIC_in

CIC_ClkEnCIC_out

CIC_Filter_I1

D1(16:0) (15:0)

Truncate_I

D1

(16:0) (15:0)

Truncate_Q

D1

12

3 4

5 6

7

8

Abbildung 11: Übersicht des Digital-Down-Converters in Simulink

1. NCO: Der NCO erzeugt eine Kosinus- und Sinusschwingung, welche als Lokaloszillatorschwin-gung zum Heruntermischen im Mixer verwendet werden.

2. Mixer: Der Mixer multipliziert das digitale Eingangssignal mit der Kosinus- und Sinusschwingung,wodurch zwei orthogonale Signale (Inphasen- und Quadraturphasensignal) entstehen.

3. CIC: Im CIC-Filter wird die Bandbreite reduziert und ein Downsampling mit Faktor 2048 gemacht.4. FIR: Das FIR-Filter dient zur weiteren Reduzierung der Bandbreite und kann gleichzeitig die sinc-

Verzerrung des CIC-Filters beheben.5. AGC: Der AGC besitzt viele Parameter, welche sein Verhalten steuern. Er überwacht hauptsächlich

das digitale Eingangssignal und entscheidet dann, wie er den Gain korrigieren möchte.6. VGA-Controller: Da die Verstärkerstufe auf dem Analog-Frontend über die zwei Controllsignale

PWM und HILO verfügt, splittet der VGA-Controller das Gain-Signal des AGC auf.7. AGC-Correction: Dieser Block erkennt, ob der AGC am korrigieren ist und speichert diese In-

formation. So kann der Benutzer herausfinden, ob der AGC ein stabiler Zustand erreicht hat oderständig korrigiert.

8. ClkEn: Eine FPGA-Logik mit zwei verschiedenen Clock-Domains bringt viele Nachteile mit sich(PLLs und mühsame Synchronisierungs-Logik). Aus diesem Grund wird in diesem Clock-EnableBlock ein 48 kHz Impulssignal generiert.

Page 19: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

4.2 Numerically-Controlled-Oscillator (NCO) 14

4.2 Numerically-Controlled-Oscillator (NCO)

4.2.1 Beschreibung

Ein Numerically-Controlled-Oscillator (NCO) ist ein digitaler (zeit- und wertdiskret) Signalgenerator,welcher heutzutage sehr gerne in digitalen Systemen eingesetzt wird. Ausgezeichnet wird er durch seineFlexiblität, Genauigkeit und Stabilität. Er kann einerseits mit dem Coordinate Rotation Digital Computer(CORDIC) Algorithmus oder mit einer normalen Lookup-Table implementiert werden. Ersteres wird fürhöchste Präzision bei langsamer Frequenz verwendet, jedoch werden mehrere Clockzyklen (pro Aus-gangsbit ein Takt) verwendet oder es müssen mehrere CORDIC’s parallel implementiert werden. Ausdiesem Grund haben wir uns für die LUT-Variante entschieden. In unserem System erzeugt der NCO dieMischfrequenz, um das digitale Empfangssignal in ein tieferes Frequenzband (Basisband) zu mischen.

4.2.2 Theorie

Grundsätzlich besteht der NCO aus zwei Hauptteilen1:

1. Phasen-Accumulator (PA): Er besteht aus einem Register, dessen Wert die aktuelle Phasenlagebeschreibt.

2. Phase-zu-Amplitude Converter (PAC): Er wandelt den Phasenwert in einen Amplitudenwert um,indem er eine Lookup-Table (LUT) zum Nachschlagen der Werte benötigt.

Phase-zu-Amplitude-Coverter (PAC): Phasen-Accumulator (PA):

∑ z-1 Truncation LUT

(ROM)

N N M B

FCW PW AW

Abbildung 12: Blockschaltbild eines NCO mit einer LUT zum erstellen einer harmonischen Schwingung.

Phasen-AccumulatorDer Phasen-Accumulator (PA) ist ein Register mit N-Bit Auflösung. Sein ganzer Wertebereich wider-spiegelt den Phasenbereich von 0 bis 2π und wird dank dem Variabelüberlauf (Wrap-Around) periodischdurchlaufen.

Das Frequency-Control-Word (FCW) bestimmt, wie viel dem Register mit jedem Clockzyklus dazu ad-diert wird, respektive wie weit sich die Phase weiter dreht. Diese Phasengeschwindigkeit entspricht di-rekt der Ausgangsfrequenz. Da das FCW eine ganze Zahl sein muss, entsteht bei dessen Berechnung einFrequenzfehler.

Beim PA handelt es sich also um einenmod(2N ) Zähler, welcher alle 2N/FCW Clockzyklen überläuft.Die Ausgangsfrequenz berechnet sich nach Formel 6 oder umgeformt das FCW nach Formel 7.

fout = fclk ·FCW

2N| FCW < 2N−1 (6)

FCW = 2N · foutfclk| fout <

fclk2

(7)

1Hinweis zu den verwendeten Variabeln: N, M und B beschreiben Bitauflösungen und sind genau gleich wie die Register-werte FCW, PW und AW Elemente der Natürlichen Zahlen.

Page 20: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

4.2 Numerically-Controlled-Oscillator (NCO) 15

Die Frage ist nun, wie gross das N-Bit Register gewählt werden soll. Praktische Beispiele weisen Wei-ten zwischen 24-48 Bit auf. Massgebend ist die benötigte Frequenzauflösung des NCO, welche sichnach Formel 8 berechnet. Ein höheres N verbessert die Frequenzauflösung und gleichzeitig den Phasen-Quantisierungsfehler.

∆f =fclk2N

(8)

Phase-zu-Amplitude ConverterDer aktuelle Wert des PA-Registers wird auch Phase-Word (PW) genannt und dient als Speicherzugriff-Adresse der Lookup-Table. Als Ergebnis liefert diese dann das Amplitude-Word (AM). Um die Phasen-information verlustfrei in eine Amplitudeninformation umzuwandeln, wären 2N Speicheradressen nötig,was aus speichertechnischen Gründen eigentlich nie möglich ist. Aus diesem Grund wird das Phasenworttrunkiert2, was einen zusätzlicher Phasenfehler eingefügt. Letztlich ist auch die Auflösungsgenauigkeitder Amplitudenwerte in der LUT durch den Speicherplatz begrenzt, wodurch ein zusätzlicher Amplitu-denfehler entsteht.

AusgangsspektrumLeider ist das Ausgangsspektrum eines NCO in keinster Weise mit einem idealen Sinusspektrum zu ver-gleichen. Der Grund liegt in den Trunktierungen, welche zu den drei erwähnten Fehlern führen. Zudemproduziert der PA nicht nur die gewünschte Ausgangsfrequenz, sondern auch noch ungewollte Neben-frequenzen (Spurs). Dessen genaue Berechnung ist jedoch sehr komplex und füllt unzählige Papers mitunterschiedlichsten Lösungsansätzen. Sehr empfehlenswert ist dabei das Dokument [4], aus welchemauch folgendes Beispiel entnommen wurde.

In Abbildung 13 ist der Zustand des PA-Registers für ein NCO mit N = 6 und FCW = 17 darge-stellt. Es ist ersichtlich, dass der Registerüberlauf (gestrichelter Sägezahn) eine normierte Periodizitätvon 26/17 = 3.76 Clockzyklen aufweist. Das entspricht der gewünschten Ausgangsfrequenz von fout.Die genau gleiche Zahlenfolge im PA wiederholt sich jedoch erst nach 64 Werten wieder, wenn der Über-laufsrest wieder verschwindet (rote Markierung). Aus diesem Grund ist auch die wirkliche Periodendauer(NPA) am Ausgang des NCO 64 Clockzyklen. Berechnet wird diese mit der Formel 9.

NPA =2N

GGT (FCW, 2N )| GGT: Grösster gemeinsamer Teiler (9)

Abbildung 13: Visualisierung des PW-Registers.

2Trunkation: Limitierung der Stellen rechts vom Dezimalpunkt oder bei Fixpoint Entfernen von LSBs.

Page 21: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

4.2 Numerically-Controlled-Oscillator (NCO) 16

Es ist bekannt, dass mit steigender Periodendauer die Spektrallinien immer näher zusammenrücken. Beikleiner Periodendauer sind sie also weit voneinander entfernt und das Spektrum wirkt sehr digital. Dieeinzelnen Spektrallinien können sehr viel Energie aufweisen und produzieren so lästiges Aliasing imMischer. Aus diesem Grund ist es gewünscht, die wirkliche PA-Periodendauer möglichst in die Längezu ziehen und somit ein nahezu analoges Spektrum zu erzielen. Die zuvor gebündelte Energie kann sichsomit auf die zuvor leeren Zwischenräume verteilen und der Gesamtpegel der Störungen wird gesenkt.

Ein sehr bekanntes Verfahren ist das Phase-Dithering. Dabei wird dem PA mit einem pseudo Zufalls-generator ein mittelwertfreies Rauschen überlagert. Dadurch wird die Periodizität so gut wie möglichdurchbrochen.

4.2.3 Realisierung

Für die Realisierung wurde ein NCO gemäss obiger Theorie entworfen. Jedoch wurde schnell klar, dassmit den begrenzten Speicherressourcen nicht eine ganze Periode eines Sinus und eines Kosinus gespei-chert werden kann. Somit wurde mit zusätzlicher Literatur nach einer möglichst Speichereffizienten Lö-sung gesucht. Das Paper [5] brachte dann eine optimale Lösung.

Der implementierte NCO ist im Anhang B.1 abgebildet. Er besteht aus dem Phasen-Accumulator, zweiLookup-Tables und zusätzlicher Kontrolllogik. Um die vorgegebenen Speicherzellen (M9K-Blöcke) op-timal auszunutzen wurden folgende Datenbreiten definiert:

• NCO_AccuBits = N = 32 Bit• NCO_LUT_AddrBits = M = 10 Bit• NCO_LUT_DataBits = B = 9 Bit

Die Amplitudeninformationen sind nun auf zwei sogenannte 1/8-Sinus-LUTs aufgeteilt. In der LUT1 ste-cken die Amplitudenwerte zwischen [0, 1/

√2] und in der LUT2 zwischen [1/

√2, 1]. Sinus und Kosinus

wechseln sich beim Zugriff auf die beiden LUTs ab. Für den Zugriffskontrolle und die Vorzeicheninver-tierung am Ausgang werden folgende Multiplexer eingesetzt.

• LUT_Direction_Mux: Entscheidet in welche Richtung die LUT ausgelesen wird. Um die Adres-sierung umzukehren, invertiert der LUT_Address_Inverter alle Bits des Phase-Word.

• LUT_Mux: Regelt die LUT-Umschaltung zwischen Sinus und Kosinus.• Inv_Mux: Negiert das AW am Ausgang.

LUT: LUT1 LUT2 LUT2 LUT1 LUT1 LUT2 LUT2 LUT1LUT_Direction: up up down down up up down downInverter: off off off off on on on on

LUT: LUT2 LUT1 LUT1 LUT2 LUT2 LUT1 LUT1 LUT2LUT_Direction: down down up up down down up upInverter: off off on on on on off off

PW MSB's: 000 001 010 011 100 101 110 111

SINE

COSINE

Abbildung 14: Multiplexer Ansteuerung für den LUT-Zugriff und die Ausgangsinverter.

Page 22: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

4.3 Mixer 17

Die Logik für die Multiplexeransteuerung wurde entsprechend der Abbildung 14 umgesetzt. Die 3 MSBdes PW entscheiden, in welchem Oktant sich der NCO gerade befindet. Die übrigen Bits bilden dieLUT-Adresse.

Die Spursunterdrückung mit Dithering wurde ebenfalls versucht, jedoch wurde keine wirkliche Verbes-serung festgestellt. Wahrscheinlich weil schon sehr grosse Bitbreiten für den NCO implementiert sind.

4.3 Mixer

4.3.1 Beschreibung

Der Mixer besteht aus zwei ganz normalen Multiplizierern. Im einen wird das Eingangssignal mitcos(2πf0) multipliziert und im anderen mit sin(2πf0). Die dazugehörige Theorie wurde bereits imKapitel 2.4 erklärt.

4.3.2 Realisierung

Zur Implementation gibt es nichts weiteres zu sagen, ausser vielleicht ein kleiner Hinweis zur Signed-Multiplikation. Das Eingangssignal (12 Bit) und das NCO-Signal (10 Bit) sind beide vom DatentypSigned Integer. Der Simulink-Block ist nicht sehr intelligent aufgebaut und berechnet daraus einen 22 BitAusgangswert, obwohl der Wertebereich des Produktes nur 21 Bit abdeckt. Man bekommt sozusagenfälschlicherweise zwei Vorzeichenbits. Der Fehler kann behoben werden, indem am Ausgang das MSBverworfen wird. In unserem Fall wird sogar noch auf (20:5) trunkiert, da nur ein signed 16 Bit Wertverwendet wird.

4.4 Cascaded-Integrator-Comb-Filter (CIC)

4.4.1 Beschreibung

Das Cascaded-Integrator-Comb-Filter (kurz CIC-Filter) ist für die Reduzierung der Abtastrate (Dezimie-rung) von fClk = 98.304 MHz auf fs = 48 kHz zuständig. Bevor ein Unterabtasten erfolgt, muss dieSignalbandbreite auf 48 kHz begrenzt werden, um Aliasing zu verhindern. Bei dieser grossen Dezimie-rungsrate von 2048 wäre die Realisierung eines FIR-Filters sehr aufwändig, da eine grosse Anzahl vonFilterkoeffizienten nötig wäre. CIC-Filter sind ebenfalls digitale, linearphasige Filter mit endlicher Im-pulsantwort. Sie zeichnen sich aus, dass sie im Gegensatz zu normalen FIR-Filtern keine Multipliziererund nur wenig Speicherregister benötigen. Dadurch sind sie auch bei grossen Dezimierungsraten sehreffizient und für die Implementation in einem FPGA geeignet.

4.4.2 Theorie

CIC-Dezimierungsfilter sind gemäss Paper [6] nach Abbildung 15 aufgebaut. Sie bestehen aus Integrator-stufen, Kammstufen (Comb-Stages) und einer Unterabtastung. Für die Analyse der Übertragungsfunk-tion wird die Unterabtastung am Schluss positioniert bzw. vorerst weggelassen. So kann das gesamteSystem bei der hohen Abtastrate betrachtet werden und es bleibt zeitinvariant. An dem aufgezeigtenAufbau gibt es folgende Parameter, die das Übertragungsverhalten beeinflussen:

• Die Ordnung N (Anzahl Integrator/Kamm-Päärchen): Interessant sind hier vor allem die Passband-Dämpfung und das Passband-Aliasing/Imaging, welche gegeneinander ausgespielt werden müssen.

• Die differentielle Verzögerung M: Diese kann jede positive Ganzzahl sein, wird gewöhnlich aber 1oder 2 gewählt. Falls sie grösser als eins ist, können mit ihr zusätzliche Nullstellen in der Übertra-gungsfunktion platziert werden.

• Die Dezimierungsrate R: Diese ist Aufgrund der Problemstellung gegeben.

Page 23: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

4.4 Cascaded-Integrator-Comb-Filter (CIC) 18

Abbildung 15: Aufbau des CIC-Filters

IntegratorstufeJede Integratorstufe ist ein IIR-Ein-Pol-Filter mit Rückkopplung 1. Die Differenzengleichung lautet:

y[n] = y[n− 1] + x[n] (10)

Dieses System ist auch als Akkumulator bekannt. Die Übertragungsfunktion in der z-Ebene lautet:

HI(z) =1

1− z−1(11)

Die Übertragungsfunktion ist grundsätzlich ein Tiefpassfilter mit 20 dB Dämpfung pro Dekade. DasPol-Nullstellen-Diagramm und die Übertragungsfunktion in Abbildung 16 zeigen aber auch, dass derIntegrator durch den Pol auf dem Einheitskreis bei z = 1 instabil ist. Das hat zur Folge, dass bei f = 0(DC) die Übertragungsfunktion ins Unendliche strebt. Diese Erkenntnis ist zu beachten und wird inKapitel 4.4.2 erneut aufgegriffen.

Abbildung 16: Pol-Nullstellen-Diagramm und Übertragungsfunktion einer CIC-Integratorstufe

KammstufeJede Kammstufe (engl. Comb Stage) die ohne Unterabtastung betrieben wird (Taktrate von fClk), lässtsich durch seine FIR-Differenzengleichung beschreiben:

y[n] = x[n]− x[n−RM ] (12)

Die dazugehörige Übertragungsfunktion bei fClk lautet:

HC(z) = 1− z−RM (13)

Page 24: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

4.4 Cascaded-Integrator-Comb-Filter (CIC) 19

Würde man RM = 1 wählen, entspricht die Übertragungsfunktion einem Hochpassfilter mit 20 dB Ver-stärkung pro Dekade (das Inverse der Integratorstufe). Wählt manRM > 1, so nimmt die Übertragungs-funktion die bekannte „raised cosine“-Funktion an, mit RM Zyklen zwischen 0 und 2π, bzw. zwischen0 und fClk. Dies ist im Beispiel in Abbildung 17 mit R = 7 und M = 1 abgebildet. (7 Nullstellen von 0bis fClk)

Abbildung 17: Pol-Nullstellen-Diagramm und Übertragungsfunktion einer CIC-Kammstufe mit R = 7,M = 1

Bei einem CIC-Filter werden nun jeweils N Integrator- und N Kammstufen in Serie geschalten. Funktio-niert das analysierte Filter, so kann die Unterabtastung um den Faktor R vor den Kammstufen eingebautwerden. Durch anwenden der „Noble-Identity“ kann die Kammstufe wesentlich vereinfacht werden. D.h.da die Kammstufe nun mit fs = fClk/R anstelle von fClk betrieben wird, vereinfacht sich die Gleichung12 zu:

y[n] = x[n]− x[n−M ] (14)

Einerseits wird durch die kleinere Frequenz das Timing im FPGA unproblematischer, andererseits wer-den nur noch M statt RM Verzögerungsglieder bei der Implementation benötigt. Weiter ist nun das Filterauch unabhängig vom Dezimierungsfaktor R geworden, d.h. es kann ein CIC-Filter mit programmierba-rem Dezimierungsfaktor umgesetzt werden, bei welchem die Filterstruktur identisch bleibt.

FrequenzverhaltenEs wurde gezeigt, dass die Integratorstufe einen Pol und die Kammstufe eine Nullstelle bei z = 1aufweisen. Werden nun die beiden Stufen kombiniert, hebt sich diese Pol- und Nullstelle gegenseitig aufund das Filter wird als Ganzes stabil. Kombiniert man die beiden Übertragungsfunktionen (11) und (13)für ein N-Stufiges CIC-Filter erhält man:

H(z) = HNI (z)HN

C (z) =(1− z−RM )N

(1− z−1)N=

(RM−1∑k=0

z−k

)N(15)

Diese Gleichung zeigt, dass trotz den in sich instabilen Integratoren eine endliche Impulsantwort entsteht.Das CIC-Filter ist gleichwertig wie N in Serie geschaltete FIR-Filter, welche jeweils eine rechteckigeImpulsantwort aufweisen. Somit kann die Stabilität und der linearen Phasengang auch erklärt werden. InAbbildung 18 ist das Pol-Nullstellen-Diagramm sowie die Übertragungsfunktion der kombinierten Stufeaus Abbildung 16 und 17 ersichtlich.

Page 25: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

4.4 Cascaded-Integrator-Comb-Filter (CIC) 20

Abbildung 18: Pol-Nullstellen-Diagramm und Übertragungsfunktion einer Integratorstufe und Kammstufemit R = 7, M = 1

Das Filter wird durch die Pol/Nullstellen Aufhebung nun auch bei f = 0 (DC) stabil. Weiter kannbeobachtet werden, dass bei f = fClk

RM und dessen vielfachen jeweils eine Nullstelle auftritt. Wird mitfs = fClk

R neu abgetastet, kommen alle diese Nullstellen bei f = 0 zu liegen. Die Regionen um dieNullstellen werden somit auch in den Passband-Interessenbereich kopiert (Aliasing/Imaging). Weiterist zu sehen, dass die Übertragungsfunktion im Interessebereich bereits abflacht (Passband-Dämpfung).Diese Effekte werden nun genauer untersucht. Dazu wird die Übertragungsfunktion durch inverse z-Transformation von 15 berechnet:

|H(f)| =∣∣∣∣∣sin(πMf)

sin(πfR )

∣∣∣∣∣N

(16)

Durch die Annäherung sin(x) ≈ x für kleine x kann die Gleichung für grosse Dezimierungsfaktoren Rangenähert werden zu:

|H(f)| ≈∣∣∣∣RM sin(πMf)

πMf

∣∣∣∣N für 0 ≤ f ≤ 1

M(17)

Es ist also ersichtlich, dass eine sin(x)x -Verzerrung im Passband auftritt.

Passband-DämpfungNach der Dezimierung liegt der neue Lebensraum zwischen 0 und fs. Dieser Bereich wird durch die inAbbildung 18 gezeigte sin(x)

x -Verzerrung mit steigender Frequenz stärker gedämpft. Da meistens sowie-so nur eine begrenzte Bandbreite benötigt wird, ist zusätzlich ein Tiefpass-Filter bei der GrenzfrequenzfP dem CIC-Filter nachzuschalten. Die maximale Dämpfung im Passband ist bei der maximalen Nutz-frequenz (fP ) definiert. Die Dämpfung AP kann somit durch einsetzen von fP in Gleichung 17 ermitteltwerden. Häufig wird die Verzerrung bereits im nachgeschalteten Tiefpassfilter korrigiert, indem bei die-sem eine inverse sinc()-Form gewählt wird.

Passband-Imaging/AliasingDurch das Downsampling wird das Spektrum periodisch mit der neuen Abtastrate fs kopiert (Faltung mitDiracfolge). Die Frequenzen über der neuen Abtastfrequenz fs werden somit ins Basisband kopiert (Ali-asing). Dabei ist es besonders praktisch, dass bei CIC-Filtern jeweils bei Vielfachen von f = fs = fClk

Reine Nullstelle vorliegt. Die Umgebung um diese Nullstellen (in Abbildung 18 gelb markiert), welchein unser Passband kopiert werden, sind nämlich schon stark gedämpft und beeinflussen den Interessens-bereich nur gering. Der grösste Aliasing-Anteil entsteht bei fI = fs

R − fP . Die Aliasing-Dämpfung AIkann durch Einsetzen von fI in Gleichung 17 berechnet werden.

Page 26: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

4.4 Cascaded-Integrator-Comb-Filter (CIC) 21

Die differentielle Verzögerung M kann dazu verwendet werden, um zusätzliche Nullstellen zwischenden schon vorhandenen zu platzieren. Dies bewirkt, dass die Aliasing-Dämpfung AI besser, jedoch derbrauchbare Passband-Bereich kleiner wird. Zu beachten gilt, dass beim nachgeschalteten FIR-Filter mitsinc()-Korrektur auch der Aliasing-Anteil um die Passband-Dämpfung AP verstärkt wird.

Ist das CIC-Filter erstmals definiert, geht es an die Implementation auf der Hardware. Dazu gibt es aucheinige Punkte zu beachten.

Wertdiskrete ImplementationWie bereits aufgezeigt wurde, ist die Integratorstufe per se instabil. Die Polstelle bei f = 0 wird erstdurch die nachfolgende Kammstufe kompensiert. Bei der wertdiskreten Implementation kommt es daherzwangsläufig zu Variablenüberläufen im Integrator. Aus diesem Grund ist auf genügend grosse Register-/Variablengrössen zu achten (siehe Abschnitt Registergrössen), damit maximal ein Integratorüberlaufpro Kammstufen-Zyklus (RM -Zyklen) erfolgen kann. Weiter ist zwingend zu gewährleisten, dass ein„Wrap-Around“ der Variablen erfolgt, und diese nicht etwa in Sättigung gehen.

RegistergrössenDurch das Dezimieren wird eine zusätzliche Werteauflösung gewonnen, bzw. Bandbreite wird gegenQuantisierungsrauschen ausgespielt. Grob vereinfacht kann gesagt werden, dass durch das Dezimierenmehrere ganzzahlige Eingangswerte zu einem Ausgangswert „gemittelt“ werden, wodurch Zahlen mitKommastellen entstehen (höhere Werteauflösung). Etwas praxisbezogener ausgedrückt wird durch dieBandbegrenzung das Rauschen bei hohen Frequenzen abgeschnitten und der SNR gesteigert. Bei uni-former Verteilung (weisses Rauschen) und einer Dezimierung um Faktor 4 wird die Rauschleistung ge-viertelt. Dies lässt den SNR um 6 dB steigen, was einem effektiven Bitzuwachs von 1 gleichkommt. Miteiner Dezimierungsrate von R=2048 würde demnach ein effektiver Bitgewinn von 5.5 Bit resultieren.

Im bekannten Paper von Hogenauer [7] wird der Bitzuwachs anhand der Verstärkung im CIC-Filterbeschrieben. Die Gesamtverstärkung des Systems sei somit:

A = (RM)N (18)

Dies ist einleuchtend: Betrachtet man ein CIC-Filter mit N=1, so integriert die Integratorstufe den Ein-gangswert über R-Zyklen des schnellen Clocks, bevor die Kammstufe den Wert vom vorherigen sub-trahiert (bei M=1). Bei M=2 würde der Wert eines noch weiter zurückliegenden Zyklus des langsamenClocks subtrahiert werden, der Eingangswert würde somit also doppelt solang integriert werden. Durchdie Verstärkung, bzw. Integrierung, entsteht somit also ein Bitwachstum von log2((RM)N ). Um diesenverstärkten Wert nun binär abzuspeichern, ist somit ein Ausgangsregister der Grösse Bout notwendig:

Bout = dNlog2(RM) +Bine (19)

AbschneidenEin Beispiel mit R=2048, M=1 und N=6 (im SDR implementiert) zeigt, dass gemäss Formel (19) einenormer Bitgewinn von 66 Bit entsteht. Es zeigt sich durch die vorherigen Überlegungen, dass sicherlichnicht alle Bits Nutzinformationen tragen werden, sondern viele LSB’s rauschen. Die Herleitungen vonHogenauer zeigen, dass bereits die erste Integratorstufe eine Bitbreite von Bout aufweisen muss. Danachkönnen stetig bei jeder Filterstufe LSB’s verworfen werden, um wichtige Ressourcen zu sparen.

Durch das verringern der Bitbreiten - durch Abschneiden (Truncate) oder Runden (Round) - entstehtein zusätzlicher Quantisierungsfehler. Dieser kann allgemein wie in Abbildung 19 modelliert werden.Dabei wird von einem linearen System ausgegangen, welchem der Quantisierungsfehler addiert wird.Dieser ist die Differenz des quantisierten Werts (Stufenfunktion) zum exakten Wert (Gerade). In guterNäherung wird der Quantisierungsfehler als uniform verteilt und weder mit dem Eingang noch einer an-deren Fehlerquelle korreliert angenommen (weisses Rauschen). Die Störgrösse beträgt E = 2B , wobei

Page 27: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

4.4 Cascaded-Integrator-Comb-Filter (CIC) 22

B die Anzahl verworfener LSB’s ist. Die Varianz des Fehlers ist somit σ2 = 112E

2. Durch Abschnei-den entsteht zudem ein Mittelwertfehler von µ = 1

2E, welcher durch Runden nicht entstehen würde. InHogenauer’s Paper werden nun alle Fehlereinflüsse, welche durch das verringern der Bitbreiten an jederFilterstufe entstehen, unter Berücksichtigung der Fehlerfortpflanzung durch das gesamte System betrach-tet. Ein legitimes Designkriterium sei, dass die Varianz σ2 des Fehlers der 2N Filterstufen kleiner odergleich der Varianz des Ausgangsregisters sei und die Fehler der Filterstufen gleichmässig verteilt seien.Hogenauer zeigt auch, dass weitgehend auf das Runden verzichtet werden kann, lediglich bei der erstenStufe und dem Ausgangsregister hat der Mittelwertfehler einen beträchtlichen Einfluss. Mit den in die-sem Kapitel hergeleiteten Formeln wurde eine MATLAB-Function (cic.m) erstellt, welche die Bitbreitender Filterstufen berechnet.

Abbildung 19: Visualisierung des Quantisierungsfehlers

4.4.3 Realisierung

Für die Realisierung werden folgende Anforderungen an das CIC-Filter gestellt:

• Dezimierung umR = 2048 von 98.308 MHz (Abtastrate des ADC) auf 48 kHz (Audio-Abtastrate)• Aliasing/Imaging-Dämpfung AI > 60dB bei einem Passband von fP = 10kHz (entspricht etwa

dem hörbaren Dynamikbereich)• Akzeptable Passband-Dämpfung AP < 6dB, damit die sinc-Entzerrung im nachfolgenden FIR-

Filter ohne grosse Qualitätseinbussen erfolgen kann.• Bitbreite Bin von 16 Bit und Bout von 17 Bit. 1 MSB von Bout wird nach dem CIC verworfen,

um die am Ausgang geforderten 16 Bit (SDR imitiert einen Audio-Codec) zu erzielen. Durch dasverworfene Bit wird das Signal verdoppelt, wodurch die verlorene halbe Signalleistung vom Dezi-mieren kompensiert wird. Im Theorieteil in Kapitel (siehe Kapitel 2.4) wurde dieser Faktor bereitsbei den Mischsignalen hinzugefügt.

Aufgrund dieser Anforderungen wurde das Filter gemäss obiger Theroie entworfen. Im Anhang B.4 istdas berechnete Filter mit folgenden Eckdaten aufgezeigt:

• Ordnung N = 6• Passband-Dämpfung bei fP von AP = 3.78 dB• Aliasing/Imaging-Dämpfung bei fI von AI = 73.35 dB• 17 Bit Datenbreite, Truncating/Rounding gemäss Hogenauer• Mittelwert-Fehler durch Truncation am Ausgang: 8.5 LSB (= 0.026 %)• Standartabweichung (zusätzliches weisses Rauschen) aufgrund Truncation/Rounding: 0.362 LSB

Das Modell wurde mit MATLAB-Simulink und der Fixpoint-Toolbox mit einigen Frequenzen verifiziert.Die Ergebnisse sind in Kapitel 9.3 aufgezeigt.

Page 28: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

4.5 Finite-Impulse-Response-Filter (FIR) 23

4.5 Finite-Impulse-Response-Filter (FIR)

4.5.1 Beschreibung

Dem CIC-Filter wird ein Finite-Impulse-Response-Filter (FIR-Filter) nachgeschalten. Es kompensierteinerseits die sinc-Verzerrung des CIC-Filters, andererseits gibt es dem Benutzer die Möglichkeit einerAusgangsbandbreitenbegrenzung. Dies ist z.B. sehr nützlich beim Empfang von Morsesignalen, da diesenur eine sehr geringe Bandbreite aufweisen (einige 100 Hz) und dadurch ein grosser Anteil Rauschenabgeschnitten werden kann.

4.5.2 Theorie

FIR-Filter sind gemäss Abbildung 20 aufgebaut. Sie bestehen aus Register (Verzögerungsglieder) undMultiplikationen mit den Filterkoeffizienten. Sie weisen in ihrer Struktur keine Rückkopplungen oderSchleifen auf, wodurch eine endliche Impulsantwort garantiert werden kann. Das Filter ist somit stetsstabil. Der Ausgangswert y[k] entsteht durch die Faltung der Eingangswerte x[k] mit den Filterkoeffizi-enten c[k]. Dazu wird der Eingangswert x[k] und seine gespeicherten Vorgängerwerte x[k−1]...x[k−N ]mit den Filterkoeffizienten c[0]...c[N ] multipliziert und danach die einzelnen Produkte aufsummiert. Nbezeichnet dabei die Filterordnung. Das Verhalten des Filters ist durch die Koeffizienten c bestimmt.Diese können vom Benutzer gewählt werden. Im MATLAB-Skript DDC_Simulation.m werden diese di-rekt berechnet und mittels saveFIRcoeff.m in einem C-Header-File abgespeichert. Dieses kann dann inder DSP-Software benutzt werden, um die Koeffizienten während der Laufzeit neu zu Laden.

Abbildung 20: Struktur eines FIR-Filters

4.5.3 Realisierung

Der ganze FIR-Block ist im Anhang B.5 ersichtlich. Er besitzt Ein- und Ausgänge für die beiden Daten-ströme des Inphase-Signal (I) und des Quadraturphase-Signal (Q), ein 48 kHz-Clock-Enable-Signal umdie neuen Daten im Filter einzulesen und ein Enable-Signal um das Filter zu deaktivieren (beim Ladenvon neuen Filterkoeffizienten).

Da der FPGA mit einem Takt von 98.304 MHz betrieben wird - die Datenrate im FIR-Filter aber nur48 kHz beträgt - kann für die Implementation ein Pipeline-Prinzip angewendet werden. Das bedeutet,dass anstelle mehrerer Multiplizierer (bei 48 kHz) alle Koeffizientenmultiplikationen von einem einzel-nen Multiplizierer (bei 98.304 MHz) abgehandelt werden. Das spart „teure“ FPGA-Ressourcen. Zudemwerden die Register (Verzögerungsglieder) in einem FPGA-internen Block-Memory nach dem Prinzipeines Ring-Buffers abgelegt. In der Realisierung wurden 128 Koeffizienten (16 Bit) gewählt.

Pipeline-SteuerungDie Pipeline läuft in mehreren Schritten ab. Für eine Koeffizienten-Multiplikation werden gesamthaftdrei Zyklen benötigt. Dies aufgrund der Speicherzugriffe für das Koeffizient Laden (1 Zyklus) und für

Page 29: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

4.5 Finite-Impulse-Response-Filter (FIR) 24

das Laden der vergangenen I und Q Werte (2 Zyklen). Die Berechnung der beiden Multiply-AkkumulateOperationen wird im 3. Zyklus durchgeführt. Durch diese Implementation wären bei einer Dezimie-rungsrate von 2048 theoretisch bis zu 682 Koeffizienten möglich.

Für die Pipeline-Steuerung werden 3 Zähler verwendet:

• Iteration-Counter: Zählt die oben beschriebenen Zyklen von 0-2.• Coefficient-Counter: Wird immer nach einer vollendeten Iteration (Zyklus 0-2) inkrementiert, zeigt

somit den aktuellen Koeffizienten an.• Ringbuffer-Counter: Dieser wird bei jedem neuen Eingangswert dekrementiert (Wrap-Around), um

den Speicherort der Eingangsdaten im Ringbuffer zu bestimmen.

Die Realisierung dieser Zähler ist in Abbildung 21 ersichtlich.

Abbildung 21: Zähler für die Pipeline-Steuerung

Register/SpeicherAls Speicher für die Filterkoeffizienten und die vergangenen I- und Q-Daten wird ein Block-Memory(Dual-Port-RAM) verwendet. Der Speicherbereich wird dazu in drei Teile unterteilt. Im ersten Drit-tel werden die Filterkoeffizienten der Länge L = N − 1 abgespeichert (0...L-1) . Diese sind überden Avalon-Bus adressierbar, sofern das FIR-Filter deaktiviert ist (FIR_Enable=0). Im zweiten Drittel(L...2L-1) werden die vergangenen Eingangsdaten des I-Datenstroms in Form eines Ringbuffers abge-legt und im letzten (2L...3L-1) diejenigen des Q-Datenstroms. Der Ringbuffer-Counters zeigt immer denAdressoffset des neusten Wert x[k] des Eingangssignales. Da der Ringbuffer-Counter rückwärts zählt,liegen die vergangenen Werte chronologisch aufwärts im Speicher. An Stelle Offset+1 liegt demnach derWert x[k-1].

AdresscontrollerUm in den einzelnen Zyklen von der richtigen Speicheradresse zu lesen oder schreiben, ist ein Adress-controller nötig. In der untenstehenden Tabelle 1 ist ersichtlich, in welchem Zyklus welche Operationdurchgeführt wird. Es werden hier die Werte yI [k]/yQ[k] aus den aktuellen Eingangswerten xI [k]/xQ[k]berechnet. Dabei zeigt i den aktuellen Koeffizienten an (Wert des Coefficient-Counters), r den aktuellenRingbuffer-Offset (Wert des Ringbuffer-Counters) und N + 1 die Anzahl Koeffizienten.

Page 30: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

4.5 Finite-Impulse-Response-Filter (FIR) 25

Zyklus Schreibzugriff LesezugriffOperation Adresse Operation Adresse

0 Aktueller I-Wert xI [k] inRingbuffer schreiben

L + r Filterkoeffizient ciladen

0 + i

1 Aktueller Q-Wert xQ[k] inRingbuffer schreiben

2L + r Vergangener I-WertxI [k − i] laden

L + (i+r) mod L

2 - - Vergangener Q-WertxQ[k − i] laden

2L + (i+r) mod L

Tabelle 1: Schreib- und Lesezugriffe der Pipeline-Zyklen

Abbildung 22 zeigt auf der linken Seite die beiden Address-Controller für den Lese- und Schreibzugriff.Im mittleren Block befindet sich das erklärte Block-Memory. Rechts ist der Lese-Controller angeordnet,der die seriellen Lesezugriffe mittels Demultiplexer wieder in die drei Werte (Koeffizient, I-Kanal undQ-Kanal) auftrennt.

Abbildung 22: Aufbau des Speichers mit Adresscontroller, Multi- und Demultiplexer

Page 31: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

4.6 Automatic-Gain-Controller (AGC) 26

Multiply-AccumulateIm Multiply-Accumulate-Block in Abbildung 23 wird für jeden Filterkoeffizient und beide Kanäle (I&Q)die Multiplikation durchgeführt. Alle Resultate werden dann über alle Iterationen i aufsummiert. Um einÜberlauf des Registers zu verhindern, wurde die Bitbreite absichtlich 34 Bit gewählt. Das sind 2 Bitmehr, als die theoretisch nötigen 32-Bit. Da das Eingangssignal in der Praxis mittelwertfrei sein wird, istein Überlaufen des Multiply-Accumulate-Blocks nicht möglich. Am Schluss werden die 16 MSB’s aus-geschnitten und am Ausgang ausgegeben. Um bei sehr ungünstiger Konstellation von Filterkoeffizientenund Eingangssignal ein Überlauf zu vermeiden, ist dieses Ausschneiden als Saturation umgesetzt. EinÜberlauf könnte theoretisch auftreten, wenn z.B. viele positive Eingangswerte auf positive Koeffizien-ten und negative Eingangswerte auf negative Koeffizienten treffen (oder umgekehrt). Dann werden vielepositive Produkte aufsummiert, was das Register zum Überlauf bringen kann.

Abbildung 23: Aufbau des Multiplizieres/Akkumulator

4.6 Automatic-Gain-Controller (AGC)

4.6.1 Beschreibung

Der Automatic-Gain-Controller ist für die Steuerung der Verstärkerstufe verantwortlich. Er muss si-cherstellen, dass der A/D-Wandler nicht übersteuert wird. Als Eingangswerte bekommt er das digitaleEingangssignal, sowie diverse Parameter. Am Ausgang liefert er sogenannte Überwachungsignale unddie Steuersignale für den VGA auf dem Analog-Frontend.

4.6.2 Realisierung

Der AGC-Algorithmus wurde sehr primitiv implementiert. Das Modell findet man im Anhang B.6. Eswird der Absolutwert des Eingangsignals gebildet und mit jedem Sample geschaut, ob der Wert einInputHighLevel überschreitet. Ist dies der Fall, wird das InputHigh_Register inkrementiert. Sollte dasRegister während einer bestimmten Anzahl Samples (Blocksize) das BlockHighLevel überschreiten, sowird ein Befehl zur Verminderung des Gains (AGC_Down) ausgegeben. Analog geschieht dies auch fürdie LowLevels und den AGC_Up Befehl. Am Ende des Blocksize-Intervalls (Blocksize_Counter wirdgelöscht) werden all diese Register wieder zurückgesetzt.

Mit jedem Zurücksetzen des Blocksize_Counters wird auch kontrolliert, ob ein AGC_Up/Down Befehlanliegt. Sollte dies so sein, wird das Gain_Register um den Wert Stepsize dekrementiert/inkrementiert.

Page 32: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

4.6 Automatic-Gain-Controller (AGC) 27

Stepsize ist ein [4]:[20] Fixpoint-Integer und erlaubt dadurch eine Korrekturgeschwindigkeit zwischenca. 22.4µdB/Step bis maximal 3.7 dB/Step. Allgemein lässt sich die maximale Korrekturgeschwin-digkeit nach Formel 20 berechnen. Mit “maximal“ ist gemeint, dass bei jedem Block-Counter Reset eineGainkorrektur gemacht wird.

AGC_Slope[dB/s] =Stepsize

Blocksize· 60dB

255· fClk | fClk = 98.304 MHz (20)

Wobei der Wert Stepsize mit seinem Fixpoint-Wert (2−20 bis 16− 2−20) eingesetzt werden muss.

AGC_Correction:Sollten beide Korrekturbefehle gleichzeitig anstehen oder der AGC ständig am Korrigieren sein, ist erinstabil. Dies wird über den AGC_ Block erkannt und dem Benutzer über ein auslesbares Register zu-gänglich gemacht (vgl. Anhang B.8). Zusätzlich wird noch die LED1 auf dem Analog-Frontend gesetzt,sollte der Wert ungleich 0 sein.

AGC_GainPreset:Es besteht die Funktion, den AGC durch das Löschen von AGC_Enable zu deaktivieren. Er behält dannseinen letzten Wert konstant. Mit AGC_GainPresetData und AGC_GainPresetEnable kann zudem demGain_Register ein Wert gesetzt werden, welcher jedoch nur erhalten bleibt, falls der AGC deaktiviert ist.Diese Vorgehensweise wird auch durch das implementierte VHDL-Modul DDC-Register angewendet.

VGA_Controller:Dieser Controller unterstützt den AGC. Er wandelt den gesetzten Gain in ein HILO- und PWM-Signalum, welche für die Ansteuerung des VGA auf dem Analog-Frontend verwendet werden. Die Umschal-tung auf HILO = 1 erfolgt möglichst spät, um die VGA-Dämpfungsglieder möglichst auszuschalten (gibtbesseres Noise-Verhalten). Der ganze Simulink-Block ist im Anhang B.7 abgebildet.

Page 33: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

28

5 Design-Flow

Für die Umsetzung der FPGA-Logik und Software wurde eine breite Palette an Tools verwendet, dieuntenstehend aufgelistet sind:

• Quartus Prime Standard Edition 15.1 (mit Qsys)• Questa Sim 10.4• MATLAB R2015b (mit Altera DSP Builder 15.1 (Standard Blockset) und Fixpoint-Lizenz (FH-

Lizenz)• Nios II Software Build Tools for Eclipse

Der Designflow ist in Abbildung 24 abgebildet.

Abbildung 24: Designflow der FPGA-Logik/Software

DDC-ModelDas DDC-Modell ist in MATLAB Simulink und dem Altera DSP-Builder umgesetzt. Es ist zu beach-ten, dass das Modell innerhalb des zu synthetisierenden Bereichs nur mit diesen „Altera DSP-BuilderStandard-Blockset“-Blöcken aufgebaut wird. Diese können nämlich sowohl in Simulink simuliert, wieauch in VHDL-Code exportiert werden. Diese Gruppe wird im Library-Browser sichtbar, wenn der DSP-Builder installiert wurde und MATLAB über das Skript „dsp_builder.bat“ gestartet wird. Der Start überdie .bat-Datei ist notwendig, damit die Umgebungspfade in MATLAB korrekt gesetzt werden. Bei derRealisierung des „DDC_Modell.slx“ wurde darauf geachtet, dass möglichst keine statische Parameterverwenden werden. So können z.B. Bitbreiten einfach über „DDC_Simulation.m“ geändert werden. Indieser Datei sind alle Definitionen vorhanden, woraus dann die Modellparameter berechnet und in die

Page 34: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

29

Datei „DDC_Init.mat“ exportiert werden. Beim Laden des Simulink-Modells werden diese Parameterdann automatisch aus „DDC_Init.mat“ geladen (siehe Model Properties -> Tab Callbacks -> PreLoanF-cn). Mit Doppelklick auf das „SignalCompiler“-Icon im Simulink-Modell kann via Tab „Export“ dasDDC-Modell in synthetisierbaren VHDL-Code exportiert werden. Das erzeugte „DDC_Model.qip“ istin Quartus Prime als Source-Datei hinzugefügt.

NIOS HardwareDas NIOS-System wird über das Tool „Qsys„ aus Quartus Prime konfiguriert. Bereits in Projekt 5 wur-den eigene Komponenten (Custom Pheripherals) entwickelt (siehe P5-Dokumentation [1]), die in Qsysimportiert werden (Sample-FIFO). Einerseits erstellt Qsys mittels „Generate HDL...“ synthetisierbarenVHDL-Code („nios.qip“ ist in Quartus Prime als Source-Datei hinzugefügt), andererseits erzeugt es dieDatei „nios.sopcinfo“ (Hardwarearchitektur-Abbild um Software zu erstellen).

NIOS SoftwareDie Software wird mittels „NIOS II Software Build Tools for Eclipse“ erstellt (kann in Quartus Primevia Menüpunkt „Tools“ gestartet werden). Die Software wird in Eclipse in zwei Schritten erstellt:

1. Board-Support-Package (BSP): Das BSP mittels Rechtsklick auf das Projekt „Testprogramm_bsp“-> NIOS II -> Generate BSP erstellen.

2. HEX-File: Das HEX-File für die Initialisierung des Programmspeichers muss erstellt werden.Das Programm wird im flüchtigen, internen Block-Memory des FPGAs abgelegt. Dieses wirdbeim Startup initialisiert (vgl. Einstellung des progmem in Qsys). Der Buildvorgang erfolgt durchRechtsklick auf das Projekt „Testprogramm“ -> Make Targets -> Build....Danach „mem_init_generate“ wählen -> Build. Es wird das Package „meminit.qip“ erstellt, daswiederum in Quartus Prime geladen wird.

Weitere Hilfestellung für das Erstellen der NIOS Hard- und Software bietet das Tutorial [8] und [9].

VHDLZusammen mit weiterer VHDL-Source kann das Projekt mit Quartus Prime synthetisiert werden. Esentsteht die Datei „main.sof“, die bereits ins flüchtige RAM des FPGAs geladen werden kann. Miteinem Tool (File -> Convert Programming Files) kann das .sof in eine .jic-Datei umgewandelt wer-den. Im Tool können die vorzunehmenden Einstellungen (Datei output_files/permanent_convert.cof,ggf. Pfade anpassen) geladen werden (Button Open Conversation Data Setup...). Die Datei „perma-nent_prog.jic“ kann nun mittels Tools -> Programmer oder mittels Doppelklick auf die Projektdatei(output_files/permanent_prog.cdf, ggf. Pfade anpassen) auf das permanente ECPS-Flash geladen wer-den (Neustart des FPGA nach Download erforderlich).

Page 35: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

30

6 Anbindung des DSP-Board

6.1 Übersicht

Der SDR kann an das DSP-Board [10] angebunden werden, das ebenfalls im Rahmen einer Bachelor-Thesis entstand. So können die empfangenen Signale weiterverarbeitet (z.B. demoduliert) werden undüber einen Audio-Ausgang (3.5 mm-Klinke) ausgegeben werden. Die Schnittstelle verhält sich seitensSDR wie ein Codec, damit die Anbindung relativ einfach erfolgt. Dabei ist zu beachten, dass die beidenSysteme SDR und DSP-Board über einen synchronen Takt verfügen sollten. Um diese Ziele zu erreichen,wurden drei Schnittstellen implementiert:

• 6 MHz-Clock-Output: Als Taktsignal für das DSP-Board.• I2S-Interface: Für die Übertragung der Empfangsdaten.• I2C-Interface: Zur Konfiguration des SDR vom DSP aus.

6.2 Pinbelegung

Die Anbindung erfolgt über ein 12-Pol Flachbandkabel. Die Pinbelegung ist in Abbildung 25 ersichtlich.Die 12 Pins werden am DE0-Nano Entwicklungsboard des SDRs an der Stiftleiste GPIO-0/JP1, Pin 1-12 abgegriffen (vgl. Abbildung 37 in Anhang A) und mit P1 am DSP-Board verbunden. Die Speisungerfolgt durch das DSP-Board (5 V/200 mA). Alle Signale weisen einen 3.3 V Pegel auf.

Abbildung 25: Pinbelegung der Schnittstelle zum DSP-Board

Pin Name Richtung3 Funktion1 BCLK IN Bit-Clock des I2S-Interfaces2 CLK OUT 6 MHz Clock als Clock-Quelle für das DSP-Board3 WCLK IN 48 kHz Word-Clock des I2S-Interfaces4 DIN IN Data-In des I2S-Interfaces. Zum Anschliessen von DOUT

des Codecs.5 Ready OUT Signal zum erkennen des SDRs. LOW, sobald der SDR

initialisiert ist. Externer Pull-Up erforderlich.6 DOUT OUT Data-Out des I2S-Interfaces. Verbinden zu DIN des DSPs.7 SCL IN Clocksignal des I2C-Interfaces8 SDA IN/OUT Datensignal des I2C-Interfaces9 NC - Nicht verbinden10 NC - Nicht verbinden11 5V_IN IN Versorgungsspannung des SDRs (5V/200mA)12 GND IN Gemeinsame Masse

Tabelle 2: Pinbeschreibung

3aus Sicht des SDR

Page 36: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

6.3 Clock-Interface 31

6.3 Clock-Interface

Der SDR stellt ein 6 MHz Clock für das DSP-Board bereit. Dieser Clock wird vom SDR-internenSample-Clock abgeleitet und ist somit synchron zur erzeugten Datenrate. Das Clock-Interface muss imClock-Register CLK_CTRL (siehe Anhang C.4) aktiviert werden. Dieses kann über das I2C-Konfigura-tionsinterface (siehe Kapitel 6.5) beschrieben werden, sobald der SDR bereit ist. Dieser Zustand wirddem DSP durch einen LOW-Pegel des Signals „Ready“ mitgeteilt.

6.3.1 Anbindung

Sofern das DSP-Board ohne SDR betrieben wird, wird der Takt mittels eines 12 MHz-Quarzes am Co-dec erzeugt. Beim Anschluss des DSP-Boards wird der Clock des Clock-Interfaces direkt dem Codec desDSP-Boards zugefügt (vgl. Abbildung 26). Dabei muss der Clock-Eingang mittels der Bestückungsvari-ante von 0 Ω-Widerständen am Codec umgeschalten werden. Ggf. können auch beide 0 Ω-Widerständebestückt werden und der Quarz kann lediglich über das Enable-Registers des Codecs deaktiviert werden.Dies wurde jedoch nicht verifiziert und es ist somit zu prüfen, inwiefern der ausgeschaltete Quarz das6 MHz Clock-Signal beeinflusst.

Ein mögliches Szenario für das Initialisieren des DSP-Boards sieht wie folgt aus:

• Der DSP startet mit seinem internen (ungenauen) Fast-RC-Oszillator• Der SDR ist 75 ms (typisch) nach Anschluss der Speisespannung bereit. Der DSP prüft demnach

nach ca. 100 ms mittels des „Ready“-Signals, ob der SDR verbunden ist.• Falls der SDR angeschlossen ist:

– Der DSP aktiviert das Clock-Interface des SDR via I2C– Der Clock des SDR wird am Codec „durchgeschlauft“– Der DSP schaltet auf den (genauen) Clock des SDR um

• Falls der SDR nicht angeschlossen ist:– Der DSP aktiviert den Oszillator am Codec– Der DSP schaltet auf den (genauen) Clock des Codecs um

Abbildung 26: Anbindung Clock

Page 37: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

6.4 Audio-Interface (I2S) 32

6.4 Audio-Interface (I2S)

Der SDR wird für den Austausch der Audiodaten mit einem I2S-Interface an das DSP-Board angebun-den. Da der Codec des DSP-Boards leider auch in den nicht benutzten Slots treibt, muss zwischen demCodec und dem SDR umgeschalten, bzw. ein Dasy-Chain-Verfahren angewendet werden.

6.4.1 Anbindung

Die Hardware wird wie in Abbildung 27 ersichtlich angebunden. In allen nachfolgenden Betriebsfällenfungiert der Codec als Master.

1. Falls kein SDR angeschlossen ist, kommuniziert der DSP gewöhnlich mit dem Codec2. Falls der SDR angeschlossen ist, wird der Data-In-Pin am DSP umgeschaltet. So sind die beiden

Datenflüsse SDR->DSP und DSP->Codec gewährleistet3. Der SDR schlauft die Daten des Codecs in einem weiteren Slot der I2S-Schnittstelle nach einem

Dasy-Chain-Verfahren durch. So ist zusätzlich die Kommunikation Codec->DSP gleichzeitig mög-lich. (simuliert, jedoch nicht verifiziert)

Abbildung 27: Anbindung I2S

6.4.2 Signalverlauf

Der SDR fungiert als I2S-Slave. Die Übertragung der 16-Bit Inphase- (WCLK=0) und Quadrature-Daten(WCLK=1) erfolgt in Slot 0, MSB-First, linksbündig. Der Word-Clk beträgt 48 kHz und muss aus demClock des Clock-Interfaces (vgl. Kapitel 6.3) abgeleitet sein. Die durchgeschleiften Daten des Codecswerden in Slot 0 empfangen und unverändert in Slot 1 gesendet. Der Signalverlauf ist in Abbildung 28visualisiert.

Page 38: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

6.5 Control-Interface (I2C) 33

Abbildung 28: Signalverlauf des I2S-Interfaces

Parameter Min Typ MaxBit-Clock fBCLK 3.072 MHz 6 MHz 12.288 MHzFrame-Clock fWCLK 48 kHzAlign LeftBit-Order MSB-First

Tabelle 3: Parameter I2S-Interfaces

6.5 Control-Interface (I2C)

Der SDR wird zur Konfiguration mit einem gewöhnlichen I2C-Interface an das DSP-Board angebunden.Der SDR ist ein I2C-Slave und besitzt die beiden Adressen 0x10 (Schreibzugriff) und 0x11 (Lesezugriff).Das DSP-Board kommuniziert entweder über die I2C-Funktionen mit direktem Registerzugriff (sieheRegistermap in Anhang C) oder benutzt bevorzugt die SDR-C-Library (siehe Kapitel 8).

6.5.1 Anbindung

Die Hardwareanbindung erfolgt analog der Abbildung 29.

Abbildung 29: Anbindung I2C

Page 39: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

6.5 Control-Interface (I2C) 34

6.5.2 Signalverlauf

Der SDR fungiert als I2C-Slave im Fast-Mode (400 kHz). Ein typischer Signalverlauf ist in Abbildung30 ersichtlich. Jede Transaktion beginnt mit der Adressierungssequenz (a), gefolgt von einer Lese- (b)oder Schreibsequenz (c). Dies läuft wie folgt ab:

1. Der I2C-Master sendet die Start-Condition2. Der Master sendet die Adresse (A7...A0) und das Read/Write-Bit des SDRs (0x10 für Schreibzu-

griff, für 0x11 Lesezugriff)3. Die Adresse wird vom SDR mit ACK bestätigt4. Der Master sendet zwei Bytes für das interne 16 Bit-Pointer-Register (R15...R0), beide Bytes wer-

den vom SDR mit ACK bestätigt5. Datenbits (D7...D0) werden vom SDR ab dem/in das aktuelle Register, in welches der Pointer zeigt,

geschrieben/gelesen. Der Empfänger bestätigt mit ACK.6. Nach jedem Datenbyte wird das Pointer-Register des SDR automatisch inkrementiert. Es können

weitere Bytes wie in Punkt 5 übertragen werden.7. Nach Übertragung des letzten Bytes antwortet der I2C-Master mit NACK (nur Lesezugriff)8. Der I2C-Master beendet die Übertragung mit einer Stop-Condition

Abbildung 30: Signalverlauf des I2C-Interfaces

Page 40: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

6.6 Anwendungsbeispiel 35

6.6 Anwendungsbeispiel

Anhand eines Anwendungsbeispiels wird das Zusammenspiel von SDR und DSP-Board aufgezeigt. Ab-bildung 31 zeigt den Aufbau dieses Beispiels. In Anhang A ist die gesamte Pinbelegung des SDR er-sichtlich.

Abbildung 31: Aufbau des Anwendungsbeispiels

Gemäss der Anleitung zum C-Framework des DSP-Boards [11] wurde eine Demo-Software für dendsPIC mit MPLAB X erstellt. Folgende Funktionalitäten sind in der Demo-Software implementiert:

• Modus 0 (LED Rot):AM-Demodulation ohne Trägersynchronisation, Grenzfrequenz des FIR-Filters: 15 kHz

• Modus 1 (LED Grün):AM-Demodulation ohne Trägersynchronisation, Grenzfrequenz des FIR-Filters: 5 kHz

• Modus 2 (LED Blau):Talk-Through (I-Daten auf linkem Audiokanal, Q-Daten rechts) , FIR-Grenzfrequenz: 15 kHz

• Modus 3 (LED Weiss):Registertest, indem alle DDC-Register mit den verschiedenen Funktionen beschrieben und zurück-gelesen werden. Dies prüft die Funktion der FPGA-Logik, der Schnittstelle und der Library. Dieprintf()-Ausgabe erfolgt über die UART-Schnittstelle des DSP-Boards. Nach diesem Modus wirddas Board zum Herstellen der Defaultwerte am besten neu gestartet.

Die beschriebenen Modi werden mit den Buttons SW1 und SW2 auf dem DSP-Board umgeschaltet.Die Ausgaben des Registertests erfolgen über die UART-Schnittstelle des DSP-Boards. Diese ist aufdem Control-Header P3 verfügbar (GND: Pin 1, TX: Pin 7, RX: Pin 8). Weiter können über die zweiteUART, die Entwicklerschnittstelle des SDR, die Registerwerte geändert werden (siehe Kapitel 7). BeideUART-Schnittstellen weisen dieselben Eckdaten nach Tabelle 4 auf.

Page 41: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

36

7 Anbindung über Entwicklerschnittstelle

7.1 Übersicht

Für die Entwicklerschnittstelle wurde ein NIOS-Softcore im FPGA implementiert. Dieser erlaubt durchdas geflashte Testprogramm den Zugriff auf alle Register und ermöglicht das Speichern kleiner Sequen-zen (8192 Samples) realer ADC-Daten. Diese Daten können anschliessend Ausgelesen und für Simu-lationen verwendet werden. Diese Schnittstelle war für die Entwicklung des SDRs essentiell, da dasDSP-Board zum damaligen Zeitpunkt noch nicht einsatzbereit war.

7.2 UART-Interface

Der NIOS-Softcore verfügt über ein UART-Interface, welches mit dem Computer verbunden werdenkann. Auf diesem kann ein Konsolenprogramm (z.B. Freeware „Hammer Terminal“) oder eine eigeneApplikation zur Kommunikation verwendet werden.

7.2.1 Anbindung

Gemäss Abbildung 37 in Anhang A befindet sich die UART-Schnittstelle auf dem Analog-Frontend amAnschluss JP2. Diese wird mit den Kenndaten aus Tabelle 4 betrieben.

Baud-Rate 115200Data-Bits 8Stop-Bits 1Parity NoneFlow-Control NoneByte-Order Big EndianSignalpegel 3.3 V

Tabelle 4: UART-Kenndaten

7.2.2 Protokoll

Im Anhang E (Tabelle 6) sind die implementierten Befehle aufgelistet. Um die zusätzlichen Befehle fürden Zugriff auf die DDC-Register in Anhang E (Tabelle 7) beutzen zu können, muss der Debug-Modusaktiviert werden. In diesem wird der Debugswitch in der FPGA-Logik umgeschalten (Debug-Mode OFF:I2C-Controller hat Zugriff auf DDC-Register, Debug-Mode ON: NIOS hat Zugriff auf DDC-Register).Die Argumente werden mit Leerzeichen getrennt angefügt und das Kommando mit „Line Feed“ (\n)abgeschlossen. Zum Beispiel kann der Debug-Modus mit „debug 1\n“ aktiviert werden.

Die Bedeutung der DDC-Register in den Debugkommandos kann der Registermap im Anhang C ent-nommen werden. Dabei können die Register gelesen werden, indem nur das Kommando abgesetzt wird.Sobald zusätzlich auch das optionale Argument angegeben wird (Angabe nur in Dezimal-Schreibweise),findet ein Schreibzugriff auf das entsprechende Register statt. In beiden Fällen erfolgt eine Rückmel-dung des aktuellen/neuen Registerwertes. Standardmässig erfolgt die Antwort in ASCII. Wird jedochder MATLAB-Modus aktiviert, erfolgt die Antwort auf die Debugkommandos (Tabelle 7) mit vier Bytes(32 Bit), Big-Endian und ohne Zeilenumbruch. So kann die Schnittstelle auch einfach mit einer GUI-Software auf dem Computer (mit einem vernünftigen Durchsatz) betrieben werden.

Page 42: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

7.3 MATLAB-GUI 37

7.3 MATLAB-GUI

Mit MATLAB wurde eine grafische Oberfläche erstellt, um die Entwicklungsschnittstelle zu benutzen(Debug- und MATLAB-Modus aktiviert). Mit dieser Oberfläche lässt sich der SDR einfach mit verschie-denen Parameter testen, ohne dass dabei Software auf dem DSP-Board vorhanden sein muss. Abbildung32 zeigt die Benutzeroberfläche. Mit ihr lassen sich die LED- und Schalter-Register auslesen, die Emp-fangsfrequenz einstellen, sowie die Parameter des Automatic-Gain-Control steuern. Im Plot in der Mittewird die Verstärkung des Analog-Frontends visualisiert. Das MATLAB-GUI wurde nur zu Testzweckenverwendet und ist dadurch nicht komplett verifiziert und besitzt auch keine Anleitung.

Abbildung 32: Screenshot des MATLAB-GUI

Page 43: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

38

8 C-Library

Wie bereits beschrieben wurde, kann vom DSP-Board über die I2C-Schnittstelle (siehe Kapitel 6) odervom NIOS über die Entwicklerschnittstelle (siehe Kapitel 7) auf die DDC-Register zugegriffen werden.In beiden Fällen werden Registerzugriffe getätigt, indem Adressen und Rohdaten gesendet werden müs-sen. Um dem Benutzer die Nutzung des SDRs zu vereinfachen, wurde eine C-Library erstellt. Dieseermöglicht beispielsweise die direkte Definition der Empfangsfrequenz in Hz (ohne das FCW vorhervon Hand zu berechnen). Die Library ist auf beiden Systemen (DSP und NIOS) lauffähig, wobei beimNIOS auf die knappen Speicherresourcen geachtet werden muss (Funktionsverfügbarkeit über #define-Switches beachten).

Die Library besteht gemäss Abbildung 33 aus mehreren Komponenten, die in den folgenden Unterkapi-teln erläutert werden. „sdr_lib“ bildet hierbei die oberste Ebene, welche in das User-Programm einge-bunden werden muss. Die API-Referenz ist in Anhang D aufzufinden.

Abbildung 33: Module der C-Library

8.1 sdr_regs

In der Headerdatei „sdr_regs.h“ sind die DDC-Registeradressen definiert. Weiter muss hier mit demDefine-Switch „IS_NIOS“ / „IS_DSPBOARD“ festgelegt werden, auf welchem System die Library ein-gesetzt wird.

8.2 sdr_if

Je nach Zielsystem wird hier automatisch entweder „sdr_if_dspboard“ oder „sdr_if_nios“ eingebun-den. Das Modul stellt eine sdr_read() und sdr_write()-Funktion zur Verfügung, um Register des DDC-Registers adressbasiert zu beschreiben. Die Ansteuerung der Register erfolgt auf dem DSP-Board überI2C-Funktionen, im NIOS mit dem Altera-Makro IORD_8DIRECT() / IOWR_8DIRECT().

8.3 sdr_lib

Dieses Modul ist das Herzstück des Programms. Für den Zugriff auf Register gemäss API in AnhangD werden Umrechnungen durchgeführt und die Register mit den sdr_read()/sdr_write()-Funktionen be-schrieben. Die Library stellt einerseits Funktionen für das setzen von Rohdaten, wie auch Funktionen fürdas setzen von Parametern (wie z.B. Empfangsfrequenz in Hz) zur Verfügung. Mit den Define-Switches„SDR_USE_RAW_FUNCTIONS“ und „SDR_USE_ADVANCED_FUNCTIONS“ im Headerfile kanndie Verfügbarkeit der Funktionen gesteuert werden (um Speicher zu sparen). Weiter ist noch der Define-Switch „SDR_USE_AGC_DEFAULT_FUNCTIONS“ verfügbar, welcher den Zugang zu vorgefertigtenDefaultwerten für den AGC ermöglicht.

Page 44: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

39

9 Verifikation

In der Verifikation geht es darum, die verschiedenen Komponenten im FPGA und die Software zu testen.Da bei der Realisierung mehrere Entwurfsmethoden eingesetzt wurden, gestaltet sich entsprechend auchdas Testkonzept breit:

• Die Komponenten des DDC wurden mit MATLAB Simulink umgesetzt. Die Verifikation erfolgtdirekt durch MATLAB-Simulationen. Die einzelnen Komponenten wurden in eigene Dateien (Test-modelle) ausgelagert.

• Die in VHDL realisierten Blöcke werden in Questa-Sim mit Stimuli-Files simuliert. Die Signalewurden optisch überprüft.

• Die Software (NIOS und DSP-Board) wurde anhand von Use-Cases überprüft.• Das Gesamtsystem wurde mit amplitudenmodulierten Signalen getestet.

Alle Tests konnten mit zufriedenstellenden Resultaten abgeschlossen werden.

9.1 AGC

Die Verifikation des AGCs wurde in Simulink versucht, brachte jedoch nicht den erhofften Einblick. Dielangsamen Änderungen der Gain-Signale setzt eine enorm lange Simulationszeit voraus. Aus diesemGrund wurden die AGC-Parameter entsprechend herunterskaliert. So konnte das Verhalten bei geringererTaktrate verifiziert und die Erkenntnisse auf das reale System mit schnellem Clock adaptiert werden. Eswurde sogar ein Modell erstellt, um den Feedback-Loop vom Gain Korrektursignal zurück zum ADC-Eingang zu simulieren. Weitere Tests wurden dann anhand von Use-Cases durchgeführt.

Essentiell für die korrekte Funktion des AGC ist die richtige Bestimmung der Parameter. Eine sehr effizi-ente Möglichkeit diese für ein vorhandenes Eingangssignal zu bestimmen ist das entwickelte MATLAB-GUI (vgl. Kapitel 7.3). Man belässt alle Parameter auf ihren Defaultwerten und schraubt nur am Block-HighLevel und BlockLowLevel. Durch kurzzeitiges maximieren des Gains (mit den 100% Taster mög-lich) wird eine fallende Gainkurve simuliert. Der resultierende Ruhe-Gain entspricht dann dem oberenRuhegain. Analog wird durch kurzzeitiges minimieren des Gains (mit den 0% Taster möglich) eine stei-gende Gainkurve simuliert. Der resultierende Ruhe-Gain entspricht dann dem unteren Ruhegain. Optimaltreffen sich diese beiden Grenzen an einem Punkt, indem der ADC nicht übersteuert (über die LED1 vomAnalog-Frontend signalisiert). Es ist jedoch darauf zu achten, dass sich die beiden Grenzen nicht zu na-he bei einander sind oder gar überschneiden. In diesem Fall wird der AGC instabil und ist ständig amKorrigieren (über die LED2 vom Analog-Frontend signalisiert).

Für fortgeschrittene User ist selbstverständlich die Anpassung aller AGC-Parameter erlaubt.

9.2 NCO und Mixer

Die Funktion von NCO und Mixer wurde direkt in Simulink überprüft. Einerseits wurden die erzeug-ten Sinus- und Kosinus-Schwingungen (Zeitbereich), sowie die dazugehörigen Ausgangsspektren (Fre-quenzbereich), optisch bei verschiedenen Frequenzen überprüft. Die Testresultate der Spektren sind inder Abbildung 9.2 gezeigt. Andererseits wurden selbst erstellte AM-Signale durch den Mixer frequenz-verschoben und anhand des Spektrums überprüft.

Aus den gezeigten NCO-Spektren wird ersichtlich, dass dieser durchschnittlich einen SNDR von ca.80 dB aufweist (mit wenigen Ausnahmen bei den Spurs).

Page 45: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

9.3 CIC 40

Abbildung 34: Simulationsergebnisse des NCO bei verschiedenen Frequenzen

9.3 CIC

Zum Test des CIC-Filters wurden mehrere Konzepte entworfen:

• Test mittels Impulsantwort: Wird am Eingang ein Impuls angelegt, verschwindet dieser leider auf-grund der wertdiskreten Implementation (Runden/Truncate der Register). Es zeigt sich, dass sichdas System durch die digitale Implementation nicht mehr linear und nicht zeitinvariant verhält undso diese Methode nicht angewendet werden kann.

• Systemapproximation: Es wird ein adaptives FIR-Filter in der Simulation eingebaut, das sich nachder Approximation wie das CIC-Filter verhält. Die adaptieren Koeffizienten des FIR-Filter gebendann Aufschluss über das Verhalten des CIC-Filters. Die theoretische Impulsantwort des CIC-Filters weist rund die Länge 12’288 auf. D.h. es gibt ebenfalls diese Anzahl an Freiheitsgraden bei

Page 46: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

9.4 FIR 41

der Approximation eines adaptiven FIR-Filters. Selbst MATLAB ist bei diesem enormen Rechen-aufwand überfordert.

• Es werden Signale bei verschiedenen, ausgewählten Frequenzen erzeugt. Diese werden an das CIC-Filter angelegt und am Ausgang analysiert. Aufgrund des Simulationsaufwandes mussten wir unsschlussendlich mit dieser Methode zufrieden geben.

Abbildung 35 zeigt die Übertragungsfunktion bei einigen ausgewählten Frequenzen. Dabei stimmt diesimulierte Passband-Dämpfung AP bei fP = 10 kHz von 3.55 dB gut mit den berechneten (3.78 dB)überein. Auch die Aliasing-Dämpfung AI = 73.51 dB passt zu den berechneten 73.35 dB. Das CIC-Filter kann somit als funktionstüchtig erachtet werden.

Abbildung 35: Simulationsergebnisse des CIC-Filters

9.4 FIR

Das FIR-Filter wurde ebenfalls anhand von MATLAB-Simulationen verifiziert. Dabei wurden im se-paraten Testscript diverse grafische Ausgaben der Timing-Signale und Zwischenwerte getätigt, welcheanschliessend visuell überprüft wurden. Als Gesamttest wurde die Schrittantwort des FIR-Filters mit dertheoretisch berechneten verglichen. Dieser Vergleich ist in Abbildung 36 abgebildet. Es zeigt sich, dassdie beiden Impulsantworten praktisch identisch sind, die maximale Abweichung in dieser Simulationbeträgt 58 LSB (0.177 %), was auf die begrenzte Auflösung der Koeffizienten (16 Bit) zurückzuführenist. Ebenfalls wurde erfolgreich geprüft, ob die Koeffizienten im Betrieb neu gesetzt werden können. DieVerifikation des FIR-Filters ist somit erfolgreich.

Page 47: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

9.5 Gesamtsystem mit DSP Anbindung 42

Abbildung 36: Simulationsergebnisse des FIR-Filters

9.5 Gesamtsystem mit DSP Anbindung

Folgende Tests wurden erfolgreich abgeschlossen:

• Aufstarten und Überprüfen des Initialisierungsvorgangs.• Ausmessen der Taktfrequenzen.• Analyse des Timings auf dem I2C- und I2S-Bus mit dem Logic-Analyzer.• Beschreiben und Auslesen der DDC-Register über alle Methoden der C-Library. So wurde die

Library (inkl. Umrechnungsfunktionen) vollständig getestet und die Funktion der I2C-Schnittstelleund DDC-Register (VHDL) gezeigt.

• Setzen von FIR-Filterkoeffizienten und Analyse mit Network-Analyzer. Die Funktion des Signal-verarbeitungspfads (insbesondere des FIR-Filters) ist verifiziert.

• Systemtest mit einem AM-Signal aus dem Signalgenerator. Funktion des AGCs durch verändernder Signalamplitude überprüft. Funktion des NCOs durch verändern der Trägerfrequenz überprüft.Zusätzlich wurden die Registerwerte beobachtet.

• Test des Gesamtsystems mit Aufbau einer „primitiven“ Dipol-Antenne an einem Funktionsgenera-tor als Sender und einer zweiten Dipolantenne als Empfänger. (Achtung: Eingangspegel am Mo-dulationseingang des Funktionsgenerators beachten! Beim Agilent 33220A: ±5 Vpeak)

9.6 Gesamtsystem mit Entwicklerschnittstelle

Folgende Tests wurden erfolgreich abgeschlossen:

• Kommunikation über die UART-Schnittstelle: Absetzen von Kommandos mit und ohne Argumen-te, Umschalten der Modes.

• Beschreiben und Auslesen aller DDC-Register im RAW-Mode (d.h. Librarytest ohne Umrech-nungsfunktionen).

• Auslesen von ADC-Samples (Test des Sample-FIFOs)• Test des MATLAB-GUIs, bedienen aller Steuerelemente.

Page 48: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

43

10 Schlusswort

Als Resultat liegt eine umfängliche und funktionierende FPGA-Logik vor. Sie beinhaltet den in MAT-LAB Simulink umgesetzten Signalverarbeitungspfad, der das digitalisierte Empfangssignal ins Basis-band mischt und filtert. Zahlreiche Schnittstellen erlauben die Kommunikation mit einem DSP-Board/ Codec oder zu Debug- und Entwicklungszwecken mit einem Computer. Eine Library die sowohl aufdem DSP-Board, wie auch auf dem SDR-internen Softcore lauffähig ist, ermöglicht eine einfache Konfi-guration des SDRs. Alle Muss-Ziele des Pflichtenhefts konnten somit erreicht werden, wobei die bereitsbekannten Probleme am Analog-Frontend der vorhergehenden Projektarbeit 5 weiterhin bestehen.

Eine grosse Herausvorderung in dieser Projektarbeit war das Beherrschen aller verwendeten Tools. Imspeziellen der Altera DSP-Builder, welcher aus dem Simulink-Modell VHDL-Code erzeugt. Neben spe-ziellen Eigenheiten des Tools ist auch die Denkweise ganz anders. Dies merkt man selber, wenn mandas erste Mal eine Funktion grafisch „zusammenklickt“, anstelle diese mit VHDL-Code zu beschreiben.Weiter galt es die Registergrössen im Modell sorgfältig zu wählen und sich der Skalierung der Signalenim klaren zu sein. Stolpersteine gab es einige während der Realisationsphase. So bemerkten wir zumBeispiel lange ein Fehler im NCO nicht, wo aufgrund eines Versatzes in der Umschaltlogik um einenTaktzyklus das Ausgangsspektrum markant schlechter wurde. Auch über Skalierungsfehler sind wirmehrmals gestolpert, so etwa dass beim Mischen und anschliessenden Dezimieren die Signalleistunghalbiert wird oder bei der Multiplikation von zwei vorzeichenbehafteten Variablen sich die Bitbreiteneben nicht addieren, sondern das MSB unbenutzt bleibt. Weiter waren wir mit diversen Fehler bei derAnbindung an das DSP-Board konfrontiert. Zum einen ist auf dem Markt kein 12-Poliger Flachbandste-cker für die Boardverbindung käuflich. Andererseits mussten viele Softwareprobleme des DSP-Boardsbehoben werden, um eine Anbindung zu ermöglichen.

In einem weiteren Projekt wäre es sinnvoll, die bereits erwähnten Probleme aus Projekt 5 anzugehen.Weiter wäre es auch schön, wenn Software auf dem DSP-Board für die Demodulation entwickelt würde,so z.B. die AM-Demodulation mit Trägersynchronisation, die FM-Demodulation, usw. Als Verbesse-rungsvorschlag für das vorliegende Produkt wird die Änderung der 12-Pol Flachbandverbindung auf10-Pol empfohlen. Weiter wäre es auch von Vorteil, wenn der Speicher des NIOS-Softcores auf das ex-terne SDRAM und ECPS-Flash ausgelagert würde. So steht das „teure“ On-Chip-Memory des FPGAsanderen Funktionen zur Verfügung.

Es soll nicht unerwähnt bleiben, dass die Projektarbeit sehr herausfordernd war, dafür umso lehrreicher.Besonders in den Bereichen der digitalen Signalverarbeitung aber auch der Digitaltechnik konnten wirunser Wissen vertiefen. Wir sind vielen Problemen begegnet, welche wir mit ausgeklügelten Lösungs-ansätzen beheben mussten (z.B. CIC-Filter und Umsetzung des NCO mit 1/8−Π-Lookup-Table). Dieshat die Denkweise als künftiger Ingenieur beträchtlich beeinflusst.

Gerne möchten wir unseren beiden betreuenden Dozenten, Herr Dr. Markus Hufschmid und MichaelPichler herzlich danken. Ihre kompetente Unterstützung und die angenehme Atmosphäre im Institut fürMikroelektronik haben wesentlich zum Erfolg dieses Projektes beigetragen. Wir wünschen der Gruppe,die unsere Arbeit im Rahmen einer weiteren Projektarbeit 5 weiterführen wird viel Ausdauer, Erfolg undSpass an diesem interessanten Themenbereich.

Page 49: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

LITERATUR 44

Literatur

[1] J. Walter and P. Studer, “Technische Dokumentation (Projekt 5),” Institut für Mikroelektronik,FHNW, Tech. Rep., Februar 2016.

[2] Altera Corporation, MNL-AVABUSREF: Avalon Interface Specifications, Dezember 2015. [Online].Available: https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/manual/mnl_avalon_spec.pdf

[3] ——, AN-736: Nios II Processor Booting From Altera Serial Flash (EPCQ), Januar 2016.[Online]. Available: www.altera.com/en_US/pdfs/literature/an/an736.pdf

[4] H. T. Nicholas and H. Samueli, “An Analysis of the Output Spectrum of Direct Digital FrequencySynthesizers in the Presence of Phase-Accumulator Truncation,” University of California, Tech.Rep., 1987. [Online]. Available: http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=1538008

[5] G. P. Ao, “The Basic Principle and FPGA Implementation of NCO,” Shandong AerospaceElectro-technology Institute, Tech. Rep., 2012. [Online]. Available: http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=6428860

[6] M. P. Donadio, “CIC Filter Introduction,” Iowegian, Tech. Rep., Juli 2000. [Online]. Available:http://home.mit.bme.hu/~kollar/papers/cic.pdf

[7] E. B. Hogenauer, “An Economical Class of Digital Filters for Decimation and Interpolation,”IEEE, Tech. Rep., April 1981. [Online]. Available: http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1163535

[8] Altera Corporation, NIOS II Classic Software Developer’s Handbook, Mai 2015. [Onli-ne]. Available: https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/hb/nios2/n2sw_nii5v2.pdf

[9] ——, NIOS II Hardware Development Tutorial, Mai 2011. [Online]. Available: https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/tt/tt_nios2_hardware_tutorial.pdf

[10] S. Gerber and B. Kneubühler, “Technische Dokumentation (Projekt 5),” Institut für Mikroelektro-nik, FHNW, Tech. Rep., August 2016.

[11] ——, Anleitung C Framework, Institut für Mikroelektronik, FHNW, August 2016.[12] M. Hufschmid, “Aufgabenstellung Software Defined Radio mit FPGA,” Februar 2016.[13] Terasic Technologies Inc., DE0-Nano Schematic, Oktober 2011. [Online]. Available: http:

//wiki.ntb.ch/infoportal/_media/fpga/boards/de0_nano/de0_nano_user_manual_v1.7.pdf[14] J. Walter and P. Studer, “Pflichtenheft Software Defined Radio mit FPGA,” Februar 2016.[15] Altera Corporation, Cyclone IV Device Handbook, April 2014. [Online]. Availa-

ble: https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/hb/cyclone-iv/cyclone4-handbook.pdf

[16] Terasic Technologies Inc., DE0-Nano User Manual, Terasic Technologies Inc., 2012. [Online].Available: http://wiki.ntb.ch/infoportal/_media/fpga/boards/de0_nano/de0_nano_user_manual_v1.7.pdf

[17] M. Hufschmid, “Mischer,” Institut für Mikroelektronik, FHNW, Tech. Rep., Datum unbekannt.[Online]. Available: http://informationsuebertragung.ch/Extras/Mischer.pdf

Page 50: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

45

A Pinout

Abbildung 37: Pinout des SDR

Page 51: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

B Digital-Down-Converter (Simulink)

DE0-nano

ClkEn

ClkEn_48k

D1

Correction_Up

Correction_Down

CorrectionAverage

AGC_CorrectionAverage

D1

VGA_Gain

VGA_PWM

VGA_HILO

VGA_Controller

D1

D1AGC_Blocksize

AGC_InputHighLevel

AGC_InputLowLevel

AGC_BlockHighLevel

AGC_BlockLowLevel

AGC_Stepsize

AGC_Enable

AGC_GainPresetEnable

AGC_GainPresetData

AGC_In

AGC_Gain

AGC_Up

AGC_Down

AGC

D1

D1

D1

MIXER_Signal

MIXER_Cos

MIXER_Sin

MIXER_I

MIXER_Q

MIXER

D1

D1

NCO_FCW

NCO_COS

NCO_SIN

NCO

D1

D1

i11:0

ADC_Data

D1

i31:0

NCO_FCW

D1

o7:0VGA_PWM

obitVGA_HILO

o7:0AGC_Gain

ibit

AGC_Enable

D1

i23:0

AGC_BlockLowLevel

D1

i23:0

AGC_BlockHighLevel

D1

i[4]:[20]

AGC_Stepsize

D1

i11:0

AGC_InputLowLevel

D1

i11:0

AGC_InputHighLevel

D1

i23:0

AGC_Blocksize

D1

o15:0OUT_I

o15:0OUT_Q

o[0]:[8]AGC_Correction

obitOUT_ClkEn_48k

ibit

FIR_Enable

D1

ibit

AGC_GainPresetEnable

D1

i7:0

AGC_GainPresetData

D1

CIC_in

CIC_ClkEnCIC_out

CIC_Filter_Q

D1

CIC_in

CIC_ClkEnCIC_out

CIC_Filter_I

D1(16:0) (15:0)

Scaling_I

D1

(16:0) (15:0)

Scaling_Q

D1

FIR_I_In

FIR_Q_In

FIR_ClkEn

FIR_Enable

FIR_I_Out

FIR_Q_Out

FIR

D1

D1

Page 52: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

B.1 Numerically-Controlled-Oscillator (NCO) 47

B.1 Numerically-Controlled-Oscillator (NCO)

Lookup-Table Control Logic

Lookup-Tables

Phase Accumulator

XOR

LUT_Mux_Ctrl

D1

+

+r+

Accu_Adder

D1z-1

Accu_Register

D1

1NCO_FCW

D1

2NCO_SIN

d(9:0) q(9:0)Invert

LUT_Address_Inverter

D1

1NCO_COS

sel(0:0)

0-

1-

MUX

LUT1_Direction_MUX

D1

sel(0:0)

0-

1-

MUX

LUT_Mux1

D1

(32:0) (31:0)

Accu_Truncation D1

(31:0) (28:19)

LUT_Truncation

D1(9:0) q(8:0)

LUT1

D1

(9:0) q(8:0)

LUT2

D1

sel(0:0)

0-

1-

MUX

LUT_Mux2

D1

31

Accu_1MSB

D1

30

Accu_2MSB

D1

29

Accu_3MSB

D1

XOR

Cos_Inv_Mux_Ctrl

D1

d r-1

Sin_Inv

D1

d r-1

Cos_Inv

D1

sel(0:0)

0-

1-

MUX

Sin_Inv_Mux

D1

sel(0:0)

0-

1-

MUX

Cos_Inv_Mux

D1

z-2

LUT_Delay1

D1

z-1

Cos_Inv_Delay1

D1

z-1

Sin_Inv_Delay1

D1

z-2

LUT_Delay2

D1

z-2

LUT_Delay3

D1AND

Sin_Inv_Mux_Ctrl

D1

z-1

Cos_Inv_Delay2

D1

z-1

Sin_Inv_Delay2

D1

sel(0:0)

0-

1-

MUX

LUT2_Direction_MUX

D1

Page 53: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

B.2 Mixer 48

B.2 Mixer

a(11:0)

b(9:0)

r (20:5)X

Cos_Multiplier

D1

a(11:0)

b(9:0)

r (20:5)X

Sin_Multiplier

D1

1MIXER_Signal

D1

2MIXER_Cos

D1

3MIXER_Sin

D1

1MIXER_I

2MIXER_Q

B.3 Clock-Enable (48kHz)

1ClkEn

q(10:0)mod2^11

Counter

D1a trueIF (a=0)

If Statement

D1

Page 54: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

B.4 Cascaded-Integrator-Comb-Filter (CIC)

d

enaq

Differentiator1

D1

d(78:0) q(78:0)z -1

1-z -1

Integrator1

D1d(67:0) q(67:0)

z -1

1-z -1

Integrator2

D1d(57:0) q(57:0)

z -1

1-z -1

Integrator3

D1

d(47:0)q(47:0)z -1

1-z -1

Integrator4

D1d(37:0)q(37:0)

z -1

1-z -1

Integrator5

D1d(28:0)q(28:0)

z -1

1-z -1

Integrator6

D1

(78:0) (78:11)

Truncate_Int1

D1(67:0) (67:10)

Truncate_Int2

D1(57:0) (57:10)

Truncate_Int3

D1

(47:0)(47:10)

Truncate_Int4

D1(37:0)(37:9)

Truncate_Int5

D1

(23:0)(23:1)

Truncate_Diff1

D1(22:0)(22:1)

Truncate_Diff2

D1(21:0)(21:1)

Truncate_Diff3

D1

(20:0) (20:0)

Truncate_Diff4

D1(20:0) (20:1)

Truncate_Diff5

D1

(28:0)(28:5)

Truncate_Int6

D1

1CIC_in

D1

1CIC_out

(19:0) (19:3)

Round_Diff6

D1

(15:0) (15:3)

Round_Int0

D1

2CIC_ClkEn

D1

d

enaq

Differentiator2

D1

d

enaq

Differentiator3

D1

d

enaq

Differentiator6

D1d

enaq

Differentiator5

D1d

enaq

Differentiator4

D1

z-1-z-2 z-1-z-2 z-1-z-2

z-1-z-2z-1-z-2z-1-z-2

Page 55: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

B.5 Finite-Impulse-Response-Filter (FIR) 50

B.5 Finite-Impulse-Response-Filter (FIR)

Read Controller In Memory Read Controller Out

Pipeline-ControlMultiply-Add

Output-Register

Input-Register Write Controller

Delay um z^-1!

1 Interation vor Start

Configure Coefficients, if Module disabled

Start

Stop

Zyklus

Zyklus

I-In

Q-In

Ringbuffer-Offset r

FIR_Enable

Zyklus

Iteration i

Ringbuffer-Offset r

Zyklus

Coefficient InZyklus

Data In IIteration

Data In Q

Ringbuffer-Offset

Multiply Enable

Coefficient

Clear

Data I Data Out I

Data Q Data Out Q

d(15:0)

rd_add(8:0)

wr_add(8:0)

wren

q_aDPRAM

(384 x 16)

Dual-Port RAM

D1

1FIR_I_In

D1

4FIR_Enable

D1

1FIR_I_Out

inputenaaprnaclrn

q

Outreg I

D11

Constant2

D1

ena q(6:0)mod0

Ringbuffer-Counter

D1

sel(1:0)

0-

1-

2-

MUX

Multiplexer

D1

+

+r+

Adder

D1

(12:0) (6:0)

Value-Addr

D1

d

sel(1:0)

0

1

2

DEMUX

Demultiplexer

D1

D1

D1

z-2

Delay4

D1

z-1

Delay2

D1

0

Constant4

D1

sclr q(1:0)mod3

Iteration-Counter

D1

a(1:0)

b(6:0)ab(8:0)

Coeffs

D1

a(1:0)

b(6:0)ab(8:0)

Values I

D1

a(1:0)

b(6:0)ab(8:0)

Values Q

D1

0

MSB Coeffs

D1

1

MSB Values I

D1

2

MSB Values Q

D1

z-1

Delay5

D1

a(1:0)

b(1:0)trueIF a=b

Multiply-Accumulate Trigger

D1

2

Numb Operations1

D1

a(15:0)b(15:0)sloadenaaclr

y(33:0)y += a X b

Multiply Accumulate Q

D1

0

Constant5

D1

z-1

Delay8

D1

a(11:0)b(11:0)c(11:0)d(11:0)

trueIF (a=b)&(c=d)

Stop Trigger

D1127

last Coefficient

D1

2

last Cycle

D1 z-1

Delay6

D1

z-1

Delay7

D1

z-1

Delay9

D1

z-1

Delay10

D1

z-1

Delay12

D1

inputenaaprnaclrn

q

Outreg Q

D11

Constant6

D1

z-1

Delay1

D1

sel(0:0)

0-

1-

MUX

DATA Multiplexer

D1

sel(0:0)

0-

1-

MUX

ADDR Multiplexer

D1

sel(0:0)

0-

1-

MUX

WREN MULTIPLEXER

D1

1

Write Values I in Cycle 0

D1

sel(1:0)

0-

1-

2-

MUX

DATA Scheduler

D1

sel(1:0)

0-

1-

2-

MUX

WREN Scheduler

D1

1

Write Values Q in Cycle 1

D1

2FIR_Q_In

D1

2FIR_Q_Out

0

Dummy

D1

0

Write Nothing in Cycle 2

D1

sel(1:0)

0-

1-

2-

MUX

ADDR Scheduler

D1

0

Dummy1

D1

Addressi6:0

Writeibit

Write Datai15:0RAM

D1

D1

D1

inputenaaprnaclrn

q

Inreg I

D1

inputenaaprnaclrn

q

Inreg Q

D1

1

Constant1

D1

1

Constant3

D1

a(1:0)

b(6:0)ab(8:0)

Values I1

D1

a(1:0)

b(6:0)ab(8:0)

Values Q1

D1

1

MSB Values I1

D1

2

MSB Values Q1

D1

a(15:0)b(15:0)sloadenaaclr

y(33:0)y += a X b

Multiply Accumulate I

D1(33:0) (31:16)

Saturate I

D1

(33:0) (31:16)Saturate Q

D1

3FIR_ClkEn

D1

a(12:0)

b(12:0)

q(12:0)

r(12:0)a = b X q + r

Modulo

D1

128

Numb Coeffs N

D1

ena

sclrq(6:0)mod0

Coefficient-Counter

D1

a(1:0)

b(1:0)trueIF (a=b)

Coefficient Trigger

D1

2

Numb Iterations1

D1

a(11:0)b(11:0)c(11:0)d(11:0)

trueIF (a=b)&(c=d)

Start Trigger

D10

first Coefficient

D1

0

first Cycle

D1

Page 56: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

B.6 Automatic-Gain-Controller (AGC) 51

B.6 Automatic-Gain-Controller (AGC)

10AGC_In

D1

1AGC_Gainena

z-1

Gain_Register

D1a[1]:[0]

b[4]:[20]r [5]:[20]X

Down_Multiplier

D1+

-

+

r+

Gain_Adder

D1

6AGC_Stepsize

D1 [10]:[20] [10]:[20]

Gain_Saturate

D1

7AGC_Enable

D1

2AGC_Up

(8:0) (7:0)

Gain_Conversion

D1

a[1]:[0]

b[4]:[20]r [5]:[20]X

Up_Multiplier

D1

sclrz-1

InputHigh_Register

D1+

+r+

InputHigh_Adder

D1

sclr q(23:0)mod2^24Blocksize_Counter

D1 ab

==

Blocksize_Comp

D1

sclrz-1

InputLow_Register

D1+

+r+

InputLow_Adder

D1

1AGC_Blocksize

D1

ab

>

BlockHighComp

D1

ab

>

BlockLow_Comp

D1

4AGC_BlockHighLevel

D1

5AGC_BlockLowLevel

D1

3AGC_Down

AND

Enable_And

D1

(24:0) (23:0)

InputHigh_Saturate

D1

(24:0) (23:0)

InputLow_Saturate

D1

ab

>

InputHigh_Comp

D1

ab

<

InputLow_Comp

D1

2AGC_InputHighLevel

D1

3AGC_InputLowLevel

D1

|a|

Magnitude

D1

8AGC_GainPresetEnable

D1

9AGC_GainPresetData

D1

sel(0:0)

0-

1-

MUX

GainPresetData_Mux

D1

sel(0:0)

0-

1-

MUX

GainPresetEnable_Mux

D1

1

GainPresetEnable_Const

D1

Page 57: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

B.7 VGA-Controller 52

B.7 VGA-Controller

1VGA_Gain

D1

1VGA_PWM

2VGA_HILO

d r51

Gain

D1

+

-

r+

Adder

D1

a

b>=

Comparator

D1

204

Constant

D1

d r1.1992

Gain1

D1

B.8 AGC-Correction

OR

Or

D1 z-1

Register

D1+

+r+

Adder

D1[1]:[24] [0]:[24]

Saturate

D1

dr 1

Loop_Gain

D1

d r1.1921e-07

Input_Gain

D1 1CorrectionAverage

1Correction_Up

D1

2Correction_Down

D1

Page 58: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

53

C Registermap

C.1 ID

Adresse 7 6 5 4 3 2 1 0ID R-0x100x0000 ID[7:0]

ID: Beinhaltet die System-ID zur Identifikation des Systems. Kann bei neuer Software-/Hardware-Version ändern.

C.2 SWITCH

Adresse 7 6 5 4 3 2 1 0SWITCH R-0000 - R-00x0001 DE0_DIPSW[3:0] - T_IRQ

DE0_DIPSW: Schalterstellung der Dip-Switches auf dem DE0-Nano-Evaluation-Board.

T_IRQ: Wird gesetzt, sobald der Taster auf dem Analog-Frontend betätigt wird. Bit wird bei einemLesezugriff zurückgesetzt.

C.3 LED

Adresse 7 6 5 4 3 2 1 0LEDH R/W-0x000x0003 DE0_LED[7:0]

DE0_LED: LEDs auf dem DE0-Nano-Evaluation-Board.

C.4 CLK_Ctrl

Adresse 7 6 5 4 3 2 1 0CLK_Ctrl - R/W-00x0004 - OutEn

OutEn: 6 MHz-Clock-Output Enable an Pin 2. Dient als Systemclock für das DSP-Board.

C.5 AGC Enable

Adresse 7 6 5 4 3 2 1 0AGC_Enable - R/W-10x0100 - AGC_En

AGC_En: Aktiviert den Automatic-Gain-Control. Falls ausgeschaltet (0), kann die Verstärkung manuellim Gain-Register gesetzt werden.

Page 59: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

C.6 AGC Gain 54

C.6 AGC Gain

Adresse 7 6 5 4 3 2 1 0AGC_Gain R/W-0x000x0101 AGC_Gain

AGC_Gain: Bestimmt die Verstärkung des Analog-Frontends im Bereich von 24dB bis 84db. Die ma-ximale Aussteuerung des ADC wird bei 4 dBm erreicht. Die Einstellung erfolgt hiermit in 0.234 dB-Schritten. Sofern die automatische Verstärkungssteuerung (AGC) ausgeschaltet ist (AGC_Enable=0),kann die Verstärkung manuell gsestzt werden, ansonsten wird der AGC diese Variable wieder über-schreiben.

C.7 AGC Blocksize

Adresse 7 6 5 4 3 2 1 0AGC_Blocksize 0 R/W-0x400x0110 AGC_Blocksize [7:0]AGC_Blocksize 1 R/W-0x420x0111 AGC_Blocksize [15:8]AGC_Blocksize 2 R/W-0x0F0x0112 AGC_Blocksize [23:16]

AGC_Blocksize: Beschreibt die Anzahl Clockzyklen (Beobachtungsdauer), nach welcher der AGCeinen Korrekturbefehl ausgeben kann. Der Defaultwert liegt bei 1 000 000 Zyklen, damit die Levels inden nachfolgenden Registern einfach ins Verhältnis gestellt werden können. Der Wertebereich liegt zwi-schen 0 und 224 − 1.

C.8 AGC Input Level

Adresse 7 6 5 4 3 2 1 0AGC_InputHighLevel0 R/W-0x400x0120 AGC_InputHighLevel [7:0]AGC_InputHighLevel1 - R/W-0x060x0121 - AGC_InputHighLevel [11:8]AGC_InputLowLevel0 R/W-0xF40x0130 AGC_InputLowLevel [7:0]AGC_InputLowLevel1 - R/W-0x010x0131 - AGC_InputLowLevel [11:8]

AGC_InputHighLevel: Wenn der Betrag eines Eingangwerts das InputHighLevel überschreitet wird dasnachfolgende InputHigh_Register inkrementiert. Der Wertebereich liegt zwischen 0 und 211. GrössereWerte sind zwar möglich, machen aber keinen Sinn, da der ADC Daten zwischen −211 und +211 − 1liefert. Der Defaultwert liegt bei 1600.

AGC_InputLowLevel: Wenn der Betrag eines Eingangwerts das InputLowLevel unterschreitet wird dasnachfolgende InputLow_Register inkrementiert. Der Wertebereich liegt zwischen 0 und 211. GrössereWerte sind zwar möglich, machen aber keinen Sinn, da der ADC Daten zwischen −211 und +211 − 1liefert. Der Defaultwert liegt bei 500.

Page 60: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

C.9 AGC Block Level 55

C.9 AGC Block Level

Adresse 7 6 5 4 3 2 1 0AGC_BlockHighLevel0 R/W-0xA00x0140 AGC_BlockHighLevel [7:0]AGC_BlockHighLevel1 R/W-0x860x0141 AGC_BlockHighLevel [15:8]AGC_BlockHighLevel2 R/W-0x010x0142 AGC_BlockHighLevel [23:16]AGC_BlockLowLevel0 R/W-0x200x0150 AGC_BlockLowLevel [7:0]AGC_BlockLowLevel1 R/W-0xA10x0151 AGC_BlockLowLevel [15:8]AGC_BlockLowLevel2 R/W-0x070x0152 AGC_BlockLowLevel [23:16]

AGC_BlockHighLevel: Sobald das InputHigh_Register grösser als das BlockHighLevel ist wird einAGC_Down Befehl gesetzt. Dieser wird jedoch erst beim Ablaufen des Blocksize-Counters ausgeführt.Der Defaultwert liegt bei 100 000 (10% der Blocksize). Der Wertebereich liegt zwischen 0 und 224 − 1.

AGC_BlockLowLevel: Sobald das InputLow_Register grösser als das BlockLowLevel ist wird einAGC_Up Befehl gesetzt. Dieser wird jedoch erst beim Ablaufen des Blocksize-Counters ausgeführt.Der Defaultwert liegt bei 500 000 (50% der Blocksize). Der Wertebereich liegt zwischen 0 und 224 − 1.

C.10 AGC Stepsize

Adresse 7 6 5 4 3 2 1 0AGC_Stepsize0 R/W-0x000x0160 AGC_Stepsize [-13:-20]AGC_Stepsize1 R/W-0x000x0161 AGC_Stepsize [-5:-12]AGC_Stepsize2 R/W-0x100x0162 AGC_Stepsize [3:-4]

AGC_Stepsize: Bestimmt die Schrittgrösse der Gain-Korrektur. Beim Ablauf des Blocksize-Counterswird das Gain_Register korrigiert und alles zurückgesetzt. Stepsize ist eine [4]:[20]-Fixpoint-Variable,wodurch rechnerisch auch kleinere Schritte als 0.234 dB/Step möglich sind. Der Defaultwert ist auf 1gesetzt (0.234 dB-Schritte). Der Wertebereich ist zwischen 2−20 und 16− 2−20.

C.11 AGC Correction

Adresse 7 6 5 4 3 2 1 0AGC_Correction R-0x000x0170 AGC_Correction

AGC_Correction: Dieses Register beinhaltet eine Art Mittelwert der Korrekturbefehle AGC_Up undAGC_Down. Ist das Register auf 0, ist der AGC stabil und korrigiert nicht mehr. Beim Wert 255 ist jedesSample über-/untersteuert. Diese Information ist auch bei deaktiviertem AGC verfügbar.

Page 61: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

C.12 VGA HILO 56

C.12 VGA HILO

Adresse 7 6 5 4 3 2 1 0VGA_HILO - R-00x0200 - VGA_HiLo

VGA_HILO: Dieses Bit wird verwendet, um den VGA auf dem Analog-Frontend in den höheren Ver-stärkungsbereich umzuschalten (zusätzliche 12 dB Gain).

C.13 VGA PWM

Adresse 7 6 5 4 3 2 1 0VGA_PWM R-0x000x0201 VGA_PWM

VGA_PWM: Setzt das PWM-Signal, um den VGA (Attenuator) auf dem Analog-Frontend zu steuern.Der Defaultwert ist 0, was eine 48 dB Dämpfung im Verstärkerpfad bedeutet. Beim Maximalwert von255 findet keine Dämpfung statt (grösste Verstärkung).

C.14 NCO Frequency

Adresse 7 6 5 4 3 2 1 0NCO_FCW0 R/W-0xAA0x0300 NCO_FCW [7:0]NCO_FCW1 R/W-0xAA0x0301 NCO_FCW [15:8]NCO_FCW2 R/W-0x9A0x0302 NCO_FCW [23:16]NCO_FCW3 R/W-0x020x0303 NCO_FCW [23:16]

NCO_FCW: Setzt den Summanden, der bei jedem Clockzyklus dem NCO Phasen-Accumulator hinzuaddiert wird. Für eine Lokaloszillatorfrequenz von 1 MHz (Defaultwert) wird das Register auf 43690666gesetzt. Die Berechnungsformel ist der Dokumentation zu entnehmen.

C.15 FIR Enable

Adresse 7 6 5 4 3 2 1 0FIR_Enable - R/W-10x0400 - FIR_En

FIR_En: Ermöglicht das Deaktivieren des FIR-Filters. Das Ausgangssignal wird auf 0 gesetzt. DieserModus wird verwendet, um neue Filterkoeffizienten zu laden.

Page 62: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

C.16 FIR Coefficients 57

C.16 FIR Coefficients

Adresse 7 6 5 4 3 2 1 0FIR_Coeff0L W-0x370x0600 FIR_Coeff0 [7:0]FIR_Coeff0H W-0x000x0601 FIR_Coeff1 [15:8]

...FIR_Coeff127L W-0x370x06FE FIR_Coeff127 [7:0]FIR_Coeff127H W-0x000x06FF FIR_Coeff127 [15:8]

FIR_Coeff: Per Default sind die Koeffizienten für ein inverses sinc()-Filter mit Grenzfrequenz beifg = 10 kHz gesetzt. Zum Beschreiben der Filterkoeffizienten muss das FIR-Filter deaktiviert werden(FIR_En = 0) und ein Koeffizientenpaar (FIR_CoeffH und FIR_CoeffL) muss zwingend nacheinanderbeschrieben werden (Reihenfolge egal).

Page 63: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

58

D C-Library API

D.1 Defines

in sdr_regs.h:IS_NIOS Define des gewünschten Zielsystems istIS_DSPBOARD einzukommentieren.SDR_REGS_MISC_ID Adressen der DDC-Register.SDR_REGS_MISC_SWITCHSDR_REGS_MISC_LEDSDR_REGS_MISC_CLKCTRLSDR_REGS_AGC_ENABLESDR_REGS_AGC_GAINSDR_REGS_AGC_BLOCKSIZESDR_REGS_AGC_INPUTHIGHLEVELSDR_REGS_AGC_INPUTLOWLEVELSDR_REGS_AGC_BLOCKHIGHLEVELSDR_REGS_AGC_BLOCKLOWLEVELSDR_REGS_AGC_STEPSIZESDR_REGS_AGC_CORRECTIONSDR_REGS_VGA_HILOSDR_REGS_VGA_PWMSDR_REGS_NCO_FCWSDR_REGS_FIR_ENABLESDR_REGS_FIR_COEFFS

in sdr_lib.h:SDR_USE_RAW_FUNCTIONS Define der gewünschten FunktionssichtbarkeitenSDR_USE_ADVANCED_FUNCTIONS sind einzukommentierenSDR_USE_AGC_DEFAULT_FUNCTIONS

in sdr_if_dspboard.h:SDR_ADDR Device-Adresse des SDR am I2C-Bus.

in sdr_if_nios.h:DDC_BASE Base-Adresse der DDC-Register am

NIOS-Avalon-Bus.

Tabelle 5: Defines

Page 64: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

D.2 Funktionen 59

D.2 Funktionen

D.2.1 RAW Funktionen

Die RAW-Funktionen bieten direkten Schreib- und Lesezugriff auf die Register im FPGA. Es wird keineUmrechnung der Werte gemacht. Die Bedeutung der einzelnen RAW-Funktionen ist der Registerbe-schreibung in Anhang C zu entnehmen.

• unsigned char sdr_misc_getID (void);

• unsigned char sdr_misc_getSwitch (void);

• unsigned char sdr_misc_getLeds (void);• void sdr_misc_setLeds (unsigned char value);

• unsigned char sdr_misc_getClkCtrl (void);• void sdr_misc_setClkCtrl (unsigned char value);

• unsigned char sdr_agc_getEnable (void);• void sdr_agc_setEnable (unsigned char value);

• unsigned char sdr_agc_getGain_raw (void);• void sdr_agc_setGain_raw (unsigned char value);

• unsigned long sdr_agc_getBlocksize_raw (void);• void sdr_agc_setBlocksize_raw (unsigned long value);

• unsigned short sdr_agc_getInputHighLevel_raw (void);• void sdr_agc_setInputHighLevel_raw (unsigned short value);

• unsigned short sdr_agc_getInputLowLevel_raw (void);• void sdr_agc_setInputLowLevel_raw (unsigned short value);

• unsigned long sdr_agc_getBlockHighLevel_raw (void);• void sdr_agc_setBlockHighLevel_raw (unsigned long value);

• unsigned long sdr_agc_getBlockLowLevel_raw (void);• void sdr_agc_setBlockLowLevel_raw (unsigned long value);

• unsigned long sdr_agc_getStepsize_raw (void);• void sdr_agc_setStepsize_raw (unsigned long value);

• unsigned char sdr_agc_getCorrection_raw (void);

• unsigned char sdr_vga_getHILO (void);

• unsigned char sdr_vga_getPWM_raw (void);

• unsigned long sdr_nco_getFCW_raw (void);• void sdr_nco_setFCW_raw (unsigned long value);

• unsigned char sdr_fir_getEnable (void);• void sdr_fir_setEnable (unsigned char value);

• void sdr_fir_setCoeffs (unsigned int* data, unsigned int length);Für das FIR-Filter sind bereits einige Filter bei typschen Grenzfrequenzen entworfen worden. Diesesind in der Datei „FIR.h“ definiert.

Page 65: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

D.2 Funktionen 60

D.2.2 Erweiterte Funktionen

• double sdr_agc_getGain_percent (void);• void sdr_agc_setGain_percent (double value);

Der VGA des Analog-Frontend bietet einen variablen Gainbereich von 60 dB. Mit der _percent-Funktion kann der variable Gain prozentual seines Wertebereichs beschrieben werden.

• double sdr_agc_getGain_dB (void);• void sdr_agc_setGain_dB (double value);

Der VGA des Analog-Frontend bietet einen variablen Gainbereich von 60 dB. Mit der_dB-Funktion kann der variable Gain direkt gesetzt werden.

• double sdr_agc_getBlocksize_period_ms (void);• void sdr_agc_setBlocksize_period_ms (double value);

Die Blocksize beschreibt den Beobachtungsbereich für den AGC. Mit der _period_ms-Funktionkann die Blocksize auf eine feste Periodenzeit eingestellt werden.

• unsigned long sdr_agc_getBlocksize_frequency (void);• void sdr_agc_setBlocksize_frequency (unsigned long value);

Die Blocksize beschreibt den Beobachtungsbereich für den AGC. Mit der _frequency-Funktionkann die Blocksize auf eine feste Frequenz (Anzahl Blocksize-Counter Resets pro Sekunde) ein-gestellt werden.

• double sdr_agc_getInputHighLevel_percent (void);• void sdr_agc_setInputHighLevel_percent (double value);

Das InputHighLevel setzt die obere Grenze der erlaubten A/D-Wandler Daten. Mit der _percent-Funktion kann die Schwelle relativ zum ADC-Wertebereich gesetzt werden.

• double sdr_agc_getInputLowLevel_percent (void);• void sdr_agc_setInputLowLevel_percent (double value);

Das InputLowLevel setzt die untere Grenze der verlangten A/D-Wandler Daten. Mit der _percent-Funktion kann die Schwelle relativ zum ADC-Wertebereich gesetzt werden.

• double sdr_agc_getBlockHighLevel_percent (void);• void sdr_agc_setBlockHighLevel_percent (double value);

Das BlockHighLevel setzt die obere Grenze der maximalen Anzahl an Überschreitungen des In-putHighLevels während einer Blocksize-Periode. Mit der _percent-Funktion kann die Schwellerelativ zur eingestellten Blocksize gesetzt werden.

• double sdr_agc_getBlockLowLevel_percent (void);• void sdr_agc_setBlockLowLevel_percent (double value);

Das BlockLowLevel setzt die obere Grenze der maximalen Anzahl an Unterschreitungen des Input-LowLevels während einer Blocksize-Periode. Mit der _percent-Funktion kann die Schwelle relativzur eingestellten Blocksize gesetzt werden.

• double sdr_agc_getStepsize_slope (void);• void sdr_agc_setStepsize_slope (double value);

Die Stepsize definiert die Korrekturgeschwindigkeit des AGC. Mit der _slope-Funktion kann dieGeschwindigkeit in der Einheit dB/s eingegeben werden.

• double sdr_agc_getStepsize_scaled (void);• void sdr_agc_setStepsize_scaled (double value);

Die Stepsize definiert die Korrekturgeschwindigkeit des AGC. Mit der _scaled-Funktion kann dieGeschwindigkeit in Steps pro Blocksize-Periode eingegeben werden. Dies ist für Debugzweckesehr hilfreich, wenn für jedes Blocksize-Intervall ein ganzzahliger Step (sprich Stepsize_scaled =1) ausgeführt wird.

Page 66: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

D.2 Funktionen 61

• double sdr_agc_getCorrection_percent (void);Correction zeigt an, ob der AGC am Korrigieren ist. Die _percent-Funktion gibt dies in einer Zahlzwischen 0 und 100 zurück. Bei 0 ist der AGC stabil, es findet keine Korrektur statt. Bei 100 istjedes Sample unter- oder übersteuert, der AGC ist instabil.

• double sdr_vga_getPWM_percent (void);PWM zeigt den Zustand des VGA-Attenuators an. Die _percent-Funktion gibt dies in einer Zahlzwischen 0 und 100 zurück. Bei 0% wird wird das Signal im Analog-Frontend um 48 dB gedämpft,bei 100% findet keine Dämpfung statt (grösste Verstärkung).

• double sdr_nco_getFCW_frequency (void);• void sdr_nco_setFCW_frequency (double value);

Das Frequency-Control-Word (FCW) wird zum Einstellen der Lokaloszillatorfrequenz verwendet.Die _frequency-Funktion wird verwendet, um die Frequenz direkt in der Einheit Hertz einzugeben.

D.2.3 AGC-Defaultwert Funktionen

• void sdr_agc_loadParameters_Sine (void);• void sdr_agc_loadParameters_AM (void);• void sdr_agc_loadParameters_Noise (void);

Diese Funktionen dienen dazu, die Registerwerte des AGC auf vorbestimmte Werte zu setzen. Da-bei sind die Werte bei „Sine“ für ein Morsesignal „aus dem Labor“ (reine Sinusschwingung) opti-miert. „AM“ steht für ein amplitudenmoduliertes Signal, das ebenfalls von einem Funktionsgene-rator generiert werden kann. „Noise“ zeigt das beste Verhalten, wenn eine Antenne angeschlossenist.

Page 67: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

62

E NIOS Kommandos

Befehl Beschreibung Kommando Argumente AntwortPing Verbindung überprüfen ping - pongAufzeichnung Zeichnet die Samples des ADCs

in ein FIFO auf, und gibt dieseanschliessend über die UARTaus. Bedingung: FIFO ist bereit

rec - Rohdaten 12-bit, 8192Samples (2x8192Bytes), Big-Endian,2er-Komplement

Daten Abrufen Gibt die Daten des FIFOs überdie UART aus. (Anzuwenden,wenn Aufzeichnung per Buttonauf dem Board gestartet wurde)

get - Rohdaten 12-bit, 8192Samples (2x8192Bytes), Big-Endian,2er-Komplement

Debug-Modus Steuert den Debugmodus, bzw.schaltet den Debugswitch in derFPGA-Logik um.

debug 0: OFF1: ON

Debug-Mode is OFFDebug-Mode is ON

MATLAB-Modus

Steuert den MATLAB-Modus,bzw. bestimmt das Format derAntwort der Debugkommandos.

matlab 0: OFF1: ON

Matlab-Mode is OFFMatlab-Mode is ON

Tabelle 6: UART-Kommandos

Kommando Argument 1 Argument 2 Antwortmisc_id misc_id=0x10misc_switch misc_switch=0x...misc_leds (0-255) misc_leds=0x...misc_clk (0, 1) misc_clk=...misc_all (Alle misc-Register, nur ASCII-Modus)agc_enable (0, 1) agc_enable=...agc_gain (0-255) agc_gain=...agc_blocksize (0-16’777’215) agc_blocksize=...agc_inputhighlevel (0-4’096) agc_inputhighlevel=...agc_inputlowlevel (0-4’096) agc_inputlowlevel=...agc_blockhighlevel (0-16’777’215) agc_blockhighlevel=...agc_blocklowlevel (0-16’777’215) agc_blocklowlevel=...agc_stepsize (0-16’777’215) agc_stepsize=...agc_correction agc_correction=...(0-255)agc_all (Alle agc-Register, nur ASCII-Modus)vga_hilo vga_hilo=...vga_pwm vga_pwm=...vga_all (Alle vga-Register, nur ASCII-Modus)nco_fcw (0-4’294’967’295) nco_fcw=...nco_all (Alle nco-Register, nur ASCII-Modus)fir_enable fir_enable=...fir_coeffs 5k, 10k, 15k, 20k, FIR loaded!(ggf. nicht alle Grenz- 24k, 100, 3k1, 4k5frequenzen verfügbar)fir_all (Alle fir-Register, nur ASCII-Modus)read Registeradresse 0x...=0x...write Registeradresse Wert 0x...=0x...test (Ausgabe des R/W-Tests der Register)all (Alle Register, nur ASCII-Modus)

Tabelle 7: zusätzliche UART-Debugkommandos

Page 68: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

Projektauftrag V2.0

Jonas Walter, Patrick Studer

Modul Projekt 6

Projekttitel Software Defined Radio mit FPGA

Projektteam Jonas Walter (Projektleiter)Patrick Studer

Auftraggeber Prof. Dr. Markus Hufschmid

Fachbetreuung Michael PichlerProf. Dr. Markus Hufschmid

INHALTSVERZEICHNIS 2

Inhaltsverzeichnis

1 Ausgangslage 3

2 Lösungsansatz 3

2.1 Teilsysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2.1.1 Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.1.2 Auto-Gain-Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.1.3 Lokaloszillator und Mischer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.1.4 Dezimation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.1.5 FIR-Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

2.2 Bedienungskonzept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

3 Zielbestimmung 5

3.1 Musskriterien (für das 6. Semester) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3.2 Wunschkriterien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3.3 Abgrenzungskriterien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

4 Lieferobjekte 5

5 Projektphasen und Zeitplan 6

63

FP

flichtenheft

Page 69: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

3

1 Ausgangslage

Grundlage für das folgende Projekt bietet dieser Projektauftrag, sowie die Technische Dokumentationaus dem Vorprojekt (Projekt 5). Es liegt ein grösstenteils funktionsfähiges Analog-Frontend vor, welcheszum Digitalisieren des Empfangssignals verwendet wird. Aufgabe der Bachelor-Thesis ist die Software-entwicklung für das DE0-nano FPGA-Board. Diese Software übernimmt das digitale Heruntermischenund Dezimieren des diskreten Signals vom AD-Wandler und die Kommunikation zu einem externenDSP-Board. Die Hauptaufgabe besteht also darin, ein Simulink-Modell des Digital-Down-Converters(DDC) zu erstellen und zu verifizieren. Danach wird das Modell des Signalverarbeitungsteil mit Hilfedes Altera DSP-Builder in VHDL umgesetzt. Der generierte Block wird dann in das selbst beschriebe-ne Top-Level eingebunden und wieder verifiziert. Weiter muss noch die Kommunikation mit externerHardware (DSP-Board) sichergestellt werden, wozu auch auch das Erstellen einer einfachen Hardware-Abstraction-Library (HAL) gehört.

In der letzten Dokumentation wurden zusätzlich noch Verbesserungsvorschläge für die das Analog-Frontend angebracht, diese stehen jedoch in diesem Projekt im Hintergrund.

2 Lösungsansatz

2.1 Teilsysteme

DSP-Board: Analoges Front-End (AFE): Digital Down Converter (DDC): Antenne:

Gain A/D

Wandler

Config-Interface

cos()

sin()

I

Q CIC

DSP

FIR

Controller (Ctrl):

LW, MW, KW

I2C / SPI Filterkoeff. Gain-

Control

DDS od.

NCO Clock

I2S

Oszillator

+ fs Audio-

interface

Abbildung 1: Blockschaltbild

Unser SDR-Empfänger besteht grundsätzlich aus 5 Teilsystemen, welche in der oben abgebildeten Grafik(1) zu sehen sind:

• Die Antenne: Sie empfängt das HF-Signal• Das Analog-Frontend: Es filtert, verstärkt und digitalisiert das Signal• Der Digital-Down-Converter: Er mischt das Signal in den tieferen Frequenzbereich und verringert

die Datenrate• Der Controller: Er Steuert die einzelnen Komponenten und kommuniziert mit dem DSP-Board• Das DSP-Board: Es filtert, demoduliert und verarbeitet das I- & Q-Signal (In-Phase & Quadrature).

Das DSP-Board wird durch ein anderes Projektteam realisiert. Um möglichst gute Kompatibilität zwi-schen SDR und DSP zu gewährleisten, sind Absprachen mit dem anderen Team nötig.

In diesem Projekt geht es hauptsächlich um den blau eingerahmten Teil (vgl. Abbildung 1), welcher inden folgenden Kapitel näher beschrieben wird.

2.2 Bedienungskonzept 4

2.1.1 Clock

Da auf dem Analog-Frontend ein Quarz-Oszillator verbaut wurde, benötigt der FPGA den On-Board50MHz Oszillator nicht. Er erhält den Clock von extern, wodurch das synchrone Dateneinlesen verein-facht wird.

2.1.2 Auto-Gain-Controller

Ziel des Auto-Gain-Controllers (AGC) ist es, den Verstärkungsgrad der Verstärkerstufen einzustellen,damit der A/D-Wandler möglichst optimal ausgesteuert wird. Durch die Überwachung der Signalwertewird im FPGA geschaut, ob die Verstärkung angepasst werden muss. Dazu gilt es einen schlauen Al-gorithmus zu entwerfen, welcher sich für alle Arten von Signalen eignet. Die wichtigsten Eigenschaftenist die Zeitkonstante (wie schnell wird korrigiert) und die Verzögerungszeit (ab wann wird korrigiert),welche im besten Fall sogar über das Config-Interface parametrisiert werden können.

2.1.3 Lokaloszillator und Mischer

Hier wird das Eingangssignal durch Projektion auf die reelle- und imaginäre-Achse in zwei Teile aufge-teilt. Dies geschieht für den Realteil durch Multiplikation mit cos(f0 ∗ t), respektive für den Imaginärteilmit j ∗sin(f0 ∗ t). Dies ist mit einer Multiplikation mit exp(j ∗w0 ∗ t) vergleichbar, was einer Frequenz-schiebung im Spektrum gleichkommt. Es resultiert ein analytisches Zeitsignal, da das Spektrum nichtmehr symmetrisch ist. Die benötigte Mischfrequenz wird mit Hilfe von NCO (Numerically ControlledOscillator) oder DDS (Direct Digital Synthesis) erzeugt und über das Config-Interface bestimmt.

2.1.4 Dezimation

Um das Signal in einem DSP zu verarbeiten, muss die Datenrate (momentan noch ca. 100MHz) starkreduziert werden. Da ein moduliertes Funksignal nur sehr kleine Bandbreiten aufweist, kann der nichtbenötigte Rest durch Tiefpassfilter (CIC-Filter) weggeschnitten werden. Durch die kleinere Bandbreitekann nun auch die Samplingfrequenz verringert werden, ohne dass Information verloren geht. Dies wirdin mehreren Stufen gemacht (staging), bis die gewünschte Bandbreite, respektive Samplingfrequenz,erreicht ist. Anzustreben ist eine Samplingfrequenz am Ausgang von 48 kHz, damit der SDR-Empfängereinfach über I2S mit dem DSP-Board kommunizieren kann.

2.1.5 FIR-Filter

Wenn das Eingangssignal auf 48 kHz dezimiert wurde (Faktor 2048), hat es immer noch eine Signal-bandbreite von maximal 48 kHz (von −Fs/2 bis Fs/2, da analytisch). Um den maximalen Datendurch-satz zum DSP einzuhalten, muss die schlussendliche Bandbreite des Ausgangssignals mittels FIR-Filterreduziert werden. Gleichzeitig bietet sich in diesem Filter an, die durch die CIC-Filter hinzugefüg-te sinc-Verzerrung zu korrigieren. Die Koeffizienten können entweder fix programmiert sein (10 kHzBandbreite) oder durch den DSP neu geladen werden (variable Bandbreite). Alternativ können auch dieFilterkoeffizienten für vorbestimmte Ausgangsbandbreiten abgespeichert werden. Da die Clockrate desFPGAs 2048-mal grösser ist als jene des FIR-Filters, ist die Umsetzung mittels Pipelining ohne Pro-bleme möglich. Um vernünftige Filtereigenschaften zu erreichen, ist eine Filterordnung von 30 bis 100empfehlenswert.

2.2 Bedienungskonzept

Der SDR-Empfänger besitzt keine Bedienkomponenten und kann ohne DSP-Board nicht betrieben wer-den. Der DSP kann verschiedene Parameter des Empfängers anpassen und erhält dann das gewünschte

64

Page 70: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

5

Signal. Da die ganze Bedienung über den DSP vollzogen wird, wäre eine eigene Device-Library vonVorteil. Diese würde auf bestehenden Libraries aufbauen. Die Kommunikations-Protokolle müssen mitdem DSP-Projektteam in der Anfangsphase genau spezifiziert werden.

3 Zielbestimmung

3.1 Musskriterien (für das 6. Semester)

Index Beschreibung1. Komplettes Simulink-Modell der Signalverarbeitung2. Generieren des VHDL-Codes aus dem Simulinkmodell3. Audio-Interface zum DSP in VHDL beschreiben4. Config-Interface zum DSP in VHDL beschreiben (um Mischfrequenz einzustellen)5. Möglichkeit, um FIR-Filterkoeffizienten in den SDR zu laden (ohne Berechnung), um

verschiedene Signalbandbreiten am Ausgang zu erreichen6. Algorithmus für den Auto-Gain-Controller (AGC) entwerfen, simulieren und beschreiben7. Zusammenführen der einzelnen Teilblöcke in das Top-Level (vgl. Abbildung 1, blauer Teil)8. Einfache HAL für den Software nahen Zugriff auf die FPGA-Register (C-Bibliothek)9. Verifikation des Gesamtsystems (vgl. Abbildung 1, grüner + blauer Teil) anhand eines

zuvor ausgehandelten Testkonzepts

3.2 Wunschkriterien

Index Beschreibung1. Ein Anwendungsbeispiel (DSP und SDR zusammen) mit Konfiguration, Kommunikation

und Demodulation programmieren2. Verschiedene Abgriffe in den Dezimierungsstufen, damit tiefere Samplingfrequenzen als

48 kHz möglich sind (KW-Sender weisen Bandbreiten von ca. 100Hz bis 10 kHz auf).3. Fehleranalyse am Analog-Frontend (Erkenntnisgewinn)4. Fehlerbehebung am Analog-Frontend (Print-Redesign)

3.3 Abgrenzungskriterien

Index Beschreibung1. Neudesign des Analog-Frontend mit onboard FPGA oder DSP2. Demodulation (AM / FM /...) direkt im FPGA3. Anbindung an eine SDR-Anwendungssoftware

4 Lieferobjekte

Die Thesis umfasst folgende Lieferobjekte:

• 01.04.2016: Definitives Pflichtenheft• 12.08.2016: Webauftritt online• 19.08.2016: FPGA-Code für den SDR-Empfänger• 19.08.2016: C-Library (HAL) für den DSP• 19.08.2016: Technische Dokumentation (3x)• 19.08.2016: Begleit-CD mit allen projektrelevanten Daten• 15/16.09.2016: Termin der Verteidigung

KW8

22.02. - 28.02.

KW9

29.02. - 06.03.

KW10

07.03. - 13.03.

KW11

14.03. - 20.03.

KW12

21.03. - 21.03.

KW13

28.03. - 03.04.

KW14

04.04. - 10.04.

KW15

11.04. - 17.04.

KW16

18.04. - 24.04.

KW17

25.04. - 01.05.

KW18

02.05. - 08.05.

KW19

09.05. - 15.05

KW20

16.05. - 22.05.

KW21

23.05. - 29.05.

KW22

30.05. - 05.06.

KW23

06.06. - 12.06.

KW24

13.06. - 19.06.

KW25

20.06. - 26.06.

KW26

27.06. - 03.07.

KW27

04.07. - 10.07.

KW28

11.07. - 17.07.

KW29

18.07. - 24.07.

KW30

25.07. - 31.07.

KW31

01.08. - 07.08.

KW32

08.08. - 14.08.

KW33

15.08. - 19.08.

KW34

22.08. - 26.08.

KW35

29.08. - 02.09.

KW36

05.09. - 09.09.

KW37

12.09. - 16.09

Ferien

Pro

jekt

Vert

.

ge

pla

nte

Arb

eit

ss

tun

de

n:

72

0 S

td.

→12

12

12

12

12

12

12

12

12

12

12

80

12

12

12

12

12

66

66

80

80

80

80

80

00

024

soll

12

33

33

ist

soll

66

66

ist

soll

16

16

16

24

20

ist

soll

33

33

66

ist

soll

66

66

ist

soll

12

12

ist

soll

66

12

ist

soll

12

12

ist

soll

24

ist

soll

24

ist

soll

12

12

66

6

ist

soll

86

66

10

ist

soll

12

ist

soll

12

ist

soll

12

ist

soll

24

ist

soll

24

ist

soll

18

16

ist

soll

36

ist

soll

ist

soll

12

36

ist

soll

16

ist

soll

24

ist

soll

66

20

6

ist

soll

12

ist

soll

18

18

ist

soll

6

ist

x

x

x

x

x

Zeit

(h

)

Ve

rifika

tio

n S

ch

nitts

telle

n1

2

15

Ve

rifika

tio

n A

GC

12

12

Um

se

tzu

ng

Ge

sa

mts

yste

ms (

To

p)

36

16

24

24

24

24 0 48

24

38

42

34 6

Veri

fikati

on

(16%

)

Ab

sch

luss (

18%

)

evtl.

Re

de

sig

n d

es A

na

log

-Fro

nte

nd

16

24

24

92

24

24

12

24

Mil

es

ton

es

23

24

Ze

it f

ür

Un

vo

rhe

rge

se

he

ne

s /

Re

se

rve

3D

oku

me

nta

tio

n

6A

uto

-Ga

in-C

on

tro

ll A

lgo

rith

mu

s2

4

Ad

min

istr

ati

ves (

19%

)

1K

ick-O

ff,

Info

rma

tio

nsb

esch

aff

un

g

Ve

rifika

tio

n a

bg

esch

losse

n

So

ftw

are

la

uff

äh

ig

Pro

jekt

ab

ge

sch

losse

n

Arb

eit

sp

aket

Pro

jektw

ochen

Au

gu

st

Ferien

MS

P

Fe

bru

ar

rzA

pri

lJ

un

iJ

uli

Ma

i

Prä

se

nta

tio

n /

Ve

rte

idig

un

g

Po

s

AG

C-A

lgo

rith

mu

s

10

Sch

nitts

telle

n z

um

DS

P

9D

ezim

ieru

ng

(C

IC-F

ilte

r) +

FIR

-Filte

r

De

zim

ieru

ng

(C

IC-F

ilte

r) +

FIR

-Filte

r

194 13

Ve

rifika

tio

n D

igita

l-D

ow

n-C

on

ve

rte

r

Fe

hle

rko

rre

ktu

r, O

ptim

ieru

ng

Erz

eu

gu

ng

Lo

ka

lfre

qu

en

z

5L

oka

loszilla

tor

un

d M

isch

stu

fe

Um

setz

un

g (

VH

DL

) (2

4%

)

36

8M

isch

stu

fe

11

We

ba

uft

ritt

ab

sch

lie

sse

n

21

Fe

hle

ran

aly

se

de

s A

na

log

-Fro

nte

nd

Sim

ula

tio

n (

SIM

UL

INK

) (1

0%

)

17

Me

ssu

ng

en

r D

oku

me

nta

tio

n

18

Ve

rifika

tio

n G

esa

mts

yste

m (

mit A

F)

24

14

An

we

nd

un

gsb

eis

pie

l fü

r D

SP

-Bo

ard

Do

ku

me

nte

ab

sch

lie

sse

n

7

Se

pte

mb

er

Ferien

Wu

ns

ch

zie

le (

op

tio

nal)

(1

2%

)

2Z

ielfin

du

ng

(P

flic

hte

nh

eft

)

20

22

26

Prä

se

nta

tio

n v

orb

ere

ite

n3

6

25

Pro

jekta

bg

ab

e1

2

27

Prä

se

nta

tio

n /

Ve

rte

idig

un

g h

alte

n

Sim

ula

tio

ne

n la

uff

äh

ig

6

5 Projektphasen und Zeitplan

65

Page 71: Technische Dokumentation - FHNWweb.fhnw.ch/technik/projekte/eit/Fruehling2016/StuWa/downloads/... · Technische Dokumentation Jonas Walter, Patrick Studer Modul Projekt 6 Projekttitel

66

G CD