summaryrefslogtreecommitdiff
path: root/plan_micro.tm
diff options
context:
space:
mode:
authorAlex AUVOLAT <alex.auvolat@ens.fr>2014-01-07 15:51:01 +0100
committerAlex AUVOLAT <alex.auvolat@ens.fr>2014-01-07 15:51:01 +0100
commit176cc04414d44b9eebdc9627c99f9b6e5e92ba98 (patch)
tree1a3b2e736bb57e05efe43f7e308eaaca8b3e543b /plan_micro.tm
parentd9f8744ea219fb04057059cdcbf7162534c63852 (diff)
downloadSystDigit-Projet-176cc04414d44b9eebdc9627c99f9b6e5e92ba98.tar.gz
SystDigit-Projet-176cc04414d44b9eebdc9627c99f9b6e5e92ba98.zip
Document ; add hlt instruction ; make monitor faster.
Diffstat (limited to 'plan_micro.tm')
-rw-r--r--plan_micro.tm127
1 files changed, 55 insertions, 72 deletions
diff --git a/plan_micro.tm b/plan_micro.tm
index acfe710..4ef4bda 100644
--- a/plan_micro.tm
+++ b/plan_micro.tm
@@ -3,14 +3,16 @@
<style|generic>
<\body>
- <doc-data|<doc-title|Spécification processeur>>
+ <doc-data|<doc-title|Spécification processeur>|<doc-subtitle|Projet Système
+ Digital 2013>|<doc-author|<author-data|<author-name|A.Auvolat, E.Enguehard,
+ J.Laurent>>>>
Nous proposons ici une spécification pour un processeur minimaliste 16 bit
RISC.
<section|Registres>
- La machine dispose de 8 registres \S généraux \T :
+ La machine dispose de 8 registres \S généraux \T, tous de taille 16 bits :
\;
@@ -36,64 +38,48 @@
par les instructions <verbatim|pop> et <verbatim|push>
</itemize>
- De plus, le processeur dispose d'un registre non manipulable, le registre
- <verbatim|PC> (program counter).
+ Ces 8 registres sont tous manipulables par les instructions prenant un
+ registre comme argument. De plus, le processeur dispose d'un registre
+ manipulable uniquement par certaines instructions spécifiques, le registre
+ <verbatim|PC> (program counter : contient l'adresse de l'instruction
+ courante).
Les numéros de registres sont donc codés sur 3 bits.
<section|Mémoire>
- La mémoire est adressée sur 16 bits, il y a donc 64ko disponnibles.
+ La mémoire est adressée sur 16 bits et les mots mémoire font 8 bits, il y a
+ donc 64ko disponnibles.
Le CPU est little-endian (le mot 0x1234 est codé 34 puis 12)
- <subsection|Modèle simple>
-
On définit plusieurs zones de mémoire :
<big-table|<tabular*|<tformat|<table|<row|<cell|0x0000 - 0x3FFF>|<cell|ROM
pour programme utilisateur>>|<row|<cell|0x4000 - 0x7FFF>|<cell|MMIO (seuls
- quelques octets seront utilisés)>>|<row|<cell|0x8000 - 0xFFFF>|<cell|RAM
- pour programme utilisateur>>>>>|Memory map>
-
- <subsection|Modèle avec affichage bitmapé>
-
- <em|De moins en moins de chances d'être implémenté... mais ça n'a rien
- d'impossible.>
-
- On définit plusieurs zones de mémoire :
+ quelques octets sont utilisés)>>|<row|<cell|0x8000 - 0xFFFF>|<cell|RAM pour
+ programme utilisateur>>>>>|Memory map>
- <big-table|<tabular*|<tformat|<table|<row|<cell|0x0000 - 0x3FFF>|<cell|ROM
- pour programme utilisateur>>|<row|<cell|0x4000 - 0x6FFF>|<cell|VGA
- Framebuffer (noir et blanc, 336x288)>>|<row|<cell|0x7000 -
- 0x77FF>|<cell|ROM pour police d'écriture>>|<row|<cell|0x7800 -
- 0x7FFF>|<cell|MMIO (seuls quelques octets seront
- utilisés)>>|<row|<cell|0x8000 - 0xFFFF>|<cell|RAM pour programme
- utilisateur>>>>>|Memory map>
-
- Les 0x3000 (12288) octets de mémoire pour le VGA correspondent à un
- affichage bitmapé 336x288 noir et blanc (un octet représente 8 pixels), ce
- qui fait avec une police d'écriture 8x8 un affichage texte possible en
- 42x36.
-
- Les 0x0800 (2048) octets de RAM pour la fonte suffisent à définir 256
- caractères en résolution 8x8 (donc 8 octets par caractère).
+ Les bits suivants sont utilisés pour la MMIO :
- Sur les 0x8000 octets alloués pour la MMIO, on en aura un pour l'entrée
- série, un pour la sortie série, un pour l'horloge et c'est tout.
-
- Le reste est auto-explicite.
+ <big-table|<tabular*|<tformat|<table|<row|<cell|>>>>><tabular*|<tformat|<table|<row|<cell|byte
+ at 0x4000>|<cell|Clock ticker (incremented every tick, reset on
+ read)>>|<row|<cell|byte at 0x4100>|<cell|Serial input (set when byte
+ received, reset on read)>>|<row|<cell|byte at 0x4102>|<cell|Serial output
+ (sends byte immediately on write)>>>>>|Addresses MMIO>
<section|Jeu d'instruction>
Les instructions sont codées sur 16 bits. Les tableaux suivants montrent
- les instructions avec les poids forts à gauche et les poids faibles à
- droite.
+ les instructions avec les bits de poids forts à gauche et les bits de poids
+ faibles à droite (convention contraire à celle exprimée dans le
+ <verbatim|README>).
<subsection|Types d'instructions>
<paragraph|Format de base><tabular*|<tformat|<cwith|2|2|1|-1|cell-lborder|1px>|<cwith|2|2|1|-1|cell-bborder|1px>|<cwith|2|2|1|-1|cell-tborder|1px>|<cwith|2|2|3|3|cell-rborder|1px>|<table|<row|<cell|5
- bits>|<cell|3 bits>|<cell|8 bits>>|<row|<cell|<math|I>>|<cell|<math|R>>|<cell|<math|\<ldots\>>>>>>>
+ bits>|<cell|3 bits>|<cell|8 bits>>|<row|<cell|<math|I>>|<cell|<math|R>>|<cell|<math|\<ldots\>>>>|<row|<cell|poids
+ forts>|<cell|>|<cell|poids faibles>>>>>
<paragraph|Format <math|R>><tabular*|<tformat|<cwith|2|2|1|-1|cell-lborder|1px>|<cwith|2|2|1|-1|cell-bborder|1px>|<cwith|2|2|1|-1|cell-tborder|1px>|<cwith|2|2|3|3|cell-rborder|1px>|<cwith|2|2|5|5|cell-rborder|1px>|<table|<row|<cell|5
bits>|<cell|3 bits>|<cell|3 bits>|<cell|3 bits>|<cell|2
@@ -141,7 +127,8 @@
<math|R<rsub|A>\<leqslant\>R<rsub|B>> then
<math|PC\<leftarrow\>R<rsub|>>>|<cell|non
signé>>|<row|<cell|01100>|<cell|J>|<cell|>|<cell|lra>|<cell|<math|E\<leftarrow\>PC+d>>|<cell|<math|d>
- signé>>|<row|<cell|01101>|<cell|>|<cell|>|<cell|<em|nop>>|<cell|>|<cell|>>|<row|<cell|01110>|<cell|>|<cell|>|<cell|<em|nop>>|<cell|>|<cell|>>|<row|<cell|01111>|<cell|>|<cell|>|<cell|<em|nop>>|<cell|>|<cell|>>|<row|<cell|10000>|<cell|K>|<cell|>|<cell|lw>|<cell|<math|R\<leftarrow\>mem<around*|(|R<rprime|'>+d|)>>
+ signé>>|<row|<cell|01101>|<cell|>|<cell|>|<cell|<em|nop>>|<cell|>|<cell|>>|<row|<cell|01110>|<cell|>|<cell|>|<cell|<em|nop>>|<cell|>|<cell|>>|<row|<cell|01111>|<cell|>|<cell|>|<cell|hlt>|<cell|halt
+ microprocessor (infinite loop)>|<cell|>>|<row|<cell|10000>|<cell|K>|<cell|>|<cell|lw>|<cell|<math|R\<leftarrow\>mem<around*|(|R<rprime|'>+d|)>>
(16 bits)>|<cell|>>|<row|<cell|10001>|<cell|K>|<cell|>|<cell|sw>|<cell|<math|mem<around*|(|R<rprime|'>+d|)>\<leftarrow\>R>
(16 bits)>|<cell|>>|<row|<cell|10010>|<cell|K>|<cell|>|<cell|lb>|<cell|<math|R<rsub|lo>\<leftarrow\>mem<around*|(|R<rprime|'>+d|)>
; R<rsub|hi>\<leftarrow\>0> (8 bits)>|<cell|>>|<row|<cell|10011>|<cell|K>|<cell|>|<cell|sb>|<cell|<math|mem<around*|(|R<rprime|'>+d|)>\<leftarrow\>R<rsub|lo>>
@@ -154,6 +141,9 @@
; R<rsub|lo>\<leftarrow\>0>>|<cell|>>|<row|<cell|11100>|<cell|>|<cell|>|<cell|<em|nop>>|<cell|>|<cell|>>|<row|<cell|11101>|<cell|>|<cell|>|<cell|<em|nop>>|<cell|>|<cell|>>|<row|<cell|11110>|<cell|>|<cell|>|<cell|<em|nop>>|<cell|>|<cell|>>|<row|<cell|11111>|<cell|>|<cell|>|<cell|nop<samp|>>|<cell|<math|\<varnothing\>>>|<cell|>>>>>|Instructions
reconnues par le microproceseur>
+ L'assembleur propose également quelques instructions \S étendues \T
+ permettant de faciliter la programmation :
+
<big-table|<tabular|<tformat|<cwith|1|1|1|-1|cell-bborder|1px>|<table|<row|<cell|<strong|Nom>>|<cell|<strong|Action>>|<cell|<strong|Code
assembleur de base équivalent>>>|<row|<cell|push
<math|R>>|<cell|<math|G\<leftarrow\>G-2 ;mem<around*|(|G|)>\<leftarrow\>R
@@ -183,36 +173,37 @@
<\references>
<\collection>
<associate|auto-1|<tuple|1|1>>
- <associate|auto-10|<tuple|2|1>>
- <associate|auto-11|<tuple|3|2>>
- <associate|auto-12|<tuple|4|3>>
- <associate|auto-13|<tuple|5|?>>
- <associate|auto-14|<tuple|4|?>>
- <associate|auto-15|<tuple|3|?>>
+ <associate|auto-10|<tuple|4|2>>
+ <associate|auto-11|<tuple|5|2>>
+ <associate|auto-12|<tuple|4|2>>
+ <associate|auto-13|<tuple|3|3>>
+ <associate|auto-14|<tuple|4|4>>
+ <associate|auto-15|<tuple|4|?>>
<associate|auto-16|<tuple|4|?>>
+ <associate|auto-17|<tuple|5|?>>
<associate|auto-2|<tuple|2|1>>
- <associate|auto-3|<tuple|2.1|1>>
- <associate|auto-4|<tuple|1|1>>
- <associate|auto-5|<tuple|2.2|1>>
- <associate|auto-6|<tuple|2|1>>
- <associate|auto-7|<tuple|3|1>>
- <associate|auto-8|<tuple|3.1|1>>
- <associate|auto-9|<tuple|1|1>>
+ <associate|auto-3|<tuple|1|2>>
+ <associate|auto-4|<tuple|2|2>>
+ <associate|auto-5|<tuple|3|2>>
+ <associate|auto-6|<tuple|3.1|2>>
+ <associate|auto-7|<tuple|1|2>>
+ <associate|auto-8|<tuple|2|2>>
+ <associate|auto-9|<tuple|3|2>>
</collection>
</references>
<\auxiliary>
<\collection>
<\associate|table>
- <tuple|normal|Memory map|<pageref|auto-4>>
+ <tuple|normal|Memory map|<pageref|auto-3>>
- <tuple|normal|Memory map|<pageref|auto-6>>
+ <tuple|normal|Addresses MMIO|<pageref|auto-4>>
<tuple|normal|Instructions reconnues par le
- microproceseur|<pageref|auto-15>>
+ microproceseur|<pageref|auto-13>>
<tuple|normal|Instructions supplémentaires (produites par
- l'assembleur)|<pageref|auto-16>>
+ l'assembleur)|<pageref|auto-14>>
</associate>
<\associate|toc>
<vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|Registres>
@@ -223,45 +214,37 @@
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
<no-break><pageref|auto-2><vspace|0.5fn>
- <with|par-left|<quote|1.5fn>|Modèle simple
- <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-3>>
-
- <with|par-left|<quote|1.5fn>|Modèle avec affichage bitmapé
- <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-5>>
-
<vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|Jeu
d'instruction> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-7><vspace|0.5fn>
+ <no-break><pageref|auto-5><vspace|0.5fn>
<with|par-left|<quote|1.5fn>|Types d'instructions
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-8>>
+ <no-break><pageref|auto-6>>
<with|par-left|<quote|6fn>|Format de base
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-9><vspace|0.15fn>>
+ <no-break><pageref|auto-7><vspace|0.15fn>>
<with|par-left|<quote|6fn>|Format <with|mode|<quote|math>|R>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-10><vspace|0.15fn>>
+ <no-break><pageref|auto-8><vspace|0.15fn>>
<with|par-left|<quote|6fn>|Format <with|mode|<quote|math>|I>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-11><vspace|0.15fn>>
+ <no-break><pageref|auto-9><vspace|0.15fn>>
<with|par-left|<quote|6fn>|Format K
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-12><vspace|0.15fn>>
+ <no-break><pageref|auto-10><vspace|0.15fn>>
<with|par-left|<quote|6fn>|Format <with|mode|<quote|math>|J>
<datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-13><vspace|0.15fn>>
+ <no-break><pageref|auto-11><vspace|0.15fn>>
<vspace*|1fn><with|font-series|<quote|bold>|math-font-series|<quote|bold>|Tableau
d'instructions> <datoms|<macro|x|<repeat|<arg|x>|<with|font-series|medium|<with|font-size|1|<space|0.2fn>.<space|0.2fn>>>>>|<htab|5mm>>
- <no-break><pageref|auto-14><vspace|0.5fn>
+ <no-break><pageref|auto-12><vspace|0.5fn>
</associate>
</collection>
</auxiliary> \ No newline at end of file