stageverslag

Verantwordingsverslag Stage EVAbits
Log | Files | Refs

commit 84b28d48074745596037cbaff0c70c154a588124
Author: Friedel Schön <[email protected]>
Date:   Fri, 14 Jun 2024 11:01:52 +0200

old macbook backup

Diffstat:
A.vscode/settings.json | 9+++++++++
Aapa-citation.csl | 1481+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abackup.md | 213+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abackup/6Zae.md | 206+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abackup/AZaJ.yml | 8++++++++
Abackup/build.sh | 7+++++++
Abackup/iAsX.tex | 380+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abackup/nWKl.yml | 29+++++++++++++++++++++++++++++
Abackup/yvGg.tex | 74++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abackup1.md | 206+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abibliography.bib | 42++++++++++++++++++++++++++++++++++++++++++
Abuild.sh | 12++++++++++++
Ahowto.txt | 21+++++++++++++++++++++
Akeyboard.sh | 1+
Ametadata.yml | 29+++++++++++++++++++++++++++++
Aoptions.yml | 8++++++++
Aprefix.tex | 400+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aremote.sh | 12++++++++++++
Astageverslag.md | 213+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Atemplate.tex | 74++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
20 files changed, 3425 insertions(+), 0 deletions(-)

diff --git a/.vscode/settings.json b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "cSpell.words": [ + "Efinix", + "Krallen", + "ontwikkelings", + "PCBA" + ] +} +\ No newline at end of file diff --git a/apa-citation.csl b/apa-citation.csl @@ -0,0 +1,1481 @@ +<?xml version="1.0" encoding="utf-8"?> +<style xmlns="http://purl.org/net/xbiblio/csl" class="in-text" version="1.0" demote-non-dropping-particle="never" page-range-format="expanded"> + <info> + <title>American Psychological Association 7th edition (numeric, superscript)</title> + <title-short>APA (numeric)</title-short> + <id>http://www.zotero.org/styles/apa-numeric-superscript</id> + <link href="http://www.zotero.org/styles/apa-numeric-superscript" rel="self"/> + <link href="http://www.zotero.org/styles/apa" rel="template"/> + <link href="https://apastyle.apa.org/style-grammar-guidelines/references/examples" rel="documentation"/> + <author> + <name>Brenton M. Wiernik</name> + <email>[email protected]</email> + </author> + <category citation-format="numeric"/> + <category field="psychology"/> + <category field="generic-base"/> + <summary>APA style, with superscript numeric in-text citations</summary> + <updated>2024-02-13T03:12:55+00:00</updated> + <rights license="http://creativecommons.org/licenses/by-sa/3.0/">This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License</rights> + </info> + <locale xml:lang="en"> + <terms> + <term name="editortranslator" form="short"> + <single>ed. &amp; trans.</single> + <multiple>eds. &amp; trans.</multiple> + </term> + <term name="translator" form="short">trans.</term> + <term name="interviewer" form="short"> + <single>interviewer</single> + <multiple>interviewers</multiple> + </term> + <term name="collection-editor" form="short"> + <single>ed.</single> + <multiple>eds.</multiple> + </term> + <term name="circa" form="short">ca.</term> + <term name="bc"> B.C.E.</term> + <term name="ad"> C.E.</term> + <term name="issue" form="long"> + <single>issue</single> + <multiple>issues</multiple> + </term> + <term name="software">computer software</term> + <term name="at" form="long">before the</term> + <term name="hearing" form="verb">testimony of</term> + </terms> + </locale> + <locale xml:lang="da"> + <terms> + <term name="et-al">et al.</term> + </terms> + </locale> + <locale xml:lang="de"> + <terms> + <term name="et-al">et al.</term> + </terms> + </locale> + <locale xml:lang="es"> + <terms> + <term name="from">de</term> + </terms> + </locale> + <locale xml:lang="fr"> + <terms> + <term name="editor" form="short"> + <single>éd.</single> + <multiple>éds.</multiple> + </term> + </terms> + </locale> + <locale xml:lang="nb"> + <terms> + <term name="et-al">et al.</term> + </terms> + </locale> + <locale xml:lang="nl"> + <terms> + <term name="et-al">et al.</term> + </terms> + </locale> + <locale xml:lang="nn"> + <terms> + <term name="et-al">et al.</term> + </terms> + </locale> + <!-- General categories of item types: + Periodical: article-journal article-magazine article-newspaper post-weblog review review-book + Periodical or Booklike: paper-conference + Booklike: article book broadcast chapter classic collection dataset document + entry entry-dictionary entry-encyclopedia event figure + graphic interview manuscript map motion_picture musical_score pamphlet patent + performance periodical personal_communication post report + software song speech standard thesis webpage + Legal: bill hearing legal_case legislation regulation treaty + --> + <!-- APA references contain four parts: author, date, title, source --> + <macro name="author-bib"> + <names variable="composer" delimiter=", "> + <name name-as-sort-order="all" and="symbol" sort-separator=", " initialize-with=". " delimiter=", " delimiter-precedes-last="always"/> + <substitute> + <names variable="author"/> + <names variable="illustrator"/> + <names variable="director"> + <name name-as-sort-order="all" and="symbol" sort-separator=", " initialize-with=". " delimiter=", " delimiter-precedes-last="always"/> + <label form="long" prefix=" (" suffix=")" text-case="title"/> + </names> + <choose> + <if variable="container-title"> + <choose> + <if type="book entry entry-dictionary entry-encyclopedia" match="any"> + <choose> + <if variable="title"> + <group delimiter=" "> + <text macro="title"/> + <text macro="parenthetical"/> + </group> + </if> + <else> + <text macro="title-and-descriptions"/> + </else> + </choose> + </if> + </choose> + </if> + </choose> + <!-- Test for editortranslator and put that first as that becomes available --> + <names variable="editor" delimiter=", "> + <name name-as-sort-order="all" and="symbol" sort-separator=", " initialize-with=". " delimiter=", " delimiter-precedes-last="always"/> + <label form="short" prefix=" (" suffix=")" text-case="title"/> + </names> + <names variable="editorial-director"> + <name name-as-sort-order="all" and="symbol" sort-separator=", " initialize-with=". " delimiter=", " delimiter-precedes-last="always"/> + <label form="short" prefix=" (" suffix=")" text-case="title"/> + </names> + <names variable="collection-editor"> + <name name-as-sort-order="all" and="symbol" sort-separator=", " initialize-with=". " delimiter=", " delimiter-precedes-last="always"/> + <label form="short" prefix=" (" suffix=")" text-case="title"/> + </names> + <choose> + <if variable="title"> + <group delimiter=" "> + <text macro="title"/> + <text macro="parenthetical"/> + </group> + </if> + <else> + <text macro="title-and-descriptions"/> + </else> + </choose> + </substitute> + </names> + </macro> + <macro name="date-bib"> + <!-- TODO: Add new item types --> + <group delimiter=" " prefix="(" suffix=")"> + <choose> + <if is-uncertain-date="issued"> + <text term="circa" form="short"/> + </if> + </choose> + <group> + <choose> + <if variable="issued"> + <group delimiter=", "> + <group> + <date variable="issued" date-parts="year" form="numeric"/> + <text variable="year-suffix"/> + </group> + <choose> + <if type="article-magazine article-newspaper broadcast interview motion_picture pamphlet personal_communication post post-weblog song speech webpage" match="any"> + <!-- Many video and audio examples in manual give full dates. Err on the side of too much information. --> + <date variable="issued"> + <date-part name="month"/> + <date-part name="day" prefix=" "/> + </date> + </if> + <else-if type="paper-conference"> + <!-- Capture 'speech' stored as 'paper-conference' --> + <choose> + <if variable="collection-editor editor editorial-director issue page volume" match="none"> + <date variable="issued"> + <date-part name="month"/> + <date-part name="day" prefix=" "/> + </date> + </if> + </choose> + </else-if> + <!-- Only year: article article-journal book chapter entry entry-dictionary entry-encyclopedia dataset figure graphic + manuscript map musical_score paper-conference[published] patent report review review-book thesis --> + </choose> + </group> + </if> + <else-if variable="status"> + <group> + <!-- TODO: Should I print status as-is, or should I print the in-press term? --> + <text variable="status" text-case="lowercase"/> + <text variable="year-suffix" prefix="-"/> + </group> + </else-if> + <else> + <text term="no date" form="short"/> + <text variable="year-suffix" prefix="-"/> + </else> + </choose> + </group> + </group> + </macro> + <!-- APA has two description elements following the title: + title (parenthetical) [bracketed] --> + <macro name="title-and-descriptions"> + <choose> + <if variable="title"> + <group delimiter=" "> + <text macro="title"/> + <text macro="parenthetical"/> + <text macro="bracketed"/> + </group> + </if> + <else> + <choose> + <if type="bill report" match="any"> + <!-- Bills, resolutions, and congressional reports are not italicized and substitute bill number if no title. --> + <!-- Can't distinguish congressional reports from other reports, + but giving the genre and number seems fine for other reports too. --> + <text macro="number"/> + <text macro="bracketed"/> + <text macro="parenthetical"/> + </if> + <else> + <group delimiter=" "> + <text macro="bracketed"/> + <text macro="parenthetical"/> + </group> + </else> + </choose> + </else> + </choose> + </macro> + <macro name="title"> + <choose> + <if type="post webpage" match="any"> + <!-- Webpages are always italicized --> + <text variable="title" font-style="italic"/> + </if> + <else-if variable="container-title" match="any"> + <!-- Other types are italicized based on presence of container-title. + Assume that review and review-book are published in periodicals/blogs, + not just on a web page (ex. 69) --> + <text variable="title"/> + </else-if> + <else> + <choose> + <if type="article-journal article-magazine article-newspaper post-weblog review review-book" match="any"> + <text variable="title" font-style="italic"/> + </if> + <else-if type="paper-conference"> + <choose> + <if variable="collection-editor editor editorial-director" match="any"> + <group delimiter=": " font-style="italic"> + <text variable="title"/> + <!-- Replace with volume-title as that becomes available --> + <choose> + <if is-numeric="volume" match="none"> + <group delimiter=" "> + <label variable="volume" form="short" text-case="capitalize-first"/> + <text variable="volume"/> + </group> + </if> + </choose> + </group> + </if> + <else> + <text variable="title" font-style="italic"/> + </else> + </choose> + </else-if> + <else> + <group delimiter=": " font-style="italic"> + <text variable="title"/> + <!-- Replace with volume-title as that becomes available --> + <choose> + <if is-numeric="volume" match="none"> + <group delimiter=" "> + <label variable="volume" form="short" text-case="capitalize-first"/> + <text variable="volume"/> + </group> + </if> + </choose> + </group> + </else> + </choose> + </else> + </choose> + </macro> + <macro name="parenthetical"> + <!-- (Secondary contributors; Database location; Genre no. 123; Report Series 123, Version, Edition, Volume, Page) --> + <group prefix="(" suffix=")"> + <choose> + <if type="patent"> + <!-- authority: U.S. ; genre: patent ; number: 123,445 --> + <group delimiter=" "> + <text variable="authority" form="short"/> + <choose> + <if variable="genre"> + <text variable="genre" text-case="capitalize-first"/> + </if> + <else> + <text term="patent" text-case="capitalize-first"/> + </else> + </choose> + <group delimiter=" "> + <label variable="number" form="short" text-case="capitalize-first"/> + <text variable="number"/> + </group> + </group> + </if> + <else-if type="post webpage" match="any"> + <!-- For post webpage, container-title is treated as publisher --> + <group delimiter="; "> + <text macro="secondary-contributors"/> + <text macro="database-location"/> + <text macro="number"/> + <text macro="locators-booklike"/> + </group> + </else-if> + <else-if type="report" match="any"> + <choose> + <if variable="title" match="none"> + <!-- If there is no title, then genre and number are already printed as the title. --> + <group delimiter="; "> + <text macro="secondary-contributors"/> + <text macro="database-location"/> + <text macro="locators-booklike"/> + </group> + </if> + <!-- If the report is a chapter in a larger report, then most parenthetical information is printed after the container. --> + <else-if variable="container-title"> + <text macro="secondary-contributors"/> + </else-if> + <else> + <group delimiter="; "> + <text macro="secondary-contributors"/> + <text macro="database-location"/> + <text macro="number"/> + <text macro="locators-booklike"/> + </group> + </else> + </choose> + </else-if> + <else-if variable="container-title"> + <group delimiter="; "> + <text macro="secondary-contributors"/> + <choose> + <if type="broadcast graphic map motion_picture song" match="any"> + <!-- For audiovisual media, number information comes after title, not container-title --> + <text macro="number"/> + </if> + </choose> + </group> + </else-if> + <else> + <group delimiter="; "> + <text macro="secondary-contributors"/> + <text macro="database-location"/> + <text macro="number"/> + <text macro="locators-booklike"/> + </group> + </else> + </choose> + </group> + </macro> + <macro name="parenthetical-container"> + <choose> + <if variable="container-title" match="any"> + <group prefix="(" suffix=")"> + <group delimiter="; "> + <text macro="database-location"/> + <choose> + <if type="broadcast graphic map motion_picture song" match="none"> + <!-- For audiovisual media, number information comes after title, not container-title --> + <text macro="number"/> + </if> + </choose> + <text macro="locators-booklike"/> + </group> + </group> + </if> + </choose> + </macro> + <macro name="bracketed"> + <!-- [Descriptive information] --> + <!-- If there is a number, genre is already printed in macro="number" --> + <group prefix="[" suffix="]"> + <choose> + <if variable="reviewed-author reviewed-title" type="review review-book" match="any"> + <!-- Reviewed item --> + <group delimiter="; "> + <group delimiter=", "> + <group delimiter=" "> + <!-- Assume that genre is entered as 'Review of the book' or similar --> + <choose> + <if variable="number" match="none"> + <choose> + <if variable="genre"> + <text variable="genre" text-case="capitalize-first"/> + </if> + <else-if variable="medium"> + <text variable="medium" text-case="capitalize-first"/> + </else-if> + <else> + <!-- Replace with term="review" as that becomes available --> + <text value="Review of"/> + </else> + </choose> + </if> + <else> + <choose> + <if variable="medium"> + <text variable="medium" text-case="capitalize-first"/> + </if> + <else> + <!-- Replace with term="review" as that becomes available --> + <text value="Review of"/> + </else> + </choose> + </else> + </choose> + <text macro="reviewed-title"/> + </group> + <names variable="reviewed-author"> + <label form="verb-short" suffix=" "/> + <name and="symbol" initialize-with=". " delimiter=", "/> + </names> + </group> + <choose> + <if variable="genre" match="any"> + <choose> + <if variable="number" match="none"> + <text variable="medium" text-case="capitalize-first"/> + </if> + </choose> + </if> + </choose> + </group> + </if> + <else-if type="thesis"> + <!-- Thesis type and institution --> + <group delimiter="; "> + <choose> + <if variable="number" match="none"> + <group delimiter=", "> + <text variable="genre" text-case="capitalize-first"/> + <choose> + <if variable="archive DOI URL" match="any"> + <!-- Include the university in brackets if thesis is published --> + <text variable="publisher"/> + </if> + </choose> + </group> + </if> + </choose> + <text variable="medium" text-case="capitalize-first"/> + </group> + </else-if> + <else-if variable="interviewer" type="interview" match="any"> + <!-- Interview information --> + <choose> + <if variable="title"> + <text macro="format"/> + </if> + <else-if variable="genre"> + <group delimiter="; "> + <group delimiter=" "> + <text variable="genre" text-case="capitalize-first"/> + <group delimiter=" "> + <text term="author" form="verb"/> + <names variable="interviewer"> + <name and="symbol" initialize-with=". " delimiter=", "/> + </names> + </group> + </group> + </group> + </else-if> + <else-if variable="interviewer"> + <group delimiter="; "> + <names variable="interviewer"> + <label form="verb" suffix=" " text-case="capitalize-first"/> + <name and="symbol" initialize-with=". " delimiter=", "/> + </names> + <text variable="medium" text-case="capitalize-first"/> + </group> + </else-if> + <else> + <text macro="format"/> + </else> + </choose> + </else-if> + <else-if type="personal_communication"> + <!-- Letter information --> + <choose> + <if variable="recipient"> + <group delimiter="; "> + <group delimiter=" "> + <choose> + <if variable="number" match="none"> + <choose> + <if variable="genre"> + <text variable="genre" text-case="capitalize-first"/> + </if> + <else-if variable="medium"> + <text variable="medium" text-case="capitalize-first"/> + </else-if> + <else> + <text term="letter" text-case="capitalize-first"/> + </else> + </choose> + </if> + <else> + <choose> + <if variable="medium"> + <text variable="medium" text-case="capitalize-first"/> + </if> + <else> + <text term="letter" text-case="capitalize-first"/> + </else> + </choose> + </else> + </choose> + <names variable="recipient" delimiter=", "> + <label form="verb" suffix=" "/> + <name and="symbol" delimiter=", "/> + </names> + </group> + <choose> + <if variable="genre" match="any"> + <choose> + <if variable="number" match="none"> + <text variable="medium" text-case="capitalize-first"/> + </if> + </choose> + </if> + </choose> + </group> + </if> + <else> + <text macro="format"/> + </else> + </choose> + </else-if> + <else-if variable="composer" type="song" match="all"> + <!-- Performer of classical music works --> + <group delimiter="; "> + <choose> + <if variable="number" match="none"> + <group delimiter=" "> + <choose> + <if variable="genre"> + <text variable="genre" text-case="capitalize-first"/> + <!-- Replace prefix with performer label as that becomes available --> + <names variable="author" prefix="recorded by "> + <name and="symbol" initialize-with=". " delimiter=", "/> + </names> + </if> + <else-if variable="medium"> + <text variable="medium" text-case="capitalize-first"/> + <!-- Replace prefix with performer label as that becomes available --> + <names variable="author" prefix="recorded by "> + <name and="symbol" initialize-with=". " delimiter=", "/> + </names> + </else-if> + <else> + <!-- Replace prefix with performer label as that becomes available --> + <names variable="author" prefix="Recorded by "> + <name and="symbol" initialize-with=". " delimiter=", "/> + </names> + </else> + </choose> + </group> + </if> + <else> + <group delimiter=" "> + <choose> + <if variable="medium"> + <text variable="medium" text-case="capitalize-first"/> + <!-- Replace prefix with performer label as that becomes available --> + <names variable="author" prefix="recorded by "> + <name and="symbol" initialize-with=". " delimiter=", "/> + </names> + </if> + <else> + <!-- Replace prefix with performer label as that becomes available --> + <names variable="author" prefix="Recorded by "> + <name and="symbol" initialize-with=". " delimiter=", "/> + </names> + </else> + </choose> + </group> + </else> + </choose> + <choose> + <if variable="genre" match="any"> + <choose> + <if variable="number" match="none"> + <text variable="medium" text-case="capitalize-first"/> + </if> + </choose> + </if> + </choose> + </group> + </else-if> + <else-if variable="container-title" match="none"> + <!-- Other description --> + <text macro="format"/> + </else-if> + <else> + <!-- For conference presentations, chapters in reports, software, place bracketed after the container title --> + <choose> + <if type="paper-conference speech" match="any"> + <choose> + <if variable="collection-editor editor editorial-director issue page volume" match="any"> + <text macro="format"/> + </if> + </choose> + </if> + <else-if type="report software" match="none"> + <text macro="format"/> + </else-if> + </choose> + </else> + </choose> + </group> + </macro> + <macro name="bracketed-container"> + <group prefix="[" suffix="]"> + <choose> + <if type="paper-conference speech" match="any"> + <!-- Conference presentations should describe the session [container] in bracketed unless published in a proceedings --> + <choose> + <if variable="collection-editor editor editorial-director issue page volume" match="none"> + <text macro="format"/> + </if> + </choose> + </if> + <else-if type="software" match="all"> + <!-- For entries in mobile app reference works, place bracketed after the container-title --> + <text macro="format"/> + </else-if> + <else-if type="report"> + <!-- For chapters in reports, place bracketed after the container title --> + <text macro="format"/> + </else-if> + </choose> + </group> + </macro> + <macro name="secondary-contributors"> + <choose> + <if type="article-journal article-magazine article-newspaper post-weblog review review-book" match="any"> + <text macro="secondary-contributors-periodical"/> + </if> + <else-if type="paper-conference"> + <choose> + <if variable="collection-editor editor editorial-director" match="any"> + <text macro="secondary-contributors-booklike"/> + </if> + <else> + <text macro="secondary-contributors-periodical"/> + </else> + </choose> + </else-if> + <else> + <text macro="secondary-contributors-booklike"/> + </else> + </choose> + </macro> + <macro name="secondary-contributors-periodical"> + <group delimiter="; "> + <choose> + <if variable="title"> + <names variable="interviewer" delimiter="; "> + <name and="symbol" initialize-with=". " delimiter=", "/> + <label form="short" prefix=", " text-case="title"/> + </names> + </if> + </choose> + <names variable="translator" delimiter="; "> + <name and="symbol" initialize-with=". " delimiter=", "/> + <label form="short" prefix=", " text-case="title"/> + </names> + </group> + </macro> + <macro name="secondary-contributors-booklike"> + <group delimiter="; "> + <choose> + <if variable="title"> + <names variable="interviewer"> + <name and="symbol" initialize-with=". " delimiter=", "/> + <label form="short" prefix=", " text-case="title"/> + </names> + </if> + </choose> + <!-- When editortranslator becomes available, add a test: variable="editortranslator" match="none"; then print translator --> + <choose> + <if type="post webpage" match="none"> + <!-- Webpages treat container-title like publisher --> + <choose> + <if variable="container-title" match="none"> + <group delimiter="; "> + <names variable="container-author"> + <label form="verb-short" suffix=" " text-case="title"/> + <name and="symbol" initialize-with=". " delimiter=", "/> + </names> + <names variable="editor translator" delimiter="; "> + <name and="symbol" initialize-with=". " delimiter=", "/> + <label form="short" prefix=", " text-case="title"/> + </names> + </group> + </if> + </choose> + </if> + <else> + <group delimiter="; "> + <names variable="container-author"> + <label form="verb-short" suffix=" " text-case="title"/> + <name and="symbol" initialize-with=". " delimiter=", "/> + </names> + <names variable="editor translator" delimiter="; "> + <name and="symbol" initialize-with=". " delimiter=", "/> + <label form="short" prefix=", " text-case="title"/> + </names> + </group> + </else> + </choose> + </group> + </macro> + <macro name="database-location"> + <choose> + <if variable="archive-place" match="none"> + <!-- With `archive-place`: physical archives. Without: online archives. --> + <!-- Add archive_collection as that becomes available --> + <text variable="archive_location"/> + </if> + </choose> + </macro> + <macro name="number"> + <choose> + <if variable="number"> + <group delimiter=", "> + <group delimiter=" "> + <text variable="genre" text-case="title"/> + <group delimiter=" "> + <label variable="number" form="short" text-case="capitalize-first"/> + <text variable="number"/> + </group> + </group> + <choose> + <if type="thesis"> + <choose> + <!-- Include the university in brackets if thesis is published --> + <if variable="archive DOI URL" match="any"> + <text variable="publisher"/> + </if> + </choose> + </if> + </choose> + </group> + </if> + </choose> + </macro> + <macro name="locators-booklike"> + <choose> + <if type="article-journal article-magazine article-newspaper broadcast interview patent post post-weblog review review-book speech webpage" match="any"/> + <else-if type="paper-conference"> + <choose> + <if variable="collection-editor editor editorial-director" match="any"> + <group delimiter=", "> + <text macro="version"/> + <text macro="edition"/> + <text macro="volume-booklike"/> + </group> + </if> + </choose> + </else-if> + <else> + <group delimiter=", "> + <text macro="version"/> + <text macro="edition"/> + <text macro="volume-booklike"/> + </group> + </else> + </choose> + </macro> + <macro name="version"> + <choose> + <if is-numeric="version"> + <group delimiter=" "> + <label variable="version" text-case="capitalize-first"/> + <text variable="version"/> + </group> + </if> + <else> + <text variable="version"/> + </else> + </choose> + </macro> + <macro name="edition"> + <choose> + <if is-numeric="edition"> + <group delimiter=" "> + <number variable="edition" form="ordinal"/> + <label variable="edition" form="short"/> + </group> + </if> + <else> + <text variable="edition"/> + </else> + </choose> + </macro> + <macro name="volume-booklike"> + <group delimiter=", "> + <!-- Report series [ex. 52] --> + <choose> + <if type="report"> + <group delimiter=" "> + <text variable="collection-title" text-case="title"/> + <text variable="collection-number"/> + </group> + </if> + </choose> + <choose> + <if variable="volume" match="any"> + <choose> + <!-- Non-numeric volumes are already printed as part of the book title --> + <if is-numeric="volume" match="none"/> + <else> + <group delimiter=" "> + <label variable="volume" form="short" text-case="capitalize-first"/> + <number variable="volume" form="numeric"/> + </group> + </else> + </choose> + </if> + <else> + <group> + <label variable="number-of-volumes" form="short" text-case="capitalize-first" suffix=" "/> + <text term="page-range-delimiter" prefix="1"/> + <number variable="number-of-volumes" form="numeric"/> + </group> + </else> + </choose> + <group delimiter=" "> + <label variable="issue" text-case="capitalize-first"/> + <text variable="issue"/> + </group> + <group delimiter=" "> + <label variable="page" form="short" suffix=" "/> + <text variable="page"/> + </group> + </group> + </macro> + <macro name="reviewed-title"> + <choose> + <if variable="reviewed-title"> + <!-- Not possible to distinguish TV series episode from other reviewed + works [Ex. 69] --> + <text variable="reviewed-title" font-style="italic"/> + </if> + <else> + <!-- Assume title is title of reviewed work --> + <text variable="title" font-style="italic"/> + </else> + </choose> + </macro> + <macro name="format"> + <choose> + <if variable="genre medium" match="any"> + <group delimiter="; "> + <choose> + <if variable="number" match="none"> + <text variable="genre" text-case="capitalize-first"/> + </if> + </choose> + <text variable="medium" text-case="capitalize-first"/> + </group> + </if> + <!-- Generic labels for specific types --> + <else-if type="dataset"> + <text term="dataset"/> + </else-if> + <else-if type="software"> + <text term="software" text-case="capitalize-first"/> + </else-if> + <else-if type="interview personal_communication" match="any"> + <choose> + <if variable="archive container-title DOI publisher URL" match="none"> + <text term="personal-communication" text-case="capitalize-first"/> + </if> + <else-if type="interview"> + <text term="interview" text-case="capitalize-first"/> + </else-if> + </choose> + </else-if> + <else-if type="map"> + <text term="map" text-case="capitalize-first"/> + </else-if> + </choose> + </macro> + <!-- APA 'source' element contains four parts: + container, event, publisher, access --> + <macro name="container"> + <choose> + <if type="article-journal article-magazine article-newspaper post-weblog review review-book" match="any"> + <!-- Periodical items --> + <text macro="container-periodical"/> + </if> + <else-if type="paper-conference"> + <!-- Determine if paper-conference is a periodical or booklike --> + <choose> + <if variable="editor editorial-director collection-editor container-author" match="any"> + <text macro="container-booklike"/> + </if> + <else> + <text macro="container-periodical"/> + </else> + </choose> + </else-if> + <else-if type="post webpage" match="none"> + <!-- post and webpage treat container-title like publisher --> + <text macro="container-booklike"/> + </else-if> + </choose> + </macro> + <macro name="container-periodical"> + <group delimiter=". "> + <group delimiter=", "> + <text variable="container-title" font-style="italic" text-case="title"/> + <choose> + <if variable="volume"> + <group> + <text variable="volume" font-style="italic"/> + <text variable="issue" prefix="(" suffix=")"/> + </group> + </if> + <else> + <text variable="issue" font-style="italic"/> + </else> + </choose> + <choose> + <if variable="number"> + <!-- Ex. 6: Journal article with article number or eLocator --> + <!-- This should be localized --> + <group delimiter=" "> + <text term="article-locator" text-case="capitalize-first"/> + <text variable="number"/> + </group> + </if> + <else> + <text variable="page"/> + </else> + </choose> + </group> + <choose> + <if variable="issued"> + <choose> + <if variable="issue page volume" match="none"> + <text variable="status" text-case="capitalize-first"/> + </if> + </choose> + </if> + </choose> + </group> + </macro> + <macro name="container-booklike"> + <choose> + <if variable="container-title" match="any"> + <group delimiter=" "> + <text term="in" text-case="capitalize-first"/> + <group delimiter=", "> + <names variable="editor translator" delimiter=", &amp; "> + <!-- Change to editortranslator and move editor to substitute as that becomes available --> + <name and="symbol" initialize-with=". " delimiter=", "/> + <label form="short" text-case="title" prefix=" (" suffix=")"/> + <substitute> + <names variable="editorial-director"/> + <names variable="collection-editor"/> + <names variable="container-author"/> + </substitute> + </names> + <group delimiter=": " font-style="italic"> + <text variable="container-title"/> + <!-- Replace with volume-title as that becomes available --> + <choose> + <if is-numeric="volume" match="none"> + <group delimiter=" "> + <label variable="volume" form="short" text-case="capitalize-first"/> + <text variable="volume"/> + </group> + </if> + </choose> + </group> + </group> + <text macro="parenthetical-container"/> + <text macro="bracketed-container"/> + </group> + </if> + </choose> + </macro> + <macro name="publisher"> + <group delimiter="; "> + <choose> + <if type="thesis"> + <choose> + <if variable="archive DOI URL" match="none"> + <text variable="publisher"/> + </if> + </choose> + </if> + <else-if type="post webpage" match="any"> + <!-- For websites, treat container title like publisher --> + <group delimiter="; "> + <text variable="container-title" text-case="title"/> + <text variable="publisher"/> + </group> + </else-if> + <else-if type="paper-conference"> + <!-- For paper-conference, don't print publisher if in a journal-like proceedings --> + <choose> + <if variable="collection-editor editor editorial-director" match="any"> + <text variable="publisher"/> + </if> + </choose> + </else-if> + <else-if type="article-journal article-magazine article-newspaper post-weblog" match="none"> + <text variable="publisher"/> + </else-if> + </choose> + <group delimiter=", "> + <choose> + <if variable="archive-place"> + <!-- With `archive-place`: physical archives. Without: online archives. --> + <!-- For physical archives, print the location before the archive name. + For electronic archives, these are printed in macro="description". --> + <!-- Split "archive_location" into "archive_collection" and "archive_location" as that becomes available --> + <!-- Must test for archive_collection: + With collection: archive_collection (archive_location), archive, archive-place + No collection: archive (archive_location), archive-place + --> + <text variable="archive_location"/> + </if> + </choose> + <text variable="archive"/> + <text variable="archive-place"/> + </group> + </group> + </macro> + <macro name="access"> + <choose> + <if variable="DOI" match="any"> + <text variable="DOI" prefix="https://doi.org/"/> + </if> + <else-if variable="URL"> + <group delimiter=" "> + <choose> + <if variable="issued status" match="none"> + <group delimiter=" "> + <text term="retrieved" text-case="capitalize-first"/> + <date variable="accessed" form="text" suffix=","/> + <text term="from"/> + </group> + </if> + </choose> + <text variable="URL"/> + </group> + </else-if> + </choose> + </macro> + <macro name="event"> + <choose> + <if variable="event event-title" match="any"> + <!-- To prevent Zotero from printing event-place due to its double-mapping of all 'place' to + both publisher-place and event-place. Remove this 'choose' when that is changed. --> + <choose> + <if variable="collection-editor editor editorial-director issue page volume" match="none"> + <!-- Don't print event info if published in a proceedings --> + <group delimiter=", "> + <text macro="event-title"/> + <text variable="event-place"/> + </group> + </if> + </choose> + </if> + </choose> + </macro> + <macro name="event-title"> + <choose> + <!-- TODO: We expect "event-title" to be used, + but processors and applications may not be updated yet. + This macro ensures that either "event" or "event-title" can be accpeted. + Remove if procesor logic and application adoption can handle this. --> + <if variable="event-title"> + <text variable="event-title"/> + </if> + <else> + <text variable="event"/> + </else> + </choose> + </macro> + <!-- After 'source', APA also prints publication history (original publication, reprint info, retraction info) --> + <macro name="publication-history"> + <choose> + <if type="patent" match="none"> + <group prefix="(" suffix=")"> + <choose> + <if variable="references"> + <!-- This provides the option for more elaborate description + of publication history, such as full "reprinted" references + (examples 11, 43, 44) or retracted references --> + <text variable="references"/> + </if> + <else> + <group delimiter=" "> + <text term="original-work-published" text-case="capitalize-first"/> + <choose> + <if is-uncertain-date="original-date"> + <text term="circa" form="short"/> + </if> + </choose> + <date variable="original-date"> + <date-part name="year"/> + </date> + </group> + </else> + </choose> + </group> + </if> + <else> + <text variable="references" prefix="(" suffix=")"/> + </else> + </choose> + </macro> + <!-- Legal citations have their own rules --> + <macro name="legal-cites"> + <!-- `treaty`: for treaties --> + <!-- `legal_case`: for all legal and court cases --> + <!-- `bill`: for bills, resolutions, federal reports --> + <!-- `hearing`: TODO for hearings and testimony --> + <!-- `legislation`: for statutes, constitutional items, and charters --> + <!-- `regulation`: TODO codified regulations, uncodified regulations, executive orders --> + <group delimiter=" "> + <choose> + <if type="treaty"> + <group delimiter=", " suffix="."> + <!-- APA generally defers to Bluebook for legal citations, but diverges without + explanation for treaty items. We follow the Bluebook format that was used + in APA 6th ed. --> + <!-- APA manual omits treaty parties/authors, but per Bluebook + they should be included at least for bilateral treaties. --> + <names variable="author"> + <name initialize-with="." form="short" delimiter="-"/> + </names> + <text macro="date-legal"/> + <!-- APA manual omits treaty source/report called for by Bluebook in favor of just URL. + Both are included here, following the APA style used for all other item types + to end the reference with a period, then give the URL afterward. --> + <text macro="container-legal"/> + </group> + </if> + <else> + <group delimiter=" " suffix="."> + <group delimiter=", "> + <text macro="title-legal"/> + <text macro="container-legal"/> + </group> + <text macro="date-legal"/> + <text macro="parenthetical-legal"/> + </group> + </else> + </choose> + <text variable="references"/> + <text macro="access"/> + </group> + </macro> + <macro name="title-legal"> + <choose> + <if type="bill legal_case legislation regulation treaty" match="any"> + <text variable="title" text-case="title"/> + </if> + <else-if type="hearing"> + <!-- APA uses a comma delimiter and omits "hearing before the" for hearings with testimony, + but follows Bluebook rules (colon delimiter, prefix before the committee name) for + references to the whole hearing. We simply follow the Bluebook rules for both, but + use APA style capitalization (not capitalizing "Before" or the title of the hearing). --> + <group delimiter=": " font-style="italic"> + <text variable="title" text-case="capitalize-first"/> + <group delimiter=" "> + <text term="hearing" form="long" text-case="capitalize-first"/> + <group delimiter=" "> + <group delimiter=" "> + <!-- APA manual omits the bill number, but it should be included per Bluebook if relevant --> + <text term="on"/> + <text variable="number"/> + </group> + <group delimiter=" "> + <!-- Use the `at` term to hold "before the" --> + <text term="at" form="long"/> + <text variable="section"/> + </group> + </group> + </group> + </group> + </else-if> + </choose> + </macro> + <macro name="date-legal"> + <choose> + <if type="treaty"> + <date variable="issued" form="text"/> + </if> + <else-if type="legal_case"> + <group prefix="(" suffix=")" delimiter=" "> + <text variable="authority"/> + <choose> + <if variable="container-title" match="any"> + <!-- Print only year for cases published in reporters--> + <date variable="issued" form="numeric" date-parts="year"/> + </if> + <else> + <!-- APA manual doesn't include examples of cases not yet + published in a reporter, but this is Bluebook style. --> + <date variable="issued" form="text"/> + </else> + </choose> + </group> + </else-if> + <else-if type="bill hearing legislation regulation" match="any"> + <group prefix="(" suffix=")" delimiter=" "> + <group delimiter=" "> + <date variable="original-date"> + <date-part name="year"/> + </date> + <text term="and" form="symbol"/> + </group> + <choose> + <if variable="issued"> + <!-- APA manual includes "rev." before the revision year, + but this isn't part of the Bluebook rules. --> + <date variable="issued"> + <date-part name="year"/> + </date> + </if> + <else> + <!-- Show proposal date for uncodified regualtions. + Assume date is entered literally ala "proposed May 23, 2016". + TODO: Add 'proposed' term here if that becomes available --> + <date variable="submitted" form="text"/> + </else> + </choose> + </group> + </else-if> + </choose> + </macro> + <macro name="container-legal"> + <!-- Expect legal item container-titles to be stored in short form --> + <choose> + <if type="treaty"> + <group delimiter=" "> + <number variable="volume"/> + <text variable="container-title"/> + <choose> + <if variable="page page-first" match="any"> + <text variable="page-first"/> + </if> + <else> + <group delimiter=" "> + <label variable="number" form="short" text-case="capitalize-first"/> + <text variable="number"/> + </group> + </else> + </choose> + </group> + </if> + <else-if type="legal_case"> + <group delimiter=" "> + <choose> + <if variable="container-title"> + <group delimiter=" "> + <text variable="volume"/> + <text variable="container-title"/> + <group delimiter=" "> + <label variable="section" form="symbol"/> + <text variable="section"/> + </group> + <choose> + <if variable="page page-first" match="any"> + <text variable="page-first"/> + </if> + <else> + <text value="___"/> + </else> + </choose> + </group> + </if> + <else> + <group delimiter=" "> + <label variable="number" form="short" text-case="capitalize-first"/> + <text variable="number"/> + </group> + </else> + </choose> + </group> + </else-if> + <else-if type="bill"> + <group delimiter=", "> + <group delimiter=" "> + <text variable="genre"/> + <group delimiter=" "> + <choose> + <!-- TODO: What was the logic for this? Do we still need this? --> + <!-- If there is no session number or code/record title, print number. + Is that trying to capture congressional reports/documents? --> + <if variable="chapter-number container-title" match="none"> + <label variable="number" form="short" text-case="capitalize-first"/> + </if> + </choose> + <text variable="number"/> + </group> + </group> + <group delimiter=" "> + <text variable="authority"/> + <!-- 'session' is `chapter-number` --> + <text variable="chapter-number"/> + </group> + <group delimiter=" "> + <text variable="volume"/> + <text variable="container-title"/> + <text variable="page-first"/> + </group> + </group> + </else-if> + <else-if type="hearing"> + <group delimiter=" "> + <text variable="authority"/> + <!-- 'session' is `chapter-number` --> + <text variable="chapter-number"/> + </group> + </else-if> + <else-if type="legislation"> + <choose> + <if variable="number"> + <!-- There's a public law number. --> + <group delimiter=", "> + <text variable="number" prefix="Pub. L. No. "/> + <group delimiter=" "> + <text variable="volume"/> + <text variable="container-title"/> + <text variable="page-first"/> + </group> + </group> + </if> + <else> + <group delimiter=" "> + <text variable="volume"/> + <text variable="container-title"/> + <choose> + <if variable="section"> + <group delimiter=" "> + <label variable="section" form="symbol"/> + <text variable="section"/> + </group> + </if> + <else> + <text variable="page-first"/> + </else> + </choose> + </group> + </else> + </choose> + </else-if> + <else-if type="regulation"> + <group delimiter=", "> + <group delimiter=" "> + <text variable="genre"/> + <group delimiter=" "> + <label variable="number" form="short" text-case="capitalize-first"/> + <text variable="number"/> + </group> + </group> + <group delimiter=" "> + <text variable="volume"/> + <text variable="container-title"/> + <choose> + <if variable="section"> + <group delimiter=" "> + <label variable="section" form="symbol"/> + <text variable="section"/> + </group> + </if> + <else> + <text variable="page-first"/> + </else> + </choose> + </group> + </group> + </else-if> + </choose> + </macro> + <macro name="parenthetical-legal"> + <choose> + <if type="hearing"> + <group prefix="(" suffix=")" delimiter=" "> + <!-- Use the 'verb' form of the hearing term to hold 'testimony of' --> + <text term="hearing" form="verb"/> + <names variable="author"> + <name and="symbol" delimiter=", "/> + </names> + </group> + </if> + <else-if type="bill legislation regulation" match="any"> + <!-- For uncodified regulations, assume future code section is in `status`. --> + <text variable="status" prefix="(" suffix=")"/> + </else-if> + </choose> + </macro> + <macro name="citation-locator"> + <group delimiter=" "> + <choose> + <if locator="chapter"> + <label variable="locator" text-case="capitalize-first"/> + </if> + <else> + <label variable="locator" form="short"/> + </else> + </choose> + <text variable="locator"/> + </group> + </macro> + <citation collapse="citation-number"> + <sort> + <key variable="citation-number"/> + </sort> + <layout delimiter="," vertical-align="sup"> + <group> + <text variable="citation-number"/> + <text macro="citation-locator" prefix="(" suffix=")"/> + </group> + </layout> + </citation> + <bibliography hanging-indent="true" et-al-min="21" et-al-use-first="19" et-al-use-last="true" entry-spacing="0" line-spacing="2"> + <layout> + <group delimiter=". "> + <text variable="citation-number"/> + <choose> + <if type="bill hearing legal_case legislation regulation treaty" match="any"> + <!-- Legal items have different orders and delimiters --> + <choose> + <if variable="DOI URL" match="any"> + <text macro="legal-cites"/> + </if> + <else> + <text macro="legal-cites" suffix="."/> + </else> + </choose> + </if> + <else> + <group delimiter=" "> + <group delimiter=". " suffix="."> + <text macro="author-bib"/> + <text macro="date-bib"/> + <text macro="title-and-descriptions"/> + <text macro="container"/> + <text macro="event"/> + <text macro="publisher"/> + </group> + <text macro="access"/> + <text macro="publication-history"/> + </group> + </else> + </choose> + </group> + </layout> + </bibliography> +</style> diff --git a/backup.md b/backup.md @@ -0,0 +1,212 @@ +--- +# spell-checker: disable +documentclass: article +package: + - geometry + - setspace + - fontspec + - titlesec + - afterpage + - tikz +title: Verantwoordingsverslag - Onderzoek Communicatieprotocollen +author: Friedel Schön +date: \today +geometry: a4paper,left=2.5cm,right=2.5cm,top=2cm,bottom=2cm +fontsize: 10pt +mainfont: Fira Sans +numbersections: true +header-includes: + - \onehalfspacing + - \newcommand\iic{I\textsuperscript{2}C} + - \newcommand{\sectionbreak}{\clearpage} + - \usetikzlibrary{shapes, arrows} + - | + \newcommand\toc{ + \begin{doublespacing} + \renewcommand*\contentsname{Inhoudsopgave} + \tableofcontents + \end{doublespacing} + } + +# spell-checker: enable +--- + +# Voorwoord {.unnumbered} + +Voorwoord + +# Samenvatting {.unnumbered} + +Samenvatting + +\toc + +# Hoofdstuk Introductie + +EVAbits is een klein bedrijf gevestigd in Euvelgunne te Groningen. Het bedrijf is gespecialiseerd in het schrijven en onderhouden van software en firmware in de kader van Embedded Programming en Architecture Design. Het bedrijf is begonnen met opdrachtprogrammering, maar is ook sinds een aantal jaren bezig met hun eigen product: de EVAjig. +*De EVAjig is een testapparaat dat speciaal is ontworpen om het proces van programmeren, instellen en testen van printplaatassemblages (PCBA) te vergemakkelijken. Dit apparaat is uitgerust met een dashboard en een online portaal. +Een van de opvallende kenmerken van de EVAjig is de mogelijkheid om cassettes gemakkelijk te verwisselen. Dit betekent dat je met hetzelfde apparaat verschillende soorten PCB ontwerpen kunt testen zonder veel tijd kwijt te zijn aan het aanpassen van de testopstelling. +Daarnaast biedt de EVAjig een breed scala aan algemene functies, waardoor het een veelzijdig hulpmiddel is voor verschillende testbehoeften. Dit maakt het apparaat bijzonder geschikt voor bedrijven en technici die regelmatig met verschillende PCB ontwerpen werken. +De EVAjig is geïmplementeerd door middel van een microcontroller. Een microcontroller is een klein circuit dat als een complete computer op een chip fungeert. Het bevat alle essentiële componenten die een computer nodig heeft om te werken, zoals een processor (de 'hersenen' van de computer), geheugen (om gegevens op te slaan), en invoer-/uitvoerpoorten (om te communiceren met andere apparaten). Microcontrollers worden vaak gebruikt in allerlei elektronische apparaten en systemen om specifieke taken uit te voeren. +Wat microcontrollers bijzonder maakt, is hun vermogen om geprogrammeerd te worden voor specifieke taken. Dit betekent dat je de microcontroller instructies kunt geven om bepaalde acties uit te voeren op basis van de informatie die het ontvangt van sensoren of andere invoerapparaten. Dit programmeerbare karakter maakt het flexibel en toepasbaar in een breed scala van toepassingen, van eenvoudige huishoudelijke apparaten tot complexe industriële machines.* + +# Hoofdstuk Opdrachtbeschrijving + +## Probleem + +Een nadeel van de huidige implementatie met een microcontroller is***,** dat communicatie, wat vaak door middel van extra chips wordt afgehandeld, niet flexibel is. Communicatieprotocollen werken heel snel, vaak in de miljoenen bytes per second. Een microcontroller is niet snel genoeg om dit in software op te lossen en dus laat dit over aan een extern chip. Op de microcontroller is de processor vast aan de communicatie chipjes gekoppeld, zonder de mogelijkheid iets aan deze constructie te veranderen. Meestal is dit geen probleem voor de applicatie van een microcontroller, maar voor de EVAjig is dit een beperkend criteria door de brede schaal aan PCBA’s die moeten getest kunnen worden. + +## Oplossing + +EVAbits heeft dit probleem herkent en heeft een opdracht aangemaakt om deze beperking te verhelpen. Het bedrijf heeft kennis in field-programmable gate-array’s (FPGA). *Een FPGA is een type circuit dat na de productie door de gebruiker geconfigureerd kan worden om specifieke taken uit te voeren. Deze configuratie gebeurt door het programmeren van de logische blokken en verbindingsroutes binnen de FPGA. Hierdoor kan een FPGA worden aangepast aan een breed scala van toepassingen, van eenvoudige logische functies tot complexe digitale systemen. +De kern van een FPGA bestaat uit duizenden tot miljoenen programmeerbare logische blokken en een netwerk van interconnecties. Deze logische blokken kunnen worden geconfigureerd om elementaire functies uit te voeren, zoals AND, OR, en NOT-operaties, en ze kunnen worden gecombineerd om complexere digitale circuits te vormen. De interconnecties zorgen ervoor dat deze logische blokken op verschillende manieren met elkaar kunnen worden verbonden, afhankelijk van de vereisten van de toepassing. +Een van de grootste voordelen van een FPGA is zijn flexibiliteit. Omdat het apparaat kan worden geherprogrammeerd, kunnen ontwerpers hun hardwareontwerpen aanpassen en optimaliseren zonder dat nieuwe fysieke chips nodig zijn. Daarnaast kunnen FPGAs meerdere taken parallel uitvoeren, wat resulteert in hoge verwerkingssnelheden. Dit maakt ze ideaal voor gebruik in toepassingen zoals signaalverwerking, communicatiesystemen, en complexe rekenintensieve taken. +In vergelijking met een microcontroller biedt een FPGA veel meer flexibiliteit. Waar een microcontroller vast gekoppeld is aan bepaalde communicatiechips, kan een FPGA deze functionaliteit emuleren door de hardware intern opnieuw te configureren. Dit betekent dat een FPGA verschillende soorten communicatieprotocollen kan nabootsen zonder de beperkingen van vooraf vastgestelde hardware. Hierdoor kan een FPGA meerdere functies en communicatieprotocollen tegelijkertijd afhandelen, wat ideaal is voor complexe en veelzijdige toepassingen.* De configuraties binnen de FPGA zijn beschrijven in VHDL (VHSIC Hardware Description Language), in deze taal worden signalen en primitieve logica’s beschrijven. + +## Doel + +Het doel van de opdrachtgever is om binnen zes maanden een proof-of-concept te implementeren voor de EVAjig, waarbij de huidige microcontroller gebaseerde implementatie wordt vergeleken met een nieuwe FPGA-gebaseerde oplossing. Deze proof-of-concept moet aantonen dat de FPGA-oplossing verbetering biedt in flexibiliteit en communicatiecapaciteit vergeleken met de huidige implementatie. + +## Onderzoek + +De concrete onderzoeksvraag is "_Welke communicatiemiddelen tussen FPGA en computer zijn beschikbaar, wat zijn voor- en nadelen ten opzichte van snelheid, betrouwbaarheid en kosten en hoe dit communicatiemiddel zou moeten gebruikt worden?_" + +De huidige implementatie op de microcontroller, **echter*** de software op de microcontroller, hoort bijna onveranderd op de FPGA-implementatie te kunnen draaien. Wel moet de software met de FPGA kunnen praten, dit vereist een vast communicatieprotocol tussen de software en de firmware architectuur. Er zijn vele communicatieprotocollen beschikbaar met elk hun eigen use-case. In dit verslag zou onderzocht **worden, wel protocol*** het beste geschikt is voor communicatie tussen de firmware en de software ten opzichte van snelheid, flexibiliteit en kosten. + +## Stakeholders + +| Naam | Organisatie | Rol | +| ------------------- | --------------- | ------------------------------ | +| Jan Stegenga | EVAbits | Stagebegeleiding | +| Erik Krallen | EVAbits | Stagebegeleiding | +| Kobus Bijker | Hanzehogeschool | Stagebegeleiding / Beoordelaar | +| Nienke van der Spek | Hanzehogeschool | Beoordelaar Communicatie | + +## Beroepsproducten + +Concrete beroepsproducten die van EVAbits werden gevraagd zijn: + +### Demonstratie Zephyr OS op Efinix' Sapphire Core + +De opdrachtgever gebruikt voor de huidige implementatie op de microcontroller Zephyr OS. Zephyr OS is een *Real-Time Operating System (RTOS), een besturingssysteem dat is ontworpen om applicaties te draaien waarbij het belangrijk is dat ze reageren op gebeurtenissen binnen een strikte tijdslimiet. Dit type besturingssysteem wordt vaak gebruikt in embedded systemen, waar tijdige en voorspelbare reacties op externe signalen cruciaal zijn. Zephyr OS is een open-source real-time operating system dat is ontwikkeld voor het draaien op embedded apparaten en Internet of Things (IoT) toepassingen. Het is ontworpen om lichtgewicht, schaalbaar en veilig te zijn, waardoor het geschikt is voor een breed scala aan toepassingen, van eenvoudige sensoren tot complexe industriële besturingssystemen.* Efinix is een fabrikant van FPGA’s inclusief een reeks handige core-modules. De Sapphire Core is een processor logicamodule geschreven en geoptimaliseerd voor hun FPGA, daarmee is het mogelijk minder primitieve operatie in Zephyr OS te draaien. Deze core gebruikt de RISC-V architectuur. Voortaan wordt Sapphire core ook RISC-V core genoemd om verwarring met Zephyr OS te voorkomen. + +### Demonstratie communicatie tussen de FPGA en een computer via EVAbus (RISC-V Core) + +EVAbits heeft hun eigen datastructuur bedacht voor het effectieve aansturen van de EVAjig. Dit is geïmplementeerd met behulp van Google’s Proto Buffers (Protobuf), *Protobuf is een efficiënt en taalneutraal data-serialisatieformaat ontwikkeld door Google, dat wordt gebruikt voor het uitwisselen van gestructureerde informatie tussen verschillende programma's en systemen. Het maakt gebruik van een eenvoudig en uitgebreid berichtformaat om data in een compacte, snelle en makkelijk te lezen manier te coderen en decoderen.* Bedoeling is het om dit in de RISC-V core te laten draaien. + +### Demonstratie communicatie tussen de FPGA en RISC-V Core (VHDL) + +Als volgt moet er gecommuniceerd worden tussen de primitieve FPGA Core en de RISC-V Core om data zoals configuratie uit te wisselen. Dit moet van beide kanten ontwikkeld worden. + +### Implementatie van een driver in Zephyr OS voor het aansturen van de FPGA + +Zephyr OS is modulair ontwikkeld om een brede schaal aan microcontrollers te ondersteunen. Hiervoor zijn er verschillende drivers beschikbaar. De FPGA hoort zelf geconfigureerd te worden, hiervoor is geen driver beschikbaar en deze dient zelf ontwikkeld te worden. EVAbits wil graag dat er een driver voor Zephyr OS wordt geschreven om makkelijk de FPGA aan te sturen. + +### Onderzoeksrapport communicatieprotocollen + +De communicatie tussen de FPGA en de RISC-V Core kan op verschillende manieren geïmplementeerd worden. Hiervoor zijn vele protocollen beschikbaar en toepasbaar. De opdrachtgever wil graag een vergelijking hebben tussen deze protocollen om beter te kunnen kiezen welke voor de EVAjig het beste is. + +# Hoofdstuk HBO-I competenties + +## Projectmatig werken + +*Tijdens de stageperiode zijn er planningen gemaakt om de werkzaamheden gestructureerd aan te pakken.* + +## Onderzoeken + +*Er is onderzoek gedaan naar welk communicatieprotocol het meest geschikt is voor de toepassing op de FPGA. Dit onderzoek vormde de basis voor de verdere ontwikkeling en implementatie van de nieuwe systemen.* + +## Analyseren + +*De huidige implementatie van het systeem is geanalyseerd om eventuele verbeterpunten te identificeren. Deze analyse maakte het mogelijk om gerichte aanpassingen te doen en de efficiëntie van het systeem te verhogen.* + +## Ontwerpen + +*Op basis van de analyse zijn nieuwe implementaties ontworpen voor de FPGA. Deze ontwerpen omvatten verbeterde logische schema’s en configuraties die de prestaties van het systeem optimaliseren.* + +## Realiseren + +*De nieuwe ontwerpen zijn getest op de FPGA om de functionaliteit en prestaties te verifiëren.* + +## Schriftelijke Vaardigheden + +*Gedurende de stage zijn documentaties en dit verantwoordingsverslag geschreven. Deze documenten zijn handig voor de opdrachtgever en de Hanzehogeschool.* + +## Adviseren + +*Op basis van de nieuwe implementatie en de verkregen inzichten zijn aanbevelingen gedaan voor verdere optimalisaties en verbeterpunten. Deze adviezen helpen het team om de prestaties en efficiëntie van de projecten te +verbeteren.* + +# Hoofdstuk Onderzoek + +## Protocollen + +In dit hoofdstuk zullen verschillende protocollen toegelicht worden. Een protocol is een afspraak tussen apparaten hoe gecommuniceerd wordt. Een voorbeeld is een spreektaal, er is afgesproken hoe bepaalde dingen worden genoemd en dat er regels zijn in de taal. Als twee personen er niet over eens zijn, welke taal wordt gesproken of hoe zij de taal spreken, kunnen zij niet met elkaar communiceren. In communicatieprotocollen zijn gedefinieerd welke signalen (draadjes/lijnen) er zijn en hoe deze moeten aangestuurd worden, wanneer gaat stroom over welk signaal, hoeveel tijd zit er tussen etc. + +Protocollen hebben meestal een clock-signaal, die de snelheid van communicatie bepaald. Bijvoorbeeld wanneer het signaal stijgend is (oftewel van een lage waarde naar een hoge waarde gaat) worden de data signalen op een bepaalde manier uitgelezen. Een vallend signaal is als het signaal van een hoge waarde naar een lage waarde gaat. + +In de komenden beschrijvingen worden VDD en GND niet genoemd of meegeteld. VDD is de stroomvoering van desbetreffende chip en GND is de aarding van de chip. + +Vele protocollen werken naar het bus- of master-slave principe. Bij een bus zijn meerdere apparaten zoals chips en processoren parallel aan de signalen aangesloten. Er is één master is gedefinieerd, die controle heeft over het gebeuren op de bus en één of meerdere slaves, die op aanvraag van de master kunnen lezen van de bus of schrijven op de bus. Een aangesloten chip zou voortaan *node* genoemd worden. + +### Inter-Integrated-Circuit Protocol + +Inter-Integrated-Circuit (\iic) is één van de meest makkelijke protocollen. \iic is ontwikkeld in 1982 door Philips Semiconductor. [@i2c-ti, chap. 1.1] \iic is een bus-systeem, die minstens één master en één slave eist. \iic bestaat uit twee signalen, een voor de data die moet worden verstuurd en een voor de clock. [@i2c-ti, chap. 2.1] + +Elke node heeft een adres waarop het wordt aangestuurd, er is alleen communicatie mogelijk tussen de master en een slave, het is niet mogelijk dat slaves onderling kunnen communiceren. Als standaard is 100kbit/s gedefinieerd als snelheid van communicatie, maar \iic is compatibel tot een snelheid van 3,4Mbit/s genoemd _high speed mode_. [@i2c-ti, chap. 1.2] + +#### Voordelen {.unnumbered} + +\iic heeft een eenvoudige bedrading en is makkelijker en goedkoper te implementeren. Ook is hot-swapping met \iic mogelijk, dat betekent dat slaves kunnen verwijderd of toegevoegd worden aan de bus zonder dat de bus moet uitgeschakeld of herstart moet worden. [@i2c-hotswap] + +#### Nadelen {.unnumbered} + +Doordat er maar één datalijn is, is \iic half-duplex. Half-duplex betekent, dat er of kan geschreven worden door de master of er wordt geschreven door een slave, er kan niet tegelijk gecommuniceerd worden. [@i2c-ti, chap. 2.1] Ook is \iic relatief langzaam in vergelijking met bv. SPI. [@i2c-ti, chap. 1.2; @spi-silabs] + +### Serial Peripheral Interface + +Het Serial Peripheral Interface (SPI) protocol is ook een bus-protocol. Het is complexer en flexibeler ten opzichte van \iic, het is een 3-signal protocol. Er is een clock, geleverd door de master en een MOSI- en MISO-signaal. De MOSI-lijn (Master Out, Slave In) wordt gebruikt om data naar een slave te sturen, de slave ontvangt data. De MISO-lijn (Master In, Slave Out) wordt gebruikt om data vanuit een slave naar de master te sturen. Er is een optionele Chip-Select lijn bij het protocol om eenvoudig een node te selecteren. [@spi-ti, chap. 2.2] + +### Universal Asynchronous Receiver/Transmitter + +Universal Asynchronous Receiver/Transmitter (UART) is een asynchrone protocol, dus tegelijk kan geschreven en gelezen worden. In tegenstelling tot de bovenstaande protocollen is UART geen bus-protocol en werkt alleen tussen twee nodes. UART heeft twee datalijnen: RX en TX, RX staat voor _Receive Text_ en TX staat voor _Transmit Text_ en heeft geen clock. Door beide nodes wordt een clock-snelheid gedefinieerd, dat wordt _Baud_ genoemd. Er wordt simpelweg de data geschreven met de gedefinieerde snelheid inclusief een start- en stop-bit en optioneel een parity-bit voor fout-detectie. + +#### Voordelen {.unnumbered} + +Zoals bij \iic heeft UART een eenvoudige bedrading, dus is het goedkoop te implementeren. Ook is UART technisch makkelijk te implementeren. + +#### Nadelen {.unnumbered} + +## Toepassing op EVAjig + +Voor de geplande toepassing op de EVAjig is het gekozen protocol de bottleneck. De computer stuurt data naar de FPGA via één protocol om zo de data via verschillende protocollen naar de PCB's door te sluizen. + +# Bijlagen {.unnumbered} + +<!-- +## Bijlage I + +\begin{tikzpicture} +\tikzstyle{terminator} = [rectangle, draw, text centered, rounded corners, minimum height=2em] +\tikzstyle{process} = [rectangle, draw, text centered, minimum height=2em] +\tikzstyle{decision} = [diamond, draw, text centered, minimum height=2em] +\tikzstyle{data}=[trapezium, draw, text centered, trapezium left angle=60, trapezium right angle=120, minimum height=2em] +\tikzstyle{connector} = [draw, -latex'] +\node [terminator, fill=blue!20] at (0,0) (start) {\textbf{Start}}; +\node [data, fill=blue!20] at (0,-2) (data) {Provide data}; +\node [decision, fill=blue!20] at (0,-5) (decision) {Valid data?}; +\node [process, fill=red!20] at (3.5,-5) (error) {Error}; +\node [process, fill=green!20] at (0,-8) (success) {Success}; +\node [terminator, fill=blue!20] at (0,-10) (end) {\textbf{End}}; +\node[draw=none] at (1.85, -4.75) (no) {No}; +\node[draw=none] at (0.35, -6.75) (yes) {Yes}; +\path [connector] (start) -- (data); +\path [connector] (data) -- (decision); +\path [connector] (decision) -- (error); +\path [connector] (decision) -- (success); +\path [connector] (error) |- (end); +\path [connector] (success) -- (end); +\end{tikzpicture} +--> + +# Literatuurlijst +\ No newline at end of file diff --git a/backup/6Zae.md b/backup/6Zae.md @@ -0,0 +1,205 @@ +\large +\vspace*{\fill} +| | | +| ---------------------: | ------------------------------------ | +| **Titel** | \thetitle | +| **Ondertitel** | Verantwoordingsverslag Stage EVAbits | +| **Plaats en Datum** | Assen, \today | +| | | +| **Auteur** | \theauthor | +| **Studentnummer** | 445455 | +| **E-mail** | [email protected] | +| | | +| **Bedrijf** | EVAbits | +| **Locatie** | Skagerak 26 | +| | 9723JR Groningen | +| **Bedrijfsbegeleider** | Jan Stegenga, Erik Krallen | +| | | +| **Opleiding** | Software Engineering, HBO-ICT | +| **School** | Hanze Groningen | +| **Docentbegeleider** | Kobus Bijker | +| | Nienke van der Spek | + +Copyright \copyright 2024 \theauthor + +\normalsize +\newpage +\newpage + +# Voorwoord {.unnumbered} + +Voorwoord + +# Samenvatting {.unnumbered} + +Samenvatting + +\toc + +# Hoofdstuk Introductie + +EVAbits is een klein bedrijf gevestigd in Euvelgunne te Groningen. Het bedrijf is gespecialiseerd in het schrijven en onderhouden van software en firmware in de kader van Embedded Programming en Architecture Design. Het bedrijf is begonnen met opdrachtprogrammering, maar is ook sinds een aantal jaren bezig met hun eigen product: de EVAjig. +De EVAjig is een testapparaat dat speciaal is ontworpen om het proces van programmeren, instellen en testen van printplaatassemblages (PCBA) te vergemakkelijken. Dit apparaat is uitgerust met een dashboard en een online portaal. +Een van de opvallende kenmerken van de EVAjig is de mogelijkheid om cassettes met PCBA's gemakkelijk te verwisselen. Dit betekent dat je met hetzelfde apparaat verschillende soorten PCB ontwerpen kunt testen zonder veel tijd kwijt te zijn aan het aanpassen van de testopstelling. +Daarnaast biedt de EVAjig een breed scala aan algemene functies, waardoor het een veelzijdig hulpmiddel is voor verschillende testbehoeften. Dit maakt het apparaat bijzonder geschikt voor bedrijven en technici die regelmatig met verschillende PCB ontwerpen werken. +De EVAjig is geïmplementeerd door middel van een microcontroller. Een microcontroller is een klein circuit dat als een complete computer op een chip fungeert. Het bevat alle essentiële componenten die een computer nodig heeft om te werken, zoals een processor (de 'hersenen' van de computer), geheugen (om gegevens op te slaan), en invoer-/uitvoerpoorten (om te communiceren met andere apparaten). Microcontrollers worden vaak gebruikt in elektronische apparaten en systemen om specifieke taken uit te voeren. +Wat microcontrollers bijzonder maakt, is hun vermogen om geprogrammeerd te worden voor specifieke taken. Dit betekent dat je de microcontroller instructies kunt geven om bepaalde acties uit te voeren op basis van de informatie die het ontvangt van sensoren of andere invoerapparaten. Dit programmeerbare karakter maakt het flexibel en toepasbaar in een breed scala van toepassingen, van eenvoudige huishoudelijke apparaten tot complexe industriële machines. + +# Hoofdstuk Opdrachtbeschrijving + +## Probleem + +Een nadeel van de huidige implementatie met een microcontroller is, dat communicatie wat vaak door middel van extra chips wordt afgehandeld, niet flexibel is. Communicatieprotocollen werken heel snel, vaak in de miljoenen bytes per second. Een microcontroller is niet snel genoeg om dit in software op te lossen en dus laat dit over aan een extern chip. Op de microcontroller is de processor vast aan de communicatie chipjes gekoppeld, zonder de mogelijkheid iets aan deze constructie te veranderen. Meestal is dit geen probleem voor de applicatie van een microcontroller, maar voor de EVAjig is dit een beperkend criteria door de brede schaal aan PCBA’s die moeten getest kunnen worden. + +## Oplossing + +EVAbits heeft dit probleem herkent en heeft een opdracht aangemaakt om deze beperking te verhelpen. Het bedrijf heeft kennis in field-programmable gate-array’s (FPGA). Een FPGA is een type circuit door de gebruiker geconfigureerd kan worden om specifieke taken uit te voeren. Deze configuratie gebeurt door het programmeren van de logische blokken en verbindingsroutes binnen de FPGA. Hierdoor kan een FPGA worden aangepast aan een breed scala van toepassingen, van eenvoudige logische functies tot complexe digitale systemen. +De kern van een FPGA bestaat uit duizenden tot miljoenen programmeerbare logische blokken en een netwerk van interconnecties. Deze logische blokken kunnen worden geconfigureerd om elementaire functies uit te voeren, zoals AND, OR, en NOT-operaties, en ze kunnen worden gecombineerd om complexere digitale circuits te vormen. De interconnecties zorgen ervoor dat deze logische blokken op verschillende manieren met elkaar kunnen worden verbonden, afhankelijk van de vereisten van de toepassing. +Een van de grootste voordelen van een FPGA is zijn flexibiliteit. Omdat het apparaat kan worden geherprogrammeerd, kunnen ontwerpers hun hardwareontwerpen aanpassen en optimaliseren zonder dat nieuwe fysieke chips nodig zijn. Daarnaast kunnen FPGAs meerdere taken parallel uitvoeren, wat resulteert in hoge verwerkingssnelheden. Dit maakt ze ideaal voor gebruik in toepassingen zoals signaalverwerking, communicatiesystemen, en complexe rekenintensieve taken. +In vergelijking met een microcontroller biedt een FPGA veel meer flexibiliteit. Waar een microcontroller vast gekoppeld is aan bepaalde communicatiechips, kan een FPGA deze functionaliteit emuleren door de hardware intern opnieuw te configureren. Dit betekent dat een FPGA verschillende soorten communicatieprotocollen kan nabootsen zonder de beperkingen van vooraf vastgestelde hardware. Hierdoor kan een FPGA meerdere functies en communicatieprotocollen tegelijkertijd afhandelen, wat ideaal is voor complexe en veelzijdige toepassingen. De configuraties binnen de FPGA zijn beschrijven in een Hardware Description Language (HDL), in deze taal worden signalen en primitieve logica’s beschreven. + +## Doel + +Het doel van de opdrachtgever is om binnen zes maanden een proof-of-concept te implementeren voor de EVAjig, waarbij de huidige microcontroller gebaseerde implementatie wordt vergeleken met een nieuwe FPGA-gebaseerde oplossing. Deze proof-of-concept moet aantonen dat de FPGA-oplossing verbetering biedt in flexibiliteit en communicatiecapaciteit vergeleken met de huidige implementatie. + +## Onderzoek + +De concrete onderzoeksvraag is "_Welke communicatiemiddelen tussen FPGA en computer zijn beschikbaar, wat zijn voor- en nadelen ten opzichte van snelheid, betrouwbaarheid en kosten en hoe dit communicatiemiddel gebruikt zou moeten worden?_" + +De huidige implementatie op de microcontroller, de software op de microcontroller, hoort bijna onveranderd op de FPGA-implementatie te kunnen draaien. Wel moet de software met de FPGA kunnen praten, dit vereist een vast communicatieprotocol tussen de software en de firmware architectuur. Er zijn vele communicatieprotocollen beschikbaar met elk hun eigen use-case. In dit verslag zou onderzocht worden, welk protocol het beste geschikt is voor communicatie tussen de firmware en de software ten opzichte van snelheid, flexibiliteit en kosten. + +## Stakeholders + +| Naam | Organisatie | Rol | +| ------------------- | --------------- | ------------------------------ | +| Jan Stegenga | EVAbits | Stagebegeleiding | +| Erik Krallen | EVAbits | Stagebegeleiding | +| Kobus Bijker | Hanzehogeschool | Stagebegeleiding / Beoordelaar | +| Nienke van der Spek | Hanzehogeschool | Beoordelaar Communicatie | + +## Beroepsproducten + +Concrete beroepsproducten die van EVAbits werden gevraagd zijn: + +### Demonstratie Zephyr OS op Efinix' Sapphire Core + +De opdrachtgever gebruikt voor de huidige implementatie op de microcontroller Zephyr OS. Zephyr OS is een Real-Time Operating System (RTOS), een besturingssysteem dat is ontworpen om applicaties te draaien waarbij het belangrijk is dat ze reageren op gebeurtenissen binnen een strikte tijdslimiet. Dit type besturingssysteem wordt vaak gebruikt in embedded systemen, waar tijdige en voorspelbare reacties op externe signalen cruciaal zijn. Zephyr OS is een open-source real-time operating system dat is ontwikkeld voor het draaien op embedded apparaten. Het is ontworpen om lichtgewicht, schaalbaar en veilig te zijn, waardoor het geschikt is voor een breed scala aan toepassingen, van eenvoudige sensoren tot complexe industriële besturingssystemen. Efinix is een fabrikant van FPGA’s inclusief een reeks handige core-modules. De Sapphire Core is een processor logicamodule geschreven en geoptimaliseerd voor hun FPGA, daarmee is het mogelijk minder primitieve operatie in Zephyr OS te draaien. Deze core gebruikt de RISC-V architectuur. Voortaan wordt Sapphire core ook RISC-V core genoemd om verwarring met Zephyr OS te voorkomen. + +### Demonstratie communicatie tussen de FPGA en een computer via EVAbus (RISC-V Core) + +EVAbits heeft hun eigen datastructuur bedacht voor het effectieve aansturen van de EVAjig. Dit is geïmplementeerd met behulp van Google’s Protobuffers (Protobuf), Protobuf is een efficiënt en taalneutraal data-serialisatieformaat ontwikkeld door Google, het wordt gebruikt voor het uitwisselen van gestructureerde informatie tussen verschillende programma's en systemen. Het maakt gebruik van een eenvoudig en uitgebreid berichtformaat om data in een compacte, snelle en makkelijk te lezen manier te coderen en decoderen. + +### Demonstratie communicatie tussen de FPGA en RISC-V Core (VHDL) + +Als volgt moet er gecommuniceerd worden tussen de primitieve FPGA Core en de RISC-V Core om data zoals configuratie uit te wisselen. Dit moet van beide kanten ontwikkeld worden. + +### Implementatie van een driver in Zephyr OS voor het aansturen van de FPGA + +Zephyr OS is modulair ontwikkeld om een brede schaal aan microcontrollers te ondersteunen. Hiervoor zijn er verschillende drivers beschikbaar. De FPGA hoort zelf geconfigureerd te worden, hiervoor is geen driver beschikbaar en deze dient zelf ontwikkeld te worden. EVAbits wil graag dat er een driver voor Zephyr OS wordt geschreven om makkelijk de FPGA aan te sturen. + +### Onderzoeksrapport communicatieprotocollen + +De communicatie tussen de FPGA en de RISC-V Core kan op verschillende manieren geïmplementeerd worden. Hiervoor zijn vele protocollen beschikbaar en toepasbaar. De opdrachtgever wil graag een vergelijking hebben tussen deze protocollen om beter te kunnen kiezen welke voor de EVAjig het beste is. + +# Hoofdstuk Onderzoek + +## Protocollen + +In dit hoofdstuk worden verschillende protocollen toegelicht. Een protocol is een afspraak tussen apparaten hoe gecommuniceerd wordt. Een voorbeeld is een spreektaal, er is afgesproken hoe bepaalde dingen worden genoemd en dat er regels zijn in de taal. Als twee personen er niet over eens zijn, welke taal wordt gesproken of hoe zij de taal spreken, kunnen zij niet met elkaar communiceren. In communicatieprotocollen is gedefinieerd welke signalen (draadjes/lijnen) er zijn en hoe deze moeten worden aangestuurd; wanneer gaat stroom over welk signaal, hoeveel tijd zit er tussen etc. + +Protocollen hebben meestal een clock-signaal, die de snelheid van communicatie bepaald. Bijvoorbeeld wanneer het signaal stijgend is (oftewel van een lage waarde naar een hoge waarde gaat) worden de data signalen op een bepaalde manier uitgelezen. Als het signaal van een hoge waarde naar een lage waarde gaat, is het een vallend signaal. + +In de komenden beschrijvingen worden VDD en GND niet genoemd of meegeteld. VDD is de stroomvoering van desbetreffende chip en GND is de aarding van de chip. + +Vele protocollen werken naar het bus- of master-slave principe. Bij een bus zijn meerdere apparaten, zoals chips en processoren, parallel aan de signalen aangesloten. Er is één master is gedefinieerd, die controle heeft over het gebeuren op de bus en één of meerdere slaves, die op aanvraag van de master kunnen lezen van de bus of schrijven op de bus. Een aangesloten chip zou voortaan *node* genoemd worden. + +### Inter-Integrated-Circuit Protocol + +Inter-Integrated-Circuit (\iic{}) is één van de meest makkelijke protocollen. \iic{} is ontwikkeld in 1982 door Philips Semiconductor. [@i2c-ti, chap. 1.1] \iic{} is een bus-systeem, die minstens één master en één slave eist. \iic{} bestaat uit twee signalen, een voor de data die moet worden verstuurd en een voor de clock. [@i2c-ti, chap. 2.1] + +Elke node heeft een adres waarop het wordt aangestuurd, er is alleen communicatie mogelijk tussen de master en een slave, het is niet mogelijk dat slaves onderling kunnen communiceren. Als standaard is 100kbit/s gedefinieerd als snelheid van communicatie, maar \iic{} is compatibel tot een snelheid van 3,4Mbit/s genoemd _high speed mode_. [@i2c-ti, chap. 1.2] + +#### Voordelen {.unnumbered} + +\iic{} heeft een eenvoudige bedrading en is makkelijker en goedkoper te implementeren. Ook is hot-swapping met \iic{} mogelijk, dat betekent dat slaves verwijderd of toegevoegd kunnen worden aan de bus zonder dat de bus uitgeschakeld of herstart moet worden. [@i2c-hotswap] + +#### Nadelen {.unnumbered} + +Doordat er maar één datalijn is, is \iic{} half-duplex. Half-duplex betekent, dat er of geschreven kan worden door de master of door een slave, er kan niet tegelijk gecommuniceerd worden. [@i2c-ti, chap. 2.1] Ook is \iic{} relatief langzaam in vergelijking met bv. SPI. [@i2c-ti, chap. 1.2; @spi-silabs] + +### Serial Peripheral Interface + +Het Serial Peripheral Interface (SPI) protocol is ook een bus-protocol. Het is complexer en flexibeler ten opzichte van \iic{}, het is een 3-signal protocol. Er is een clock, geleverd door de master en een MOSI- en MISO-signaal. De MOSI-lijn (Master Out, Slave In) wordt gebruikt om data naar een slave te sturen, de slave ontvangt data. De MISO-lijn (Master In, Slave Out) wordt gebruikt om data vanuit een slave naar de master te sturen. Er is een optionele Chip-Select lijn bij het protocol om eenvoudig een node te selecteren. [@spi-ti, chap. 2.2] + +### Universal Asynchronous Receiver/Transmitter + +Universal Asynchronous Receiver/Transmitter (UART) is een asynchrone protocol, dus er kan tegelijk geschreven en gelezen worden. In tegenstelling tot de bovenstaande protocollen is UART geen bus-protocol en werkt alleen tussen twee nodes. UART heeft twee datalijnen: RX en TX, RX staat voor _Receive Text_ en TX staat voor _Transmit Text_ en heeft geen clock. Door beide nodes wordt een clock-snelheid gedefinieerd, dat wordt _Baud_ genoemd. Er wordt simpelweg de data geschreven met de gedefinieerde snelheid inclusief een start- en stop-bit en optioneel een parity-bit voor fout-detectie. + +#### Voordelen {.unnumbered} + +Zoals bij \iic{} heeft UART een eenvoudige bedrading, dus is het goedkoop te implementeren. Ook is UART technisch makkelijk te implementeren. + +#### Nadelen {.unnumbered} + +UART is niet geschikt voor meerdere nodes. Als er gecommuniceerd moet worden naar meerdere nodes, moeten er onderling UART-signals geplaatst worden. + +## Toepassing op EVAjig + +Voor de geplande toepassing op de EVAjig is het gekozen protocol de bottleneck. De computer stuurt data naar de FPGA via één protocol om zo de data via verschillende protocollen naar de PCB's door te sluizen. + +## Conclusie + +## Aanbevelingen + +\newpage +# Hoofdstuk Projectaanpak en Risico's + +## Planning + +### Requirements + +## Risico's + +\newpage +# Hoofdstuk HBO-I competenties + +Tijdens de stageperiode zijn er planningen gemaakt om de werkzaamheden gestructureerd aan te pakken. + +## Onderzoeken + +Er is onderzoek gedaan naar welk communicatieprotocol het meest geschikt is voor de toepassing op de FPGA. Ook is onderzocht hoe het huidige systeem geïmplementeerd kan worden op de FPGA. + +## Projectmatig Werken + +In de stage werd gebruik gemaakt van verschillende projectstructuren. Er wordt op een systematische wijze gewerkt aan het vraagstuk. + +## Analyseren + +De huidige implementatie van het systeem is geanalyseerd om eventuele verbeterpunten te identificeren. Deze analyse maakte het mogelijk om gerichte aanpassingen te doen en het systeem efficiënter te maken. + +## Ontwerpen + +Op basis van de analyse zijn nieuwe implementaties ontworpen voor de FPGA. Deze ontwerpen omvatten verbeterde logische schema’s en configuraties die de prestaties van het systeem optimaliseren. + +## Realiseren + +De nieuwe ontwerpen zijn getest op de FPGA om de functionaliteit te verifiëren. + +## Schriftelijke Vaardigheden + +Gedurende de stage zijn documentaties en dit verslag geschreven. Deze documenten zijn handig voor de opdrachtgever en de Hanzehogeschool. + +## Adviseren + +Op basis van de nieuwe implementatie zijn aanbevelingen gedaan voor verdere optimalisaties en verbeterpunten. Deze adviezen helpen het team om de prestaties en efficiëntie van de projecten te +verbeteren. + +*(terugkoppeling met mijn activiteiten volgt nog)* + +# Begrippenlijst {.unnumbered} + +| Begrip | Afkorting | Beschrijving | +| ------ | --------- | ------------ | +| ... | ... | ... | + +# Literatuurlijst +\ No newline at end of file diff --git a/backup/AZaJ.yml b/backup/AZaJ.yml @@ -0,0 +1,8 @@ +from: markdown +to: pdf +template: template.tex +pdf-engine: lualatex +bibliography: bibliography.bib +csl: apa-citation.csl +citeproc: true +metadata-file: metadata.yml diff --git a/backup/build.sh b/backup/build.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +cd `dirname $0` +exec pandoc stageverslag.md -s \ + --defaults=options.yml \ + $@ +\ No newline at end of file diff --git a/backup/iAsX.tex b/backup/iAsX.tex @@ -0,0 +1,380 @@ +% Options for packages loaded elsewhere +\PassOptionsToPackage{unicode$for(hyperrefoptions)$,$hyperrefoptions$$endfor$}{hyperref} +\PassOptionsToPackage{hyphens}{url} +% +\documentclass[ +$if(fontsize)$ + $fontsize$, +$endif$ +$if(papersize)$ + $papersize$paper, +$endif$ +$for(classoption)$ + $classoption$$sep$, +$endfor$ +]{$documentclass$} +\usepackage{amsmath,amssymb} +$if(linestretch)$ +\usepackage{setspace} +$endif$ +\usepackage{iftex} +$if(mathspec)$ + \ifXeTeX + \usepackage{mathspec} % this also loads fontspec + \else + \usepackage{unicode-math} % this also loads fontspec + \fi +$else$ + \usepackage{unicode-math} % this also loads fontspec +$endif$ + \defaultfontfeatures{Scale=MatchLowercase}$-- must come before Beamer theme + \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} +$if(fontfamily)$ +$else$ +$-- Set default font before Beamer theme so the theme can override it +\usepackage{lmodern} +$endif$ +$-- User font settings (must come after default font and Beamer theme) +$if(fontfamily)$ +\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} +$endif$ +$if(mainfont)$ + \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} +$endif$ +$if(sansfont)$ + \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} +$endif$ +$if(monofont)$ + \setmonofont[$for(monofontoptions)$$monofontoptions$$sep$,$endfor$]{$monofont$} +$endif$ +$for(fontfamilies)$ + \newfontfamily{$fontfamilies.name$}[$for(fontfamilies.options)$$fontfamilies.options$$sep$,$endfor$]{$fontfamilies.font$} +$endfor$ +$if(mathfont)$ +$if(mathspec)$ + \ifXeTeX + \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \else + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \fi +$else$ + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} +$endif$ +$endif$ +$if(CJKmainfont)$ + \ifXeTeX + \usepackage{xeCJK} + \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + $if(CJKsansfont)$ + \setCJKsansfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKsansfont$} + $endif$ + $if(CJKmonofont)$ + \setCJKmonofont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmonofont$} + $endif$ + \fi +$endif$ +$if(luatexjapresetoptions)$ + \ifLuaTeX + \usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset} + \fi +$endif$ +$if(CJKmainfont)$ + \ifLuaTeX + \usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec} + \setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +$if(zero-width-non-joiner)$ +%% Support for zero-width non-joiner characters. +\makeatletter +\def\zerowidthnonjoiner{% + % Prevent ligatures and adjust kerning, but still support hyphenating. + \texorpdfstring{% + \TextOrMath{\nobreak\discretionary{-}{}{\kern.03em}% + \ifvmode\else\nobreak\hskip\z@skip\fi}{}% + }{}% +} +\makeatother +\catcode`^^^^200c=\active +\protected\def ^^^^200c{\zerowidthnonjoiner} +%% End of ZWNJ support +$endif$ +% Use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +\IfFileExists{microtype.sty}{% use microtype if available + \usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype} + \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +$if(indent)$ +$else$ +\makeatletter +\@ifundefined{KOMAClassName}{% if non-KOMA class + \IfFileExists{parskip.sty}{% + \usepackage{parskip} + }{% else + \setlength{\parindent}{0pt} + \setlength{\parskip}{6pt plus 2pt minus 1pt}} +}{% if KOMA class + \KOMAoptions{parskip=half}} +\makeatother +$endif$ +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +$endif$ +\usepackage{xcolor} +$if(geometry)$ +\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$endif$ +$if(listings)$ +\usepackage{listings} +\newcommand{\passthrough}[1]{#1} +\lstset{defaultdialect=[5.3]Lua} +\lstset{defaultdialect=[x86masm]Assembler} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(highlighting-macros)$ +$highlighting-macros$ +$endif$ +$if(tables)$ +\usepackage{longtable,booktabs,array} +$if(multirow)$ +\usepackage{multirow} +$endif$ +\usepackage{calc} % for calculating minipage widths +$if(beamer)$ +\usepackage{caption} +% Make caption package work with longtable +\makeatletter +\def\fnum@table{\tablename~\thetable} +\makeatother +$else$ +% Correct order of tables after \paragraph or \subparagraph +\usepackage{etoolbox} +\makeatletter +\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{} +\makeatother +% Allow footnotes in longtable head/foot +\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}} +\makesavenoteenv{longtable} +$endif$ +$endif$ +$if(graphics)$ +\usepackage{graphicx} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +% Set default figure placement to htbp +\makeatletter +\def\fps@figure{htbp} +\makeatother +$endif$ +$if(svg)$ +\usepackage{svg} +$endif$ +$if(strikeout)$ +$-- also used for underline +\ifLuaTeX + \usepackage{luacolor} + \usepackage[soul]{lua-ul} +\else + \usepackage{soul} +$if(CJKmainfont)$ + \ifXeTeX + % soul's \st doesn't work for CJK: + \usepackage{xeCJKfntef} + \renewcommand{\st}[1]{\sout{#1}} + \fi +$endif$ +\fi +$endif$ +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +$if(numbersections)$ +\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} +$else$ +\setcounter{secnumdepth}{-\maxdimen} % remove section numbering +$endif$ +$if(subfigure)$ +\usepackage{subcaption} +$endif$ +$if(beamer)$ +$else$ +$if(block-headings)$ +% Make \paragraph and \subparagraph free-standing +\ifx\paragraph\undefined\else + \let\oldparagraph\paragraph + \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else + \let\oldsubparagraph\subparagraph + \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} +\fi +$endif$ +$endif$ +$if(pagestyle)$ +\pagestyle{$pagestyle$} +$endif$ +$if(csl-refs)$ +% definitions for citeproc citations +\NewDocumentCommand\citeproctext{}{} +\NewDocumentCommand\citeproc{mm}{% + \begingroup\def\citeproctext{#2}\cite{#1}\endgroup} +\makeatletter + % allow citations to break across lines + \let\@cite@ofmt\@firstofone + % avoid brackets around text for \cite: + \def\@biblabel#1{} + \def\@cite#1#2{{#1\if@tempswa , #2\fi}} +\makeatother +\newlength{\cslhangindent} +\setlength{\cslhangindent}{1.5em} +\newlength{\csllabelwidth} +\setlength{\csllabelwidth}{3em} +\newenvironment{CSLReferences}[2] % #1 hanging-indent, #2 entry-spacing + {\begin{list}{}{% + \setlength{\itemindent}{0pt} + \setlength{\leftmargin}{0pt} + \setlength{\parsep}{0pt} + % turn on hanging indent if param 1 is 1 + \ifodd #1 + \setlength{\leftmargin}{\cslhangindent} + \setlength{\itemindent}{-1\cslhangindent} + \fi + % set entry spacing + \setlength{\itemsep}{#2\baselineskip}}} + {\end{list}} +\usepackage{calc} +\newcommand{\CSLBlock}[1]{\hfill\break\parbox[t]{\linewidth}{\strut\ignorespaces#1\strut}} +\newcommand{\CSLLeftMargin}[1]{\parbox[t]{\csllabelwidth}{\strut#1\strut}} +\newcommand{\CSLRightInline}[1]{\parbox[t]{\linewidth - \csllabelwidth}{\strut#1\strut}} +\newcommand{\CSLIndent}[1]{\hspace{\cslhangindent}#1} +$endif$ +$if(lang)$ +\ifLuaTeX +\usepackage[bidi=basic]{babel} +\else +\usepackage[bidi=default]{babel} +\fi +$if(babel-lang)$ +\babelprovide[main,import]{$babel-lang$} +$if(mainfont)$ +\babelfont{rm}[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} +$endif$ +$endif$ +$for(babel-otherlangs)$ +\babelprovide[import]{$babel-otherlangs$} +$endfor$ +$for(babelfonts/pairs)$ +\babelfont[$babelfonts.key$]{rm}{$babelfonts.value$} +$endfor$ +% get rid of language-specific shorthands (see #6817): +\let\LanguageShortHands\languageshorthands +\def\languageshorthands#1{} +$endif$ +$for(packages)$ +\usepackage{$packages$} +$endfor$ +$for(newcommands/pairs)$ +\newcommand{\$it.key$}{$it.value$} +$endfor$ +$for(header-includes)$ +$header-includes$ +$endfor$ +\ifLuaTeX + \usepackage{selnolig} % disable illegal ligatures +\fi +$if(dir)$ +$endif$ +$if(natbib)$ +\usepackage[$natbiboptions$]{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} +$for(bibliography)$ +\addbibresource{$bibliography$} +$endfor$ +$endif$ +$if(nocite-ids)$ +\nocite{$for(nocite-ids)$$it$$sep$, $endfor$} +$endif$ +$if(csquotes)$ +\usepackage{csquotes} +$endif$ +\usepackage{bookmark} +\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available +\urlstyle{$if(urlstyle)$$urlstyle$$else$same$endif$} +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(verbatim-in-note)$ +\VerbatimFootnotes % allow verbatim text in footnotes +$endif$ +\hypersetup{ +$if(title-meta)$ + pdftitle={$title-meta$}, +$endif$ +$if(author-meta)$ + pdfauthor={$author-meta$}, +$endif$ +$if(lang)$ + pdflang={$lang$}, +$endif$ +$if(subject)$ + pdfsubject={$subject$}, +$endif$ +$if(keywords)$ + pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, +$endif$ +$if(colorlinks)$ + colorlinks=true, + linkcolor={$if(linkcolor)$$linkcolor$$else$Maroon$endif$}, + filecolor={$if(filecolor)$$filecolor$$else$Maroon$endif$}, + citecolor={$if(citecolor)$$citecolor$$else$Blue$endif$}, + urlcolor={$if(urlcolor)$$urlcolor$$else$Blue$endif$}, +$else$ +$if(boxlinks)$ +$else$ + hidelinks, +$endif$ +$endif$ + pdfcreator={LaTeX via pandoc}} + +$if(title)$ +\title{$title$$if(thanks)$\thanks{$thanks$}$endif$} +\newpage +$endif$ +$if(subtitle)$ +$if(beamer)$ +$else$ +\usepackage{etoolbox} +\makeatletter +\providecommand{\subtitle}[1]{% add subtitle to \maketitle + \apptocmd{\@title}{\par {\large #1 \par}}{}{} +} +\makeatother +$endif$ +\subtitle{$subtitle$} +$endif$ +\author{$for(author)$$author$$sep$ \and $endfor$} +\date{$date$} +$if(beamer)$ +$if(institute)$ +\institute{$for(institute)$$institute$$sep$ \and $endfor$} +$endif$ +$if(titlegraphic)$ +\titlegraphic{\includegraphics{$titlegraphic$}} +$endif$ +$if(logo)$ +\logo{\includegraphics{$logo$}} +$endif$ +$endif$ diff --git a/backup/nWKl.yml b/backup/nWKl.yml @@ -0,0 +1,29 @@ +documentclass: article +packages: + - geometry + - setspace + - fontspec + - titlesec + - afterpage + - titling + - tikz +title: Onderzoek Communicatieprotocollen +subtitle: Verantwoordingsverslag Stage EVAbits +titlecolor: yellow +author: Friedel Schön +date: \today +geometry: a4paper,left=2.5cm,right=2.5cm,top=2cm,bottom=2cm +fontsize: 10pt +mainfont: Fira Sans +numbersections: true +newcommands: + iic: I\textsuperscript{2}C + sectionbreak: \newpage + toc: | + \renewcommand*\contentsname{Inhoudsopgave} + \tableofcontents +header-includes: + - \usepackage[ddmmyyyy]{datetime} + - \renewcommand{\dateseparator}{--} + - \onehalfspacing + - \usetikzlibrary{shapes, arrows} diff --git a/backup/yvGg.tex b/backup/yvGg.tex @@ -0,0 +1,74 @@ +$prefix()$ +% \usepackage[ +% backend=biber, +% bibencoding=utf8 +% ]{biblatex} +% \addbibresource{bibliography.bib} +\begin{document} +$if(has-frontmatter)$ +\frontmatter +$endif$ +$if(title)$ +\maketitle +\pagecolor{$titlecolor$}\afterpage{\nopagecolor} +\thispagestyle{empty} +\newpage +$if(abstract)$ +\begin{abstract} +$abstract$ +\end{abstract} +$endif$ +$endif$ + +$for(include-before)$ +$include-before$ + +$endfor$ +$if(toc)$ +$if(toc-title)$ +\renewcommand*\contentsname{$toc-title$} +$endif$ +{ +\setcounter{tocdepth}{$toc-depth$} +\tableofcontents +} +$endif$ +$if(lof)$ +\listoffigures +$endif$ +$if(lot)$ +\listoftables +$endif$ +$if(linestretch)$ +\setstretch{$linestretch$} +$endif$ +$if(has-frontmatter)$ +\mainmatter +$endif$ +$body$ + +$if(has-frontmatter)$ +\backmatter +$endif$ +$if(natbib)$ +$if(bibliography)$ +$if(biblio-title)$ +$if(has-chapters)$ +\renewcommand\bibname{$biblio-title$} +$else$ +\renewcommand\refname{$biblio-title$} +$endif$ +$endif$ + \bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} + +$endif$ +$endif$ +$if(biblatex)$ +\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ + +$endif$ +$for(include-after)$ +$include-after$ + +$endfor$ +\end{document} diff --git a/backup1.md b/backup1.md @@ -0,0 +1,205 @@ +\large +\vspace*{\fill} +| | | +| ---------------------: | ------------------------------------ | +| **Titel** | \thetitle | +| **Ondertitel** | Verantwoordingsverslag Stage EVAbits | +| **Plaats en Datum** | Assen, \today | +| | | +| **Auteur** | \theauthor | +| **Studentnummer** | 445455 | +| **E-mail** | [email protected] | +| | | +| **Bedrijf** | EVAbits | +| **Locatie** | Skagerak 26 | +| | 9723JR Groningen | +| **Bedrijfsbegeleider** | Jan Stegenga, Erik Krallen | +| | | +| **Opleiding** | Software Engineering, HBO-ICT | +| **School** | Hanze Groningen | +| **Docentbegeleider** | Kobus Bijker | +| | Nienke van der Spek | + +Copyright \copyright 2024 \theauthor + +\normalsize +\newpage +\newpage + +# Voorwoord {.unnumbered} + +Voorwoord + +# Samenvatting {.unnumbered} + +Samenvatting + +\toc + +# Hoofdstuk Introductie + +EVAbits is een klein bedrijf gevestigd in Euvelgunne te Groningen. Het bedrijf is gespecialiseerd in het schrijven en onderhouden van software en firmware in de kader van Embedded Programming en Architecture Design. Het bedrijf is begonnen met opdrachtprogrammering, maar is ook sinds een aantal jaren bezig met hun eigen product: de EVAjig. +De EVAjig is een testapparaat dat speciaal is ontworpen om het proces van programmeren, instellen en testen van printplaatassemblages (PCBA) te vergemakkelijken. Dit apparaat is uitgerust met een dashboard en een online portaal. +Een van de opvallende kenmerken van de EVAjig is de mogelijkheid om cassettes met PCBA's gemakkelijk te verwisselen. Dit betekent dat je met hetzelfde apparaat verschillende soorten PCB ontwerpen kunt testen zonder veel tijd kwijt te zijn aan het aanpassen van de testopstelling. +Daarnaast biedt de EVAjig een breed scala aan algemene functies, waardoor het een veelzijdig hulpmiddel is voor verschillende testbehoeften. Dit maakt het apparaat bijzonder geschikt voor bedrijven en technici die regelmatig met verschillende PCB ontwerpen werken. +De EVAjig is geïmplementeerd door middel van een microcontroller. Een microcontroller is een klein circuit dat als een complete computer op een chip fungeert. Het bevat alle essentiële componenten die een computer nodig heeft om te werken, zoals een processor (de 'hersenen' van de computer), geheugen (om gegevens op te slaan), en invoer-/uitvoerpoorten (om te communiceren met andere apparaten). Microcontrollers worden vaak gebruikt in elektronische apparaten en systemen om specifieke taken uit te voeren. +Wat microcontrollers bijzonder maakt, is hun vermogen om geprogrammeerd te worden voor specifieke taken. Dit betekent dat je de microcontroller instructies kunt geven om bepaalde acties uit te voeren op basis van de informatie die het ontvangt van sensoren of andere invoerapparaten. Dit programmeerbare karakter maakt het flexibel en toepasbaar in een breed scala van toepassingen, van eenvoudige huishoudelijke apparaten tot complexe industriële machines. + +# Hoofdstuk Opdrachtbeschrijving + +## Probleem + +Een nadeel van de huidige implementatie met een microcontroller is, dat communicatie wat vaak door middel van extra chips wordt afgehandeld, niet flexibel is. Communicatieprotocollen werken heel snel, vaak in de miljoenen bytes per second. Een microcontroller is niet snel genoeg om dit in software op te lossen en dus laat dit over aan een extern chip. Op de microcontroller is de processor vast aan de communicatie chipjes gekoppeld, zonder de mogelijkheid iets aan deze constructie te veranderen. Meestal is dit geen probleem voor de applicatie van een microcontroller, maar voor de EVAjig is dit een beperkend criteria door de brede schaal aan PCBA’s die moeten getest kunnen worden. + +## Oplossing + +EVAbits heeft dit probleem herkent en heeft een opdracht aangemaakt om deze beperking te verhelpen. Het bedrijf heeft kennis in field-programmable gate-array’s (FPGA). Een FPGA is een type circuit door de gebruiker geconfigureerd kan worden om specifieke taken uit te voeren. Deze configuratie gebeurt door het programmeren van de logische blokken en verbindingsroutes binnen de FPGA. Hierdoor kan een FPGA worden aangepast aan een breed scala van toepassingen, van eenvoudige logische functies tot complexe digitale systemen. +De kern van een FPGA bestaat uit duizenden tot miljoenen programmeerbare logische blokken en een netwerk van interconnecties. Deze logische blokken kunnen worden geconfigureerd om elementaire functies uit te voeren, zoals AND, OR, en NOT-operaties, en ze kunnen worden gecombineerd om complexere digitale circuits te vormen. De interconnecties zorgen ervoor dat deze logische blokken op verschillende manieren met elkaar kunnen worden verbonden, afhankelijk van de vereisten van de toepassing. +Een van de grootste voordelen van een FPGA is zijn flexibiliteit. Omdat het apparaat kan worden geherprogrammeerd, kunnen ontwerpers hun hardwareontwerpen aanpassen en optimaliseren zonder dat nieuwe fysieke chips nodig zijn. Daarnaast kunnen FPGAs meerdere taken parallel uitvoeren, wat resulteert in hoge verwerkingssnelheden. Dit maakt ze ideaal voor gebruik in toepassingen zoals signaalverwerking, communicatiesystemen, en complexe rekenintensieve taken. +In vergelijking met een microcontroller biedt een FPGA veel meer flexibiliteit. Waar een microcontroller vast gekoppeld is aan bepaalde communicatiechips, kan een FPGA deze functionaliteit emuleren door de hardware intern opnieuw te configureren. Dit betekent dat een FPGA verschillende soorten communicatieprotocollen kan nabootsen zonder de beperkingen van vooraf vastgestelde hardware. Hierdoor kan een FPGA meerdere functies en communicatieprotocollen tegelijkertijd afhandelen, wat ideaal is voor complexe en veelzijdige toepassingen. De configuraties binnen de FPGA zijn beschrijven in een Hardware Description Language (HDL), in deze taal worden signalen en primitieve logica’s beschreven. + +## Doel + +Het doel van de opdrachtgever is om binnen zes maanden een proof-of-concept te implementeren voor de EVAjig, waarbij de huidige microcontroller gebaseerde implementatie wordt vergeleken met een nieuwe FPGA-gebaseerde oplossing. Deze proof-of-concept moet aantonen dat de FPGA-oplossing verbetering biedt in flexibiliteit en communicatiecapaciteit vergeleken met de huidige implementatie. + +## Onderzoek + +De concrete onderzoeksvraag is "_Welke communicatiemiddelen tussen FPGA en computer zijn beschikbaar, wat zijn voor- en nadelen ten opzichte van snelheid, betrouwbaarheid en kosten en hoe dit communicatiemiddel gebruikt zou moeten worden?_" + +De huidige implementatie op de microcontroller, de software op de microcontroller, hoort bijna onveranderd op de FPGA-implementatie te kunnen draaien. Wel moet de software met de FPGA kunnen praten, dit vereist een vast communicatieprotocol tussen de software en de firmware architectuur. Er zijn vele communicatieprotocollen beschikbaar met elk hun eigen use-case. In dit verslag zou onderzocht worden, welk protocol het beste geschikt is voor communicatie tussen de firmware en de software ten opzichte van snelheid, flexibiliteit en kosten. + +## Stakeholders + +| Naam | Organisatie | Rol | +| ------------------- | --------------- | ------------------------------ | +| Jan Stegenga | EVAbits | Stagebegeleiding | +| Erik Krallen | EVAbits | Stagebegeleiding | +| Kobus Bijker | Hanzehogeschool | Stagebegeleiding / Beoordelaar | +| Nienke van der Spek | Hanzehogeschool | Beoordelaar Communicatie | + +## Beroepsproducten + +Concrete beroepsproducten die van EVAbits werden gevraagd zijn: + +### Demonstratie Zephyr OS op Efinix' Sapphire Core + +De opdrachtgever gebruikt voor de huidige implementatie op de microcontroller Zephyr OS. Zephyr OS is een Real-Time Operating System (RTOS), een besturingssysteem dat is ontworpen om applicaties te draaien waarbij het belangrijk is dat ze reageren op gebeurtenissen binnen een strikte tijdslimiet. Dit type besturingssysteem wordt vaak gebruikt in embedded systemen, waar tijdige en voorspelbare reacties op externe signalen cruciaal zijn. Zephyr OS is een open-source real-time operating system dat is ontwikkeld voor het draaien op embedded apparaten. Het is ontworpen om lichtgewicht, schaalbaar en veilig te zijn, waardoor het geschikt is voor een breed scala aan toepassingen, van eenvoudige sensoren tot complexe industriële besturingssystemen. Efinix is een fabrikant van FPGA’s inclusief een reeks handige core-modules. De Sapphire Core is een processor logicamodule geschreven en geoptimaliseerd voor hun FPGA, daarmee is het mogelijk minder primitieve operatie in Zephyr OS te draaien. Deze core gebruikt de RISC-V architectuur. Voortaan wordt Sapphire core ook RISC-V core genoemd om verwarring met Zephyr OS te voorkomen. + +### Demonstratie communicatie tussen de FPGA en een computer via EVAbus (RISC-V Core) + +EVAbits heeft hun eigen datastructuur bedacht voor het effectieve aansturen van de EVAjig. Dit is geïmplementeerd met behulp van Google’s Protobuffers (Protobuf), Protobuf is een efficiënt en taalneutraal data-serialisatieformaat ontwikkeld door Google, het wordt gebruikt voor het uitwisselen van gestructureerde informatie tussen verschillende programma's en systemen. Het maakt gebruik van een eenvoudig en uitgebreid berichtformaat om data in een compacte, snelle en makkelijk te lezen manier te coderen en decoderen. + +### Demonstratie communicatie tussen de FPGA en RISC-V Core (VHDL) + +Als volgt moet er gecommuniceerd worden tussen de primitieve FPGA Core en de RISC-V Core om data zoals configuratie uit te wisselen. Dit moet van beide kanten ontwikkeld worden. + +### Implementatie van een driver in Zephyr OS voor het aansturen van de FPGA + +Zephyr OS is modulair ontwikkeld om een brede schaal aan microcontrollers te ondersteunen. Hiervoor zijn er verschillende drivers beschikbaar. De FPGA hoort zelf geconfigureerd te worden, hiervoor is geen driver beschikbaar en deze dient zelf ontwikkeld te worden. EVAbits wil graag dat er een driver voor Zephyr OS wordt geschreven om makkelijk de FPGA aan te sturen. + +### Onderzoeksrapport communicatieprotocollen + +De communicatie tussen de FPGA en de RISC-V Core kan op verschillende manieren geïmplementeerd worden. Hiervoor zijn vele protocollen beschikbaar en toepasbaar. De opdrachtgever wil graag een vergelijking hebben tussen deze protocollen om beter te kunnen kiezen welke voor de EVAjig het beste is. + +# Hoofdstuk Onderzoek + +## Protocollen + +In dit hoofdstuk worden verschillende protocollen toegelicht. Een protocol is een afspraak tussen apparaten hoe gecommuniceerd wordt. Een voorbeeld is een spreektaal, er is afgesproken hoe bepaalde dingen worden genoemd en dat er regels zijn in de taal. Als twee personen er niet over eens zijn, welke taal wordt gesproken of hoe zij de taal spreken, kunnen zij niet met elkaar communiceren. In communicatieprotocollen is gedefinieerd welke signalen (draadjes/lijnen) er zijn en hoe deze moeten worden aangestuurd; wanneer gaat stroom over welk signaal, hoeveel tijd zit er tussen etc. + +Protocollen hebben meestal een clock-signaal, die de snelheid van communicatie bepaald. Bijvoorbeeld wanneer het signaal stijgend is (oftewel van een lage waarde naar een hoge waarde gaat) worden de data signalen op een bepaalde manier uitgelezen. Als het signaal van een hoge waarde naar een lage waarde gaat, is het een vallend signaal. + +In de komenden beschrijvingen worden VDD en GND niet genoemd of meegeteld. VDD is de stroomvoering van desbetreffende chip en GND is de aarding van de chip. + +Vele protocollen werken naar het bus- of master-slave principe. Bij een bus zijn meerdere apparaten, zoals chips en processoren, parallel aan de signalen aangesloten. Er is één master is gedefinieerd, die controle heeft over het gebeuren op de bus en één of meerdere slaves, die op aanvraag van de master kunnen lezen van de bus of schrijven op de bus. Een aangesloten chip zou voortaan *node* genoemd worden. + +### Inter-Integrated-Circuit Protocol + +Inter-Integrated-Circuit (\iic{}) is één van de meest makkelijke protocollen. \iic{} is ontwikkeld in 1982 door Philips Semiconductor. [@i2c-ti, chap. 1.1] \iic{} is een bus-systeem, die minstens één master en één slave eist. \iic{} bestaat uit twee signalen, een voor de data die moet worden verstuurd en een voor de clock. [@i2c-ti, chap. 2.1] + +Elke node heeft een adres waarop het wordt aangestuurd, er is alleen communicatie mogelijk tussen de master en een slave, het is niet mogelijk dat slaves onderling kunnen communiceren. Als standaard is 100kbit/s gedefinieerd als snelheid van communicatie, maar \iic{} is compatibel tot een snelheid van 3,4Mbit/s genoemd _high speed mode_. [@i2c-ti, chap. 1.2] + +#### Voordelen {.unnumbered} + +\iic{} heeft een eenvoudige bedrading en is makkelijker en goedkoper te implementeren. Ook is hot-swapping met \iic{} mogelijk, dat betekent dat slaves verwijderd of toegevoegd kunnen worden aan de bus zonder dat de bus uitgeschakeld of herstart moet worden. [@i2c-hotswap] + +#### Nadelen {.unnumbered} + +Doordat er maar één datalijn is, is \iic{} half-duplex. Half-duplex betekent, dat er of geschreven kan worden door de master of door een slave, er kan niet tegelijk gecommuniceerd worden. [@i2c-ti, chap. 2.1] Ook is \iic{} relatief langzaam in vergelijking met bv. SPI. [@i2c-ti, chap. 1.2; @spi-silabs] + +### Serial Peripheral Interface + +Het Serial Peripheral Interface (SPI) protocol is ook een bus-protocol. Het is complexer en flexibeler ten opzichte van \iic{}, het is een 3-signal protocol. Er is een clock, geleverd door de master en een MOSI- en MISO-signaal. De MOSI-lijn (Master Out, Slave In) wordt gebruikt om data naar een slave te sturen, de slave ontvangt data. De MISO-lijn (Master In, Slave Out) wordt gebruikt om data vanuit een slave naar de master te sturen. Er is een optionele Chip-Select lijn bij het protocol om eenvoudig een node te selecteren. [@spi-ti, chap. 2.2] + +### Universal Asynchronous Receiver/Transmitter + +Universal Asynchronous Receiver/Transmitter (UART) is een asynchrone protocol, dus er kan tegelijk geschreven en gelezen worden. In tegenstelling tot de bovenstaande protocollen is UART geen bus-protocol en werkt alleen tussen twee nodes. UART heeft twee datalijnen: RX en TX, RX staat voor _Receive Text_ en TX staat voor _Transmit Text_ en heeft geen clock. Door beide nodes wordt een clock-snelheid gedefinieerd, dat wordt _Baud_ genoemd. Er wordt simpelweg de data geschreven met de gedefinieerde snelheid inclusief een start- en stop-bit en optioneel een parity-bit voor fout-detectie. + +#### Voordelen {.unnumbered} + +Zoals bij \iic{} heeft UART een eenvoudige bedrading, dus is het goedkoop te implementeren. Ook is UART technisch makkelijk te implementeren. + +#### Nadelen {.unnumbered} + +UART is niet geschikt voor meerdere nodes. Als er gecommuniceerd moet worden naar meerdere nodes, moeten er onderling UART-signals geplaatst worden. + +## Toepassing op EVAjig + +Voor de geplande toepassing op de EVAjig is het gekozen protocol de bottleneck. De computer stuurt data naar de FPGA via één protocol om zo de data via verschillende protocollen naar de PCB's door te sluizen. + +## Conclusie + +## Aanbevelingen + +\newpage +# Hoofdstuk Projectaanpak en Risico's + +## Planning + +### Requirements + +## Risico's + +\newpage +# Hoofdstuk HBO-I competenties + +Tijdens de stageperiode zijn er planningen gemaakt om de werkzaamheden gestructureerd aan te pakken. + +## Onderzoeken + +Er is onderzoek gedaan naar welk communicatieprotocol het meest geschikt is voor de toepassing op de FPGA. Ook is onderzocht hoe het huidige systeem geïmplementeerd kan worden op de FPGA. + +## Projectmatig Werken + +In de stage werd gebruik gemaakt van verschillende projectstructuren. Er wordt op een systematische wijze gewerkt aan het vraagstuk. + +## Analyseren + +De huidige implementatie van het systeem is geanalyseerd om eventuele verbeterpunten te identificeren. Deze analyse maakte het mogelijk om gerichte aanpassingen te doen en het systeem efficiënter te maken. + +## Ontwerpen + +Op basis van de analyse zijn nieuwe implementaties ontworpen voor de FPGA. Deze ontwerpen omvatten verbeterde logische schema’s en configuraties die de prestaties van het systeem optimaliseren. + +## Realiseren + +De nieuwe ontwerpen zijn getest op de FPGA om de functionaliteit te verifiëren. + +## Schriftelijke Vaardigheden + +Gedurende de stage zijn documentaties en dit verslag geschreven. Deze documenten zijn handig voor de opdrachtgever en de Hanzehogeschool. + +## Adviseren + +Op basis van de nieuwe implementatie zijn aanbevelingen gedaan voor verdere optimalisaties en verbeterpunten. Deze adviezen helpen het team om de prestaties en efficiëntie van de projecten te +verbeteren. + +*(terugkoppeling met mijn activiteiten volgt nog)* + +# Begrippenlijst {.unnumbered} + +| Begrip | Afkorting | Beschrijving | +| ------ | --------- | ------------ | +| ... | ... | ... | + +# Literatuurlijst +\ No newline at end of file diff --git a/bibliography.bib b/bibliography.bib @@ -0,0 +1,41 @@ +@manual{i2c-ti, + author = {Joseph Wu}, + year = {2022}, + month = {11}, + title = {A Basic Guide to \iic}, + publisher = {Texas Instruments}, + howpublished = {\url{https://www.ti.com/lit/an/sbaa565/sbaa565.pdf}} +} + +@manual{i2c-hotswap, + author = {Duy (Bobby) Nguyen}, + year = {2020}, + month = {2}, + title = {I2C Solutions for Hot Swap Applications}, + publisher = {Texas Instruments}, + howpublished = {\url{https://www.ti.com/lit/an/scpa058a/scpa058a.pdf}} +} + +@manual{spi-ti, + year = {2012}, + month = {3}, + title = {KeyStone Architecture Serial Peripheral Interface (SPI) User Guide}, + publisher = {Texas Instruments}, + howpublished = {\url{https://www.ti.com/lit/ug/sprugp2a/sprugp2a.pdf}} +} + +@manual{uart-ti, + year = {2010}, + month = {11}, + title = {KeyStone Architecture Universal Asynchronous Receiver/Transmitter (UART) User Guide}, + publisher = {Texas Instruments}, + howpublished = {\url{https://www.ti.com/lit/ug/sprugp1/sprugp1.pdf}} +} + +@forum{spi-silabs, + year = {2021}, + month = {7}, + title = {What is the maximum SPI clock speed?}, + publisher = {Silicon Labs}, + howpublished = {\url{https://community.silabs.com/s/article/what-is-the-maximum-spi-clock-speed-x}} +} +\ No newline at end of file diff --git a/build.sh b/build.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +cd `dirname $0` +exec pandoc stageverslag.md -s \ + -t pdf \ + --template=template.tex \ + --pdf-engine=lualatex \ + --bibliography=bibliography.bib \ + --csl=apa-citation.csl \ + --citeproc \ + $@ +\ No newline at end of file diff --git a/howto.txt b/howto.txt @@ -0,0 +1,21 @@ +# Hoofdstuk + +## Onder Hoofdstuk + +### Onder Onder Hoofdstuk + +#### etc... + +# Hoofdstuk {.unnumbered} + een hoofdstuk niet niet genumereerd is + +*cursief tekst* of _cursief tekst_ + +**vette tekst** of __cursief tekst__ + +~~doorgestrepen~~ + +`code tekst` + +[@boekje] is een literatuurverwijs + diff --git a/keyboard.sh b/keyboard.sh @@ -0,0 +1 @@ +setxkbmap -layout us -variant intl diff --git a/metadata.yml b/metadata.yml @@ -0,0 +1,29 @@ +documentclass: article +packages: + - geometry + - setspace + - fontspec + - titlesec + - afterpage + - titling + - tikz +title: Onderzoek Communicatieprotocollen +subtitle: Verantwoordingsverslag Stage EVAbits +titlecolor: yellow +author: Friedel Schön +date: \today +geometry: a4paper,left=2.5cm,right=2.5cm,top=2cm,bottom=2cm +fontsize: 10pt +mainfont: Fira Sans +numbersections: true +newcommands: + iic: I\textsuperscript{2}C + sectionbreak: \newpage + toc: | + \renewcommand*\contentsname{Inhoudsopgave} + \tableofcontents +header-includes: + - \usepackage[ddmmyyyy]{datetime} + - \renewcommand{\dateseparator}{--} + - \onehalfspacing + - \usetikzlibrary{shapes, arrows} diff --git a/options.yml b/options.yml @@ -0,0 +1,8 @@ +from: markdown +to: pdf +template: template.tex +pdf-engine: lualatex +bibliography: bibliography.bib +csl: apa-citation.csl +citeproc: true +metadata-file: metadata.yml diff --git a/prefix.tex b/prefix.tex @@ -0,0 +1,400 @@ +% Options for packages loaded elsewhere +\PassOptionsToPackage{unicode$for(hyperrefoptions)$,$hyperrefoptions$$endfor$}{hyperref} +\PassOptionsToPackage{hyphens}{url} +% +\documentclass[ +$if(fontsize)$ + $fontsize$, +$endif$ +$if(papersize)$ + $papersize$paper, +$endif$ +$for(classoption)$ + $classoption$$sep$, +$endfor$ +]{$documentclass$} +\usepackage{amsmath,amssymb} +$if(linestretch)$ +\usepackage{setspace} +$endif$ +\usepackage{iftex} +\ifPDFTeX + \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provide euro and other symbols +\else % if luatex or xetex +$if(mathspec)$ + \ifXeTeX + \usepackage{mathspec} % this also loads fontspec + \else + \usepackage{unicode-math} % this also loads fontspec + \fi +$else$ + \usepackage{unicode-math} % this also loads fontspec +$endif$ + \defaultfontfeatures{Scale=MatchLowercase}$-- must come before Beamer theme + \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} +\fi +$if(fontfamily)$ +$else$ +$-- Set default font before Beamer theme so the theme can override it +\usepackage{lmodern} +$endif$ +$-- User font settings (must come after default font and Beamer theme) +$if(fontfamily)$ +\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} +$endif$ +\ifPDFTeX\else + % xetex/luatex font selection +$if(mainfont)$ + \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} +$endif$ +$if(sansfont)$ + \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} +$endif$ +$if(monofont)$ + \setmonofont[$for(monofontoptions)$$monofontoptions$$sep$,$endfor$]{$monofont$} +$endif$ +$for(fontfamilies)$ + \newfontfamily{$fontfamilies.name$}[$for(fontfamilies.options)$$fontfamilies.options$$sep$,$endfor$]{$fontfamilies.font$} +$endfor$ +$if(mathfont)$ +$if(mathspec)$ + \ifXeTeX + \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \else + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \fi +$else$ + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} +$endif$ +$endif$ +$if(CJKmainfont)$ + \ifXeTeX + \usepackage{xeCJK} + \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + $if(CJKsansfont)$ + \setCJKsansfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKsansfont$} + $endif$ + $if(CJKmonofont)$ + \setCJKmonofont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmonofont$} + $endif$ + \fi +$endif$ +$if(luatexjapresetoptions)$ + \ifLuaTeX + \usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset} + \fi +$endif$ +$if(CJKmainfont)$ + \ifLuaTeX + \usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec} + \setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +\fi +$if(zero-width-non-joiner)$ +%% Support for zero-width non-joiner characters. +\makeatletter +\def\zerowidthnonjoiner{% + % Prevent ligatures and adjust kerning, but still support hyphenating. + \texorpdfstring{% + \TextOrMath{\nobreak\discretionary{-}{}{\kern.03em}% + \ifvmode\else\nobreak\hskip\z@skip\fi}{}% + }{}% +} +\makeatother +\ifPDFTeX + \DeclareUnicodeCharacter{200C}{\zerowidthnonjoiner} +\else + \catcode`^^^^200c=\active + \protected\def ^^^^200c{\zerowidthnonjoiner} +\fi +%% End of ZWNJ support +$endif$ +% Use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +\IfFileExists{microtype.sty}{% use microtype if available + \usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype} + \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +$if(indent)$ +$else$ +\makeatletter +\@ifundefined{KOMAClassName}{% if non-KOMA class + \IfFileExists{parskip.sty}{% + \usepackage{parskip} + }{% else + \setlength{\parindent}{0pt} + \setlength{\parskip}{6pt plus 2pt minus 1pt}} +}{% if KOMA class + \KOMAoptions{parskip=half}} +\makeatother +$endif$ +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +$endif$ +\usepackage{xcolor} +$if(geometry)$ +\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$endif$ +$if(listings)$ +\usepackage{listings} +\newcommand{\passthrough}[1]{#1} +\lstset{defaultdialect=[5.3]Lua} +\lstset{defaultdialect=[x86masm]Assembler} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(highlighting-macros)$ +$highlighting-macros$ +$endif$ +$if(tables)$ +\usepackage{longtable,booktabs,array} +$if(multirow)$ +\usepackage{multirow} +$endif$ +\usepackage{calc} % for calculating minipage widths +$if(beamer)$ +\usepackage{caption} +% Make caption package work with longtable +\makeatletter +\def\fnum@table{\tablename~\thetable} +\makeatother +$else$ +% Correct order of tables after \paragraph or \subparagraph +\usepackage{etoolbox} +\makeatletter +\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{} +\makeatother +% Allow footnotes in longtable head/foot +\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}} +\makesavenoteenv{longtable} +$endif$ +$endif$ +$if(graphics)$ +\usepackage{graphicx} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +% Set default figure placement to htbp +\makeatletter +\def\fps@figure{htbp} +\makeatother +$endif$ +$if(svg)$ +\usepackage{svg} +$endif$ +$if(strikeout)$ +$-- also used for underline +\ifLuaTeX + \usepackage{luacolor} + \usepackage[soul]{lua-ul} +\else + \usepackage{soul} +$if(CJKmainfont)$ + \ifXeTeX + % soul's \st doesn't work for CJK: + \usepackage{xeCJKfntef} + \renewcommand{\st}[1]{\sout{#1}} + \fi +$endif$ +\fi +$endif$ +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +$if(numbersections)$ +\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} +$else$ +\setcounter{secnumdepth}{-\maxdimen} % remove section numbering +$endif$ +$if(subfigure)$ +\usepackage{subcaption} +$endif$ +$if(beamer)$ +$else$ +$if(block-headings)$ +% Make \paragraph and \subparagraph free-standing +\ifx\paragraph\undefined\else + \let\oldparagraph\paragraph + \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else + \let\oldsubparagraph\subparagraph + \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} +\fi +$endif$ +$endif$ +$if(pagestyle)$ +\pagestyle{$pagestyle$} +$endif$ +$if(csl-refs)$ +% definitions for citeproc citations +\NewDocumentCommand\citeproctext{}{} +\NewDocumentCommand\citeproc{mm}{% + \begingroup\def\citeproctext{#2}\cite{#1}\endgroup} +\makeatletter + % allow citations to break across lines + \let\@cite@ofmt\@firstofone + % avoid brackets around text for \cite: + \def\@biblabel#1{} + \def\@cite#1#2{{#1\if@tempswa , #2\fi}} +\makeatother +\newlength{\cslhangindent} +\setlength{\cslhangindent}{1.5em} +\newlength{\csllabelwidth} +\setlength{\csllabelwidth}{3em} +\newenvironment{CSLReferences}[2] % #1 hanging-indent, #2 entry-spacing + {\begin{list}{}{% + \setlength{\itemindent}{0pt} + \setlength{\leftmargin}{0pt} + \setlength{\parsep}{0pt} + % turn on hanging indent if param 1 is 1 + \ifodd #1 + \setlength{\leftmargin}{\cslhangindent} + \setlength{\itemindent}{-1\cslhangindent} + \fi + % set entry spacing + \setlength{\itemsep}{#2\baselineskip}}} + {\end{list}} +\usepackage{calc} +\newcommand{\CSLBlock}[1]{\hfill\break\parbox[t]{\linewidth}{\strut\ignorespaces#1\strut}} +\newcommand{\CSLLeftMargin}[1]{\parbox[t]{\csllabelwidth}{\strut#1\strut}} +\newcommand{\CSLRightInline}[1]{\parbox[t]{\linewidth - \csllabelwidth}{\strut#1\strut}} +\newcommand{\CSLIndent}[1]{\hspace{\cslhangindent}#1} +$endif$ +$if(lang)$ +\ifLuaTeX +\usepackage[bidi=basic]{babel} +\else +\usepackage[bidi=default]{babel} +\fi +$if(babel-lang)$ +\babelprovide[main,import]{$babel-lang$} +$if(mainfont)$ +\ifPDFTeX +\else +\babelfont{rm}[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} +\fi +$endif$ +$endif$ +$for(babel-otherlangs)$ +\babelprovide[import]{$babel-otherlangs$} +$endfor$ +$for(babelfonts/pairs)$ +\babelfont[$babelfonts.key$]{rm}{$babelfonts.value$} +$endfor$ +% get rid of language-specific shorthands (see #6817): +\let\LanguageShortHands\languageshorthands +\def\languageshorthands#1{} +$endif$ +$for(package)$ +\usepackage{$package$} +$endfor$ +$for(header-includes)$ +$header-includes$ +$endfor$ +\ifLuaTeX + \usepackage{selnolig} % disable illegal ligatures +\fi +$if(dir)$ +\ifPDFTeX + \TeXXeTstate=1 + \newcommand{\RL}[1]{\beginR #1\endR} + \newcommand{\LR}[1]{\beginL #1\endL} + \newenvironment{RTL}{\beginR}{\endR} + \newenvironment{LTR}{\beginL}{\endL} +\fi +$endif$ +$if(natbib)$ +\usepackage[$natbiboptions$]{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} +$for(bibliography)$ +\addbibresource{$bibliography$} +$endfor$ +$endif$ +$if(nocite-ids)$ +\nocite{$for(nocite-ids)$$it$$sep$, $endfor$} +$endif$ +$if(csquotes)$ +\usepackage{csquotes} +$endif$ +\usepackage{bookmark} +\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available +\urlstyle{$if(urlstyle)$$urlstyle$$else$same$endif$} +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(verbatim-in-note)$ +\VerbatimFootnotes % allow verbatim text in footnotes +$endif$ +\hypersetup{ +$if(title-meta)$ + pdftitle={$title-meta$}, +$endif$ +$if(author-meta)$ + pdfauthor={$author-meta$}, +$endif$ +$if(lang)$ + pdflang={$lang$}, +$endif$ +$if(subject)$ + pdfsubject={$subject$}, +$endif$ +$if(keywords)$ + pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, +$endif$ +$if(colorlinks)$ + colorlinks=true, + linkcolor={$if(linkcolor)$$linkcolor$$else$Maroon$endif$}, + filecolor={$if(filecolor)$$filecolor$$else$Maroon$endif$}, + citecolor={$if(citecolor)$$citecolor$$else$Blue$endif$}, + urlcolor={$if(urlcolor)$$urlcolor$$else$Blue$endif$}, +$else$ +$if(boxlinks)$ +$else$ + hidelinks, +$endif$ +$endif$ + pdfcreator={LaTeX via pandoc}} + +$if(title)$ +\title{$title$$if(thanks)$\thanks{$thanks$}$endif$} +\newpage +$endif$ +$if(subtitle)$ +$if(beamer)$ +$else$ +\usepackage{etoolbox} +\makeatletter +\providecommand{\subtitle}[1]{% add subtitle to \maketitle + \apptocmd{\@title}{\par {\large #1 \par}}{}{} +} +\makeatother +$endif$ +\subtitle{$subtitle$} +$endif$ +\author{$for(author)$$author$$sep$ \and $endfor$} +\date{$date$} +$if(beamer)$ +$if(institute)$ +\institute{$for(institute)$$institute$$sep$ \and $endfor$} +$endif$ +$if(titlegraphic)$ +\titlegraphic{\includegraphics{$titlegraphic$}} +$endif$ +$if(logo)$ +\logo{\includegraphics{$logo$}} +$endif$ +$endif$ diff --git a/remote.sh b/remote.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +files="stageverslag.md template.tex prefix.tex apa-citation.csl bibliography.bib build.sh" [email protected] +port=3875 + +# upload changes +rsync -ve "ssh -p $port" $files $host:stageverslag/ + +#exec ssh -p $port $host stageverslag/build.sh -s -t latex +exec ssh -p $port $host stageverslag/build.sh $@ > stageverslag.pdf +\ No newline at end of file diff --git a/stageverslag.md b/stageverslag.md @@ -0,0 +1,212 @@ +--- +# spell-checker: disable +documentclass: article +package: + - geometry + - setspace + - fontspec + - titlesec + - afterpage + - tikz +title: Verantwoordingsverslag - Onderzoek Communicatieprotocollen +author: Friedel Schön +date: \today +geometry: a4paper,left=2.5cm,right=2.5cm,top=2cm,bottom=2cm +fontsize: 10pt +mainfont: Fira Sans +numbersections: true +header-includes: + - \onehalfspacing + - \newcommand\iic{I\textsuperscript{2}C} + - \newcommand{\sectionbreak}{\clearpage} + - \usetikzlibrary{shapes, arrows} + - | + \newcommand\toc{ + \begin{doublespacing} + \renewcommand*\contentsname{Inhoudsopgave} + \tableofcontents + \end{doublespacing} + } + +# spell-checker: enable +--- + +# Voorwoord {.unnumbered} + +Voorwoord + +# Samenvatting {.unnumbered} + +Samenvatting + +\toc + +# Hoofdstuk Introductie + +EVAbits is een klein bedrijf gevestigd in Euvelgunne te Groningen. Het bedrijf is gespecialiseerd in het schrijven en onderhouden van software en firmware in de kader van Embedded Programming en Architecture Design. Het bedrijf is begonnen met opdrachtprogrammering, maar is ook sinds een aantal jaren bezig met hun eigen product: de EVAjig. +*De EVAjig is een testapparaat dat speciaal is ontworpen om het proces van programmeren, instellen en testen van printplaatassemblages (PCBA) te vergemakkelijken. Dit apparaat is uitgerust met een dashboard en een online portaal. +Een van de opvallende kenmerken van de EVAjig is de mogelijkheid om cassettes gemakkelijk te verwisselen. Dit betekent dat je met hetzelfde apparaat verschillende soorten PCB ontwerpen kunt testen zonder veel tijd kwijt te zijn aan het aanpassen van de testopstelling. +Daarnaast biedt de EVAjig een breed scala aan algemene functies, waardoor het een veelzijdig hulpmiddel is voor verschillende testbehoeften. Dit maakt het apparaat bijzonder geschikt voor bedrijven en technici die regelmatig met verschillende PCB ontwerpen werken. +De EVAjig is geïmplementeerd door middel van een microcontroller. Een microcontroller is een klein circuit dat als een complete computer op een chip fungeert. Het bevat alle essentiële componenten die een computer nodig heeft om te werken, zoals een processor (de 'hersenen' van de computer), geheugen (om gegevens op te slaan), en invoer-/uitvoerpoorten (om te communiceren met andere apparaten). Microcontrollers worden vaak gebruikt in allerlei elektronische apparaten en systemen om specifieke taken uit te voeren. +Wat microcontrollers bijzonder maakt, is hun vermogen om geprogrammeerd te worden voor specifieke taken. Dit betekent dat je de microcontroller instructies kunt geven om bepaalde acties uit te voeren op basis van de informatie die het ontvangt van sensoren of andere invoerapparaten. Dit programmeerbare karakter maakt het flexibel en toepasbaar in een breed scala van toepassingen, van eenvoudige huishoudelijke apparaten tot complexe industriële machines.* + +# Hoofdstuk Opdrachtbeschrijving + +## Probleem + +Een nadeel van de huidige implementatie met een microcontroller is***,** dat communicatie, wat vaak door middel van extra chips wordt afgehandeld, niet flexibel is. Communicatieprotocollen werken heel snel, vaak in de miljoenen bytes per second. Een microcontroller is niet snel genoeg om dit in software op te lossen en dus laat dit over aan een extern chip. Op de microcontroller is de processor vast aan de communicatie chipjes gekoppeld, zonder de mogelijkheid iets aan deze constructie te veranderen. Meestal is dit geen probleem voor de applicatie van een microcontroller, maar voor de EVAjig is dit een beperkend criteria door de brede schaal aan PCBA’s die moeten getest kunnen worden. + +## Oplossing + +EVAbits heeft dit probleem herkent en heeft een opdracht aangemaakt om deze beperking te verhelpen. Het bedrijf heeft kennis in field-programmable gate-array’s (FPGA). *Een FPGA is een type circuit dat na de productie door de gebruiker geconfigureerd kan worden om specifieke taken uit te voeren. Deze configuratie gebeurt door het programmeren van de logische blokken en verbindingsroutes binnen de FPGA. Hierdoor kan een FPGA worden aangepast aan een breed scala van toepassingen, van eenvoudige logische functies tot complexe digitale systemen. +De kern van een FPGA bestaat uit duizenden tot miljoenen programmeerbare logische blokken en een netwerk van interconnecties. Deze logische blokken kunnen worden geconfigureerd om elementaire functies uit te voeren, zoals AND, OR, en NOT-operaties, en ze kunnen worden gecombineerd om complexere digitale circuits te vormen. De interconnecties zorgen ervoor dat deze logische blokken op verschillende manieren met elkaar kunnen worden verbonden, afhankelijk van de vereisten van de toepassing. +Een van de grootste voordelen van een FPGA is zijn flexibiliteit. Omdat het apparaat kan worden geherprogrammeerd, kunnen ontwerpers hun hardwareontwerpen aanpassen en optimaliseren zonder dat nieuwe fysieke chips nodig zijn. Daarnaast kunnen FPGAs meerdere taken parallel uitvoeren, wat resulteert in hoge verwerkingssnelheden. Dit maakt ze ideaal voor gebruik in toepassingen zoals signaalverwerking, communicatiesystemen, en complexe rekenintensieve taken. +In vergelijking met een microcontroller biedt een FPGA veel meer flexibiliteit. Waar een microcontroller vast gekoppeld is aan bepaalde communicatiechips, kan een FPGA deze functionaliteit emuleren door de hardware intern opnieuw te configureren. Dit betekent dat een FPGA verschillende soorten communicatieprotocollen kan nabootsen zonder de beperkingen van vooraf vastgestelde hardware. Hierdoor kan een FPGA meerdere functies en communicatieprotocollen tegelijkertijd afhandelen, wat ideaal is voor complexe en veelzijdige toepassingen.* De configuraties binnen de FPGA zijn beschrijven in VHDL (VHSIC Hardware Description Language), in deze taal worden signalen en primitieve logica’s beschrijven. + +## Doel + +Het doel van de opdrachtgever is om binnen zes maanden een proof-of-concept te implementeren voor de EVAjig, waarbij de huidige microcontroller gebaseerde implementatie wordt vergeleken met een nieuwe FPGA-gebaseerde oplossing. Deze proof-of-concept moet aantonen dat de FPGA-oplossing verbetering biedt in flexibiliteit en communicatiecapaciteit vergeleken met de huidige implementatie. + +## Onderzoek + +De concrete onderzoeksvraag is "_Welke communicatiemiddelen tussen FPGA en computer zijn beschikbaar, wat zijn voor- en nadelen ten opzichte van snelheid, betrouwbaarheid en kosten en hoe dit communicatiemiddel zou moeten gebruikt worden?_" + +De huidige implementatie op de microcontroller, **echter*** de software op de microcontroller, hoort bijna onveranderd op de FPGA-implementatie te kunnen draaien. Wel moet de software met de FPGA kunnen praten, dit vereist een vast communicatieprotocol tussen de software en de firmware architectuur. Er zijn vele communicatieprotocollen beschikbaar met elk hun eigen use-case. In dit verslag zou onderzocht **worden, wel protocol*** het beste geschikt is voor communicatie tussen de firmware en de software ten opzichte van snelheid, flexibiliteit en kosten. + +## Stakeholders + +| Naam | Organisatie | Rol | +| ------------------- | --------------- | ------------------------------ | +| Jan Stegenga | EVAbits | Stagebegeleiding | +| Erik Krallen | EVAbits | Stagebegeleiding | +| Kobus Bijker | Hanzehogeschool | Stagebegeleiding / Beoordelaar | +| Nienke van der Spek | Hanzehogeschool | Beoordelaar Communicatie | + +## Beroepsproducten + +Concrete beroepsproducten die van EVAbits werden gevraagd zijn: + +### Demonstratie Zephyr OS op Efinix' Sapphire Core + +De opdrachtgever gebruikt voor de huidige implementatie op de microcontroller Zephyr OS. Zephyr OS is een *Real-Time Operating System (RTOS), een besturingssysteem dat is ontworpen om applicaties te draaien waarbij het belangrijk is dat ze reageren op gebeurtenissen binnen een strikte tijdslimiet. Dit type besturingssysteem wordt vaak gebruikt in embedded systemen, waar tijdige en voorspelbare reacties op externe signalen cruciaal zijn. Zephyr OS is een open-source real-time operating system dat is ontwikkeld voor het draaien op embedded apparaten en Internet of Things (IoT) toepassingen. Het is ontworpen om lichtgewicht, schaalbaar en veilig te zijn, waardoor het geschikt is voor een breed scala aan toepassingen, van eenvoudige sensoren tot complexe industriële besturingssystemen.* Efinix is een fabrikant van FPGA’s inclusief een reeks handige core-modules. De Sapphire Core is een processor logicamodule geschreven en geoptimaliseerd voor hun FPGA, daarmee is het mogelijk minder primitieve operatie in Zephyr OS te draaien. Deze core gebruikt de RISC-V architectuur. Voortaan wordt Sapphire core ook RISC-V core genoemd om verwarring met Zephyr OS te voorkomen. + +### Demonstratie communicatie tussen de FPGA en een computer via EVAbus (RISC-V Core) + +EVAbits heeft hun eigen datastructuur bedacht voor het effectieve aansturen van de EVAjig. Dit is geïmplementeerd met behulp van Google’s Proto Buffers (Protobuf), *Protobuf is een efficiënt en taalneutraal data-serialisatieformaat ontwikkeld door Google, dat wordt gebruikt voor het uitwisselen van gestructureerde informatie tussen verschillende programma's en systemen. Het maakt gebruik van een eenvoudig en uitgebreid berichtformaat om data in een compacte, snelle en makkelijk te lezen manier te coderen en decoderen.* Bedoeling is het om dit in de RISC-V core te laten draaien. + +### Demonstratie communicatie tussen de FPGA en RISC-V Core (VHDL) + +Als volgt moet er gecommuniceerd worden tussen de primitieve FPGA Core en de RISC-V Core om data zoals configuratie uit te wisselen. Dit moet van beide kanten ontwikkeld worden. + +### Implementatie van een driver in Zephyr OS voor het aansturen van de FPGA + +Zephyr OS is modulair ontwikkeld om een brede schaal aan microcontrollers te ondersteunen. Hiervoor zijn er verschillende drivers beschikbaar. De FPGA hoort zelf geconfigureerd te worden, hiervoor is geen driver beschikbaar en deze dient zelf ontwikkeld te worden. EVAbits wil graag dat er een driver voor Zephyr OS wordt geschreven om makkelijk de FPGA aan te sturen. + +### Onderzoeksrapport communicatieprotocollen + +De communicatie tussen de FPGA en de RISC-V Core kan op verschillende manieren geïmplementeerd worden. Hiervoor zijn vele protocollen beschikbaar en toepasbaar. De opdrachtgever wil graag een vergelijking hebben tussen deze protocollen om beter te kunnen kiezen welke voor de EVAjig het beste is. + +# Hoofdstuk HBO-I competenties + +## Projectmatig werken + +*Tijdens de stageperiode zijn er planningen gemaakt om de werkzaamheden gestructureerd aan te pakken.* + +## Onderzoeken + +*Er is onderzoek gedaan naar welk communicatieprotocol het meest geschikt is voor de toepassing op de FPGA. Dit onderzoek vormde de basis voor de verdere ontwikkeling en implementatie van de nieuwe systemen.* + +## Analyseren + +*De huidige implementatie van het systeem is geanalyseerd om eventuele verbeterpunten te identificeren. Deze analyse maakte het mogelijk om gerichte aanpassingen te doen en de efficiëntie van het systeem te verhogen.* + +## Ontwerpen + +*Op basis van de analyse zijn nieuwe implementaties ontworpen voor de FPGA. Deze ontwerpen omvatten verbeterde logische schema’s en configuraties die de prestaties van het systeem optimaliseren.* + +## Realiseren + +*De nieuwe ontwerpen zijn getest op de FPGA om de functionaliteit en prestaties te verifiëren.* + +## Schriftelijke Vaardigheden + +*Gedurende de stage zijn documentaties en dit verantwoordingsverslag geschreven. Deze documenten zijn handig voor de opdrachtgever en de Hanzehogeschool.* + +## Adviseren + +*Op basis van de nieuwe implementatie en de verkregen inzichten zijn aanbevelingen gedaan voor verdere optimalisaties en verbeterpunten. Deze adviezen helpen het team om de prestaties en efficiëntie van de projecten te +verbeteren.* + +# Hoofdstuk Onderzoek + +## Protocollen + +In dit hoofdstuk zullen verschillende protocollen toegelicht worden. Een protocol is een afspraak tussen apparaten hoe gecommuniceerd wordt. Een voorbeeld is een spreektaal, er is afgesproken hoe bepaalde dingen worden genoemd en dat er regels zijn in de taal. Als twee personen er niet over eens zijn, welke taal wordt gesproken of hoe zij de taal spreken, kunnen zij niet met elkaar communiceren. In communicatieprotocollen zijn gedefinieerd welke signalen (draadjes/lijnen) er zijn en hoe deze moeten aangestuurd worden, wanneer gaat stroom over welk signaal, hoeveel tijd zit er tussen etc. + +Protocollen hebben meestal een clock-signaal, die de snelheid van communicatie bepaald. Bijvoorbeeld wanneer het signaal stijgend is (oftewel van een lage waarde naar een hoge waarde gaat) worden de data signalen op een bepaalde manier uitgelezen. Een vallend signaal is als het signaal van een hoge waarde naar een lage waarde gaat. + +In de komenden beschrijvingen worden VDD en GND niet genoemd of meegeteld. VDD is de stroomvoering van desbetreffende chip en GND is de aarding van de chip. + +Vele protocollen werken naar het bus- of master-slave principe. Bij een bus zijn meerdere apparaten zoals chips en processoren parallel aan de signalen aangesloten. Er is één master is gedefinieerd, die controle heeft over het gebeuren op de bus en één of meerdere slaves, die op aanvraag van de master kunnen lezen van de bus of schrijven op de bus. Een aangesloten chip zou voortaan *node* genoemd worden. + +### Inter-Integrated-Circuit Protocol + +Inter-Integrated-Circuit (\iic) is één van de meest makkelijke protocollen. \iic is ontwikkeld in 1982 door Philips Semiconductor. [@i2c-ti, chap. 1.1] \iic is een bus-systeem, die minstens één master en één slave eist. \iic bestaat uit twee signalen, een voor de data die moet worden verstuurd en een voor de clock. [@i2c-ti, chap. 2.1] + +Elke node heeft een adres waarop het wordt aangestuurd, er is alleen communicatie mogelijk tussen de master en een slave, het is niet mogelijk dat slaves onderling kunnen communiceren. Als standaard is 100kbit/s gedefinieerd als snelheid van communicatie, maar \iic is compatibel tot een snelheid van 3,4Mbit/s genoemd _high speed mode_. [@i2c-ti, chap. 1.2] + +#### Voordelen {.unnumbered} + +\iic heeft een eenvoudige bedrading en is makkelijker en goedkoper te implementeren. Ook is hot-swapping met \iic mogelijk, dat betekent dat slaves kunnen verwijderd of toegevoegd worden aan de bus zonder dat de bus moet uitgeschakeld of herstart moet worden. [@i2c-hotswap] + +#### Nadelen {.unnumbered} + +Doordat er maar één datalijn is, is \iic half-duplex. Half-duplex betekent, dat er of kan geschreven worden door de master of er wordt geschreven door een slave, er kan niet tegelijk gecommuniceerd worden. [@i2c-ti, chap. 2.1] Ook is \iic relatief langzaam in vergelijking met bv. SPI. [@i2c-ti, chap. 1.2; @spi-silabs] + +### Serial Peripheral Interface + +Het Serial Peripheral Interface (SPI) protocol is ook een bus-protocol. Het is complexer en flexibeler ten opzichte van \iic, het is een 3-signal protocol. Er is een clock, geleverd door de master en een MOSI- en MISO-signaal. De MOSI-lijn (Master Out, Slave In) wordt gebruikt om data naar een slave te sturen, de slave ontvangt data. De MISO-lijn (Master In, Slave Out) wordt gebruikt om data vanuit een slave naar de master te sturen. Er is een optionele Chip-Select lijn bij het protocol om eenvoudig een node te selecteren. [@spi-ti, chap. 2.2] + +### Universal Asynchronous Receiver/Transmitter + +Universal Asynchronous Receiver/Transmitter (UART) is een asynchrone protocol, dus tegelijk kan geschreven en gelezen worden. In tegenstelling tot de bovenstaande protocollen is UART geen bus-protocol en werkt alleen tussen twee nodes. UART heeft twee datalijnen: RX en TX, RX staat voor _Receive Text_ en TX staat voor _Transmit Text_ en heeft geen clock. Door beide nodes wordt een clock-snelheid gedefinieerd, dat wordt _Baud_ genoemd. Er wordt simpelweg de data geschreven met de gedefinieerde snelheid inclusief een start- en stop-bit en optioneel een parity-bit voor fout-detectie. + +#### Voordelen {.unnumbered} + +Zoals bij \iic heeft UART een eenvoudige bedrading, dus is het goedkoop te implementeren. Ook is UART technisch makkelijk te implementeren. + +#### Nadelen {.unnumbered} + +## Toepassing op EVAjig + +Voor de geplande toepassing op de EVAjig is het gekozen protocol de bottleneck. De computer stuurt data naar de FPGA via één protocol om zo de data via verschillende protocollen naar de PCB's door te sluizen. + +# Bijlagen {.unnumbered} + +<!-- +## Bijlage I + +\begin{tikzpicture} +\tikzstyle{terminator} = [rectangle, draw, text centered, rounded corners, minimum height=2em] +\tikzstyle{process} = [rectangle, draw, text centered, minimum height=2em] +\tikzstyle{decision} = [diamond, draw, text centered, minimum height=2em] +\tikzstyle{data}=[trapezium, draw, text centered, trapezium left angle=60, trapezium right angle=120, minimum height=2em] +\tikzstyle{connector} = [draw, -latex'] +\node [terminator, fill=blue!20] at (0,0) (start) {\textbf{Start}}; +\node [data, fill=blue!20] at (0,-2) (data) {Provide data}; +\node [decision, fill=blue!20] at (0,-5) (decision) {Valid data?}; +\node [process, fill=red!20] at (3.5,-5) (error) {Error}; +\node [process, fill=green!20] at (0,-8) (success) {Success}; +\node [terminator, fill=blue!20] at (0,-10) (end) {\textbf{End}}; +\node[draw=none] at (1.85, -4.75) (no) {No}; +\node[draw=none] at (0.35, -6.75) (yes) {Yes}; +\path [connector] (start) -- (data); +\path [connector] (data) -- (decision); +\path [connector] (decision) -- (error); +\path [connector] (decision) -- (success); +\path [connector] (error) |- (end); +\path [connector] (success) -- (end); +\end{tikzpicture} +--> + +# Literatuurlijst +\ No newline at end of file diff --git a/template.tex b/template.tex @@ -0,0 +1,74 @@ +$prefix()$ +% \usepackage[ +% backend=biber, +% bibencoding=utf8 +% ]{biblatex} +% \addbibresource{bibliography.bib} +\begin{document} +$if(has-frontmatter)$ +\frontmatter +$endif$ +$if(title)$ +\maketitle +\pagecolor{yellow}\afterpage{\nopagecolor} +\thispagestyle{empty} +\newpage +$if(abstract)$ +\begin{abstract} +$abstract$ +\end{abstract} +$endif$ +$endif$ + +$for(include-before)$ +$include-before$ + +$endfor$ +$if(toc)$ +$if(toc-title)$ +\renewcommand*\contentsname{$toc-title$} +$endif$ +{ +\setcounter{tocdepth}{$toc-depth$} +\tableofcontents +} +$endif$ +$if(lof)$ +\listoffigures +$endif$ +$if(lot)$ +\listoftables +$endif$ +$if(linestretch)$ +\setstretch{$linestretch$} +$endif$ +$if(has-frontmatter)$ +\mainmatter +$endif$ +$body$ + +$if(has-frontmatter)$ +\backmatter +$endif$ +$if(natbib)$ +$if(bibliography)$ +$if(biblio-title)$ +$if(has-chapters)$ +\renewcommand\bibname{$biblio-title$} +$else$ +\renewcommand\refname{$biblio-title$} +$endif$ +$endif$ + \bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} + +$endif$ +$endif$ +$if(biblatex)$ +\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ + +$endif$ +$for(include-after)$ +$include-after$ + +$endfor$ +\end{document}