Miniräknare. Laborationsrapport Laborationsrapport i mikrodatorkonstruktion. En rapport skriven av teknologstuderande: Martin Bergström Gert Johnsen

Relevanta dokument
Digital- och datorteknik

Datakommunikation med IR-ljus.

Digital- och datorteknik

Ett minneselements egenskaper. F10: Minneselement. Latch. SR-latch. Innehåll:

Digitala projekt rapport

Minnet. Minne. Minns Man Minnet? Aktivera Kursens mål: LV3 Fo7. RAM-minnen: ROM PROM FLASH RWM. Primärminnen Sekundärminne Blockminne. Ext 15.

F2: Motorola Arkitektur. Assembler vs. Maskinkod Exekvering av instruktioner i Instruktionsformat MOVE instruktionen

Digitala Projekt Konstruktion av Tamagocchi. Av: Oskar Andersson D05 & Danial Rehman D05

Tenta i Digitalteknik

Minneselement,. Styrteknik grundkurs. Digitala kursmoment. SR-latch med logiska grindar. Funktionstabell för SR-latchen R S Q Q ?

Laboration i digitalteknik Introduktion till digitalteknik

Labyrintspelet EDI021 Grupp 5

KALKYLATOR LABORATION4. Laborationens syfte

Avbrottshantering. Övningsuppgifter

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

LV6 LV7. Aktivera Kursens mål:

Digitala projekt Konstruktion av nummerpresentatör

Högskolan i Halmstad Digital- och Mikrodatorteknik 7.5p. Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien

IE1205 Digital Design: F8: Minneselement: Latchar och Vippor. Räknare

Föreläsningsanteckningar till Konstruktionsmetoder

Digitala Projekt(EITF40) - Larm

Tenta i Digitalteknik

Umeå universitet Tillämpad fysik och elektronik Ville Jalkanen mfl Laboration Tema OP. Analog elektronik för Elkraft 7.

ALU:n ska anslutas hur då?

Innehållsförteckning. Figur- och tabellförteckning. Figure 1 Blockschema över hårdvaran...4 Figure 2 Blockschema över programet...

LABORATION DATORKONSTRUKTION TSEA83 UART. Namn och personnummer. Version: (OS)

MESI i Intel Core 2 Duo

EDI022. Digitala Projekt. Rapport. Björn Åkesson 5/20/2011

Läsminne Read Only Memory ROM

Försättsblad till skriftlig tentamen vid Linköpings universitet

Övningsuppgifter i Mikrodatorteknik 4p/5p

TENTAMEN Datorteknik (DO2005) D1/E1/Mek1/Ö1

Projektlaboration 4, synkronisering av klockan

Tentamen PC-teknik 5 p Lösningar och kommentarer

Tentamen PC-teknik 5 p

Sekvensnät. William Sandqvist

Systemkonstruktion SERIEKOMMUNIKATION

TENTAMEN. Datorteknik. D1/E1/Mek1/Ö Hjälpmedel: Häfte" ARM-instruktioner", A4-format, 17 sidor. Maxpoäng: 60p

HF0010. Introduktionskurs i datateknik 1,5 hp

Digitala Projekt - Snake Grupp - 7. Erik Ljung, d01elj Erik Simmons, d01es 25 maj 2005

Digital och Datorteknik EDA /2011. EDA 451 Digital och datorteknik 2010/2011. Uppbyggnad_och_funktion.pdf

2 UPPBYGGNAD OCH FUNKTION

Vad är en UART? Universal Asynchronous Receiver Transmitter parallella seriella parallell åttabitars signal mest signifikant bit

PARITETSKONTROLL. Om generatorn i vidstående exempel avkänner ett jämt antal ettor ger den en nolla ut. Detta innebär att överföringen

Digital Termometer J10 B4 A4 GND GND GND B1 GND GND GND GND B3 A3 +5V +5V A3 +5V A2 +5V +5V A2. +5v B16 A16 UREG UREG B1 6 AC AC A1 6 A6 6

DATORTEKNIK. Laboration D280 - D285. För Basic Stamp II

F6: I/O hantering. Typer av I/O i ett datorsystem. Protokoll för synkronisering. Drivrutiner. Memory mapped Port mapped. Polling Timed Interrupt DMA

