diff options
Diffstat (limited to 'doc/report')
-rw-r--r-- | doc/report/build/notes.pdf | bin | 47404 -> 47404 bytes | |||
-rw-r--r-- | doc/report/build/z80uPC.pdf | bin | 971046 -> 971051 bytes | |||
-rw-r--r-- | doc/report/build/z80uPC_nostyle.pdf | bin | 0 -> 141261 bytes | |||
-rw-r--r-- | doc/report/makefile | 2 | ||||
-rw-r--r-- | doc/report/res/addrspace.pdf | bin | 7208 -> 7210 bytes | |||
-rw-r--r-- | doc/report/res/block_diagram.pdf | bin | 23233 -> 23235 bytes | |||
-rw-r--r-- | doc/report/res/iospace.pdf | bin | 6118 -> 6120 bytes | |||
-rw-r--r-- | doc/report/res/kernel_mem_base.pdf | bin | 17254 -> 17257 bytes | |||
-rw-r--r-- | doc/report/res/mem_kern_alloc.pdf | bin | 8130 -> 8132 bytes | |||
-rw-r--r-- | doc/report/z80uPC.tex | 2 | ||||
-rw-r--r-- | doc/report/z80uPC_nostyle.tex | 163 |
11 files changed, 165 insertions, 2 deletions
diff --git a/doc/report/build/notes.pdf b/doc/report/build/notes.pdf Binary files differindex 1281c1f..56e2cd1 100644 --- a/doc/report/build/notes.pdf +++ b/doc/report/build/notes.pdf diff --git a/doc/report/build/z80uPC.pdf b/doc/report/build/z80uPC.pdf Binary files differindex 729a9e8..df353cb 100644 --- a/doc/report/build/z80uPC.pdf +++ b/doc/report/build/z80uPC.pdf diff --git a/doc/report/build/z80uPC_nostyle.pdf b/doc/report/build/z80uPC_nostyle.pdf Binary files differnew file mode 100644 index 0000000..87cdd60 --- /dev/null +++ b/doc/report/build/z80uPC_nostyle.pdf diff --git a/doc/report/makefile b/doc/report/makefile index e10c0b9..d88b1bb 100644 --- a/doc/report/makefile +++ b/doc/report/makefile @@ -2,7 +2,7 @@ BUILD_DIR := build RES_DIR := res -SOURCES := z80uPC.tex notes.tex +SOURCES := z80uPC.tex z80uPC_nostyle.tex notes.tex DOCUMENTS := $(patsubst %.tex,$(BUILD_DIR)/%.pdf,$(SOURCES)) RES_SRC := $(wildcard $(RES_DIR)/*.svg) diff --git a/doc/report/res/addrspace.pdf b/doc/report/res/addrspace.pdf Binary files differindex 96ac657..abf9fed 100644 --- a/doc/report/res/addrspace.pdf +++ b/doc/report/res/addrspace.pdf diff --git a/doc/report/res/block_diagram.pdf b/doc/report/res/block_diagram.pdf Binary files differindex 204a22e..57b42d6 100644 --- a/doc/report/res/block_diagram.pdf +++ b/doc/report/res/block_diagram.pdf diff --git a/doc/report/res/iospace.pdf b/doc/report/res/iospace.pdf Binary files differindex c1773fd..ba36d9d 100644 --- a/doc/report/res/iospace.pdf +++ b/doc/report/res/iospace.pdf diff --git a/doc/report/res/kernel_mem_base.pdf b/doc/report/res/kernel_mem_base.pdf Binary files differindex 1a6a84c..7d2a257 100644 --- a/doc/report/res/kernel_mem_base.pdf +++ b/doc/report/res/kernel_mem_base.pdf diff --git a/doc/report/res/mem_kern_alloc.pdf b/doc/report/res/mem_kern_alloc.pdf Binary files differindex 4a21f11..fd02dfd 100644 --- a/doc/report/res/mem_kern_alloc.pdf +++ b/doc/report/res/mem_kern_alloc.pdf diff --git a/doc/report/z80uPC.tex b/doc/report/z80uPC.tex index 993be83..50034ec 100644 --- a/doc/report/z80uPC.tex +++ b/doc/report/z80uPC.tex @@ -61,7 +61,7 @@ interfacce seriali e altri circuiti di supporto. Successivamente per l'aspetto software il progetto deve implementare i drivers per ogni circuito presente sulla scheda in modo da semplificare la programmazione. - L'obiettivo secondario del progetto, una volta terminata la costruzione + L'obiettivo opzionale del progetto, una volta terminata la costruzione hardware, \`e di realizzare una kernel monolitica che offre funzioni minimali simili ad un sistema UNIX, quali processi, filesystem, memory management e drivers. diff --git a/doc/report/z80uPC_nostyle.tex b/doc/report/z80uPC_nostyle.tex new file mode 100644 index 0000000..a3421ef --- /dev/null +++ b/doc/report/z80uPC_nostyle.tex @@ -0,0 +1,163 @@ +\documentclass[a4paper, 11pt]{article} + +\usepackage{array} +\usepackage{float} +\usepackage{wrapfig} +\usepackage{textgreek} +\usepackage{graphicx} + +% source code +\usepackage{listings} + +% set correct hypenation +\usepackage[italian]{babel} + +% to fix macros +\usepackage{xspace} +% commands +% macro for project name +\newcommand{\prj}{Z80\textmu PC\xspace} + +% invert signal (not, active low) +\newcommand{\inv}[1]{$\overline{\mbox{#1}}$} + +% metadata +\title{\prj Single Board \\ Computer Development } +\author{Naoki Pross} + +% document +\begin{document} + +\maketitle +\begin{abstract} + + Lo Zilog Z80 \`e un processore a 8 bit che fu introdotto nel 1976 che ebbe + un grandissimo successo nel mondo dell'elettronica e dell'informatica + nella fine del 20esimo secolo. In memoria di questo pioniere + dell'industria dei sistemi informatici questo progetto documenta la + realizzazione di un microcomputer a scopo generico a base di esso. + L'obiettivo primario dunque \`e di realizzare una scheda simile ad una + motherboard dei computers venduti all'epoca completa di RAM, ROMs, + interfacce seriali e altri circuiti di supporto. Successivamente per + l'aspetto software il progetto deve implementare i drivers per ogni + circuito presente sulla scheda in modo da semplificare la programmazione. + L'obiettivo opzionale del progetto, una volta terminata la costruzione + hardware, \`e di realizzare una kernel monolitica che offre funzioni + minimali simili ad un sistema UNIX, quali processi, filesystem, memory + management e drivers. + +\end{abstract} + +\section{Hardware} + +\subsection{Specifiche tecniche dello Z80} + +Lo Z80 \`e un processore molto minimalistico se paragonato a ci\`o che si +trova oggi sul mercato dei microcontrollori. Per il progetto \prj la CPU in +uso \`e il modello originale \texttt{Zilog Z8400} che non dispone di moduli +aggiuntivi integrati come i modelli SoC odierni. La scelta di una CPU tanto +semplice \`e la conseguenza del design didattico del progetto, inoltre senza +alcun dispositivo interno lo \texttt{Z8400} si presenta con un address space +completamente vuoto, ad eccezzione del punto d'inizio e i vettori di reset. + +Lo Z80 utilizza I/O paralleli sia per la lina a 16 degli indizzi che per la +linea dati a 8 bit e dispone di 6 registri 8 bit ad utilizzo generico +combinabili in coppie per ottenere un valore a 16 bit. Per il controllo dei +dispositivi esterni, come lettura e scrittura esso possiede delle linee di +controllo dedicate come {\tt\inv{RD}}, {\tt\inv{WR}}, {\tt\inv{MREQ}}, ecc. In +quanto instruction set, lo Z80 ha 158 istruzioni possibili di cui 78 sono un +sottoinsieme dello 8080A, architettate per poter mantere una +retrocompatiblit\`a. + +\begin{table}[ht]\centering +\caption{Riassunto delle specifiche} + +\begin{tabular}{ l l } + \\ \hline + Dimensione Indirizzi & 16 bit \\ + Dimensione Dati (word) & 8 bit \\ + Spazio Indirizzabile & 64 KB \\ + Registri Generici 8 bit & 6 ({\tt A..F}) \\ + Registri 16 bit & 2 ({\tt SP, PC}) \\ + Clock speed & 8 MHz, 6MHz, 4MHz, 2.5MHz \\ + \hline +\end{tabular} +\end{table} + +\subsection{Componenti e modello di design} + +Il minimo necessario per far funzionare uno Z80 sono una {\tt RAM} ed una {\tt +ROM}, ma avendo a disposizione altri dispositivi I/O lo \prj dispone anche di +una porta seriale, di una porta parallela e di un counter timer; Hardware che +si presenta normalmente all'interno di microcontrollori odierni. + +\begin{table}[hb]\centering +\caption{Lista dei componenti} +\begin{tabular}{ >{\tt}l >{\tt\bfseries}l >{\footnotesize}p{.7\linewidth} } + \\ \hline + ROM & M28C64 & EEPROM da 8KB x 8 bit (64K) per il BIOS / Bootloader / + OS installata doppia per avere 16KB \\ + RAM & HM62256B & SRAM da 32KB x 8bit (256K) \\ + CTC & Z8430 & Counter timer circuit ufficiale di Zilog a 4 canali + programmabili \\ + PIO & Z8420 & Parallel input/output controller di Zilog per avere un + intefaccia digitale con due porte da 8 bit \\ + MMU & M4-32/32-15JC & CPLD programmabile che implementa una memory + management unit semplificata in grado di gestire i 5 + bit pi\`u significativi della linea di indirizzi \\ + USART & TL16C550C & Interfaccia USART per poter comunicare utilizzando il + protocollo RS232 \\ + \hline +\end{tabular} +\end{table} + +Il design dello \prj \`e costruito sulla falsa riga di un Arduino o di un +EasyPIC con l'aggiunta di funzionalit\`a a scopo didattico quali; la +possiblit\`a di cambiare la velocit\`a di clock tra 4MHz, 200Hz o manuale +(mediante un bottone sulla scheda) e una serie di display a 7 segmenti per +vedere in tempo reale i valori sui bus degli indirizzi e dei dati. +\begin{center} +\begin{tabular}{ >{\bfseries}r p{.8\linewidth} } + 0Hz & Il clock manuale \`e un bottone che permette di creare + le pulsazioni, per poter analizzare ogni istruzione \\ + 200Hz & Mediante un classico circuito con un LM555 si ha un clock + per eseguire i programmi a velocit\`a rallentata \\ + 4MHz & Clock per esecuzione a velocit\`a piena (normale) +\end{tabular} +\end{center} + +\subsection{Memory management unit} + +Alcuni modelli sucessori dello Z8400 implementavano ina MMU (Memory Management +Unit) SoC che permetteva di ampliare la dimensione dell'address space, +permettendo quindi di mappare pi\`u memorie o dispositivi separati negli +stessi indirizzi. Ci\`o \`e un sistema \`e comune nei sistemi a base di +microcontrollers per ovviare al problema dello spazio. Lo \prj per\`o ha un +architettura pi\`u simile ad un computer X86 in cui la MMU viene utilizzata +per la gestione delle \emph{pagine} di memoria. + +Il concetto di pagine (pages in inglese) \`e necessario per sistemi con un +supporto per il multitasking o per poter ampliare la memoria dinamica. + +\section*{Glossario Tecnico} + +\begin{tabular}{ >{\bfseries}p{.3\linewidth} p{.7\linewidth} } + + Address Space & In informatica l'\emph{address space} \`e un intervallo di + indirizzi che possono corrispondere a indirizzi in rete, regioni di un + dispositivo, di una memoria o di un qualsiasi altro dispositivo fisico o + logico. Per questo progetto \emph{address space} si riferisce + all'intervallo indirizzabile dal processore, ovvero $2^{16}$ locazioni + siccome il sistema dispone di un bus a 16 bit. \\ + + Registro & Un registro \`e un dispositivo di memoria in cui \`e possibile + pu\`o leggere e/o scrivere un certo valore. Normalmente in un computer / + microcontrollore la dimensione della memoria \`e data dall'architettura, + dunque 8, 16, 32 o 64 bits. In questo documento viene viene comunemente + utilizzato per riferirsi ad una memoria di un dispositivo fisico come la + CPU o un IC seriale. \\ + + +\end{tabular} + +\end{document} |