Sherlock
Elementarno, dragi Watsone
U ovom tekstu se nećemo baviti
praktičnim problemima samogradnje razvojnog sistema, jer je taj aspekt obrađen u umetku
časopisa, nego pitanjima razvojnog procesa uopšte, i kako ovaj razvojni sistem može da
nam pomogne da ideju ili zahtev naručioca pretočimo u prototip uređaja.
Gledano sa pozicije
konstruktora, mikroprocesorski kontroleri imaju jednu vrlo zgodnu osobinu: bez obzira na
namenu, svi su hardverski vrlo slični. Svi imaju mikroprocesor (konstruktori se uglavnom
vežu za jedan procesor i ne menjaju ga sve do decenijske smene generacija), EPROM i RAM,
i sve se to vezuje uvek na isti način. Jedino ulazno/izlazni sklop donekle varira u
zavisnosti od konkretne namene. Naravno, podrazumeva se da se program smešten u EPROM-u
značajno razlikuje od slučaja do slučaja, mada vešti programeri grade svoje privatne
biblioteke u koje ugrađuju procedure koje kasnije koriste da bi skratili vreme razvoja i
uštedeli sebi trud.
Razvojni sistem koji vam ovde
predstavljamo sadrži alatke koje su potrebne da bi se projekat mikroprocesorskog
kontrolera brzo i lako doveo do kraja. Osim toga, neki delovi sistema (prvenstveno
analizator) imaju i mnogo širu primenu: analiza rada čisto hardverskih sklopova, analiza
protokola komunikacionih jedinica, lokalizacija kvarova na neispravnim pločama sa ili bez
mikroprocesora, a u prošlom broju časopisa već smo pomenuli da nas uskoro čeka
samogradnja manjeg dodatka koji će ovaj razvojni sistem pretvoriti u analogni osciloskop
sa funkcijom memorisanja talasnih oblika.
Kartica se postavlja u jedan od
AT slotova računara, a trakasti kabl povezuje konektor na kartici sa uređajem koji
razvijamo (u daljem tekstu ćemo za taj uređaj koristiti naziv ciljni sistem). Ako se
radi o razvoju mikroprocesorskog uređaja, sonda na kraju trakastog kabla se ubacije u
podnožje za EPROM jer ima raspored i oblik pinova koji su mu prilagođeni. Posebnim
kablom se dovede RESET izlaz, najbolje na elektrolitski kondenzator vremenske RC konstante
kola za reset, a eksterni ulaz je univerzalni priključak i od konkretne namene zavisi gde
će biti priključen. Sad uključujemo računar. Svaki put kad treba prepisati izvršni
fajl asembliranog programa u emulator, otkucamo EMUL i (samo prvi put) ime fajla, a ako
nam zatreba kompletan razvojni sistem sa analizatorom i ostalim dodacima, pozivamo program
SHERLOCK.
Ipak, priča mora da ima svoj
početak. Pre nego što krenemo u opis delova koje razvojni sistem Sherlock sadrži,
nabrojaćemo tri stvari koje NE sadrži, a neophodne su za rad. Dakle:
Potreban nam je kompjuter,
standardni IBM PC ili kompatibilan, bilo koje generacije (mada će sasvim korektno raditi
i najstariji XT, radi brzine grafike ipak je poželjno da bude neki od pripadnika novijih
generacija). Potrebna je VGA kartica sa grafičkom rezolucijom 640x480 u 16 boja, a za
monitor je poželjno (ali ne i neophodno) da bude kolor. Što se RAM-a tiče, nema
posebnih zahteva: dovoljno je i minimalnih 640K. Obzirom da je program rađen u asembleru,
on na disku zauzima tek nekoliko stotina KB, tako da ni tu nema ekstra prohteva. Windows
okruženje nije neophodno, dovoljan je DOS bilo koje verzije (nadam se da danas niko više
ne koristi verziju stariju od 3.0).
Sledeće što nam treba za
razvoj mikroprocesorskih kontrolera je asembler ili kompajler za procesor za koji smo se
opredelili. Na našem tržištu postoji mnoštvo dobrih asemblera, pa ovo nećemo smatrati
ozbiljnim problemom. Poželjno je da asembler može da generiše izvršni kod u binarnom
obliku, ali da bismo vam pomogli već smo pripremili programe za prevođenje Intelovog
.OBJ i standardnog .HEX formata u binarni.
Treća neophodna stvar je
programator EPROM-a. Mnogi od nas koji se bave ovim poslom već imaju svoj programator
(neki su ga svojim rukama napravili), a ako ne preterujemo u zahtevima i ne insistiramo na
tome da programator mora da pokriva neke egzotične EPROM-e, možemo relativno jeftino da
ga kupimo. Na kraju krajeva, pošto je programator ionako potreban samo po jednom za svaki
projekat, i to na kraju razvojnog ciklusa, za prvo vreme možemo da se poslužimo i
programatorom nekog prijatelja.
Toliko o tome šta Sherlock ne
sadrži. A sad ćemo potanko objasniti svaku od funkcijskih grupa koju ovaj razvojni
sistem sadrži.
Emulator eproma
Mada prilično jednostavan, ovo
je najvažniji deo svakog razvojnog sistema. To je ustvari običan statički RAM kome je
obezbeđen pristup sa dve strane: PC može da upisuje u njega kao u RAM, a s druge strane
ciljni sistem ga preko sonde i trakastog kabla vidi kao EPROM. Ne postoji mogućnost (a ni
potreba) da se oba ova procesa obavljaju istovremeno. Upis od strane računara traje tek
neki deo sekunde, i za to vreme ciljni sistem nije u stanju da očitava sadraj RAM-a; zbog
toga je najbolje držati mikroprocesor ciljnog sistema u RESET stanju, što se u našem
razvojnom sistemu obavlja automatski svaki put kad se u emulator upisuje novi sadržaj,
preko posebnog kabla koji se najčešće spaja sa RESET nožicom mikroprocesora. Po
završenom upisu, RESET se automatski deaktivira a pristup emulatoru se ponovo omogućava
mikroprocesoru ciljnog sistema tako da će on započeti posao od početka, što je i
normalno posle svake izmene u programu.
Slika 1 predstavlja vrlo
pojednostavljenu šemu emulatora. Ne tražite releje na ploči razvojnog sistema, jer
preklopnici, naravno, nisu kontaktni (mehanički) kao što bi se zaključilo iz ove šeme,
nego elektronski. Debele linije predstavljaju magistrale (Data Bus sadrži osam, a Address
Bus šesnaest vodova). U gornjem delu šeme vidimo da sklop za automatsko generisanje
RESET signala nudi i mogućnost izbora "aktivnog visokog" i "aktivnog
niskog" izlaza, što je neophodno, jer su u praksi zastupljene obe varijante.
Evo kako izgleda primena
emulatora u praksi: Posle svake izmene u programu (kakvih u toku razvoja jednog kontrolera
može da bude i na stotine) program se asemblira, otkuca se EMUL i pritisne ENTER. To je
sve; posle jednog delića sekunde kontroler koji razvijamo počinje da radi po novom
programu.
U nekim slučajevima je
potrebno da se ceo emulator isključi i da se analizator ili neka druga alatka razvojnog
sistema koriste za analizu programa koji se izvršava iz postojećeg eproma u ciljnom
sistemu. Razvojni sistem Sherlock podržava i ovu opciju.
Analizator
Nema ničeg neobičnog u tome
što je višekanalni digitalni analizator san svakog hardveraša, jer je to jedini
instrument kojim se može videti šta se događa u digitalnom sklopu. Univerzalni merni
instrument je svakako koristan, ali njime možemo jedino da izmerimo da li je napon za
napajanje u dozvoljenim granicama ili da li je neki od izlaza (koji se ne menja suviše
brzo) na visokom ili niskom nivou, i to je sve. Osciloskop, koji je najvažniji instrument
u analognoj tehnici, u laboratoriji za digitalni razvoj uglavnom skuplja prašinu ili, u
najboljem slučaju, služi za to da svojim prisustvom fascinira slučajnog posetioca. Ovi
nije preterivanje jer, ako ispitujemo neki mikroprocesorski sklop, jedina tačka na koju
ima svrhe priključivati osciloskop je izlaz oscilatora, jer je to jedini ponovljiv signal
u celom sklopu. Čak i "storage" osciloskop (koji može da upamti i da zamrznut
drži na ekanu jedan talasni oblik) nije od velike koristi, jer nam samo jedan, pa još
tako kratak signal ne daje dovoljno informacija.
Zato je razvijena nova
generacija mernih instrumenata koji su prilagođeni digitalnim kolima, što znači da
ignorišu analogni nivo signala u mernim tačkama (u stanju su jedino da očitaju logički
nivo signala), ali zato prate veći broj tačaka istovremeno i mogu da memorišu signale u
dužem vremenskom periodu. Postoje tajming (timing) i stejt (state) analizatori. Prvi
bacaju akcenat na precizno merenje vremena između dve pojave, a drugi (kakav je i ovaj
naš) na snimanje logičkih stanja.
|
Princip rada analizatora ćemo
razmotriti uz pomoć slike 1, koja predstavlja toliko pojednostavljenu i banalizovanu
šemu da je skoro neozbiljna. Pretpostavimo da je naš zadatak da testiramo rad kola
74LS393. To je dvostruki 4-bitni binarni brojač (jedan od ova dva brojača ovde
ignorišemo), a na izlazima A, B, C i D se pojavljuje ulazna učestanost podeljena sa 2,
4, 8 i 16, respektivno. Pretpostavićemo, sa puno dobre volje, da ovi izlazi mogu da
pobuđuju solenoide koji na krajevima svojih kotvi imaju po jednu olovku. Sve te olovke na
papirnoj traci (koja se nekako kreće) istovremeno ostavljaju trag. Kad pokrenemo celu
skalameriju i na brojački ulaz kola 74LS393 dovedemo neku fiksnu učestanost, na papiru
ćemo dobiti talasne oblike koji su u vreme iscrtavanja postojali na svakom od izlaza.
Ovaj papir ćemo iskoristiti za analizu rada brojača i lokalizaciju eventualnog kvara.
U praksi, naravno, analizator
ne beleži talasne oblike mehanički na papirnoj traci nego elektronski, u nizu
pomeračkih registara ili (kao Sherlock) u statičkom RAM-u (mada, istini za volju,
postoji i mogućnost da se kasnije cela snimljena sekvenca odštampa na papiru pomoću
štampača). Postoje još neke razlike u odnosu na opisani model: pošto digitalna kola ne
mogu da memorišu događaje u kontinualnom toku (kao što bi, recimo, mogla magnetofonska
traka) nego uzimaju uzorke i memorišu ih u određenim vremenskim intervalima, potrebno je
da se ovo učitavanje uzoraka (semplovanje) obavlja dovoljno često da se neki događaj ne
bi "ispustio" između dva uzorka. Osim ovog, interno generisanog takta upisa,
postoji i način da se takt dovodi spolja, preko eksternog ulaza ili da se definišu
posebni uslovi pod kojima će se semplovanje obavljati.
Sherlock ima u svojoj ponudi
obe mogućnosti, i to za interni takt počev od 1 Hz pa do 10 MHz, a za eksterni takt
promenu logičkog nivoa na eksternom ulazu (koji može da se spoji sa bilo kojom tačkom
na ciljnom sistemu), trenutak kad je emulator (ili eprom) prozvan i kad je na adresnoj
magistrali neko unapred definisano stanje, ili proizvoljna koincidencija svih nabrojanih
uslova. Moda će ovo biti jasnije ako se poslužimo primerima. Ako hoćemo da vidimo kojim
redosledom mikroprocesor izvršava instrukcije u programu, odabraćemo eksterni takt sa
aktivnim ES (emulator selected) uslovom, a ako nas zanima šta sve mikroprocesor upisuje u
eksternu memoriju na adresi 1234, onda ćemo eksterni ulaz spojiti za WR noicom RAM-a
ciljnog sistema, i takt upisa ćemo definisati kao eksterni sa aktivnim ulazima EXT LO
(eksterni ulaz nizak) i ADDRESS, a u adresno numeričko polje upisujemo vrednost 1234.
Kompletan ciklus upisa se
sastoji od 32768 semplovanih uzoraka po 24 bita, što u nekim slučajevima moe da protekne
prilično brzo. Postavlja se pitanje kako ćemo "uloviti" baš onaj trenutak
koji je od značaja za analizu? Ovaj problem rešava poseban sklop kojim se definiše
trenutak početka ciklusa upisa u memoriju analizatora. Kao i kod eksternog takta, na
raspolaganju su nam praktično sve kombinacije EXT, ES i ADDRESS ulaza, ali pistoji i
mogućnost bezuslovnog starta, koji je od koristi kad hoćemo da lociramo "mrtvu
petlju" u koju je mikroprocesor uleteo kao u zamku. Tako smo ovu "noćnu
moru" svih koji programiraju u mašinskom jeziku pretvorili u problem koji je lako
rešiv u jednom potezu.
Kad je ciklus upisa završen,
na ekranu računara se pojavljuju svi talasni oblici, a nama je na raspolaganju mnogo
softverskih alatki koje olakšavaju analizu (o njima će biti reči malo kasnije). Osim
digitalnih dijagrama, postoji i mogućnost da se svi snimljeni podaci prikazuju numerički
(binarno, decimalno ili heksadecimalno) ili u ASCII kodu.
Postoji još jedan način
prikaza snimljene sekvence: na posebnom dijagramu na kome je adresa prikazana na Y-osi, a
tok upisa na X-osi. Ovo je izuzetno pogodan način da jednim pogledom obuhvatimo sve
tokove programa za vreme semplovanja. Pogledajte sliku 2. Kao što kardiolog vešto čita
EKG (koji je za mene samo jedna kriva linija i ništa više) i ispriča ceo istorijat srca
pacijenta, tako ćemo i mi krenuti u tumačenje ovog dijagrama: vidimo da je mikroprocesor
najpre izvršio deo programa negde na niskim adresama (možemo i tačno da kažemo gde,
ali to sad nije važno), zatim pozvao sabrutinu na nešto višim adesama, vratio se a onda
u petlji četiri puta odradio isti posao u kontinuitetu. Posle toga je bio prekinut negde
vrlo nisko (adresa 001B: na mikroprocesoru 8031 to je TF1 vektor, dakle tajmer 1 je stigao
do kraja - radi se o uniformnom interaptu), a onda je odlutao negde gde nije smeo -
očitavao je adrese koje ni ne postoje u EPROM-u 2764! Dakle, nešto u interapt rutini ne
valja... Ovo je stvarna sekvenca iz moje prakse, dobra ilustracija kako analizator moe da
pomogne da se brzo lokalizuje greška u programu.
Kao što je rečeno, analizator
je 24-kanalni i svi ulazi mogu da se koriste kao univerzalni i ravnopravni kanali ili da
se posmatraju kao grupe od 16 ulaza za adrese i 8 ulaza za magistralu podataka (ako je
emulator uključen, ovi ulazi su interno povezani na izaze emulatora). Pošto se za male
mikroprocesorske kontrolere retko koristi svih 16 adresnih linija (EPROM 2764, koji je
najčešće u upotrebi, koristi samo 13 adresa) postoji opcija da se jedan ili dva ulaza
analizatora (koji bi inače sluili za semplovanje adresnih linija A14 i A15) preusmere na
eksterni ulaz i na signal kojim se proziva emulator (CS AND OE).
Nemojte da se uplašite od
navedenih rekonfigurisanja i izbora opcija, jer vam za njih neće biti potrebne hardverske
izmene na ploči razvojnog sistema, nego se sve vrše mišem ili tastaturom u programu.
Frekvencmetar
To je standardni instrument
koji možete da nađete u mnogim elektronskim laboratorijama. Zadatak mu je da premerava i
pokazuje učestanost nekog naizmeničnog signala. Osim toga, ovaj naš frekvencmetar moe
da se prekonfiguriše i da radi kao brojač impulsa; jedina razlika je u tome što se
brojač neće resetovati svake sekunde, nego će se stanje brojača kumulativno uvećavati
do ručnog reseta.
Digitalni signal čiju
učestanost treba izmeriti (ili čije impulse treba brojati) se dovodi na eksterni (EXT)
ulaz. Tačnost merenja zavisi od preciznosti upotrebljenog kvarcnog oscilatora, a ona u
najnepovoljnijem slučaju iznosi oko 10 ppm (parts per milion = delova na milion).
Ugrađeni preskaler može da se upotrebi za proširenje mernog opsega, ali se onda
smanjuje rezolucija očitavanja.
Indikator impulsa
Nikad ne treba procenjivati
korisnost nekog instrumenta na osnovu njegove složenosti. Indikator impulsa je vrlo
jednostavan dodatak analizatoru, ali je od velike koristi kod razvoja softvera. Njegov
zadatak je da nam javi svaki put kad se steknu uslovi koje smo unapred definisali, recimo
kad mikroprocesor očitava sadržaj (drugim rečima, kad izvršava instrukciju) na nekoj
određenoj adresi u sistemu koji testiramo. To su najčešće instrukcije koje se nalaze
neposredno posle uslovnih skokova u programu: recimo, kad je pritisnut neki taster na
tastaturi kontrolera ili kad je stigao novi bajt na serijski port. Često je od presudne
važnosti informacija da li je program uopšte registrovao promenu, a to će nam dojaviti
indikator impulsa pojavom slova P (ekvivalent oznaci PULSE na logičkoj sondi) i zvučnim
signalom, ako smo ga uključili.
|
Obzirom da Sherlock vrši
stalnu dojavu logičkog stanja na eksternom ulazu, jedna od zgodnih mogućnosti je da
konfigurišemo indikator impulsa da nam prijavljuje i promenu stanja na istom ulazu (treba
samo odabrati rastucu ili opadajucu ivicu) i tako bismo u potpunosti simulirali logičku
sondu. Ako istovremeno frekvencmetar konfigurišemo kao brojač impulsa (i on dobija
impulse sa EXT ulaza) biće to prilično zanimljiva sonda, zar ne?
Pokazivač stanja
memorije ili porta
Ovo je još jedan strogo
namenski dodatak koji će nam tokom rada pomoći da vidimo što više parametara sistema
koji razvijamo. Možemo da odaberemo jednu adresu, i svaki put kad ciljni sistem proziva
tu adresu i kad je na EXT ulazu zadata (rastuca ili opadajuca) ivica, trenutno stanje na
magistrali podataka (DATA BUS) biće registrovano i prikazano do sledeće promene. Tako,
ako EXT ulaz spojimo sa WR nožicom na eksternom RAM-u ciljnog sistema, imaćemo stalni
uvid u sadržaj jedne memorijske lokacije, a ako EXT ulaz prebacimo na signal kojim se
prozivaju izlazni portovi, imaćemo stanje jednog 8-bitnog izlaznog porta.
Pošto prikazivanje stanja
simultano prati promene u ciljnom sistemu, podrazumeva se da ćemo ovako posmatrati samo
sadraje koji se menjaju dovoljno sporo da ih možemo pratiti okom. I pored ovog
ograničenja, sigurno je da će ovaj pokazivač često biti od pomoći.
Generator impulsa
Ako se bavimo razvojem nekog
čisto hardverskog sklopa (bez mikroprocesora) onda postoji mogućnost da će nam
zatrebati generator impulsa određene frekvencije. Sherlock nam omogućava da učestanost
koju smo odabrali za interni takt prosledimo na RESET izlaz. Odnos signal/pauza je 50%, a
impulsi su digitalni, što znači da bi se na ekranu osciloskopa videli kao
"četvrtka".
Ograničenja
Kao svaki instrument, i ovaj
naš ima svoj radni opseg, pa je korisno znati koja su ograničenja. Dakle:
- Svi ulazi imaju zaštitu od
pojave poznate pod nazivom LATCHUP (jednom ćemo opširnije pisati o tome) koja donekle
služi i kao prenaponska zaštita, ali ipak treba prihvatiti činjenicu da su dozvoljeni
naponi na ulazima u okviru TTL standarda, znači između -0.5 i .5 V.
- Maksimalna učestanost
internog takta je 10 MHz, a za eksterni takt je nešto viša, u zavisnosti od brzine
upotrebljenih RAM-ova u sklopu analizatora.
- Vreme odziva emulatora zavisi
takođe od brzine RAM-a u emulatoru, ali grubo možemo da kažemo da će ovo vreme u
svakom slučaju biti povoljnije od svih standardnih EPROM-a.
- Kapacitet analizatora je
32768 uzoraka po 24 bita.
- Ako se koristi za razvoj
mikroprocesorskih kontrolera, glavno ograničenje se odnosi na činjenicu da je razvojni
sistem prilagođen 8-bitnim mikroprocesorima, dakle sa 16-bitnom adresom i 8-bitnim
podacima.
|
- Niska cena hardvera u odnosu
na performanse sistema je pre svega rezultat optimizacije sklopa (uglavnom na račun
složenijeg softvera), ali su ostala još neka ograničenja koja se jedva primećuju u
praksi. Po logici stvari, uređaj bi morao da ima četiri 16-bitna adresna komparatora (za
startni uslov, takt upisa, indikator impulsa i pokazivač stanja memorije), ali u šemi
vidite da postoji samo jedan. To je solidna ušteda, ali prva posledica je da u toku
ciklusa upisa analizatora ne rade indikator impulsa i pokazivač stanja memorije (što i
nije tako bolno jer je ovaj ciklus najčešće vrlo kratak), a druga je da sklopovi za
startni uslov i takt upisa dele istu adresu (isto kao i indikator impulsa i pokazivač
memorije). Videćete da se u praksi i ne javlja potreba za ovim preklapanjima, zapravo da
ako se adresa koristi za uslov starta onda se ne koristi za takt upisa (odnosno upisuju se
sve adrese), a slično važi i za indikator impulsa i pokazivač memorije, oni su čak
vrlo retko u upotrebi istovremeno. Pokušajte da menjate bilo koju adresu u prozorima na
ekranu, i videćete da se i na prozoru njegovog "para" adresa automatski menja.
Prateći softver
Uz komplet delova za gradnju
razvojnog sistema Sherlock isporučuje se i disketa sa nekoliko izvršnih fajlova. Tu su
programi EMUL, koji služi za brzi prepis izvršnog koda generisanog od strane asemblera u
emulator, zatim programi OBJ2BIN i HEX2BIN kojima se vrši prevođenje objektnih i
heksadecimalnih ASCII fajlova u binarne (koji jedino mogu da se prepisuju u emulator), i
na kraju SHERLOCK, na čijem objašnjenju ćemo se malo duže zadržati.
Ovaj program sadrži komletnu
podršku svih delova razvojnog sistema. Neka nekoliko ekrana iz ovog programa budu
ilustracija kako se postavljaju parametri za rad analizatora: Pored toga što je moguće
birati parametre u malim prozorima iznad dijagrama, udobnije je otvoriti velike prozore,
tim pre što je na njima grafički predstavljena ekvivalentna šema sklopa, koju možemo
da modifikujemo mišem, tako što menjamo položaje preklopnika direktno na ekranu. Za
ljude koji se bave hardverom ovo je lakši način izbora parametara od tabelarnog.
Pojedine tačke u dijagramu
možemo da obeležimo i da im dajemo komentare, koji će se pojaviti svaki put kad
postavimo kursor na neku od tih tačaka. Moguće je usnimavati sve semplovane sekvence na
disk, a za hakere je posebno interesantna opcija da se u radni prostor analizatora
direktno upiše segment memorije iz računara, ako se upuštamo u analizu rada PC-a.
Postoji još veliki broj
dodataka koje ćemo samo nabrojati: kalkulator za konverziju brojnih baza, VIEW koji
omogućava brzi pregled ASCII fajlova sa udobnim višesmernim skrolovanjem pomoću miša,
kao i SEARCH funkcija za pretraživanje semplovane sekvence. Imamo takođe mogućnost da
zumiramo, skrolujemo dijagram horizontalno na nekoliko načina, premeravamo broj semplova
između dve bilo koje tačke na dijagramu, da signale bojimo po želji i da im dajemo
proizvoljna imena. Za sve funkcije je podran rad mišem i tastaturom.
** pod pojmom časopis iz ovog članka
podrazumeva se magazin PC Press u kome je ovaj članak svojevremeno objavljen.
Kontak
- za vise informacija.
|