RemoteBud. Inlämnas: Patrik Johnsson, e01pjo Viktor Karlsson, e01vk

Stegmotorn Tvåfasdrivning Unipolär lindning

DATORTEKNIK. Laboration D280 - D285. För Basic Stamp II

Laboration 5. Temperaturmätning med analog givare. Tekniska gränssnitt 7,5 p. Förutsättningar: Uppgift: Temperatur:+22 C

Föreläsningsanteckningar 3. Mikroprogrammering II

Temperaturmätare med lagringsfunktion DIGITALA PROJEKT EITF11 GRUPP 14, ERIK ENFORS, LUDWIG ROSENDAL, CARL MIKAEL WIDMAN

Maskinorienterad programmering

Datorsystem 2 CPU. Förra gången: Datorns historia Denna gång: Byggstenar i en dators arkitektur. Visning av Akka (för de som är intresserade)

Experiment med schmittrigger

Kombinationskretsar. Föreläsning 4 Digitalteknik Mattias Krysander Institutionen för systemteknik

0.1. INTRODUKTION Instruktionens opcode decodas till en språknivå som är förstålig för ALUn.

DIGITALTEKNIK I. Laboration DE2. Sekvensnät och sekvenskretsar

Laboration D181. ELEKTRONIK Digitalteknik. Kombinatoriska kretsar, HCMOS v 2.1

System S. Datorarkitektur - en inledning. Organisation av datorsystem: olika abstraktionsnivåer. den mest abstrakta synen på systemet

Adressavkodning - busskommunikation

Laborationshandledning

Digital- och datorteknik

Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien

Adressrum, programmerarens bild

Dataöverföring på Parallell- och serieform MOP 11/12 1

'HOWHQWDPHQ 6\VWHPNRQVWUXNWLRQ

Kodlås. Kopplingsschema över kodlåset PAL-18

DAT 015 Maskinorienterad programmering 2010/2011. Uppbyggnad_och_funktion.pdf

Tenta i Digitalteknik

CE_O3. Nios II. Inför lab nios2time

Uppgift 1 ( Betyg 3 uppgift )

Facit till övningsuppgifter Kapitel 13 Anslutning av minnes- och I/O-moduler till buss 13-1

Formula Blue. Digitala Projekt 8p. Jesper Ferm E02 Carl Hakenäs E04

Digitalteknik F9. Automater Minneselement. Digitalteknik F9 bild 1

F8: Undantagshantering

Talsystem Teori. Vad är talsystem? Av Johan Johansson

Tentamen i Digital Design

Tentamen. TSEA22 Digitalteknik 5 juni, 2015, kl

DIGITALTEKNIK I. Laboration DE1. Kombinatoriska nät och kretsar

Manual. Räknevåg 2240

EDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7)

3. Mikroprogrammering II

Vad är kommunikation? Vad är datorkommunikation? Dataöverföring; Inledning

Programallokering. Programtyper. Att placera program i flashrespektive. Program i FLASH-minne. Program i RAM-minne

Digitalteknik F12. Några speciella automater: register räknare Synkronisering av insignaler. Digitalteknik F12 bild 1

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

Effektpedal för elgitarr

Laboration i digitalteknik Datablad

T1-modulen Lektionerna Radioamatörkurs OH6AG OH6AG. Bearbetning och översättning: Thomas Anderssén, OH6NT Heikki Lahtivirta, OH2LH

Spänningsstyrd Oscillator

L/C-meter 2007 Byggbeskrivning v

F7: I/O hantering. Asynkron och synkron busscykel Bussfördelning. Periferikretsar

DATORTEKNIK. Tangentbord, knappsatser och deras avkodning

Datorsystemteknik DVGA03 Föreläsning 8

Styrteknik distans: Minneselement, register, räknare, AD-omv D4:1

Innehåll. 1 Inledning 3

Laboration Datorteknik TSIU02 2. I/O-programmering

GPIO - General Purpose Input Output

Transkript:

Laborationsrapport Laborationsrapport i mikrodatorkonstruktion Kurskod: ISI00 Klass: Enk Datum: 00-- Miniräknare En rapport skriven av teknologstuderande: Martin Bergström Gert Johnsen Institutionen i Skellefteå

Innehållsförteckning INLEDNING... TANGENTBORD... 4 MINNEN... 5 EPROM...5 RAM/RWM...5 TIDS BERÄKNING... 6 EXEMPEL PÅ TIDSBERÄKNING...6 GRINDAR SOM ANVÄNDES...6 VÄRSTA FALL BERÄKNINGAR...6 AVKODNING... 7 RESET... 8 RS... 8 OSCILLATOR...0 KOD ÄNDRING...0 INMATNING... UTMATNING... ÖVRIGA ÄNDRINGAR... KOPPLINGSSCHEMA 4

Inledning Uppgiften som blivit lagd framför våra fötter är att tillverka en miniräknare teoretiskt. Miniräknaren skall ha en seriell överföring till skärmen av typen RS. Den skall även ha ett tangentbord med studs fria knappar. För att klara denna uppgift har vi i gruppen diskuterat eventuella lösningar, vi har även diskuterat mellan grupperna för att inte förbise eventuella detaljer. Information om eventuella komponenter har vi funnit i böcker samt på tillverkarnas hemsidor där produktspecifikationer finns tillgängliga. För att rita ett kretsschema har vi använt oss av OrCad som till en början varit lite svårt att arbeta med, men efter ett tag har det blivit ganska lätt att använda. För eventuella simuleringar har vi använt oss av Electronic workbench eller Pspice.

Tangentbord Tangentbordet är en vital del av miniräknaren då det används för att mata in siffror, tecken och operander. Efter många om och men hittade vi tillslut en krets vid namnet MM74C9 som är en färdig tangentbords avkodare med inbyggt studsskydd. Funktionsmässigt är denna tangentbords avkodare anpassad för interrupt hantering, vilket medförde vissa tillägg för att hantera DA (data available). När processorn känner av DA, som vi har valt att sätta låg då det finns ett tecken tillgängligt, säger man till processorn att läsa tecknet som ligger på data ingångarna. Varje gång som processorn skall läsa ett värde gör man till en början en reset på DA-signalen. Tangentbordet är väldigt lätt att avkoda då den ger en binär kod ut. (Se truth table nedan) För att utföra en reset på DA-signalen på tangentbordet blev vi som sagt tvungna att göra en liten specialkoppling. Vi har valt att göra detta mha. stycken D-vippor. Den ena D-vippan sätter R på den andra låg, och utför därmed en reset. Detta då rätt värden på AS och R/W satts. Kopplingen ger en etta in på D4 på processorn tills dess att DA är satt. Efter detta går den låg, och ligger låg till dess att vi adresserar och skriver till kretsen, då går den hög igen. OE vid polling 746 5V-Hög 7408 7404 5 6 S C D R 74ALS74 4 Startar TGB avkodaren 7404 740 4 74ALS74 S C D R 5 6 4

Minnen EPROM Hur stora måste våra minnen vara? Det beror helt och hållet på hur stor programmet är samt hur många variabler vi skall ha utrymme för. Detta kan man bestämma genom att kolla närmare på våran brännfil. I vårt fall heter den filen T_Eprom.srec. Det är en s-fil (se nedan) där varje rad startar med tecknet s följt av en siffra. Siffran talar om hur många tecken adressen anges med. Följande siffror talar om hur lång raden är. Efter detta kommer adressen. Varje rad avslutas med en stoppbit. Första raden talar om vad filen heter och sista raden talar om startadressen för programmet. Allt förutom det ovannämnda är det som tar plats när man sedan programmerar sitt EPROM. I vårat fall blir programmet drygt 600 Byte. Vi skulle med andra ord kunna välja ett EPROM som är så litet som K. Nu är det andra faktorer, t.ex pris som har en viss betydelse, därför har vi valt att ta ett lite större minne av typen M7C5-80. Detta minne är 56KB stort. S0 0E 00006667646967E77656 A9 S 0D 00000000 00000000000400 EB S A 00000400 48E7FC000C0600006600000C000D60000480 A S A 0000045 C000A60000404064CDF00F4E75480FC0000 7F... S A 000009DE FDD6600FD06600FAA6000FB48DBFC00000006 76 S A 000009F 00FDE600FDBC4480600FCEA600F9FE6000FBC BA S 08 000000 000000 F4 S 0000004 000000000000000000000000 E8 S 9 000000 0000000000000000000000000000000000000000 D4 S7 05 000005E C7 RAM/RWM Vid val av RWM var det mer invecklat. Minnet behövde inte vara större än 50 Byte, detta synes också i våran s-fil. Minnet vi valde var därför K stort och för att klara det rent tidsmässigt valde vi ett minne med access tid på 55ns. Minnet heter IDT66LA55 5

Tids beräkning När man ska bygga mikrodator system så måste man ta hänsyn till att minnen, grindar osv. tar en viss tid på sig att släppa igenom en signal. Man måste med andra ord räkna på tiden och se så den räcker till eller ifall det går för fort. Om enadera är fallet blir man tvungen att välja snabbare kretsar eller sätta in så kallade fördröjnings kretsar. Viktigt att kolla.? Om minnena har skickat data i tid så att processorn har data innan den börjar läsa.?? RWM måste ha data och vara satt till att skriva eller läsa innan den blir enablad.?? Data ifrån tangentbordsavkodaren måste ligga på datapinnarna innan processorn börjar läsa. Exempel på tidsberäkning Vi sätter K som startvärde och adderar helt enkelt på max värden och antal klockcykler till dess att man har tagit fram den tid som det tar för en signal att nå fram. Anpassat till dessa tider väljer man de kretsar som lämpar sig bäst för konstruktionen. Grindar som användes TTL grindar av typen ALS användes till logikgrindar. Buffert samt D-vipporna är av typen LS. Värsta fall beräkningar Vid beräkning av minnes åtkomst under ett read kommando från processorn så var värsta fallet att enabla minnena, både för RWM och EPROM minnerna. Den tid som det tar innan processorn vill ha data framme är: K+4 ns Och minnerna är i värsta fall enablade vid: K+4 ns + 80 ns Där 80 ns är den tid det tar för EPROMet att lägga ut data på bussen. Man måste beräkna med buffertens fördröjning, och då ser man att man har 65 ns till godo när det gäller EPROM: (4-45) = 65 ns Det samma gäller för RWM, fast minnena har snabbare åtkomst tid. Men de måste ändå ha skickat ut data innan, K+88 ns. Eftersom vi har valt minnet IDT66LA55, så har vi 90 ns till godo. Men när man ska skriva till RWM måste datat ligga framme vid minnet innan detta slås på. Det betyder att minnet inte får vara aktiverat innan K+95. Med minnet som vi valt har vi ns till godo. 6

En annan sak som kan vålla problem är tangentbords avkodaren. Den måste ha data klar på bussen innan processorn börjar läsa (K+4ns). Det visade sig att beräkning med maxvärdet (50ns) inte skulle fungera. Men om man väljer typvärdet (00ns) klarar vi oss med en tids marginal på0ns. Eftersom maxvärdet är 50ns långsammare än typvärdet skulle detta ge en 40ns försening. Vid större och mer krävande system hade detta varit icke godtagbart, men i detta lilla system har det ingen större betydelse. Vi kollade också upp RS modulen, data skall vara framme innan kretsen blir enablad. Det visade sig inte vara några problem. Avkodning För att processorn ska komma åt den del som den är intresserad av att skicka respektive ta emot data ifrån, behövs det en avkodare. Detta gör vi med hjälp av en demux, vi valde en 749 (den har två ingångar, fyra ut). Demultiplexern tar den bits binära koden från processorn, omvandlar den och sätter rätt ben lågt, dessa utgångar är CE (chip enable) för de olika modulerna. För att specificera närmare finns även viss logik. Med hjälp av processorns strobeutgångar (AS, LDS, UDS) och R/W-signal tillsammans med logiken kan man ytterligare bestämma vilken del av systemet som man vill kommunicera med, och hur man skall kommunicera med den modulen. Adresserna till de olika modulerna är följande:? EPROM 0x00000000?? RWM 0x0000000?? RS 0x0004000 & 0x0004000?? Tangentbord 0x00060000 7

Reset RS Då man kör reset på MC68000 är det viktigt att tänka på att resetbenet är en dubbelriktad pinne. Vi måste därför ha någonting som kan sänka eventuella signaler från processorn. För att lösa detta problem har vi förutom reset-kretsen DS80, lagt in stycken buffertdrivare med open collector. Dessa kretsar kan då processorn skickar en resetsignal sänka signalen till jord och på så vis bränner vi varken processorn eller något annan krets. VCC DS8 RST VCC 7407 7407 DS80 är en krets som finns tillgänglig i ELFA. Den är gjord för att vara studsfri och lämpar alldeles utmärkt till våran konstruktion i och med detta. Dess storlek samt dess benantal är också en orsak till vårat val. För RS valdes en av Motorolas egna kretsar, MC6850. Denna krets är gjord för att bistå bus organiserade system med seriell asynkron data kommunikation. Den passar därför perfekt att använda till vår 68000. Det första man måste göra när man slår på miniräknaren är att säga till MC6850 hur den skall arbeta. Detta är förstås olika för olika skärmar men för enkelhetens skull har vi i denna applikation valt att skicka data enligt följande.? 7 bitars data? En stopbit? jämn paritet Detta gör vi i våran initiering som utförs endast en gång, när man slår på miniräknaren. När man adresserar denna RS krets, är den konstruerad på följande vi. Vi tar signalen ifrån avkodaren och skickar in den på av dess chip select ingångar samt till VPA ingången på processorn. VPA ingången på processorn kan sägas är en ingång för att bekräfta att adressen är korrekt eller finns över huvud taget. När processorn får denna bekräftelse, skickar den ut en låg signal på VMA samt en klocka på E. Klockan är en delning av processorns klocka. VMA kopplas till den sista chip select R VCC R 8

ingången på 6850 och E går till E på 6850. När VPA slår om bryts automatiskt VMA samt E. För att bestämma överföringshastigheten av våra tecken måste vi ha en kristall till. Här har vi valt en kristall på,4576 MHz för att sedan dela den till lämplig frekvens, i vårat fall till 9 00 Baud. Då RS är en internationell standard som är definerad upp till 0 000 Baud borde inte detta vara några problem. Vi har valt att använda oss enbart av utåtriktad komunikation. Vi kommer med andra ord inte att kunna ta emot någon informatin. Detta betyder att vi inte behöver koppla så många ben på våran kontakt, en DB9. Till ben har vi transmit data, till ben 5 har vi signal ground, till ben 7 har vi RTS (Request to send) och till ben 8 har vi CTS (Clear to send). Ovanstående signaler måste omvandlas till RS nivåer och tvärt om. Till detta har vi använt MAX488 och MAX489. Uppkopplingen ser ut enligt nedan. 488 488 488,4576 MHz 7404 0pF 0pF U5 PI RST Q4 Q5 Q6 Q7 Q8 Q9 Q0 Q Q Q4 PO PO 74HC4060 7 5 4 6 4 5 9 0 U4 4 E 8 0 9 4 4 7404 CS0 CS CS RS RXDATA CTS DCD RXCLK TXCLK R/W 6850 TXDATA RTS IRQ D0 D D D D4 D5 D6 D7 6 5 7 0 9 8 7 6 5 A 4 A 6 A 8 A4 5 7 A5 A6 A7 A8 9 OE OE Y Y Y Y4 Y5 Y6 Y7 Y8 74LS44 8 6 4 9 7 5 9

Oscillator Första valet av kristall blev en med frekvensen 6Mhz. Den visade sig vara allt för snabb då vi inte hade någon tid att gå på över huvud taget. Vi valde därför att gå ner i klockfrekvens och valde en kristall på 8MHz. Denna frekvens gick alldeles utmärkt att arbeta med. Kristallen är av typen mikroprocessorkristall, HC49. Uppkopplingen av klockan sker med en kristall och en inverterare (inverterande förstärkare) samt två stycken väl valda kondensatorer, dessa värden fås ur datablad för kristallen Kod ändring Kod ändringarna som behövdes var inte många men ändå otroligt viktiga. Det första vi skall göra är att dela upp programmet i sektioner där man bestämmer hur programmet skall ligga i minnet, vart autovektorerna finns och vart stacken finns. Till detta ändamål finns det en fil vid namnet link.ld. I denna fil har vi olika sektioner som kallas.data,.bss och.text;.data innehåller adressen till RWM som vi använder,.bss är var autovektorerna är belägrade i EPROM:et och.text talar om vart i EPROM:et programmet är belägrat. SECTIONS {.data 0x0000: { *("T_RAM") }.bss 0x0: { *("PEKARE") *("COMMON") }.text 0x400 :{ *("PGM_PLACERING") *("COMMON") } } När detta är gjort lägger vi till ett fåtal rader i vår programkod så att varje del av programmet hamnar på rätt ställe. Detta sker genom att man lägger till koden Section T_RAM, Section PEKARE eller Section PGM_PLACERING (Se exempel nedan). 0

Section T_RAM ******************************************************* konstanter och variabler.even STACK:.SPACE 6 LANGD:.SPACE RAKN:.SPACE Section PGM_PLACERING ******************************************************* global deklarering.global. osv.. S_CLEAR,STACK,S_COPY,S_POP,S_PUSH,S_READ Inmatning För att kunna läsa ett tecken ifrån tangentbordet har vi gjort det enkelt för oss. Istället för att skriva en jobbig tangentbordsavkodare har vi valt att använda den binära koden för 0-9 enligt truth table. (se kapitlet för tangentbord) 0 har valts till -, har valts till +, har valts till CR, 4 har valts till / och 5 har valts till *. Den binära koden för betyder inget och programmet kommer då man trycker på denna knapp bara att vänta på ett annat tecken. Innan inmatning sker, gör vi en reset på signalen för DA. När väl ett tecken är inläst sker en kontroll av tecken typ att utföras. Är tecknet en siffra omvandlas detta direkt till ASCII. För att slippa ändra i programmet mer än nödvändigt. Rutinen för get character ser ut enligt nedan.

GETCH: CLR.L %D0 LP: MOVE.B #0,TB Kor en reset pa TB BTST.B #4,TB Om biten ar 0 finns det Tek BNE LP att hamta... loopa om bit= MOVE.B TB,%D0 Tecknet kastas in i D0 AND.B %D0,0b0000 Nolla allt som inte ar vikti. CMP.B #,%D0 Kolla om tecknet ar Obra... BEQ LP Om så. Fixa ett tecken till CMP.B #9,%D0 Kolla om storre an 9 i sa... BGT KFF fall hoppa a kolla... ADD.B #0x0 Addera 0 och greja ASCII BRA INTLIK Ga vidare och hamta nasta KFF: CMP.B #0,%D0 Kolla om tecken ar - BNE LUS Om inte Minus CLR.B %D0 MOVE.B #0xD,%D0 Slang in ASCII LUS: CMP.B #,%D0 Kolla om tecken ar + BNE GGR CLR.B %D0 MOVE #0xB,%D0 GGR: CMP.B #5,%D0 Kolla om tecken ar * BNE DEL CLR.B %D0 MOVE #0xA,%D0 DEL: CMP.B #4,%D0 Kolla om tecken ar / BNE CRKANSKE CLR.B %D0 MOVE #0xF,%D0 CRKANSKE: CMP.B #,%D0 Kolla om tecknet är enter BNE INTLIK Inte ett enter MOVE.B 0x0D,%D0 Kasta in CR=Enter i %D0 INTLIK: RTS Aterga Utmatning Då vi skickar ut ett tecken till RS måste vi naturligtvis först adressera våran modul. Efter detta ligger man och scannar på en av de två adresser tills dess bit är hög. När så är fallet skickar vi helt enkelt ut det som ligger på D0 på den andra av de två adresserna. Koden för detta se ut enligt följande. PUTCH... PUTCH: BTST.B #,RSCASM Kolla om bit ar set. mer BEQ PUTCH om bit = 0 loopa... MOVE.B %D0,RSSD D0 Kastas ut till 6850 RTS Aterga

Övriga ändringar Då ursprunget till den befintliga koden blev till gjorde vi en säker inmatning. Koden förhindrade inmatning av annat än siffror eller operander. Denna funktion behövdes inte nu och plockades bort. Det finns inga möjligheter till att mata in andra tecken än vad vi behöver. Detta medförde att någon enstaka funktion i modul ändrades eller togs bort.