Mikroişlemciler · Ders Notu
Bölüm 10.1: 8086 Pinler
Bir assembly komutunun yazmaçlar ve bayraklar üzerindeki etkisi programcının gördüğü yüzdür. Aynı komut, yonganın dışında da bir iz bırakır: pinlerde belirli bir sırayla adres, veri ve kontrol sinyalleri belirir. Bu not, 8086'yı bir devre elemanı olarak ele alır. 40 pinli kılıfın pinlerini gruplarına ayırır ve adres ile verinin aynı pinlerden nasıl geçtiğini anlatır. Çoklamayı çözen adres kilitlerini ve veri alıcı-vericilerini, çift ve tek bellek bankalarını, okuma ve yazma yol döngülerini saat turu düzeyinde inceler. Yavaş belleğin bekleme durumu istemesini, yolun başka bir yöneticiye devredilmesini, saat ve sıfırlama devresini, maksimum moddaki 8288 yol denetleyicisini ve kesme pinlerini tamamlar. Her konuda bir komutun hangi pinde hangi değeri ürettiği kod izlemeleriyle gösterilir.
Öğrenme çıktıları
- Pinleri tanımak
- 8086'nın 40 pinini gruplarına ayırmak; her pinin yönünü, aktif düzeyini ve hangi T durumunda ne taşıdığını söylemek; minimum ve maksimum modda değişen sekiz pini eşleştirmek.
- Çoklamayı çözmek
- Adres ve verinin aynı pinlerden geçmesinin nedenini açıklamak; ALE, adres kilidi ve veri alıcı-vericisiyle ayrık adres ve veri yolunun nasıl kurulduğunu çizmek.
- Bankaları seçmek
- BHE' ve A0 ile çift ve tek bankanın seçimini açıklamak; bir komutun kaç veri yol döngüsü gerektirdiğini ve verinin hangi hatlardan geçtiğini bulmak.
- Yol döngüsünü izlemek
- Okuma ve yazma döngüsünü T1–T4 durumlarında sinyal sinyal izlemek; READY ile bekleme durumu eklenmesini açıklamak ve bir bellek için gereken bekleme durumu sayısını hesaplamak.
- Durum ve kontrol pinlerini okumak
- S2'–S0', S3–S6 ve QS1–QS0 kodlarını çözmek; RD', WR', M/IO', DT/R', DEN', HOLD/HLDA, RQ'/GT ve LOCK' sinyallerinin bir komut sırasında aldığı değerleri vermek.
- Sistemi kurmak
- 8284A saat üretecinin, RESET sonrası başlangıcın, 8288 yol denetleyicisinin ve INTR, NMI, INTA' pinlerinin bir 8086 sistemindeki görevini açıklamak.
10.1.18086'nın kılıfı ve pinleri
Bir mikroişlemci, dış dünyayla yalnız pinleri üzerinden konuşur. Bellekten bir bayt okumak, bir porta değer yazmak, kesme isteği almak ya da saat sinyalini içeri almak için ayrı ayrı elektriksel bağlantılar gerekir. 8086'nın bu bağlantıları için ayrılan yer çok dardır: bütün işlemci 40 pinli bir kılıfa sığdırılmıştır. Bu kesim kılıfı, pinlerin adlandırılmasını ve pin gruplarını tanıtır. Ardından 40 pinin neden yetmediğini gösterir. Intel bu darlığı iki yolla aştı: aynı pini farklı zamanlarda farklı amaçla kullandı ve bir pin grubunun anlamını sistem türüne bağladı.
10.1.1.140 pinli DIP kılıf
Intel 8086, HMOS (high-performance MOS, yüksek başarımlı n kanallı MOS) teknolojisiyle üretilmiş 16 bitlik bir mikroişlemcidir. Yonga, çift sıralı kılıf (DIP, dual in-line package) denen dikdörtgen bir paketin içindedir. Paketin iki uzun kenarında yirmişer pin bulunur. Pinler sol üst köşeden başlayıp saat yönünün tersine numaralanır: sol kenarda yukarıdan aşağı 1–20, sağ kenarda aşağıdan yukarı 21–40. Paketin üst kenarındaki yarım daire biçimli çentik, 1 numaralı pinin yerini gösterir.
8086 tek bir +5 V besleme gerilimiyle çalışır. Besleme pin 40'a (VCC), toprak pin 1 ile pin 20'ye (GND) bağlanır. Veri sayfası beslemeye ±%10 tolerans tanır: 4,5 V ile 5,5 V arasında yonga doğru çalışır. 5 MHz'lik 8086 en çok 340 mA akım çeker; bu, 5 V × 0,34 A = 1,7 W güç demektir. Bugünkü ölçülerle küçük görünen bu güç, 1978'de yonganın ısınması için ciddi bir değerdi.
Şekil 10.1.1 pinlerin kılıf üzerindeki yerini gösterir. İlk bakışta göze çarpan şey, birçok pinin bölü işaretiyle ayrılmış iki adı olmasıdır: AD5, A17/S4, BHE'/S7, RQ'/GT0' gibi. Bu çift adlar, pinin zaman içinde ya da sistem türüne göre iki farklı iş yaptığını anlatır.
Mantık 1 düzeyindeyken (yaklaşık +5 V) görevini yapan sinyal aktif yüksek (active high) bir sinyaldir. Mantık 0 düzeyindeyken (yaklaşık 0 V) görevini yapan sinyal ise aktif düşüktür (active low). Veri sayfası aktif düşük sinyallerin adının üstüne çizgi çeker. Bu derste aynı anlam adın sonundaki kesme işaretiyle gösterilir: RD' = 0 “okuma yapılıyor” demektir.
Aktif düşük sinyaller TTL çağının bir alışkanlığıdır. TTL kapılarında bir hattı 0'a çekmek, 1'e çekmekten daha güçlü yapılabilir. Ayrıca bağlantısı kopmuş bir TTL girişi 1 gibi davranır; böylece kopuk bir “aktif düşük” hat kendiliğinden pasif kalır. Bu yüzden okuma, yazma, kesme kabul ve seçim sinyallerinin çoğu aktif düşüktür.
Bazı adlar iki durumu birden anlatır. M/IO' adı okunurken bölü işareti “ya da” gibi düşünülür: pin 1 ise birinci anlam (M, bellek), 0 ise ikinci anlam (IO', giriş/çıkış) geçerlidir. MN/MX', DT/R' ve S7 ile birlikte okunan BHE' de bu kalıptadır. Pinlerin yönü de üç türlüdür. Giriş (G) pini yalnız işlemciye bilgi getirir, çıkış (Ç) pini yalnız dışarı bilgi götürür. Çift yönlü (G/Ç) pin iki yönde de çalışır.
DT/R' sinyalini “DT/R tümüyle aktif düşük” diye okumak yanlıştır. Kesme işareti yalnız R'ye aittir: pin 1 iken DT (veri gönder), 0 iken R (veri al) anlamı geçerlidir. Aynı biçimde M/IO' sinyalinde M aktif yüksek, IO aktif düşüktür. Veri sayfasında üst çizgi yalnız adın ilgili parçasının üstündedir.
10.1.1.2Yonganın içi
Plastik ya da seramik paketin ortasında birkaç milimetre karelik bir silikon parçası, yani kalıp (die) bulunur. Kalıbın kenarlarında bağlantı pedleri sıralanır. Her ped, saç telinden ince bir altın ya da alüminyum telle paketin bir pinine bağlanır. Paketin asıl işi bu küçük kalıbı korumak, ısısını dağıtmak ve tellerini baskılı devre kartına uygun aralıklı pinlere taşımaktır.

Şekil 10.1.2, işlevsel blokları işaretlenmiş bir 8086 kalıbını gösterir. Kalıpta yaklaşık 29 000 transistör vardır; üretim süreci 3 µm'dir. Sol kenardaki pedler AD pinlerine giden hatlardır. Yazmaçlar, ALU ve önden getirme kuyruğunun yazmaçları bu pedlerin yakınındadır, çünkü bu bloklar yolla en sık veri alışverişi yapan bölümlerdir. Sağ alttaki geniş düzenli alan mikrokod ROM'udur: karmaşık komutların adımlarını tutan iç bellek. Yol kontrol mantığı, pinlerdeki sinyallerin zamanlamasını üretir.
Kalıp fotoğrafı bir şeyi açıkça gösterir: işlemcinin içinde bellek yoktur. Yazmaçlar dışında bütün program ve veri dışarıdaki yongalardadır. İşlemcinin her bellek erişimi pinlerden geçmek zorundadır. Bu yüzden pinlerin sayısı ve zamanlaması, işlemcinin hızını doğrudan sınırlar.
10.1.1.3Neden karmaşık pinler?
Bir mikroişlemci bellek ve G/Ç aygıtlarına adres yolu, veri yolu ve kontrol yolu üzerinden bağlanır. Her sinyale ayrı bir pin verilseydi 8086'nın ne kadar pine ihtiyacı olurdu? Kaba bir sayım şöyledir:
- Adres yolu 20 hat: A0–A19. 220 = 1 MB bellek adreslenir.
- Veri yolu 16 hat: D0–D15.
- Kontrol, durum ve kesme sinyalleri yaklaşık 20 hat: okuma, yazma, bellek/G-Ç seçimi, hazır, kesme isteği, yol isteği, durum bilgisi.
- Güç ve saat 4 hat: VCC, iki GND ve CLK.
Toplam 60'ı aşar. 1970'lerin sonunda 64 pinli paketler pahalıydı, kartta fazla yer kaplıyordu ve üretimde sorun çıkarıyordu. Intel, 8080 ve 8085'ten tanıdık olan 40 pinli kılıfta kalmayı seçti. Aradaki farkı kapatmanın tek yolu, bazı pinlere birden fazla iş yaptırmaktı.
Çoklama (multiplexing), aynı pinlerin farklı zamanlarda farklı bilgileri taşımasıdır. 8086'da zaman paylaşımlı çoklama kullanılır: AD0–AD15 pinleri bir yol döngüsünün ilk saat turunda adresin alt 16 bitini, sonraki turlarda veriyi taşır. A16–A19 pinleri ilk turda adresin üst 4 bitini, sonra durum bilgisini taşır.
8086'nın pin darlığının ikinci bir kaynağı da vardır. Kesim yazmaçlarıyla üretilen fiziksel adres 20 bittir, veri yolu ise 16 bittir. Adresin alt 16 biti veri hatlarıyla paylaşılabilir, ama fazladan 4 adres bitinin (A16–A19) eşleşecek veri hattı yoktur. Bu dört pin de boş kalmasın diye adres zamanı geçince durum bilgisi (S3–S6) taşır.
Çoklamanın iki bedeli vardır. Birincisi, sistemin geri kalanı ayrık ve kararlı bir adres yolu ister; bu yüzden işlemcinin dışına adresi yakalayıp tutan kilit devreleri eklenir. İkincisi, adres ve verinin aynı pinlerden sırayla geçmesi her bellek erişimini en az dört saat turuna yayar. Aynı teknolojiyle 60 pinli ayrık yollu bir işlemci daha az dış devreyle kurulabilirdi. Ama 40 pinli kılıf ucuzdu ve 8085 sistemlerinden gelen tasarımcılar çoklamalı yolu zaten tanıyordu.
10.1.1.4Pin grupları
40 pin, görevlerine göre yedi gruba ayrılabilir. Tablo 10.1.1 bu grupları pin numaralarıyla verir.
| Grup | Pinler | Açıklama |
|---|---|---|
| Güç | VCC (40), GND (1, 20) | +5 V ± %10 |
| Saat ve sıfırlama | CLK (19), RESET (21), READY (22) | üçü de 8284A saat üretecinden gelir |
| Adres/veri | AD0–AD15 (2–16, 39) | T1'de adres, sonra veri |
| Adres/durum | A16/S3–A19/S6 (38–35), BHE'/S7 (34) | T1'de adres, sonra durum |
| Kesme | NMI (17), INTR (18), INTA' (24, minimum mod) | donanım kesmeleri |
| Ortak kontrol | RD' (32), TEST' (23), MN/MX' (33) | iki modda da aynı |
| Moda bağlı | 24–31 | minimum: INTA', ALE, DEN', DT/R', M/IO', WR', HLDA, HOLD; maksimum: QS1, QS0, S0', S1', S2', LOCK', RQ'/GT1', RQ'/GT0' |
Adres/veri pinlerinin numaraları bir bakışta düzensiz görünür. AD15 pin 39'dadır; AD14'ten AD0'a kadar olan pinler ise 2'den 16'ya sıralanır. A19/S6 ile A16/S3 arasındaki dört pin, sağ kenarda 35–38 numaralarda ters sırayla durur. Bu yerleşim kalıptaki pedlerin sırasından gelir. Şekil 10.1.2'deki AD pedleri kalıbın sol kenarında art arda dizilir. En kısa tellerle paketin sol kenarındaki pinlere bağlanırlar.
Bir sinyalin yönü de grubuna göre değişir. AD0–AD15 çift yönlüdür: yazmada çıkış, okumada giriş olur. A16/S3–A19/S6 ve BHE'/S7 yalnız çıkıştır, çünkü bu pinleri hiçbir dış aygıt sürmez. CLK, RESET, READY, NMI, INTR, TEST' ve MN/MX' yalnız giriştir. RD', ALE, DEN', DT/R', M/IO', WR', INTA' ve HLDA çıkıştır; HOLD giriştir. Maksimum moddaki RQ'/GT0' ve RQ'/GT1' ise tek pinde iki yönlü bir el sıkışma yürütür.
| Pin | Ad | Yön | Görev |
|---|---|---|---|
| 1, 20 | GND | — | toprak |
| 2–16 | AD14–AD0 | G/Ç | adres (T1) / veri (T2–T4) |
| 17 | NMI | G | maskelenemeyen kesme, yükselen kenar |
| 18 | INTR | G | kesme isteği, aktif yüksek seviye |
| 19 | CLK | G | saat, %33 görev çevrimi |
| 21 | RESET | G | sıfırlama, aktif yüksek |
| 22 | READY | G | bellek/G-Ç hazır, aktif yüksek |
| 23 | TEST' | G | WAIT komutunun sınadığı giriş |
| 24 | INTA' / QS1 | Ç | kesme kabul / kuyruk durumu |
| 25 | ALE / QS0 | Ç | adres kilidi etkinleştirme / kuyruk durumu |
| 26 | DEN' / S0' | Ç | veri etkinleştirme / durum |
| 27 | DT/R' / S1' | Ç | veri gönder/al / durum |
| 28 | M/IO' / S2' | Ç | bellek ya da G/Ç / durum |
| 29 | WR' / LOCK' | Ç | yazma / yol kilidi |
| 30 | HLDA / RQ'/GT1' | Ç / G/Ç | yol devri onayı / yol isteği-bağışı |
| 31 | HOLD / RQ'/GT0' | G / G/Ç | yol devri isteği / yol isteği-bağışı |
| 32 | RD' | Ç | okuma |
| 33 | MN/MX' | G | mod seçimi |
| 34 | BHE'/S7 | Ç | yüksek bayt etkin / yedek durum biti |
| 35–38 | A19/S6–A16/S3 | Ç | adres (T1) / durum (T2–T4) |
| 39 | AD15 | G/Ç | adres (T1) / veri (T2–T4) |
| 40 | VCC | — | +5 V |
Tablo 10.1.2 40 pinin tamamını tek listede toplar ve devre şeması okurken başvuru tablosu olarak kullanılabilir. Pin numaralarını ezberlemek gerekmez. Asıl önemli olan, her pinin hangi grupta olduğunu ve hangi anda ne taşıdığını bilmektir.
10.1.1.5Minimum ve maksimum mod
Pin darlığına karşı ikinci çare, 24–31 numaralı sekiz pinin anlamını sistem türüne göre değiştirmektir. Küçük bir sistemde işlemci tektir ve okuma, yazma, adres kilidi gibi kontrol sinyallerini kendisi üretebilir. Büyük bir sistemde ise 8087 kayan nokta yardımcı işlemcisi ya da 8089 G/Ç işlemcisi gibi başka yongalar aynı yolu paylaşır. Bu durumda kontrol sinyallerini ayrı bir yonga, 8288 yol denetleyicisi üretir. 8086'nın boşalan pinleri de çok işlemcili düzen için gereken yeni sinyallere ayrılır.
MN/MX' pini (pin 33) VCC'ye bağlanırsa 8086 minimum modda çalışır. Bu, tek işlemcili küçük sistemdir; 24–31 numaralı pinler kontrol sinyallerini (INTA', ALE, DEN', DT/R', M/IO', WR', HLDA, HOLD) doğrudan üretir. MN/MX' toprağa bağlanırsa maksimum modda çalışır. Aynı pinler durum kodu, kuyruk durumu ve yol paylaşımı sinyallerine dönüşür: QS1, QS0, S0'–S2', LOCK', RQ'/GT1', RQ'/GT0'. Kontrol sinyallerini 8288 üretir.
Mod donanımla seçilir. MN/MX' pini kart üzerinde kalıcı olarak beslemeye ya da toprağa bağlanır ve işlemci çalışırken değişmez. Hiçbir komut modu değiştiremez; yazılım açısından iki mod arasında fark yoktur. Aynı program iki sistemde de aynı sonucu verir.
| Pin | Minimum mod (MN/MX' = 1) | Maksimum mod (MN/MX' = 0) |
|---|---|---|
| 24 | INTA' | QS1 |
| 25 | ALE | QS0 |
| 26 | DEN' | S0' |
| 27 | DT/R' | S1' |
| 28 | M/IO' | S2' |
| 29 | WR' | LOCK' |
| 30 | HLDA | RQ'/GT1' |
| 31 | HOLD | RQ'/GT0' |
Tablo 10.1.3'teki eşleşme rastgele değildir. Pin 28, minimum modda bellek ile G/Ç'yi ayıran M/IO' sinyalini, maksimum modda S2' durum bitini taşır; S2' de aynı ayrımı yapar (1 bellek, 0 G/Ç). Pin 27'deki DT/R' veri yönünü, S1' de okuma ile yazmayı ayırmaya yardım eder. Böylece maksimum moddaki 8288, minimum moddaki sinyallerin bilgisini kodlanmış biçimde alır ve onları yeniden üretir. Pin 30–31'deki HOLD/HLDA çiftinin maksimum mod karşılığı da yine yol devri yapan RQ'/GT pinleridir.
Bir tasarımcı, 8087 yardımcı işlemcisi eklenecek bir kart hazırlıyor. MN/MX' nereye bağlanmalıdır ve minimum modda kullandığı hangi sinyalleri artık 8086'dan alamaz?
- 8087, 8086'nın kuyruğunu QS1, QS0 pinlerinden izler ve yolu RQ'/GT pinleriyle ister. Bu pinler yalnız maksimum modda vardır; MN/MX' toprağa bağlanır.
- Maksimum modda 24–31 numaralı pinler değiştiği için INTA', ALE, DEN', DT/R', M/IO', WR', HLDA ve HOLD sinyalleri 8086'dan alınamaz.
- Bunların işini 8288 görür: S2'–S0' kodundan MRDC', MWTC', IORC', IOWC', INTA', ALE, DEN ve DT/R' sinyallerini üretir. HOLD/HLDA yerine RQ'/GT0' ve RQ'/GT1' kullanılır.
RD' pini (32) iki modda da 8086'dadır; ama maksimum modda bellek ve G/Ç okumaları genellikle 8288'in ürettiği MRDC' ve IORC' ile yapılır.
10.1.2Adres ve veri pinleri
Bir bellek erişiminde işlemcinin söylemesi gereken iki şey vardır: hangi adres ve hangi veri. 8086 bu iki bilgiyi aynı pinlerden sırayla gönderir. Bu kesim önce adres/veri ve adres/durum pinlerinin zaman içindeki görevini, sonra çoklamanın dışarıda nasıl çözüldüğünü anlatır. Ardından 16 bitlik veri yolunun iki bayt bankasına nasıl bölündüğünü ve tek adresteki bir sözcüğün neden iki yol döngüsü sürdüğünü bir kod izlemesiyle gösterir.
10.1.2.1AD0–AD15 ve A16/S3–A19/S6
AD0–AD15 pinleri adresin alt 16 bitini ve 16 bitlik veriyi taşır. Bir yol döngüsünün ilk saat turunda (T1) pinlerde adres bulunur; bu anda pinlere A0–A15 denir. Sonraki turlarda (T2, T3, T4 ve varsa bekleme turları) aynı pinler veri taşır; o zaman D0–D15 adını alırlar. Bayt erişiminde verinin yalnız bir yarısı kullanılır: D0–D7 ya da D8–D15. Pinler çift yönlüdür. Yazmada işlemci veriyi dışarı sürer, okumada dışarıdaki aygıt veriyi içeri sürer. İşlemci gerektiğinde bu pinlerin sürücülerini tümüyle bırakabilir; buna yüzer ya da yüksek empedans (float, tri-state) durumu denir.
Üç durumlu çıkış (tri-state output), 0 ve 1 düzeylerine ek olarak üçüncü bir durum alabilen çıkıştır: yüksek empedans. Bu durumda çıkış hattı ne 0'a ne 1'e sürer; elektriksel olarak hattan kopmuş gibidir ve hattı başka bir sürücü sürebilir. Bir hatta aynı anda yalnız bir sürücünün etkin olması gerekir.
A16/S3–A19/S6 pinleri adresin üst 4 bitini taşır. Bellek erişiminde T1 sırasında bu pinlerde A16–A19 bulunur. T2'den itibaren aynı pinler S3–S6 durum bitlerine geçer. G/Ç erişiminde adres yalnız 16 bittir; bu yüzden T1'de A16–A19 hatları 0 olur. S3 ve S4 erişimde hangi kesim yazmacının kullanıldığını, S5 kesme bayrağı IF'nin o anki değerini gösterir; S6 her zaman 0'dır. Durum bitleri kendi alt kesiminde ayrıntılı ele alınır.
BHE'/S7 (pin 34) bu gruba yakındır. T1 sırasında BHE' (bus high enable, yüksek yol etkin) olarak çalışır ve veri yolunun üst yarısının (D8–D15) bu döngüde kullanılacağını bildirir. T2–T4 boyunca S7 durum bitine döner; 8086'da S7 kullanılmayan yedek bir bittir. Şekil 10.1.4 bu zaman paylaşımını özetler: bir pinin anlamı, ona hangi saat turunda bakıldığına bağlıdır.
“Bellek, adresi döngü boyunca AD pinlerinden okur” düşüncesi yanlıştır. AD pinlerinde adres yalnız T1 boyunca durur. T2'de pinler veriye geçer ya da yüzer duruma alınır. Bellek yongası ise adresi T2–T4 boyunca da görmek zorundadır. Bu yüzden adres T1 sonunda dışarıdaki bir kilit devresine alınır. Bellek adresi o kilidin çıkışından okur.
10.1.2.2Çoklamayı çözmek: ALE ve adres kilidi
Sistemin geri kalanı, yani bellek yongaları, adres çözücüler ve G/Ç aygıtları, ayrık ve kararlı bir adres yolu ile ayrı bir veri yolu ister. 8086'nın çoklamalı yolundan bu iki yolu ayırmaya çoklamayı çözme (demultiplexing) denir. Bu iş için iki tür devre kullanılır: adresi yakalayıp tutan adres kilidi ve veri hatlarını güçlendirip yönünü belirleyen alıcı-verici. Kilidin adresi ne zaman yakalayacağını işlemci ALE (address latch enable, adres kilidi etkinleştirme, pin 25) sinyaliyle bildirir.
Kilit (latch), bir etkinleştirme girişi 1 iken girişindeki değeri çıkışına geçiren, etkinleştirme 0'a inince son değeri tutan bellek devresidir. Etkinleştirme 1 iken kilit “saydamdır”; düşen kenarda değeri yakalar. 8086 sistemlerinde 8 bitlik 8282 ya da 74LS373 kilitleri kullanılır; etkinleştirme girişine (STB ya da LE) ALE bağlanır.
Şekil 10.1.5 bir döngüdeki iki evreyi yan yana gösterir. T1'de 8086 adresi AD pinlerine koyar ve ALE'yi kısa bir darbeyle 1 yapar. ALE 1 iken kilit saydamdır; pinlerdeki adres kilidin çıkışına geçer. ALE 0'a düştüğünde kilit o anki değeri yakalar ve döngünün sonuna kadar çıkışında tutar. T2'den sonra AD pinleri veri taşır, ama kilidin çıkışındaki adres değişmez. Bellek ve G/Ç aygıtları adresi kilidin çıkışında, veriyi alıcı-vericinin öteki ucunda görür.
ALE'nin neden düşen kenarı kullandığı veri sayfasındaki zaman değerlerinden anlaşılır. 5 MHz'lik 8086'da ALE, T1'in başındaki saat kenarından en geç 80 ns sonra 1 olur (TCLLH). Adres ise en geç 110 ns sonra geçerli hâle gelir (TCLAV). Yani ALE yükselirken adres henüz kararlı olmayabilir. Buna karşılık veri sayfası iki şeyi garanti eder. Adres, ALE düşmeden en az TAVAL = TCLCH − 60 ns önce geçerlidir. ALE düştükten sonra da en az TLLAX = TCHCL − 10 ns daha pinlerde kalır. Saydam kilit bu yüzden doğru seçimdir: ALE 1 iken çıkış adresi izler, ALE düşerken kesinleşmiş adres yakalanır.
5 MHz'lik 8086'da (TCLCL = 200 ns) saatin düşük süresi en az TCLCH = 118 ns, yüksek süresi en az TCHCL = 69 ns'dir. Adres, ALE düşmeden en az ne kadar önce geçerlidir ve ALE düştükten sonra en az ne kadar pinlerde kalır?
- TAVAL = TCLCH − 60 = 118 − 60 = 58 ns: kilidin girişindeki adres, yakalama anından en az 58 ns önce kararlıdır.
- TLLAX = TCHCL − 10 = 69 − 10 = 59 ns: adres, yakalama anından sonra en az 59 ns daha pinlerde durur.
- 74LS373'ün veri sayfasına göre girişteki veri, LE düşmeden en az 5 ns önce kurulmalı ve düştükten sonra en az 20 ns tutulmalıdır. 58 ns ≥ 5 ns ve 59 ns ≥ 20 ns olduğundan iki koşul da rahatça sağlanır.
Kilidin kurulma ve tutma süreleri, 8086'nın verdiği garantilerden küçük olduğu sürece yakalanan adres doğrudur.
20 bitlik adres için 8 bitlik üç kilit gerekir. Biri A0–A7'yi, biri A8–A15'i yakalar. Üçüncüsü A16–A19 ile BHE' sinyalini tutar: bu dört bit de T1'den sonra durum bilgisine geçtiği için yakalanmak zorundadır. Üçüncü kilidin boş kalan girişleri kullanılmaz. Şekil 10.1.6 bu düzenin sadeleştirilmiş görünümünü verir.
8282 ve 74LS373 aynı işi yapar: ikisi de 8 bitlik saydam kilittir ve çıkışları üç durumludur. 74LS373'ün iki denetim girişi vardır: LE (latch enable) ve OE' (output enable). LE'ye ALE bağlanır, OE' ise sürekli 0'da tutulur ki kilidin çıkışı adres yolunu hep sürsün. Yol başka bir yöneticiye devredildiğinde OE' 1 yapılarak kilidin çıkışları da yüzer duruma alınabilir. 8283, 8282'nin çıkışı ters çeviren sürümüdür.
Adres kilidi yerine yükselen kenarda yakalayan bir D flip-flop yongası (ör. 74LS374) kullanıp saat girişine doğrudan ALE bağlamak hatalıdır. Flip-flop adresi ALE'nin yükselen kenarında yakalar. Bu anda adres henüz geçerli olmayabilir: ALE en geç 80 ns'de yükselir, adres en geç 110 ns'de oturur. Flip-flop kullanılacaksa ALE'nin tersi saat olarak verilir; böylece yakalama ALE'nin düşen kenarına kayar.
10.1.2.3Tamponlu ve kilitli sistem
Kilitler adres yolunu üretir. Veri yolu için ise alıcı-verici (transceiver) kullanılır. Alıcı-verici, iki yönlü bir tampondur: bir verici ve bir alıcının tek pakette birleşimidir. 8286 ve onun yerine sık kullanılan 74LS245 sekizer bitlik alıcı-vericilerdir; 16 bitlik veri yolu için iki tane gerekir. Bir alıcı-vericinin iki denetim girişi vardır. Yön girişi (8286'da T, 74LS245'te DIR) verinin hangi taraftan hangi tarafa akacağını seçer. Etkinleştirme girişi (OE' ya da G') 1 iken iki tarafı da yüzer duruma alır ve hatları birbirinden ayırır.
Şekil 10.1.7 tam bir minimum mod yol arayüzünü gösterir. Alıcı-vericinin yön girişine 8086'nın DT/R' çıkışı, etkinleştirme girişine DEN' çıkışı bağlanır. DT/R' = 1 iken veri işlemciden belleğe, 0 iken bellekten işlemciye akar. DEN' yalnız veri aktarılırken 0 olur; T1'de 1 kalır ki AD pinlerindeki adres veri yoluna sızmasın. Bu iki sinyal, kontrol pinlerinin anlatıldığı alt kesimde zamanlamalarıyla birlikte ele alınır.
Tamponların ikinci görevi sürme gücü sağlamaktır. 8086'nın bir çıkış pini düşük düzeyde en çok 2,5 mA akım çekebilir ve veri sayfası çıkış yükünü 20–100 pF ile sınırlar. Bir 74LS girişinin düşük düzeyde verdiği akım 0,4 mA civarındadır. Bu yüzden 8086'nın tek bir pini ancak birkaç LS girişini güvenle sürebilir. Onlarca bellek yongasının bağlandığı büyük bir kartta her yol hattı birçok girişe gider ve uzun izlerin kapasitesi de eklenir. Kilitler ve alıcı-vericiler bu yükü işlemcinin yerine taşır. Bu nedenle büyük sistemlerde adres, veri ve kontrol yollarının hepsi tamponlanır.
8086'nın bir AD pini düşük düzeyde 2,5 mA çekebiliyor. Her biri düşük düzeyde 0,4 mA veren 74LS girişlerinden en çok kaç tanesini doğrudan sürebilir? Bir 74LS245 çıkışı düşük düzeyde 24 mA çekebiliyorsa kaç giriş sürer?
- 8086 pini: 2,5 / 0,4 = 6,25 → en çok 6 giriş. Hat kapasitesi ve gürültü payı için pratikte daha azı kullanılır.
- 74LS245 çıkışı: 24 / 0,4 = 60 giriş.
Alıcı-verici, akım sürme kapasitesini yaklaşık on katına çıkarır. Bellek kartı büyüdükçe bu fark belirleyici olur.
10.1.2.4BHE' ve A0: bellek bankaları
8086'nın veri yolu 16 bittir, ama bellek bayt düzeyinde adreslenir. Her adres bir baytı gösterir. İşlemcinin hem tek bir baytı hem de iki ardışık bayttan oluşan bir sözcüğü tek döngüde aktarabilmesi için 1 MB'lık bellek fiziksel olarak iki yarıya bölünür. Her yarıya bellek bankası denir.
Düşük banka (çift banka) çift adresli baytları tutar ve veri yolunun D0–D7 hatlarına bağlanır. Yüksek banka (tek banka) tek adresli baytları tutar ve D8–D15 hatlarına bağlanır. Her banka 512 KB'tır ve A1–A19 adres hatlarıyla paralel adreslenir. Düşük bankayı A0 = 0, yüksek bankayı BHE' = 0 seçer.
Şekil 10.1.8'de iki bankanın aynı adres hatlarını paylaştığı görülür. Bankalara A0 değil A1–A19 gider; çünkü bir banka içindeki ardışık baytlar 2'şer artan adreslerdedir. Örneğin düşük bankanın 0., 1., 2. baytları 00000h, 00002h, 00004h adreslerine, yüksek bankanınkiler 00001h, 00003h, 00005h adreslerine karşılık gelir. A19–A1 aynı olan iki adres, yani 2k ve 2k + 1, iki bankada aynı satırdadır ve tek döngüde birlikte okunabilir.
| BHE' | A0 | Aktarım | Kullanılan hatlar |
|---|---|---|---|
| 0 | 0 | tüm sözcük (çift adres) | D15–D0 |
| 0 | 1 | yüksek bayt (tek adres) | D15–D8 |
| 1 | 0 | düşük bayt (çift adres) | D7–D0 |
| 1 | 1 | aktarım yok | — |
Tablo 10.1.4 dört durumu verir. Çift adresli bir bayt yazılırken yalnız düşük bankanın yazma izni açılmalıdır; yüksek bankadaki komşu bayt bozulmamalıdır. Bu yüzden bankaların seçimi bellek yazma sinyaliyle birleştirilir: düşük bankanın yazma girişi WR' ve A0'dan, yüksek bankanınki WR' ve BHE' sinyallerinden türetilir. Okumada ise iki bankanın birlikte okunmasının bir zararı yoktur; işlemci yalnız gereken yarıyı alır. Yine de çoğu tasarımda banka seçimi okumada da uygulanır.
Tek adresten başlayan bir sözcüğün düşük baytı yüksek bankada, yüksek baytı ise bir sonraki satırın düşük bankasındadır. İki bayt farklı satırlarda olduğu için tek döngüde birlikte okunamaz. 8086 bunu kendiliğinden iki yol döngüsüne böler: önce tek adresteki baytı D8–D15 üzerinden, sonra bir sonraki çift adresteki baytı D0–D7 üzerinden aktarır. Bu bölme programcıya görünmez; komut doğru sonucu verir, yalnız daha uzun sürer. Veri sayfası bu cezanın komut getirmede değil, yalnız sözcük işlenenlerinde olduğunu belirtir: komutlar kuyruğa her zaman çift adresten başlayan sözcükler olarak getirilir.
“Tek adresteki bir bayt da iki döngü sürer” düşüncesi yanlıştır. Bayt erişimi hangi adreste olursa olsun tek döngüdür: çift adresteki bayt D0–D7'den, tek adresteki bayt D8–D15'ten geçer. İki döngü yalnız tek adresten başlayan sözcük erişiminde gerekir. Verileri çift adrese hizalamak için assembler'ın EVEN yönergesi kullanılır.
10.1.2.5Kod izleme: hizalı ve hizasız erişim
Aşağıdaki program aynı sözcüğü bir kez çift, bir kez tek adrese yazar; ardından bir bayt ve bir sözcük okur. Her veri erişiminde kaç yol döngüsü yapıldığını, BHE' ile A0'ın değerini ve verinin hangi hatlardan geçtiğini izlemek, banka düzenini somutlaştırır. Bellekte 20100h–20102h adresleri başlangıçta bilinmiyor (??) kabul edilir.
mov ax, 2000h
mov ds, ax
mov ax, 1234h
mov [0100h], ax ; çift adres
mov ax, 0ABCDh
mov [0101h], ax ; tek adres
mov al, [0100h] ; bayt
mov bx, [0101h] ; tek adresİlk iki komut DS'ye 2000h yükler; veri kesimi fiziksel 20000h adresinden başlar. Bu iki komut yalnız yazmaçları değiştirir. Yolda yalnız komut baytlarını getiren döngüler görülür, veri için döngü yoktur. mov ax, 1234h AX'e 1234h koyar: AH = 12h, AL = 34h.
mov [0100h], ax fiziksel adresi 20000h + 0100h = 20100h olarak hesaplar. Adres çifttir. 8086 T1'de BHE' = 0 ve A0 = 0 verir; iki banka birden seçilir. Sözcük tek döngüde yazılır: AL'deki 34h D7–D0 üzerinden çift adrese (20100h), AH'deki 12h D15–D8 üzerinden tek adrese (20101h) gider. Little-endian düzen, banka düzeniyle doğal olarak uyuşur: düşük bayt düşük adrese ve düşük bankaya yazılır.
mov ax, 0ABCDh AX'i ABCDh yapar. Sayının başındaki 0, assembler'ın ABCDh'yi bir etiket adı sanmaması içindir. mov [0101h], ax ise tek adres 20101h'ye yazar. 8086 bu erişimi iki döngüye böler. Birinci döngüde adres 20101h'dir: BHE' = 0, A0 = 1 ile yalnız yüksek banka seçilir ve AL'deki CDh D15–D8 üzerinden 20101h'ye yazılır. İkinci döngüde adres 20102h'dir: BHE' = 1, A0 = 0 ile yalnız düşük banka seçilir ve AH'deki ABh D7–D0 üzerinden 20102h'ye yazılır. Bu yazma, 20101h'deki eski 12h'nin üzerine CDh yazar.
mov al, [0100h] çift adresten bir bayt okur: BHE' = 1, A0 = 0, veri D7–D0'dan gelir. AL = 34h olur; AH değişmez, AX = AB34h. Son komut mov bx, [0101h] yine hizasız bir sözcük okumasıdır. Birinci döngü 20101h'deki CDh'yi D15–D8 üzerinden getirir. İşlemci bu baytı sözcüğün düşük yarısına, BL'ye yerleştirir. İkinci döngü 20102h'deki ABh'yi D7–D0 üzerinden getirir; bu bayt BH'ye gider. Sonuç BX = ABCDh olur.
| Komut | Döngü | FA | BHE' | A0 | D15–D8 | D7–D0 | RD'/WR' | Sonuç |
|---|---|---|---|---|---|---|---|---|
mov [0100h],ax | 1/1 yazma | 20100h | 0 | 0 | 12h | 34h | 1/0 | [20100h] = 34h, [20101h] = 12h |
mov [0101h],ax | 1/2 yazma | 20101h | 0 | 1 | CDh | — | 1/0 | [20101h] = CDh |
| 2/2 yazma | 20102h | 1 | 0 | — | ABh | 1/0 | [20102h] = ABh | |
mov al,[0100h] | 1/1 okuma | 20100h | 1 | 0 | — | 34h | 0/1 | AX = AB34h |
mov bx,[0101h] | 1/2 okuma | 20101h | 0 | 1 | CDh | — | 0/1 | BL = CDh |
| 2/2 okuma | 20102h | 1 | 0 | — | ABh | 0/1 | BX = ABCDh |
Tablo 10.1.5 dört veri komutunun toplam 6 veri yol döngüsü yaptığını gösterir: 1 + 2 + 1 + 2. Programın sonunda AX = AB34h, BX = ABCDh olur; bellekte 20100h = 34h, 20101h = CDh, 20102h = ABh bulunur. Program emu8086'da çalıştırıldığında yazmaç ve bellek değerleri aynı çıkar. Emülatör bankaları ve döngüleri göstermez; döngü sayısı ve BHE'/A0 değerleri yalnız fiziksel adresin tek ya da çift olmasından çıkar.
Komut kodlarının uzunlukları da bilgi verir. mov [0100h], ax A3 00 01 olarak 3 bayttır; AX için kısa akümülatör biçimi kullanılır. mov bx, [0101h] ise 8B 1E 01 01 olarak 4 bayttır. Bu baytlar, veri döngülerinin yanında ayrıca komut getirme döngüleriyle kuyruğa alınır.
5 MHz'lik bir 8086, bekleme durumu olmayan bir bellekte 1000 sözcüklük bir diziyi okuyor. Dizi çift adreste başlarsa ve tek adreste başlarsa veri döngüleri ne kadar sürer?
- Bir yol döngüsü 4 × 200 ns = 800 ns'dir.
- Çift adreste başlayan dizide her sözcük tek döngüdür: 1000 × 800 ns = 800 µs.
- Tek adreste başlayan dizide her sözcük iki döngüdür: 2000 × 800 ns = 1600 µs.
Yalnız hizalama farkı veri erişim süresini iki katına çıkarır. Yığının çift adreste tutulması da bu yüzden önemlidir: kesme ve yordam çağrılarındaki her PUSH ve POP bir sözcük erişimidir.
10.1.3Yol döngüleri
Adres, veri ve kontrol sinyallerinin pinlerde hangi sırayla belirdiğini anlamak için zamanı saat turlarına bölmek gerekir. Bu kesim bir yol döngüsünün T durumlarını tanımlar, ardından yazma ve okuma döngülerini tur tur izler. Okuma döngüsündeki bütün kontrol sinyallerini veri sayfasındaki zaman değerleriyle birlikte verir. Son olarak yavaş bir belleğin READY sinyaliyle bekleme durumu istemesini ve bir bellek için kaç bekleme durumu gerektiğinin hesabını anlatır.
10.1.3.1Yol döngüsü ve T durumları
İşlemcinin bellek ya da G/Ç ile her veri alışverişi bir yol döngüsüdür (bus cycle). 8086'da bir yol döngüsü en az dört saat turu sürer. Bu turlara T durumları denir: T1, T2, T3, T4. Yavaş bir aygıt için T3 ile T4 arasına bekleme durumları (Tw, wait state) eklenebilir. İşlemcinin yolu hiç kullanmadığı turlar boşta durumlarıdır (Ti, idle state).
Her T durumu saatin bir düşen kenarında başlar ve bir sonraki düşen kenarda biter. Pinlerin anlamı T durumuna göre değişir. T1'de AD pinlerinde adres, A16–A19'da adresin üst bitleri bulunur ve ALE darbesi verilir. T2 çoğunlukla hazırlıktır: okumada yolun yönü değiştirilir, kontrol sinyalleri (RD', WR') etkinleşir. Veri aktarımı T3 ve T4'te yapılır. T4, döngünün kapanışıdır; kontrol sinyalleri pasife döner ve bir sonraki döngü için yol hazırlanır.
Saat frekansı bilinince bir yol döngüsünün süresi doğrudan hesaplanır. 5 MHz'lik saatte bir tur T = 1 / 5 MHz = 200 ns'dir; bekleme durumu olmayan bir yol döngüsü 4 × 200 = 800 ns sürer. Bir saniyede en çok 1 / 800 ns = 1,25 milyon yol döngüsü yapılabilir. Her döngü en çok 2 bayt taşıdığı için yolun en yüksek bant genişliği yaklaşık 2,5 MB/s'dir.
8086 (5 MHz), 8086-2 (8 MHz) ve 8086-1 (10 MHz) için bekleme durumsuz yol döngüsü süresini ve yolun en yüksek bant genişliğini bulalım.
- 5 MHz: T = 200 ns, döngü 800 ns, 1,25 × 106 döngü/s × 2 bayt = 2,5 MB/s.
- 8 MHz: T = 125 ns, döngü 500 ns, 2 × 106 döngü/s × 2 bayt = 4 MB/s.
- 10 MHz: T = 100 ns, döngü 400 ns, 2,5 × 106 döngü/s × 2 bayt = 5 MB/s.
Bu değerler üst sınırdır. Gerçekte yolun bir kısmı komut getirmeye gider, hizasız sözcükler iki döngü sürer ve yavaş bellekler bekleme durumu ekler.
Boşta durumları işlemcinin yolu kullanmadığı anlarda ortaya çıkar. Örneğin önden getirme kuyruğu doluyken ve yürütülen komut bellek istemiyorsa BIU'nun yapacak işi yoktur; yol Ti turlarında bekler. Veri sayfası bu turların iç işler için kullanıldığını belirtir. Ti turlarında kontrol sinyalleri pasif kalır ve yol, HOLD isteğiyle başka bir yöneticiye kolayca devredilebilir.
10.1.3.2Yazma yol döngüsü
Yazma döngüsü dört T durumundan oluşur. Şekil 10.1.10'da bir bellek yazmasının sadeleştirilmiş zaman çizelgesi görülür.
- T1: İşlemci yazılacak hedef adresi AD0–AD15 ve A16–A19 pinlerine koyar. ALE darbesi adresi dış kilitlere alır. M/IO' bir önceki döngünün T4'ünde geçerli hâle gelmiştir; bellek yazmasında 1, G/Ç yazmasında 0'dır.
- T2: AD pinleri adresten veriye geçer: işlemci yazılacak veriyi hemen sürer. WR' sinyali T2'nin başında 0 olur. A16–A19 pinleri durum bitlerine (S3–S6) geçer.
- T3: Veri ve WR' kararlı kalır. Bellek veriyi yakalamaya hazırlanır. Aygıt hazır değilse READY'yi 0 tutar; bu durumda T3'ten sonra Tw eklenir.
- T4: WR' 1'e döner. Belleklerin çoğu veriyi WR' sinyalinin yükselen kenarında yazar. Veri, T4'ün ortasına kadar pinlerde kalır; böylece yükselen kenarda bellek kararlı veriyi görür.
Yazma döngüsünde adres T1'de, veri T2'den T4'e kadar aynı pinlerdedir ve arada boşluk yoktur. Bunun nedeni verinin kaynağının işlemcinin kendisi olmasıdır: adresi süren sürücüler, bir sonraki turda veriyi sürmeye devam eder. Yolun yönü değişmez.
Veri sayfası WR' darbesinin genişliğini TWLWH ≥ 2TCLCL − 60 olarak verir. 5 MHz'de bu 2 × 200 − 60 = 340 ns eder. Bellek yongasının istediği en kısa yazma darbesi bundan kısa olmalıdır; değilse bekleme durumu eklenerek darbe uzatılır. Her Tw, WR' sinyalinin 0 kaldığı süreyi bir tur daha uzatır.
10.1.3.3Okuma yol döngüsü
Okuma döngüsü de dört T durumudur. Önemli fark, AD pinlerinde adres ile veri arasında bir boşluk bulunmasıdır. Şekil 10.1.11 bu boşluğu gösterir.
- T1: Yazmadaki gibi okunacak adres pinlere konur ve ALE ile kilitlenir.
- T2: 8086, AD pinlerinin çıkış sürücülerini üç durumlu yapar; pinler yüzer. Bu andan sonra bellek yolu sürebilir. RD' sinyali 0 olur.
- T3: Bellek ya da G/Ç aygıtı RD' = 0'ı görünce çıkışlarını açar ve istenen veriyi veri yoluna koyar.
- T4: T4'ün başında, yani T3'ü bitiren düşen saat kenarında 8086 veriyi pinlerden okur. RD' 1'e döner ve bellek çıkışlarını kapatarak yolu bırakır.
Yol dönüşü (bus turnaround), çift yönlü bir hatta sürücünün değiştiği andır. Okuma döngüsünde AD hatlarını T1'de işlemci, T3–T4'te bellek sürer. T2'deki yüzer durum bu dönüş içindir: işlemci adresi sürmeyi bırakmadan bellek veriyi sürmeye başlarsa iki çıkış aynı hatta çakışır.
Çakışma sadece yanlış veri demek değildir. Bir çıkış hattı 1'e, öteki 0'a sürüyorsa iki sürücü arasında kısa devreye yakın bir akım akar; buna yol çekişmesi (bus contention) denir. Sürekli çekişme yongaları ısıtır ve zamanla bozar. Bu yüzden veri sayfası iki ayrı garanti verir. AD pinleri, T2'nin başındaki saat kenarından en geç TCLAZ = 80 ns sonra yüzer. RD' sinyali de yerel yol yüzene kadar T2'de 1 kalır. Bellek de çıkışını ancak RD' = 0 olduktan sonra açar. Böylece işlemcinin bıraktığı hattı bellek güvenle alır.
“Okumada da yazmadaki gibi veri T2'de hazırdır” varsayımı yanlıştır. Okumada veri dış aygıttan gelir ve aygıt ancak RD' = 0'ı gördükten sonra çıkışını açar. RD' T2 içinde düşer, aygıtın erişim gecikmesi de eklenir; veri en erken T3 içinde yola çıkar ve T4'ün başında örneklenir. Yazmada ise veriyi işlemci sürdüğü için T2'nin başından beri pinlerdedir.
10.1.3.4Okuma için yol zamanlaması
Sadeleştirilmiş çizelgeler yalnız adres, veri ve okuma sinyalini gösterir. Minimum modda bir bellek okumasında altı kontrol sinyali daha rol oynar: M/IO', ALE, DT/R', RD', DEN' ve READY. Şekil 10.1.12 hepsini aynı saat ekseninde verir.
Sinyalleri turlara göre okuyalım:
- T1: M/IO' = 1 (bellek) önceki döngünün T4'ünden beri geçerlidir ve döngü boyunca kalır. Adres AD ve A pinlerindedir. ALE darbesi adresi kilitler. DT/R' = 0'dır: alıcı-verici “alma” yönüne ayarlanır. DEN' = 1'dir: alıcı-verici henüz kapalıdır.
- T2: AD pinleri yüzer; A19–A16 pinlerinde S6–S3 durum bitleri belirir. RD' = 0 olur. Ardından DEN' = 0 olur ve alıcı-verici açılır. Veri sayfasına göre okumada DEN', T2'nin ortasından T4'ün ortasına kadar aktiftir; yazmada ise T2'nin başından T4'ün ortasına kadar.
- T3: Bellek veriyi veri yoluna koyar; veri alıcı-vericiden geçerek AD pinlerine ulaşır. İşlemci T3 sırasında READY'yi örnekler. READY = 1 ise döngü T4'e geçer.
- T4: T4'ün başında veri örneklenir. RD', DEN' ve DT/R' pasife döner. M/IO' bir sonraki döngünün türüne göre T4 içinde değişebilir.
| Simge | Anlamı | 8086 (5 MHz) | 8086-2 (8 MHz) | 8086-1 (10 MHz) |
|---|---|---|---|---|
| TCLCL | saat periyodu | 200–500 ns | 125–500 ns | 100–500 ns |
| TCLCH | saatin düşük süresi (en az) | 118 ns | 68 ns | 53 ns |
| TCHCL | saatin yüksek süresi (en az) | 69 ns | 44 ns | 39 ns |
| TCLAV | saatten adresin geçerli olmasına (en çok) | 110 ns | 60 ns | 50 ns |
| TCLAZ | saatten adresin yüzmesine (en çok) | 80 ns | 50 ns | 40 ns |
| TCLRL | saatten RD' sinyalinin düşmesine (en çok) | 165 ns | 100 ns | 70 ns |
| TDVCL | verinin saat kenarından önce kurulması (en az) | 30 ns | 20 ns | 5 ns |
| TRYHCH | READY'nin saat kenarından önce kurulması (en az) | 118 ns | 68 ns | 53 ns |
| TRLRH | RD' darbe genişliği (en az) | 2TCLCL − 75 | 2TCLCL − 50 | 2TCLCL − 40 |
| TWLWH | WR' darbe genişliği (en az) | 2TCLCL − 60 | 2TCLCL − 40 | 2TCLCL − 35 |
Tablo 10.1.6 veri sayfasının AC karakteristikleri tablosundan seçilmiş değerleri verir. Simgelerin adlandırma kuralı okunmalarını kolaylaştırır: ilk iki harf başlangıç olayını, son iki harf bitiş olayını anlatır. CL “saat düşer”, CH “saat yükselir”, AV “adres geçerli”, RL “RD' düşer”, DV “veri geçerli” demektir. TCLAV, saatin düşen kenarından adresin geçerli olmasına kadar geçen en uzun süredir.
Saat periyodunun üst sınırı da dikkat çeker: TCLCL en çok 500 ns olabilir, yani saat 2 MHz'in altına inemez. 8086 dinamik bir tasarımdır; iç düğümlerindeki yükler belirli bir süreden fazla beklerse kaybolur. Bu yüzden saat durdurulamaz ya da çok yavaşlatılamaz.
10.1.3.5READY ve bekleme durumu
Bir bellek yongasının erişim süresi, adresi aldığı andan veriyi çıkışına koyduğu ana kadar geçen süredir. Erişim süresi uzun olan yavaş bir bellek, verisini T3'ün sonuna kadar hazırlayamaz. 8086 bu durumu READY girişiyle çözer.
READY (pin 22), adreslenen bellek ya da G/Ç aygıtının veri aktarımını tamamlayacağını bildiren aktif yüksek giriştir. İşlemci READY'yi T3 sırasında örnekler. READY = 0 ise T4'e geçmez, bir bekleme durumu (Tw) ekler ve READY'yi Tw içinde yeniden örnekler. READY 1 olana kadar Tw eklemeyi sürdürür.
Şekil 10.1.13 tek bekleme durumlu bir okumayı gösterir. Yavaş bellek seçildiğinde adres çözücü READY'yi hemen 0'a çeker. T3'te işlemci READY = 0'ı görür ve T4'e geçmez; bir Tw ekler. Tw sırasında RD', DEN', DT/R' ve adres oldukları gibi kalır. Bellek bu ek turda verisini hazırlar ve READY'yi 1'e çıkarır. Tw içinde READY = 1 örneklenince sıradaki tur T4 olur ve veri okunur. Döngü dört yerine beş tur, yani 5 × 200 = 1000 ns sürer; her bekleme durumu döngüye 200 ns ekler.
READY'nin zamanlaması sıkıdır. 5 MHz'de READY, T3'teki yükselen saat kenarından en az TRYHCH = 118 ns önce kararlı olmalıdır. Saatin düşük süresi de yaklaşık 133 ns olduğundan READY pratikte T3'ün başında hazır olmalıdır. Ayrıca 8086'nın READY girişi içeride eş zamanlanmaz: kurulma ve tutma süreleri sağlanmazsa işlemci kararsız davranabilir. Bu yüzden bellek ve G/Ç aygıtlarının hazır sinyali doğrudan 8086'ya değil, 8284A saat üretecinin RDY girişine bağlanır. 8284A, RDY'yi saatle eş zamanlar ve 8086'ya kurallara uygun bir READY verir. Veri sayfası RDY'nin T2, T3 ve Tw sonlarına doğru örneklendiğini belirtir.
READY'yi aktif düşük bir “bekle” sinyali gibi düşünmek kafa karıştırır. READY aktif yüksektir: 1 “hazırım, devam et”, 0 “hazır değilim, bekle” anlamına gelir. Hiçbir yavaş aygıtın bağlı olmadığı bir sistemde READY sürekli 1 tutulur. Bağlantısı unutulmuş ve 0'da kalmış bir READY, işlemciyi ilk bellek erişiminde sonsuz bekleme durumuna sokar.
10.1.3.6Kaç bekleme durumu gerekir?
Bir bellek için gereken bekleme durumu sayısı, işlemcinin belleğe tanıdığı süre ile belleğin erişim süresi karşılaştırılarak bulunur. Okumada adres, T1'in başındaki saat kenarından en geç TCLAV sonra geçerli olur. Veri ise T3'ün sonunda, T4'e geçen saat kenarında örneklenir ve bu kenardan en az TDVCL önce hazır olmalıdır. Bu iki an arasında üç tur vardır. Aradaki sürenin bir kısmını da adres kilidi, adres çözücü ve veri alıcı-vericisinin gecikmeleri yer; bunların toplamına ttampon diyelim.
Belleğe kalan süre şöyle yazılır:
tizin = 3·T − TCLAV − TDVCL − ttampon
Her Tw bu pencereyi bir T uzatır. n bekleme durumuyla izin verilen süre tizin + n·T olur. Belleğin erişim süresi terişim bu süreyi aşmamalıdır:
terişim ≤ tizin + n·T ⇒ n = ⌈(terişim − tizin) / T⌉ (sonuç negatifse n = 0)
5 MHz'lik bir 8086 sisteminde T = 200 ns, veri sayfasından TCLAV ≤ 110 ns ve TDVCL ≥ 30 ns alınıyor; kilit, çözücü ve alıcı-verici gecikmelerinin toplamı ttampon = 40 ns kabul ediliyor. Erişim süresi 700 ns olan bir bellek için kaç bekleme durumu gerekir?
- tizin = 3 × 200 − 110 − 30 − 40 = 600 − 180 = 420 ns.
- n = ⌈(700 − 420) / 200⌉ = ⌈280 / 200⌉ = ⌈1,4⌉ = 2.
- Sınama: 1 Tw ile pencere 420 + 200 = 620 ns olur; 620 < 700, yetmez. 2 Tw ile 420 + 400 = 820 ns olur; 820 ≥ 700, yeter.
- Döngü süresi (4 + 2) × 200 = 1200 ns.
Erişim süresi 400 ns olan bir bellek için 400 ≤ 420 olduğundan bekleme durumu gerekmez; döngü 800 ns'de kalır.
Hesapta tavan işlevi (⌈ ⌉) kullanılır, çünkü bekleme durumu tam tur olarak eklenir; 1,4 tur eklemek mümkün değildir. Bir bellek pencereye 1 ns bile sığmıyorsa bir tam tur daha eklenir. Bu yüzden erişim süresi pencereyi biraz aşan bir bellek, sistemi bir tur yavaşlatır.
Bu hesap yalnız “adresten veriye” koşulunu inceler. Okumada ikinci bir koşul daha vardır. Bellek çıkışını ancak RD' = 0 olduktan sonra açar. RD' sinyalinin düşmesinden verinin çıkışa gelmesine kadar geçen çıkış etkinleştirme süresi de pencereye sığmalıdır. RD', T2'nin başından en geç TCLRL = 165 ns sonra düşer. Veri, T2'nin başından 2T = 400 ns sonraki kenardan TDVCL önce hazır olmalıdır. Bu ikinci pencere 400 − 165 − 30 = 205 ns eder; alıcı-verici gecikmesi de buradan düşülür. Belleğin çıkış etkinleştirme süresi bu değerden kısa olmalıdır. Her Tw bu pencereyi de bir T uzatır.
8 MHz'lik bir 8086-2 sistemi aynı 700 ns'lik belleği kullanıyor. Veri sayfası TCLAV ≤ 60 ns, TDVCL ≥ 20 ns veriyor; ttampon = 40 ns. Kaç Tw gerekir ve bekleme durumları hızlı saatin kazancını ne kadar geri alır?
- T = 125 ns; tizin = 3 × 125 − 60 − 20 − 40 = 375 − 120 = 255 ns.
- n = ⌈(700 − 255) / 125⌉ = ⌈445 / 125⌉ = ⌈3,56⌉ = 4.
- Sınama: 3 Tw ile 255 + 375 = 630 ns, yetmez; 4 Tw ile 255 + 500 = 755 ns, yeter.
- Döngü (4 + 4) × 125 = 1000 ns.
5 MHz'lik sistemde aynı bellek 1200 ns'lik döngü veriyordu. Saat 1,6 kat hızlansa da bellek döngüsü yalnız 1,2 kat kısalır (1200 ns'den 1000 ns'ye). Yavaş bellek, hızlı işlemcinin kazancının büyük kısmını bekleme durumlarında harcatır.
10.1.4Durum pinleri
8086, her yol döngüsünde ne yaptığını dışarıya kodlanmış bir biçimde de bildirir. Bu bilgiyi taşıyan pinlere durum pinleri denir. Maksimum modda S2', S1', S0' pinleri döngünün türünü verir; 8288 yol denetleyicisi bu kodu çözerek okuma ve yazma komutlarını üretir. İki modda da A16–A19 ve BHE' pinleri, adres zamanından sonra S3–S7 durum bitlerini taşır. Maksimum modda QS1 ve QS0 ise önden getirme kuyruğunda olanları anlatır. Bu kesim üç grubu sırayla ele alır ve bir programın her komutunda hangi kodların göründüğünü izler.
10.1.4.1S2', S1', S0'
S2', S1' ve S0' maksimum modda 28, 27 ve 26 numaralı pinlerdir. Üç bit sekiz farklı kod verir; her kod bir yol döngüsü türünü anlatır. Kodlar önceki döngünün T4'ünde, T1'de ve T2'de geçerlidir. T3'te ya da READY = 1 iken bir Tw'de pinler pasif koda (1, 1, 1) döner.
Durum pinlerinin zamanlaması 8288'in işini kolaylaştırır. Pinler döngüler arasında pasif koddadır. T4'te pasif koddan herhangi bir koda geçiş, 8288'e “yeni bir yol döngüsü başlıyor” der. 8288 bu kodu bir sonraki T1'de çözer, ALE'yi üretir ve uygun komut sinyalini hazırlar. T3'te pinlerin pasife dönmesi de döngünün sonuna yaklaşıldığını bildirir.
| S2' | S1' | S0' | Döngü türü | 8288 komutu |
|---|---|---|---|---|
| 0 | 0 | 0 | kesme kabul | INTA' |
| 0 | 0 | 1 | G/Ç portu oku | IORC' |
| 0 | 1 | 0 | G/Ç portuna yaz | IOWC', AIOWC' |
| 0 | 1 | 1 | durdurma (HLT) | yok |
| 1 | 0 | 0 | kod erişimi (komut getirme) | MRDC' |
| 1 | 0 | 1 | bellek oku | MRDC' |
| 1 | 1 | 0 | belleğe yaz | MWTC', AMWC' |
| 1 | 1 | 1 | pasif (döngü yok) | yok |
Tablo 10.1.7 bir kurala göre okunabilir. S2' = 1 ise döngü bellekle ilgilidir; S2' = 0 ise G/Ç ya da özel bir döngüdür. S1' ve S0' ikilisi 01 iken okuma, 10 iken yazma anlamına gelir. Bu kural minimum mod sinyalleriyle örtüşür: S2' minimum moddaki M/IO' ile aynı pini (28), S1' ise DT/R' ile aynı pini (27) paylaşır. 00 ve 11 ikilileri özel durumlardır: bellekte 00 komut getirmeyi, G/Ç tarafında 00 kesme kabulü, 11 ise durdurmayı anlatır.
Durum pinleri aktif düşüktür. Bu yüzden bütün bitlerin 1 olduğu 111 kodu “hiçbir döngü yok” anlamına gelir. Bir hat kopar ya da yüzerse 1'e çekilir ve 8288 boşuna komut üretmez.
100 (kod erişimi) ile 101 (bellek oku) kodlarının farklı komut ürettiğini sanmak yanlıştır. 8288 ikisinde de MRDC' üretir; bellek için ikisi aynı okumadır. Ayrım, yolu izleyen başka yongalar içindir. Örneğin bir hata ayıklama donanımı yalnız komut getirmelerini kaydedebilir. Maksimum modda sistem, kod ve veri için ayrı bellekler de kurabilir.
10.1.4.2S3–S6 ve BHE'/S7
A16/S3, A17/S4, A18/S5 ve A19/S6 pinleri T1'de adresin üst dört bitini taşır, T2–T4 boyunca durum bitlerine geçer. Bu bitler iki modda da vardır.
| S4 (A17) | S3 (A16) | Kullanılan kesim |
|---|---|---|
| 0 | 0 | ES (ek kesim) |
| 0 | 1 | SS (yığın) |
| 1 | 0 | CS ya da kesim yok (G/Ç, kesme vektörü) |
| 1 | 1 | DS (veri) |
Tablo 10.1.8, S4 ve S3'ün o döngüde fiziksel adresi hesaplamak için hangi kesim yazmacının kullanıldığını gösterdiğini verir. Komut getirme her zaman CS ile yapılır ve 10 kodunu verir. G/Ç erişiminde ve kesme vektörü okumada adres kesim yazmacından gelmez; bunlar da 10 kodunu kullanır. Kesim öneki kodu değiştirir: MOV AL, ES:[BX] komutunun okuması 00 (ES) verir.
Diğer durum bitleri şunlardır:
- S5 (A18): IF kesme bayrağının o anki değeridir. Her saat turunun başında güncellenir. Dışarıdaki bir izleme devresi, işlemcinin kesmelere açık olup olmadığını bu bitten görür.
- S6 (A19): 8086'da her zaman 0'dır; yolu 8086'nın kullandığını gösterir.
- S7 (BHE'): T2–T4'te BHE' pininde görülen yedek durum bitidir; 8086'da bir anlamı yoktur.
S3 ve S4 bitleri ilginç bir sistem olanağı sunar. Bu bitler ALE ile kilitlenmez, ama T2'den itibaren pinlerde durur ve bir dış devre onları adres hatlarına ek olarak kullanabilir. Böylece her kesim için ayrı bir 1 MB bellek bağlanabilir: kod, veri, yığın ve ek kesim ayrı bellek bankalarına gider. Toplam adres alanı kuramsal olarak 4 MB'a çıkar. Bu düzen pratikte yaygınlaşmadı, ama durum bitlerinin işlevini iyi gösterir.
Aşağıdaki erişimlerin veri döngülerinde S4 S3 kaçtır?
MOV AX, [SI+2]: taban yazmacı yok, indis SI; varsayılan kesim DS → 11.MOV AX, [BP+SI]: adreste BP var; varsayılan kesim SS → 01.STOSB: dizgi hedefi her zaman ES:DI → 00.CALLile dönüş adresinin yığına yazılması: SS → 01.OUT DX, AL: G/Ç, kesim yok → 10.
Kesim kuralı komutun yazımından çıkar. Durum bitleri bu kuralın donanımdaki yansımasıdır.
10.1.4.3Kod izleme: komutlar ve durum kodları
Aşağıdaki program, her biri farklı bir yol döngüsü türü üreten yedi komuttan oluşur. Maksimum modda çalışan bir 8086'nın her veri döngüsünde S2' S1' S0' ve S4 S3 pinlerinde ne görüldüğünü ve 8288'in hangi komutu ürettiğini izleyelim. Bellekte DS:0200h adresinde 1234h sözcüğü, 60h numaralı portta da 5Ah değeri bulunduğu varsayılır. Program .COM biçimindedir; CS = DS = SS = 0700h ve başlangıçta SP = FFFEh, AX = 0000h'dir.
org 100h
mov bx, 0200h
mov ax, [bx] ; bellek oku
mov [bx+2], ax ; belleğe yaz
in al, 60h ; G/Ç oku
out 61h, al ; G/Ç yaz
push ax ; yığına yaz
hlt ; durmov bx, 0200h yalnız yazmaçla çalışır. Yolda bu komut için yalnız komut getirme döngüleri görülür: S2' S1' S0' = 100, S4 S3 = 10 (CS). 8288 bu kod için MRDC' üretir; bellek, CS:IP'nin gösterdiği komut baytlarını verir.
mov ax, [bx] bir bellek okumasıdır: kod 101. Adres DS:0200h'dir; DS = 0700h olduğundan fiziksel adres 07000h + 0200h = 07200h olur. Adres çift olduğu için sözcük tek döngüde gelir. Veri kesimi kullanıldığı için S4 S3 = 11'dir. 8288 MRDC' üretir ve AX = 1234h olur.
mov ax, [bx]: bellek okuma, S2' S1' S0' = 101, S4 S3 = 11 (DS), 8288 MRDC' üretir. Sağda mov [bx+2], ax: belleğe yazma, 110, kesim yine DS, 8288 MWTC' ve AMWC' üretir.mov [bx+2], ax belleğe yazar: kod 110. Etkin adres 0202h, fiziksel adres 07202h'dir; yine çift adres ve tek döngü. 8288 MWTC' (bellek yazma komutu) üretir. Ayrıca bir saat önce başlayan AMWC' (ileri bellek yazma) çıkışını da verir. Kesim DS olduğundan S4 S3 = 11 kalır. 07202h'ye 34h, 07203h'ye 12h yazılır.
in al, 60h bir G/Ç okumasıdır: kod 001 ve 8288 IORC' üretir. G/Ç adresi kesim yazmacından gelmediği için S4 S3 = 10'dur; A19–A16 hatları T1'de 0'dır. Port 5Ah'yi verir ve AL = 5Ah, AX = 125Ah olur. Port numarası 60h çift olduğu için bayt D7–D0 üzerinden gelir.
out 61h, al: G/Ç yazma, 010, 8288 IOWC' üretir; S2' = 0 olduğundan bellek bu döngüye karışmaz. Sağda push ax: yine bellek yazma (110), ama yığın kesimi kullanılır: S4 S3 = 01 (SS).out 61h, al G/Ç yazmasıdır: kod 010 ve 8288 IOWC' ile AIOWC' üretir. S2' = 0 olduğundan bellek denetim mantığı bu döngüye hiç karışmaz. Port 61h tek adres olduğundan AL'deki 5Ah D15–D8 üzerinden çıkar ve BHE' = 0 olur.
push ax da bir bellek yazmasıdır (110), ama adres yığın kesiminden gelir. PUSH önce SP'yi 2 azaltır: SP = FFFCh. Sözcük SS:FFFCh'ye, yani fiziksel 07000h + FFFCh = 16FFCh adresine yazılır. S4 S3 = 01'dir (SS). Durum bitleri sayesinde bir sistem yığını ayrı bir belleğe koyabilir.
hlt işlemciyi durdurur. Maksimum modda 8086 S2' S1' S0' = 011 kodunu verir; 8288 bu kod için komut üretmez, yalnız bir ALE darbesi verir. Minimum modda ise işlemci durdurma durumuna girdiğini denetim sinyali olmayan tek bir ALE darbesiyle bildirir. İşlemci bu durumdan ancak bir kesme ya da RESET ile çıkar.
| Komut | S2' S1' S0' | Döngü | S4 S3 | 8288 komutu | FA | AX | SP |
|---|---|---|---|---|---|---|---|
mov bx,0200h | 100 | kod getirme | 10 (CS) | MRDC' | CS:0100h | 0000h | FFFEh |
mov ax,[bx] | 101 | bellek oku | 11 (DS) | MRDC' | 07200h | 1234h | FFFEh |
mov [bx+2],ax | 110 | belleğe yaz | 11 (DS) | MWTC', AMWC' | 07202h | 1234h | FFFEh |
in al,60h | 001 | G/Ç oku | 10 | IORC' | port 0060h | 125Ah | FFFEh |
out 61h,al | 010 | G/Ç yaz | 10 | IOWC', AIOWC' | port 0061h | 125Ah | FFFEh |
push ax | 110 | belleğe yaz | 01 (SS) | MWTC', AMWC' | 16FFCh | 125Ah | FFFCh |
hlt | 011 | durdurma | — | yok | — | 125Ah | FFFCh |
Tablo 10.1.9'daki yazmaç ve bellek değerleri program emu8086'da çalıştırıldığında da aynı çıkar. Son durumda AX = 125Ah ve SP = FFFCh olur; 07202h'deki sözcük 1234h, yığına itilen sözcük 125Ah'dir. Durum kodları ve 8288 komutları ise emülatörde görünmez; onlar Tablo 10.1.7 ve Tablo 10.1.8'deki kurallardan çıkar. Döngü aralarında pinler 111 (pasif) koduna döner.
10.1.4.4Durum kodunu çözmek
Beş durum pininin değerinden döngünün türü ve kullanılan kesim üç adımda bulunur. Önce S2'ye bakılır: 1 ise bellek, 0 ise G/Ç ya da özel döngü. Sonra S1' S0' ikilisi okunur: 01 okuma, 10 yazma, 00 ve 11 özel durum. Son olarak S4 S3 kesimi verir.
Bir mantık çözümleyicisi T2 sırasında S2' S1' S0' = 1 0 1 ve S4 S3 = 1 1 gösteriyor. Döngü nedir ve hangi komut bu döngüyü üretmiş olabilir?
- S2' = 1 → bellek döngüsü.
- S1' S0' = 01 → okuma. 101 kodu “bellek oku”dur; 8288 MRDC' üretir.
- S4 S3 = 11 → kesim DS.
DS'den bellek okuyan herhangi bir komut bu döngüyü üretir: MOV AL, [BX], ADD AX, [SI], LODSB gibi. Kod 100 olsaydı döngü bir komut getirme olurdu ve S4 S3 = 10 (CS) görülürdü.
10.1.4.5QS1, QS0: kuyruk durumu
8086'nın önden getirme kuyruğu yonganın içindedir. Kuyruğa giren baytlar yolda görünür, ama hangi baytın ne zaman yürütülmeye başladığı dışarıdan bilinemez. Maksimum modda 24 ve 25 numaralı pinler bu bilgiyi dışarı verir.
| QS1 | QS0 | Anlamı |
|---|---|---|
| 0 | 0 | işlem yok: kuyruk bu turda değişmedi |
| 0 | 1 | kuyruktan işlem kodunun ilk baytı alındı |
| 1 | 0 | kuyruk boşaltıldı (dallanma) |
| 1 | 1 | kuyruktan sonraki bayt alındı |
Kuyruk durumu, kuyruk işleminin yapıldığı saat turunu izleyen turda geçerlidir. Tablo 10.1.10'daki kodların başlıca kullanıcısı 8087 yardımcı işlemcisidir. 8087, 8086 ile aynı yolu dinler ve getirilen komut baytlarını kendi kuyruğuna kopyalar. QS kodlarıyla 8086'nın hangi baytı yürütmeye aldığını izler. Kuyruktan çıkan baytın bir ESC (kaçış) komutu olduğunu görünce o komutu kendisi yürütür. 01 kodu yeni bir komutun başladığını, 11 kodu aynı komutun sonraki baytlarını bildirir. 10 kodu bir dallanmadan sonra kuyruğun boşaltıldığını gösterir; 8087 de o anda kendi kopyasını temizler.
10.1.5Kontrol pinleri
Adres ve veri pinleri “nereye” ve “ne” sorularını yanıtlar. Kontrol pinleri ise “ne zaman” ve “nasıl” sorularını yanıtlar. Aktarım okuma mı yazma mı, bellekle mi G/Ç ile mi? Alıcı-verici hangi yönde açılacak, yol başka bir yöneticiye verilecek mi? Bu kesim minimum moddaki okuma/yazma ve alıcı-verici sinyalleriyle başlar, iki komutun yol döngülerini sinyal sinyal izler. Ardından yolun paylaşılmasını sağlayan HOLD/HLDA, RQ'/GT ve LOCK' pinlerini, LOCK önekli bir semafor programıyla ve TEST' girişiyle tamamlar.
10.1.5.1RD', WR' ve M/IO'
RD' (pin 32) aktif düşük bir çıkıştır ve işlemcinin bellekten ya da G/Ç'den okuma yaptığını bildirir. Okuma döngüsünün T2, T3 ve Tw turlarında 0'dır. Bu pin iki modda da vardır. WR' (pin 29, minimum mod) yazma darbesidir; yazma döngüsünün T2, T3 ve Tw turlarında 0'dır. Veri sayfası iki sinyal arasındaki ince bir farkı vurgular: WR' T2'nin başında düşer, RD' ise yolun yüzmesine zaman tanımak için T2'nin içine biraz gecikmeli düşer.
M/IO' (pin 28, minimum mod) bellek erişimini G/Ç erişiminden ayırır: 1 bellek, 0 G/Ç demektir. Sinyal, döngüden önceki T4'te geçerli olur ve döngünün son T4'üne kadar değişmez. Böylece adres çözücüler, adres daha kilitlenmeden hangi adres uzayının seçildiğini bilir. Bellek yongalarının seçim mantığına M/IO' = 1, G/Ç aygıtlarınınkine M/IO' = 0 koşulu eklenir. 8088'de bu sinyal ters kutupludur ve IO/M' adını taşır: 1 G/Ç, 0 bellek demektir. 8085 ile uyum için böyle seçilmiştir.
| M/IO' | RD' | WR' | İşlem | Örnek komut |
|---|---|---|---|---|
| 1 | 0 | 1 | bellek okuma | MOV AL, [BX] |
| 1 | 1 | 0 | bellek yazma | MOV [BX], AL |
| 0 | 0 | 1 | G/Ç okuma | IN AL, 60h |
| 0 | 1 | 0 | G/Ç yazma | OUT 43h, AL |
Tablo 10.1.11'de RD' ile WR' sinyallerinin hiçbir satırda birlikte 0 olmadığı görülür; işlemci aynı anda hem okuyup hem yazamaz. Bu üç sinyalden dört ayrı komut sinyali türetilebilir. Örneğin bellek okuma komutu bir VEYA kapısıyla elde edilir: MEMR' = RD' + (M/IO')'. Çıkış yalnız RD' = 0 ve M/IO' = 1 iken 0 olur. Maksimum moddaki 8288 de aynı dört sinyali (MRDC', MWTC', IORC', IOWC') durum kodundan üretir.
Minimum modda MEMR', MEMW', IOR' ve IOW' sinyallerini RD', WR' ve M/IO' sinyallerinden kapılarla üretelim. Dört sinyal de aktif düşüktür.
- MEMR' yalnız RD' = 0 ve M/IO' = 1 iken 0 olmalı: MEMR' = RD' + (M/IO')'. M/IO' bir DEĞİL kapısından geçirilip RD' ile VEYA'lanır.
- MEMW' = WR' + (M/IO')': WR' = 0 ve M/IO' = 1 iken 0.
- IOR' = RD' + M/IO': RD' = 0 ve M/IO' = 0 iken 0.
- IOW' = WR' + M/IO': WR' = 0 ve M/IO' = 0 iken 0.
Sınama: OUT 43h, AL döngüsünde M/IO' = 0, RD' = 1, WR' = 0'dır. MEMR' = 1 + 1 = 1, MEMW' = 0 + 1 = 1, IOR' = 1 + 0 = 1, IOW' = 0 + 0 = 0. Yalnız IOW' etkindir. Bir 74LS32 ve bir 74LS04 bu çözücü için yeter.
10.1.5.2DT/R' ve DEN'
Veri yolunda 8286 ya da 74LS245 alıcı-vericileri kullanan bir sistemde işlemcinin iki sinyal daha üretmesi gerekir: alıcı-vericinin yönü ve ne zaman açılacağı.
DT/R' (data transmit / receive, veri gönder/al, pin 27) alıcı-vericinin yön girişine bağlanır. 1 iken veri işlemciden dışarı akar (yazma), 0 iken dışarıdan işlemciye akar (okuma). Zamanlaması M/IO' ile aynıdır: döngüden önceki T4'te geçerli olur ve döngü boyunca kalır. Maksimum moddaki S1' ile mantıksal olarak eşdeğerdir.
DEN' (data enable, veri etkinleştirme, pin 26) alıcı-vericinin çıkış etkinleştirme (OE') girişine bağlanır. Bellek ve G/Ç erişimlerinde ve kesme kabul döngülerinde aktif düşüktür. Okuma ve kesme kabulde T2'nin ortasından T4'ün ortasına, yazmada T2'nin başından T4'ün ortasına kadar 0 olur. T1'de mutlaka 1'dir: bu sırada AD pinlerinde adres vardır ve alıcı-verici açık olsaydı adres veri yoluna sızardı.
Şekil 10.1.17 bağlantıyı özetler. DEN' = 0 iken alıcı-verici açıktır ve yönü DT/R' seçer. Okumada DT/R' = 0 ve veri bellekten işlemciye, yazmada DT/R' = 1 ve veri işlemciden belleğe akar. DEN' = 1 iken iki taraf da yüzer; işlemcinin AD pinleri ile sistem veri yolu birbirinden ayrılır.
Okumada alıcı-vericiyi RD' ile aynı anda, hatta önce açmak çekişme yaratır. DEN' okumada T2'nin ortasında, yani işlemci AD pinlerini bıraktıktan sonra düşer. Alıcı-verici daha erken açılsaydı, işlemcinin hâlâ sürdüğü adres ile alıcı-vericinin sürmeye başladığı veri aynı hatlarda çakışırdı. Yazmada böyle bir tehlike yoktur; bu yüzden DEN' yazmada T2'nin başında düşer.
10.1.5.3Komuttan yol döngülerine: OUT ve IN
Bir komutun yürütülmesi, birden çok yol döngüsünden oluşur: önce komut baytları getirilir, sonra komutun kendi veri döngüsü yapılır. Aşağıdaki iki komut bu zinciri minimum mod sinyalleriyle izlemeye elverişlidir. CS = 01A7h, AL = 12h kabul edilir; 9Ah numaralı port okunduğunda 3Ch değerini verir.
; CS = 01A7h, AL = 12h
; FA bayt komut
01A88h E6 59 out 59h, al
01A8Ah E4 9A in al, 9AhKomutların bağıl konumu IP = 0018h ve 001Ah'dir. Fiziksel adresler 01A70h + 0018h = 01A88h ve 01A70h + 001Ah = 01A8Ah eder. out 59h, al komutu E6 59 olarak kodlanır: E6 “sabit numaralı porta AL'yi yaz” işlem kodu, 59h port numarasıdır. in al, 9Ah ise E4 9A'dır. İzlemeyi sade tutmak için döngülerin sırayla yapıldığı varsayılır.
- Döngü 1, T1 (kod getirme): Adres 01A88h çifttir: BHE' = 0, A0 = 0 ve tek döngüde bir sözcük getirilir. M/IO' = 1, ALE = 1, DT/R' = 0 (okuma), DEN' = 1.
- Döngü 1, T2–T4: RD' = 0, DEN' = 0. Bellek sözcüğü verir: çift adresteki E6h (işlem kodu) D7–D0'dan, tek adresteki 59h (port) D15–D8'den gelir. İki bayt kuyruğa girer.
- Döngü 2, T1 (G/Ç yazma): M/IO' = 0. Adres yalnız A7–A0'da anlamlıdır (59h); A15–A8 ve A19–A16 sıfırdır. Port numarası tektir: BHE' = 0, A0 = 1. Yazma olduğu için DT/R' = 1.
- Döngü 2, T2–T4: WR' = 0, DEN' = 0. AL'deki 12h D15–D8 üzerinden çıkar; tek adres yüksek bankaya karşılık gelir. Çıkış portu veriyi genellikle WR' sinyalinin yükselen kenarında kilitler.
- Döngü 3, T1 (kod getirme): Sonraki komut 01A8Ah'dedir (çift): yine tek döngüde bir sözcük getirilir. M/IO' = 1, DT/R' = 0.
- Döngü 3, T2–T4: E4h (IN AL, imm8) D7–D0'dan, 9Ah (port) D15–D8'den okunur.
- Döngü 4, T1 (G/Ç okuma): Port adresi 009Ah çifttir: BHE' = 1, A0 = 0 ile yalnız düşük banka seçilir. M/IO' = 0, DT/R' = 0.
- Döngü 4, T2–T4: RD' = 0, DEN' = 0. Port 3Ch değerini D7–D0'a koyar; değer T4'ün başında AL'ye alınır: AL = 3Ch.
| Döngü | Tür | A19–A0 | BHE' | A0 | D15–D8 | D7–D0 | M/IO' | RD' | WR' | DT/R' | AL |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | kod getirme | 01A88h | 0 | 0 | 59h | E6h | 1 | 0 | 1 | 0 | 12h |
| 2 | G/Ç yazma | 00059h | 0 | 1 | 12h | — | 0 | 1 | 0 | 1 | 12h |
| 3 | kod getirme | 01A8Ah | 0 | 0 | 9Ah | E4h | 1 | 0 | 1 | 0 | 12h |
| 4 | G/Ç okuma | 0009Ah | 1 | 0 | — | 3Ch | 0 | 0 | 1 | 0 | 3Ch |
Tablo 10.1.12 dört döngünün T2–T4 değerlerini toplar; T1'de RD' ve WR' 1, DEN' 1 ve ALE 1'dir. Yol etkinliği 4 döngü × 4 T = 16 saat turudur. 5 MHz'de bu 3,2 µs eder. Program emu8086'da çalıştırıldığında makine kodları (E6 59, E4 9A) ve AL'nin son değeri 3Ch aynı çıkar; emülatör pinleri göstermez.
Bu izleme sadeleştirilmiş sıralı bir modeldir. Gerçekte BIU, kuyrukta en az iki baytlık yer açıldıkça kodu önden getirir. Döngü 3, döngü 2'den önce yapılmış olabilir; kuyruk boşsa da bazı getirmeler boşta turlarına kayabilir. Döngü türleri ve pin değerleri değişmez, yalnız sıraları değişebilir.
8 bitlik bir çevre birimini yalnız D7–D0'a bağlayıp ona tek numaralı bir port adresi vermek çalışmaz. Tek adresli bir port baytı D15–D8 üzerinden aktarılır; D7–D0'a bağlı aygıt bu veriyi hiç görmez. Veri sayfası bu yüzden alt yarıya bağlı 8 bitlik bir aygıtın bütün yazmaçlarına çift adres verilmesini ister. Aygıt üst yarıya bağlanmışsa yazmaçlarına tek adres verilir.
10.1.5.4HOLD ve HLDA
Yolu kullanan tek aygıt işlemci değildir. Bir doğrudan bellek erişimi (DMA, direct memory access) denetleyicisi, örneğin 8237, bir disk denetleyicisinden gelen veriyi işlemciye uğratmadan doğrudan belleğe yazabilir. Bunun için yolu bir süre işlemciden devralması gerekir. Minimum modda bu devir HOLD ve HLDA pinleriyle yapılır.
HOLD (pin 31), başka bir yol yöneticisinin yerel yolu istediğini bildiren aktif yüksek giriştir. İşlemci içinde bulunduğu yol döngüsünü bitirir. Bir T4 ya da Ti turunun ortasında HLDA (hold acknowledge, pin 30) çıkışını 1 yaparak onay verir. Onayla birlikte adres, veri ve kontrol pinlerini yüzer duruma alır. HOLD 0'a inince HLDA'yı düşürür ve yolu geri alır.
Şekil 10.1.18 devrin adımlarını gösterir. DMA denetleyicisi HOLD'u 1 yapar. İşlemci o anki yol döngüsünü yarıda kesmez; döngü biter ve bir sonraki T4 ya da Ti'nin ortasında HLDA = 1 olur. Aynı anda AD0–AD15, A16–A19, BHE', RD', WR', M/IO', DT/R' ve DEN' yüzer duruma geçer. ALE ise hiçbir zaman yüzmez; bu sırada 0'da kalır. DMA denetleyicisi artık yolu kendisi sürer.
Yol devredilmişken işlemci tümüyle durmaz. EU, kuyrukta bekleyen komutları yürütmeye devam edebilir. Yalnız yol gerektiren bir işe, yani bir bellek erişimine ya da kuyruğun boşalıp yeni getirme gerekmesine gelince bekler. Çarpma gibi uzun süren yazmaç komutları DMA ile örtüşebilir.
Veri sayfası HOLD isteğinin hangi döngülerde hemen kabul edilmeyeceğini de sayar. İstek T2'den sonra gelirse döngü bittikten sonraki ilk uygun anda kabul edilir. Tek adresteki bir sözcüğün ilk yarısı aktarılıyorsa ikinci yarısı da bitmeden yol bırakılmaz. Kesme kabul dizisinin iki döngüsü arasına girilmez ve LOCK önekli bir komut yürütülürken yol bırakılmaz. HOLD girişi içeride eş zamanlanmaz; kurulma süresi sağlanamıyorsa dışarıda bir flip-flopla saate eş zamanlanmalıdır.
5 MHz'lik bir minimum mod sisteminde DMA denetleyicisi, bir bellek okuma döngüsünün T1'inde HOLD = 1 yapıyor. Yol en erken ne zaman devredilir?
- İşlemci başlamış döngüyü bitirir: T2, T3 ve T4 turları sürer.
- HLDA, T4'ün ortasında 1 olur. T1'in başından bu ana kadar 3,5 tur geçer: 3,5 × 200 = 700 ns.
- Döngü tek adresteki bir sözcüğün ilk yarısı olsaydı, ikinci yarının döngüsü de beklenir ve gecikme 4 tur daha uzardı.
DMA'nın yanıt süresi bu yüzden birkaç yüz nanosaniye ile birkaç mikrosaniye arasında değişir; LOCK'lu uzun komutlar bu süreyi uzatır.
10.1.5.5RQ'/GT0', RQ'/GT1' ve LOCK'
Maksimum modda yol devri HOLD/HLDA yerine RQ'/GT0' (pin 31) ve RQ'/GT1' (pin 30) pinleriyle yapılır. Adları istek (request) ve bağış (grant) sözcüklerinden gelir. Bu pinleri 8087 ya da 8089 gibi öteki yerel yol yöneticileri kullanır. Her pin çift yönlüdür ve tek bir hat üzerinde üç darbelik bir el sıkışma yürütür:
- Yolu isteyen yönetici hatta bir saat turu genişliğinde 0 darbesi verir: istek (RQ).
- 8086, bir T4 ya da T1 turunda aynı hatta bir tur genişliğinde darbe verir: bağış (GT). Yerel yolu yüzer duruma bırakır ve bir sonraki saat turunda yol devri durumuna girer.
- Yönetici işini bitirince hatta üçüncü bir darbe verir: bırakma. 8086 bir sonraki turda yolu geri alır.
İki yönetici arasındaki her devirden sonra bir boş saat turu bulunmalıdır. RQ'/GT0' pininin önceliği RQ'/GT1' pininden yüksektir: iki istek aynı anda gelirse önce GT0 bağlı yönetici yolu alır. Pinlerin içinde çekme dirençleri vardır; kullanılmazlarsa boş bırakılabilirler. Tek hatta iki yönlü iletişim pin tasarrufu sağlar: minimum moddaki HOLD ve HLDA iki pin tutarken burada iki ayrı yönetici iki pinle desteklenir.
LOCK' (pin 29, maksimum mod), öteki yol yöneticilerinin sistem yolunu almamasını isteyen aktif düşük çıkıştır. LOCK önekiyle yazılan bir komut yürütülürken aktiftir: önek çözüldükten sonraki saat turunda 0 olur ve önekli komutun son yol döngüsünün sonunda 1'e döner. Kesme kabul dizisinde de birinci döngünün T2'sinden ikinci döngünün T2'sine kadar kendiliğinden aktiftir.
LOCK' aktifken RQ'/GT pininden gelen bir istek kaydedilir, ama ancak kilit bittikten sonra kabul edilir. Böylece önekli komutun bütün yol döngüleri art arda, araya başka bir yönetici girmeden yapılır. Çok işlemcili sistemlerde LOCK' sinyali, ortak yolu yöneten hakem devresine (ör. 8289 yol hakemi) bağlanır ve sistem yolunun da kilit süresince bırakılmamasını sağlar.
10.1.5.6Kod izleme: LOCK XCHG ile semafor
İki işlemci ortak bir bellek bölgesini kullanıyorsa, aynı anda yalnız birinin o bölgeye girmesi gerekir. Bunun için ortak bellekte bir bayrak, yani bir semafor tutulur: 0 “boş”, 1 “dolu” anlamına gelir. Bölgeye girmek isteyen işlemci bayrağı okur; 0 ise 1 yapar ve girer. Okuma ile yazmanın arasına öteki işlemci girmemelidir. LOCK önekli XCHG bunu sağlar.
org 100h
mov bx, offset bayrak
bekle: mov al, 1
lock xchg al, [bx] ; oku + yaz
cmp al, 0 ; boş muydu?
jne bekle ; doluysa dene
; ... kritik bölge ...
mov byte ptr [bx], 0 ; bırak
ret
bayrak db 0Program .COM biçimindedir ve 100h'den başlar. Komut uzunlukları şöyledir: mov bx, offset bayrak 3 bayt (BB 10 01), mov al, 1 2 bayt, lock xchg al, [bx] 3 bayt (F0 86 07), cmp al, 0 2 bayt, jne bekle 2 bayt, mov byte ptr [bx], 0 3 bayt ve ret 1 bayt. Toplam 16 bayt kod 100h–10Fh arasını doldurur; bayrak değişkeni 0110h'dedir. BX = 0110h olur.
mov al, 1 AL'ye bayrağa yazılacak “dolu” değerini koyar. lock xchg al, [bx] iki yol döngüsü yapar: önce bayrağı okur, sonra AL'deki 1'i bayrağa yazar ve okunan eski değeri AL'ye koyar. F0 baytı LOCK önekidir. Önek çözülünce LOCK' = 0 olur ve iki döngü boyunca öteki yöneticinin RQ'/GT isteği kabul edilmez. Okuma ile yazma arasına başka işlemci giremez.
lock xchg başladı, LOCK' = 0; birinci yol döngüsü bayrağı okur (0) ve öteki yöneticinin isteği bu sürede kabul edilmez. Sağda: ikinci döngü AL'deki 1'i bayrağa yazar; AL eski değeri (0) alır.XCHG bitince LOCK' 1'e döner ve yol yeniden paylaşılabilir. cmp al, 0 eski değeri sınar: eski değer 0 olduğu için ZF = 1 olur. jne bekle ZF = 1 olduğundan atlamaz; bayrak boştu ve artık bu işlemcinindir. Öteki işlemci aynı kodu çalıştırsaydı XCHG ona 1 döndürürdü, ZF = 0 olur ve döngüde beklemeye devam ederdi. Kritik bölge bitince mov byte ptr [bx], 0 bayrağa 0 yazarak semaforu serbest bırakır.
| Komut | Yol döngüleri | LOCK' | AL | bayrak [0110h] | ZF |
|---|---|---|---|---|---|
mov bx, offset bayrak | — | 1 | 00h | 0 | 0 |
mov al, 1 | — | 1 | 01h | 0 | 0 |
lock xchg al, [bx] (okuma) | bellek oku | 0 | 01h | 0 | 0 |
lock xchg al, [bx] (yazma) | belleğe yaz | 0 | 00h | 1 | 0 |
cmp al, 0 | — | 1 | 00h | 1 | 1 |
jne bekle | — (atlamaz) | 1 | 00h | 1 | 1 |
mov byte ptr [bx], 0 | belleğe yaz | 1 | 00h | 0 | 1 |
Tablo 10.1.13'teki değerler emu8086'da çalıştırıldığında da aynı çıkar. XCHG'den sonra AL = 00h ve 0110h'deki bayrak 1'dir. CMP'den sonra ZF = 1, son komuttan sonra bayrak yeniden 0 olur. Emülatörde öteki işlemci yoktur ve LOCK' pini görünmez; kilidin etkisi veri sayfasındaki kurala göre izlenmiştir. CMP ayrıca PF = 1 yapar: sonuç 00h'dir ve bir bitlerinin sayısı (0) çifttir.
Semaforu MOV AL, [BX], CMP AL, 0 ve MOV [BX], 1 ile ayrı komutlarla kurmak iki işlemcili bir sistemde çalışmaz. Okuma ile yazma arasında öteki işlemci yolu alıp aynı 0'ı okuyabilir. İkisi de bayrağı boş görür ve ikisi de kritik bölgeye girer. LOCK öneki olmadan XCHG bile güvenli değildir: XCHG'nin okuma ve yazma döngüleri arasında RQ'/GT ile yol devredilebilir.
10.1.5.7TEST'
TEST' (pin 23), WAIT komutunun sınadığı aktif düşük bir giriştir. İşlemci WAIT'i yürütürken TEST' = 0 ise hemen sonraki komuta geçer. TEST' = 1 ise boşta bekler ve pini yeniden sınar; TEST' 0 olana kadar WAIT'i tekrar tekrar yürütür. Bu bekleyiş yol döngüsü harcamaz. Giriş her saat turunun yükselen kenarında içeride eş zamanlanır; veri sayfasına göre en az 5 saat turu aktif kalmalıdır.
TEST' girişinin tipik kullanıcısı 8087'dir. 8087'nin BUSY çıkışı 8086'nın TEST' girişine bağlanır. 8087 bir kayan nokta işlemi yürütürken BUSY = 1'dir. 8086, sonucu okumadan önce FWAIT (WAIT ile aynı komut) yürütür ve 8087'nin işini bitirmesini bekler. Kesmeler açıksa bekleme sırasında bir kesme gelebilir; işlemci kesmeye hizmet eder ve dönüşte WAIT'i yeniden yürütür.
10.1.6Saat, sıfırlama ve besleme
Bir işlemcinin çalışabilmesi için üç şey gerekir: kararlı bir besleme, düzenli bir saat ve iyi tanımlanmış bir başlangıç anı. 8086'da saat ve sıfırlama sinyallerini 8284A saat üreteci hazırlar. Bu kesim CLK pinini, RESET pinini ve sıfırlamadan sonra işlemcinin ilk komutu nereden getirdiğini, ardından 8284A'nın iç işlevlerini anlatır.
10.1.6.1CLK
CLK (pin 19), işlemcinin ve yol denetiminin temel zamanlamasını sağlayan saat girişidir. 8086'nın saati simetrik değildir: görev çevrimi (duty cycle) %33'tür. Saat bir periyodun üçte birinde 1, üçte ikisinde 0'dır. Veri sayfasına göre bu asimetri iç zamanlamayı en iyi duruma getirmek için seçilmiştir. İşlemcinin içindeki bazı işlemler saatin uzun düşük evresine, bazıları kısa yüksek evresine yerleştirilmiştir.
8086 üç hız sınıfında üretildi: 8086 5 MHz'de, 8086-2 8 MHz'de ve 8086-1 10 MHz'de çalışır. Tablo 10.1.6'daki TCLCH ve TCHCL değerleri bu asimetriyi sınırlar. 5 MHz'de düşük evre en az 118 ns, yüksek evre en az 69 ns olmalıdır. Kusursuz bir %33 saatte bu değerler 133 ve 67 ns'dir; 118 ns'lik alt sınır biraz pay bırakır. Yüksek evrenin 69 ns alt sınırı ise 67 ns'nin biraz üstündedir. Bu yüzden saat üretecinin görev çevrimi tam üçte bir değil, ona çok yakın tutulur. Böyle bir saati sıradan bir osilatörle üretmek zordur; 8284A bu iş için tasarlanmıştır.
10.1.6.2RESET, VCC ve GND
RESET (pin 21), işlemcinin o anki faaliyetini hemen sonlandıran aktif yüksek giriştir. Sinyal en az dört saat turu 1 kalmalıdır; güç açılışında RESET'in 0'a inmesi, besleme oturduktan en az 50 µs sonra olmalıdır. RESET 1 kaldıkça işlemci uyur. RESET 0'a indiğinde yaklaşık 10 saat turu süren bir iç başlatma dizisi çalışır, ardından işlemci FFFF0h adresindeki komuttan yürütmeye başlar.
RESET'in yükselen kenarında işlemci bütün yol işlemlerini keser. Üç durumlu bütün çıkışlar yüzer; ALE ve HLDA 0'a sürülür. Yazmaçların bir kısmı sabit değerlere getirilir, geri kalanlar belirsiz kalır. Bu sabit değerler, sistem tasarımcısının ilk komutu nereye koyacağını belirler.
| Öğe | Değer |
|---|---|
| CS | FFFFh |
| IP | 0000h |
| DS, SS, ES | 0000h |
| FLAGS | temizlenir (IF = 0: kesmeler kapalı, TF = 0) |
| Önden getirme kuyruğu | boş |
| İlk komut adresi | FFFFh × 10h + 0000h = FFFF0h |
Tablo 10.1.14'teki ilk komut adresi FFFF0h, 1 MB'lık adres alanının son 16 baytının başıdır. Bu adreste kalıcı bir bellek, yani ROM (BIOS) bulunmalıdır; RAM'in içeriği açılışta rastgeledir. 16 bayt bir başlatma programı için çok azdır. Bu yüzden FFFF0h'ye genellikle ROM'daki asıl başlangıç koduna giden bir uzak JMP konur. IF = 0 olduğu için başlangıç kodu kesilmeden çalışır; kesme vektör tablosu henüz kurulmamıştır ve kesme gelmesi çökme demek olurdu.
VCC (pin 40) +5 V DC beslemedir. GND için iki pin vardır: 1 ve 20. İki toprak pini, çıkışlar aynı anda anahtarlanırken çekilen yüksek akım darbelerini paylaştırır. Tek bir toprak pininin ince bağlantı telinden ani bir akım geçerse telin endüktansı toprak düzeyinde sıçramalar yaratır. Buna toprak sıçraması (ground bounce) denir. İki pin bu gürültüyü azaltır. Kartta besleme pinlerinin yanına 0,1 µF'lık bir dekuplaj kondansatörü konur.
Sıfırlamadan sonra işlemcinin 00000h adresinden başladığını düşünmek yanlıştır. 00000h–003FFh arası kesme vektör tablosudur ve RAM'dedir. 8086, CS = FFFFh ve IP = 0000h ile başlar; ilk fiziksel adres FFFF0h'dir. Aynı adres F000h:FFF0h gibi başka bir kesim:bağıl konum çiftiyle de yazılabilir, ama 8086'nın yüklediği değerler FFFFh ve 0000h'dir.
10.1.6.3RESET sonrası ilk komut: adım adım
RESET'ten ilk BIOS koduna kadar işlemcinin yaptıkları sekiz adımda izlenebilir. Örnek, IBM PC'nin BIOS'unda kullanılan ilk komutu alır: FFFF0h'de beş baytlık bir uzak atlama, EA 5B E0 00 F0.
; RESET = 1 (≥ 4 saat turu)
; CS ← FFFFh, IP ← 0000h
; DS, SS, ES ← 0000h
; FLAGS ← 0000h ; IF = 0
; kuyruk boşaltılır
; RESET 1 → 0
; getir FFFF0h ; EA 5B E0 00 F0
jmp far F000h:E05Bh
; getir FE05Bh ; BIOS- RESET pini en az dört saat turu 1 tutulur. İşlemci o anki işini hemen bırakır; yazmaçların içeriği belirsizdir.
- Donanım CS = FFFFh, IP = 0000h yükler. Bu değerleri programcı seçmez; işlemcinin içine yerleşiktir.
- Öteki kesim yazmaçları DS, SS ve ES 0000h olur.
- Bayraklar temizlenir: IF = 0 olduğu için kesmeler kapalıdır.
- Kuyruk boşaltılır. RESET 0'a inince BIU ilk getirmeyi başlatır.
- İlk adres FFFFh × 10h + 0000h = FFFF0h'dir. Burada ROM'daki beş baytlık uzak atlama durur: EA 5B E0 00 F0.
- EA uzak JMP'nin işlem kodudur. Ardından önce bağıl konum (E05Bh), sonra kesim (F000h) gelir; ikisi de little-endian yazılmıştır: 5B E0 → E05Bh, 00 F0 → F000h. JMP yürütülünce CS:IP = F000h:E05Bh olur ve kuyruk yeniden temizlenir.
- Yeni fiziksel adres F0000h + E05Bh = FE05Bh'dir. IBM PC'de BIOS'un açılış kodu bu adrestedir; 16 bayta sığmayan başlangıç programı buradan sürer.
| Adım | CS | IP | DS/SS/ES | FLAGS | Adres yolu |
|---|---|---|---|---|---|
| RESET = 1 | ???? | ???? | ???? | ???? | yüzer |
| CS, IP yüklenir | FFFFh | 0000h | ???? | ???? | — |
| kesimler sıfırlanır | FFFFh | 0000h | 0000h | ???? | — |
| bayraklar temizlenir | FFFFh | 0000h | 0000h | 0000h | — |
| ilk getirme | FFFFh | 0000h | 0000h | 0000h | FFFF0h |
jmp far F000h:E05Bh | F000h | E05Bh | 0000h | 0000h | — |
| BIOS kodu getirilir | F000h | E05Bh | 0000h | 0000h | FE05Bh |
Tablo 10.1.15 adımları yazmaçlar üzerinden özetler. İlk getirme FFFF0h'den başlar; adres çifttir ve BIU kuyruğu sözcük sözcük doldurur: FFFF0h, FFFF2h, FFFF4h. Uzak atlamadan sonra kuyruk temizlenir ve getirme FE05Bh'den sürer. Bu adres tek olduğu için BIU ilk getirmede tek bir bayt alır, sonra çift adreslerden sözcük getirmeye devam eder.
10.1.6.48284A saat üreteci
8284A, 8086 ve 8088 için tasarlanmış 18 pinli bir saat üretecidir. Üç işi vardır: %33 görev çevrimli CLK sinyalini üretmek, READY'yi saate eş zamanlamak ve RESET'i saate eş zamanlamak.
Saat üretimi bir kristalle başlar. X1 ve X2 pinlerine bağlanan kristal, 8284A'nın içindeki osilatörü çalıştırır. 8284A bu frekansı 3'e böler: 15 MHz'lik kristal 5 MHz'lik CLK verir. Üçe bölme %33 görev çevrimini de kendiliğinden üretir: üç kristal periyodunun birinde çıkış 1, ikisinde 0'dır. Osilatör frekansı OSC çıkışından da verilir; PCLK çıkışı ise CLK'nin yarısı frekansında, %50 görev çevrimli bir çevre birimi saatidir. 15 MHz'lik kristalle OSC = 15 MHz, PCLK = 2,5 MHz olur. F/C' girişi 1 yapılırsa saat kristal yerine EFI girişindeki dış bir kaynaktan alınır.
IBM PC'de 8284A'ya 14,31818 MHz'lik bir kristal bağlanmıştır. CLK, saat periyodu ve bekleme durumsuz yol döngüsü süresi nedir? PCLK kaç MHz'tir?
- CLK = 14,31818 / 3 = 4,77273 MHz.
- T = 1 / 4,77273 MHz ≈ 209,5 ns.
- Yol döngüsü 4 × 209,5 ≈ 838 ns.
- PCLK = CLK / 2 ≈ 2,386 MHz.
14,31818 MHz, renkli televizyonun renk alt taşıyıcısının (3,579545 MHz) dört katıdır. IBM bu kristali hem işlemci saati hem de görüntü kartı için kullanarak maliyeti düşürdü. 8086 sistemlerinde de aynı hesap geçerlidir.
8284A'nın ikinci işi READY'dir. Bellek ve G/Ç aygıtlarının hazır sinyalleri RDY1 ya da RDY2 girişlerine bağlanır; AEN1' ve AEN2' girişleri hangi RDY girişinin geçerli olduğunu seçer. Bu düzen, iki ayrı yol yöneticisinin hazır sinyallerini tek bir 8284A ile işlemeye yarar. ASYNC' girişi eş zamanlamanın bir mi iki aşamalı mı olacağını belirler. 8284A, RDY'yi saat kenarlarında örnekler ve 8086'ya, kurulma ve tutma koşullarını sağlayan bir READY sinyali verir. 8086'nın READY girişi içeride eş zamanlanmadığı için bu adım zorunludur.
Üçüncü iş RESET'tir. Güç açılışında besleme 0 V'tan 5 V'a birkaç milisaniyede yükselir. RES' girişine bağlanan bir RC devresi, kondansatör dolarken bu girişte yavaş yükselen bir gerilim oluşturur. RES' girişinde bir Schmitt tetikleyici vardır: gerilim belirli bir eşiği geçince çıkış temiz bir kenarla değişir ve yavaş yükselen gerilim gürültülü bir sinyale dönüşmez. 8284A bu sinyali saate eş zamanlar ve aktif yüksek RESET olarak 8086'ya verir. Kartta bir “reset” düğmesi de kondansatörü boşaltarak aynı devreyi tetikler.
RES' girişine R = 10 kΩ ve C = 10 µF'lık bir RC devresi bağlanmıştır. RES' girişinin Schmitt eşiği yaklaşık 1,7 V kabul edilsin (VCC = 5 V). Güç açıldıktan sonra RESET ne kadar süre aktif kalır?
- Kondansatör gerilimi v(t) = 5 · (1 − e−t/RC) ile yükselir; RC = 10 000 × 10 × 10−6 = 0,1 s.
- v(t) = 1,7 V için 1 − e−t/RC = 0,34 → e−t/RC = 0,66 → t = −0,1 · ln 0,66 ≈ 0,0416 s.
- RESET yaklaşık 42 ms aktif kalır. Bu süre, veri sayfasının istediği 50 µs'den çok uzundur ve beslemenin oturmasına da zaman bırakır.
Eşik değeri 8284A'nın veri sayfasından alınmalıdır; burada hesap yöntemini göstermek için yaklaşık bir değer kullanıldı.
10.1.7Maksimum mod
Minimum mod, tek işlemcili küçük sistemler için yeterlidir. Sisteme 8087 yardımcı işlemcisi, 8089 G/Ç işlemcisi ya da ikinci bir 8086 eklenince kontrol sinyallerini ayrı bir yonga üretmelidir. 8086'nın da yol paylaşımını destekleyen pinlere ihtiyacı olur. Bu kesim moda göre değişen pinleri bir kez daha toplar, sonra 8288 yol denetleyicisini ve tam bir maksimum mod sistemini anlatır.
10.1.7.1MN/MX' ve moda göre pinler
Minimum modda (MN/MX' = 1) 24–31 numaralı pinler şu sinyalleri taşır:
- ALE (25): adres kilidi etkinleştirme. Her yol döngüsünün T1'inde aktif yüksek bir darbedir ve 8282/8283 kilitlerini yükler. Veri sayfası ALE'nin hiçbir zaman yüzmediğini özellikle belirtir: yol devredildiğinde bile ALE sürülmeye devam eder.
- INTA' (24): kesme kabul.
- DEN', DT/R', M/IO', WR' (26–29): alıcı-verici denetimi ve bellek/G-Ç ayrımı.
- HOLD, HLDA (31, 30): yol devri (DMA).
Maksimum modda (MN/MX' = 0) aynı pinler şu sinyallere dönüşür:
- S2', S1', S0' (28–26): döngü türü; 8288 bu koddan kontrol sinyallerini üretir.
- QS1, QS0 (24, 25): kuyruk durumu; 8087 için.
- LOCK' (29): yolu kilitler.
- RQ'/GT0', RQ'/GT1' (31, 30): yol isteği ve bağışı.
ALE'nin yüzmemesinin bir nedeni vardır. Yol devredildiğinde başka bir yönetici adresi kendi kilitleriyle ya da doğrudan sürer. 8086'nın ALE'si yüzseydi, çekme dirençlerinin belirsiz düzeyi kilitleri yanlışlıkla saydam yapabilirdi. ALE 0'da sürülünce 8086'nın kilitleri kapalı kalır ve yol devri sırasında adres bozulmaz.
10.1.7.28288 yol denetleyicisi
8288 yol denetleyicisi (bus controller), maksimum modda 8086'nın S2'–S0' durum kodunu çözen 20 pinli yongadır. Bu koddan bellek ve G/Ç komut sinyallerini (MRDC', MWTC', AMWC', IORC', IOWC', AIOWC', INTA') ve yol denetim sinyallerini (ALE, DEN, DT/R', MCE/PDEN') üretir.
8288'in girişleri 8086'nın durum pinleri ve 8284A'nın saatidir. İçerideki durum çözücü Tablo 10.1.7'deki kodu çözer. Denetim mantığı komutların zamanlamasını saatle kurar. Çıkışlar iki gruptur:
- Komut sinyalleri: MRDC' (bellek oku), MWTC' (bellek yaz), IORC' (G/Ç oku), IOWC' (G/Ç yaz) ve INTA' (kesme kabul). “A” ile başlayan AMWC' ve AIOWC' “ileri” yazma sinyalleridir: normal yazma sinyalinden bir saat turu önce başlarlar. Yavaş bir bellek ya da G/Ç aygıtı yazma işlemine erken başlayabilsin diye vardır.
- Kontrol sinyalleri: ALE, DEN ve DT/R' artık 8288'den gelir. DEN burada aktif yüksektir; alıcı-vericiye bağlanırken bir tersleyici gerekebilir. MCE/PDEN' çıkışı, kesme denetleyicilerinin ardışık bağlanması ya da G/Ç yolunun ayrı tamponlanması için kullanılır.
8288'in denetim girişleri de vardır. AEN' (address enable) 1 iken komut çıkışları yüzer; çok işlemcili sistemde yol hakemi, yolu başka bir işlemciye verdiğinde bu girişi kullanır. CEN (command enable) 0 iken komut çıkışları pasif kalır. IOB (I/O bus mode) 1 iken 8288 G/Ç komutlarını yerel bir G/Ç yolu için üretir. Pinleri boşalan 8086 ise bu sinyallerin yerine QS1, QS0, LOCK' ve RQ'/GT pinlerini kullanır.
Maksimum modda MOV [BX], AX komutunun veri döngüsünde 8288 hangi sinyalleri üretir? BX çift bir adres gösteriyor.
- 8086 önceki döngünün T4'ünde S2' S1' S0' = 110 (belleğe yaz) verir.
- 8288 T1'de ALE darbesini üretir; adres kilitlere alınır. DT/R' = 1 (gönder) olur.
- AMWC' T2'nin başında, MWTC' bir saat turu sonra 0 olur. DEN = 1 alıcı-vericiyi açar.
- T3'te durum pinleri pasife (111) döner; 8288 komutları T4'te sonlandırır.
Aynı döngü minimum modda WR' = 0, M/IO' = 1, DT/R' = 1 ve DEN' = 0 ile yapılırdı; sinyallerin işlevi aynı, üreten yonga farklıdır.
10.1.7.3Maksimum mod 8086 sistemi
Şekil 10.1.24 tam bir maksimum mod sistemini gösterir. 8284A, CLK'yi hem 8086'ya hem 8288'e verir; ikisi aynı saatle çalışmalıdır. 8086'nın S2'–S0' pinleri 8288'e gider. 8288 ALE ile 8282 kilitlerini, DEN ve DT/R' ile 8286 alıcı-vericilerini denetler; komut sinyalleriyle de bellek ve G/Ç'yi sürer. 8259A programlanabilir kesme denetleyicisi, sekiz donanım kesme isteğini öncelik sırasına koyup INTR girişine bağlar ve INTA' darbelerine tip numarasıyla yanıt verir. Bu sistemde 8087 eklenecekse QS1, QS0 ve RQ'/GT0' pinlerine bağlanır; BUSY çıkışı da TEST' girişine gider.
Minimum ve maksimum mod sistemleri yazılım açısından tamamen aynıdır. Bir program, hangi modda çalıştığını anlayamaz. Fark yalnız donanım tasarımındadır: yonga sayısı, yolun paylaşılabilmesi ve ek işlemcilerin desteklenmesi.
10.1.8Kesme pinleri
Donanım kesmelerinin yazılım yanı, yani vektör tablosu, IRET ve kesme hizmet yordamları, kesme mekanizmasıyla birlikte ele alınır. Bu kesim aynı konuyu pinler düzeyinde inceler: kesme isteğinin işlemciye hangi pinden, hangi zamanlamayla girdiği ve işlemcinin tip numarasını kesme denetleyicisinden hangi yol döngüleriyle okuduğu.
10.1.8.1INTR, NMI ve INTA'
INTR (pin 18), maskelenebilir kesme isteği girişidir. Aktif yüksektir ve seviye tetiklemelidir: istek, hat 1'de tutulduğu sürece geçerlidir. İşlemci INTR'yi her komutun son saat turunda örnekler; dizgi komutlarında her tek aktarımın sonunda da örnekler. IF = 1 ise isteği kabul eder ve kesme kabul döngülerine girer. IF = 0 ise istek bekler; CLI komutu bu yüzden INTR'yi kapatır. Giriş her saat turunun yükselen kenarında içeride eş zamanlanır.
NMI (pin 17), maskelenemeyen kesme girişidir. Kenar tetiklemelidir: 0'dan 1'e geçiş isteği başlatır. Yükselen kenar yonganın içinde kilitlenir ve o anki komutun sonunda hizmet edilir. NMI her zaman tip 2 kesmeye yol açar; tip numarası dışarıdan okunmaz. Yazılımla, yani IF ile maskelenemez ve INTR'den yüksek önceliklidir. Veri sayfası NMI'nın en az iki saat turu 1 kalmasını ister. Tipik kullanımı güç kesintisi uyarısı ve bellek eşlik hatasıdır.
INTA' (pin 24, minimum mod), kesme kabul döngülerinin okuma darbesidir. Aktif düşük bir çıkıştır ve her kesme kabul döngüsünün T2, T3 ve Tw turlarında 0'dır. Maksimum modda INTA' sinyalini 8288 üretir.
| Özellik | INTR (18) | NMI (17) |
|---|---|---|
| Tetikleme | seviye, aktif yüksek | yükselen kenar |
| Maskeleme | IF = 0 ile (CLI) | maskelenemez |
| Örnekleme | komutun son saat turunda | kenar içeride kilitlenir, komut sonunda hizmet |
| Tip numarası | ikinci INTA' döngüsünde D7–D0'dan okunur | her zaman 2 |
| Kabul döngüsü | iki INTA' döngüsü | yok |
| Kullanım | 8259A üzerinden çevre birimleri | güç kesintisi, eşlik hatası |
INTR'yi kenar tetiklemeli sanmak iki tür hataya yol açar. Kısa bir darbe, işlemci onu örneklemeden önce biterse kaybolur; INTR, kabul edilene kadar 1'de tutulmalıdır. Öte yandan hizmet yordamı bitince istek hâlâ 1'deyse işlemci aynı kesmeye yeniden girer. Bu yüzden istek kaynağı, kabulü görünce isteğini düşürmelidir; 8259A bunu INTA' darbeleriyle yapar. Kenar tetiklemeli olan NMI'dır.
10.1.8.2Donanım kesmesi: INTA döngüleri
INTR = 1 ve IF = 1 iken o anki komut bitince işlemci arka arkaya iki kesme kabul döngüsü (interrupt acknowledge cycle) çalıştırır. Kesme kabul döngüsü bir okuma döngüsüne benzer; fark, RD' yerine INTA' sinyalinin etkinleşmesi ve adres yolunun yüzmesidir.
- Birinci INTA' döngüsü: İşlemci INTA' sinyalini T2–T3 boyunca 0 yapar. Bu darbe, kesme denetleyicisine (8259A) isteğin kabul edildiğini bildirir. 8259A, bekleyen istekler arasında en yüksek öncelikliyi seçer ve tip numarasını hazırlar. Bu döngüde veri yolu yüzer kalır; hiçbir veri okunmaz. Veri sayfasına göre BHE' bu döngünün T1'inde 0'dır.
- İkinci INTA' döngüsü: İkinci INTA' darbesinde 8259A tip numarasını D7–D0 hatlarına koyar. Örneğin IRQ0 için PC'de bu sayı 08h'dir. İşlemci baytı T4'ün başında okur.
- Vektör: İşlemci tip numarasını 4 ile çarpar ve kesme vektör tablosundaki adresi bulur: 08h × 4 = 00020h. Bu adresten yeni IP'yi, 00022h'den yeni CS'yi okur. FLAGS, CS ve IP'yi yığına iter, IF ve TF'yi temizler ve hizmet yordamına atlar.
Maksimum modda iki döngü arasına başka bir yol yöneticisinin girmemesi için LOCK' kendiliğinden aktiftir. Veri sayfasına göre LOCK', birinci döngünün T2'sinden ikinci döngünün T2'sine kadar 0'dır. Yol devri isteği de ikinci döngünün sonuna kadar kabul edilmez. Araya bir DMA döngüsü girseydi 8259A'nın iki darbelik el sıkışması bozulabilirdi.
5 MHz'lik bir minimum mod sisteminde 8259A, IRQ1 (klavye) isteğini tip 09h ile bildiriyor. İki INTA' döngüsü ve vektör okuması kaç yol döngüsü ve ne kadar süre alır? Hizmet yordamının adresi hangi fiziksel adreslerden okunur?
- İki kesme kabul döngüsü: 2 × 800 ns = 1,6 µs. İkinci döngüde D7–D0'da 09h okunur.
- Vektör adresi 09h × 4 = 00024h. IP 00024h'den, CS 00026h'dan okunur; iki adres de çift olduğu için iki sözcük okuması 2 döngüdür.
- FLAGS, CS ve IP'nin yığına itilmesi 3 sözcük yazmasıdır; yığın çift adresteyse 3 döngü.
- Toplam en az 2 + 2 + 3 = 7 yol döngüsü: 7 × 800 ns = 5,6 µs. Buna iç işlem turları ve hizmet yordamının ilk komutlarının getirilmesi eklenir.
Yığın tek adreste olsaydı her itme iki döngü sürer ve süre 3 döngü uzardı. Veri sayfasının yığını çift adreste tutma önerisi bu yüzdendir.
10.1.9Alıştırmalar ve çözümleri
Aşağıdaki sekiz alıştırma pinler, yol döngüleri ve saat üzerine bilgiyi bir arada kullanır. Her birinin çözümü ara adımlarıyla verilir.
8086 8 MHz'de çalışıyor. Bekleme durumu olmayan bir yol döngüsü kaç ns sürer? İki Tw eklenirse?
- T = 1 / 8 MHz = 125 ns.
- Bekleme durumsuz döngü: 4 × 125 = 500 ns.
- İki Tw ile: (4 + 2) × 125 = 6 × 125 = 750 ns.
Minimum modda bir çevre birimine OUT ile yazılırken M/IO', RD', WR' ve DT/R' pinleri veri döngüsünün T2–T4 turlarında hangi değerleri alır?
- Hedef G/Ç'dir: M/IO' = 0.
- İşlem yazmadır: RD' = 1, WR' = 0.
- Veri işlemciden dışarı akar: DT/R' = 1.
DEN' de T2–T4 boyunca 0'dır; T1'de 1'dir.
MOV [2003h], AX kaç veri yol döngüsü gerektirir? Her döngüde BHE' ve A0 ne olur? (DS = 0000h.)
- Fiziksel adres 02003h tektir; sözcük iki döngüye bölünür.
- 1. döngü: adres 02003h, BHE' = 0, A0 = 1; AL D15–D8 üzerinden yüksek bankaya yazılır.
- 2. döngü: adres 02004h, BHE' = 1, A0 = 0; AH D7–D0 üzerinden düşük bankaya yazılır.
AX = BEEFh ile emu8086'da çalıştırıldığında 02003h'e EFh, 02004h'e BEh yazılır.
S2' S1' S0' = 1 0 0 ile 1 0 1 arasındaki fark nedir? 8288 her ikisi için hangi komutu üretir?
- 100: kod (komut) getirme. 101: veri okuma.
- İkisi de bellekten okumadır; 8288 ikisinde de MRDC' üretir.
Fark bellek için değil, 8087 ya da bir hata ayıklama donanımı gibi yolu izleyen yongalar içindir; onlar komut baytlarını veri okumalarından ayırmak zorundadır.
8259A, IRQ0 isteğini tip 08h ile bildiriyor. İki INTA' darbesinde veri yolunda ne görülür? Maksimum modda LOCK' bu sırada ne durumdadır?
- 1. darbe: veri yolu yüzer; yalnız kabul bildirilir.
- 2. darbe: 8259A 08h'yi D7–D0'a koyar; işlemci okur.
- LOCK', 1. döngünün T2'sinden 2. döngünün T2'sine kadar 0 (aktif) kalır.
İşlemci daha sonra vektörü 08h × 4 = 00020h adresinden okur.
Kristal 24 MHz olursa 8284A hangi CLK frekansını üretir? Bu, hangi 8086 sürümü için uygundur?
- CLK = 24 / 3 = 8 MHz, T = 125 ns.
- 8 MHz 8086-2'nin hızıdır. 5 MHz'lik 8086 bu saatte çalıştırılamaz: TCLCL en az 200 ns olmalıdır.
T = 125 ns olan bir sistemde TCLAV + TDVCL + ttampon = 120 ns kabul ediliyor. Erişim süresi 450 ns olan bir bellek için kaç Tw gerekir?
- tizin = 3 × 125 − 120 = 375 − 120 = 255 ns.
- n = ⌈(450 − 255) / 125⌉ = ⌈195 / 125⌉ = ⌈1,56⌉ = 2.
- Sınama: 1 Tw ile 380 ns, yetmez; 2 Tw ile 505 ns, yeter.
- Döngü 6 × 125 = 750 ns.
OUT 9Bh, AL komutunun G/Ç yazma döngüsünde A7–A0, BHE', A0 ve verinin geçtiği hatlar nedir?
- Port numarası adres hatlarına çıkar: A7–A0 = 9Bh, A19–A8 = 0. M/IO' = 0.
- 9Bh tektir (1001 1011b, en düşük bit 1): BHE' = 0, A0 = 1.
- Tek adresli bayt yüksek bankaya gider: AL D15–D8 üzerinden çıkar.
Bu port D7–D0'a bağlı 8 bitlik bir aygıtta olsaydı veriyi hiç görmezdi.
10.1.10Özet
- Kılıf: 8086, 40 pinli DIP kılıfta, tek +5 V beslemeyle (pin 40; toprak 1 ve 20) çalışan 16 bitlik HMOS işlemcidir. Adın sonundaki kesme işareti aktif düşük sinyali gösterir. Pinler yedi gruba ayrılır: güç, saat/sıfırlama, adres/veri, adres/durum, kesme, ortak kontrol ve moda bağlı pinler.
- Çoklama: 60'ı aşan sinyal 40 pine zaman paylaşımlı çoklamayla sığar. AD0–AD15 T1'de adres, sonra veri; A16–A19 T1'de adres, sonra S3–S6 taşır. ALE darbesinin düşen kenarında 8282/74LS373 kilitleri adresi yakalar; 20 bit ve BHE' için üç kilit gerekir. 8286/74LS245 alıcı-vericileri veri yolunu ayırır ve sürme gücü sağlar.
- Bankalar: 1 MB bellek iki 512 KB'lık bankaya bölünür: çift adresler D7–D0'da (A0 = 0), tek adresler D15–D8'de (BHE' = 0). Çift adresteki sözcük tek döngü, tek adresteki sözcük iki döngü sürer; bayt erişimi her zaman tek döngüdür.
- Yol döngüsü: en az dört T durumudur: T1 adres, T2 yön/kontrol, T3 veri, T4 bitiş. 5 MHz'de 800 ns. Yazmada veri T2'den itibaren pinlerdedir; okumada T2'de AD pinleri yüzer (yol dönüşü) ve veri T4'ün başında örneklenir.
- READY: T3 sırasında örneklenir; 0 ise T3 ile T4 arasına Tw eklenir. Bekleme durumu sayısı n = ⌈(terişim − tizin) / T⌉ ile bulunur; tizin = 3T − TCLAV − TDVCL − ttampon. READY, 8284A'nın RDY girişinden eş zamanlanarak verilir.
- Durum pinleri: S2' S1' S0' (maksimum mod) döngü türünü kodlar: 000 kesme kabul, 001 G/Ç oku, 010 G/Ç yaz, 011 HLT, 100 kod getirme, 101 bellek oku, 110 bellek yaz, 111 pasif. S4 S3 kesimi verir (00 ES, 01 SS, 10 CS/yok, 11 DS); S5 = IF, S6 = 0. QS1 QS0 kuyruk durumunu 8087'ye bildirir.
- Kontrol pinleri: RD' ve WR' okuma/yazma darbeleridir, M/IO' bellek ile G/Ç'yi ayırır. DT/R' alıcı-vericinin yönünü, DEN' açılmasını denetler; DEN' T1'de 1'dir. HOLD/HLDA (minimum) ve RQ'/GT (maksimum) yolu başka bir yöneticiye devreder. LOCK' önekli komut boyunca yolu kilitler; LOCK XCHG ile bölünmez semafor kurulur. TEST', WAIT komutunun beklediği giriştir.
- Saat ve sıfırlama: 8284A kristali 3'e böler (15 MHz → 5 MHz), %33 görev çevrimli CLK üretir, READY ve RESET'i eş zamanlar. RESET en az 4 saat turu 1 tutulur; ardından CS = FFFFh, IP = 0000h, DS = SS = ES = 0000h, bayraklar temiz (IF = 0) ve ilk komut FFFF0h'den getirilir.
- Maksimum mod: MN/MX' = 0 iken 24–31 numaralı pinler QS1, QS0, S0'–S2', LOCK' ve RQ'/GT pinlerine dönüşür; 8288 yol denetleyicisi durum kodundan MRDC', MWTC', AMWC', IORC', IOWC', AIOWC', INTA', ALE, DEN ve DT/R' üretir.
- Kesme pinleri: INTR seviye tetiklemelidir, IF ile maskelenir ve iki INTA' döngüsüyle kabul edilir; ikinci döngüde tip numarası D7–D0'dan okunur. NMI yükselen kenarla tetiklenir, maskelenemez ve her zaman tip 2'dir.
10.1.11Kavram listesi
Terimlerin İngilizce karşılıkları ve öteki bölümlerdeki kullanımları terim sözlüğünde bulunur.
- çift sıralı kılıf (DIP) dual in-line package
- aktif düşük / aktif yüksek active low / active high
- çoklama multiplexing
- kilit latch
- tampon buffer (bus transceiver)
- üç durumlu çıkış, yüksek empedans tri-state output, high impedance
- bellek bankası memory bank
- hizalı / hizasız erişim aligned / unaligned access
- yol döngüsü bus cycle
- T durumu T state
- bekleme durumu (Tw) wait state
- boşta durumu (Ti) idle state
- yol dönüşü bus turnaround
- erişim süresi access time
- durum kodu status code
- minimum / maksimum mod minimum / maximum mode
- yol denetleyicisi (8288) bus controller
- saat üreteci (8284A) clock generator
- görev çevrimi duty cycle
- sıfırlama (RESET) reset
- doğrudan bellek erişimi (DMA) direct memory access
- yol yöneticisi bus master
- semafor semaphore
- kesme onayı (INTA) interrupt acknowledge
- maskelenemeyen kesme (NMI) non-maskable interrupt
- programlanabilir kesme denetleyicisi (8259A) programmable interrupt controller
10.1.12Kendini Dene
8086-2 (8 MHz) için veri sayfası TCLAV ≤ 60 ns ve TDVCL ≥ 20 ns veriyor; ttampon = 40 ns. Erişim süresi 300 ns olan bir bellek için kaç bekleme durumu gerekir ve döngü kaç ns sürer?
Cevap
T = 125 ns; tizin = 375 − 60 − 20 − 40 = 255 ns. n = ⌈(300 − 255) / 125⌉ = ⌈0,36⌉ = 1. Sınama: 0 Tw ile 255 ns yetmez, 1 Tw ile 380 ns yeter. Döngü 5 × 125 = 625 ns.
DS = 1000h iken
MOV [1FFFh], AXçalışıyor. Hangi fiziksel adreslere kaç döngüde yazılır? Her döngüde BHE', A0 ve kullanılan hatlar nedir?Cevap
FA = 10000h + 1FFFh = 11FFFh, tek adres; iki döngü. 1. döngü: 11FFFh, BHE' = 0, A0 = 1, AL D15–D8 üzerinden. 2. döngü: 12000h, BHE' = 1, A0 = 0, AH D7–D0 üzerinden.
Maksimum modda şu döngülerde S2' S1' S0' ve S4 S3 kaçtır:
POP BX'in okuması,IN AL, DX'in okuması,MOV ES:[DI], AL'nin yazması?Cevap
POP BX: bellek oku 101, kesim SS → 01.IN AL, DX: G/Ç oku 001, kesim yok → 10.MOV ES:[DI], AL: belleğe yaz 110, kesim ES → 00.Minimum modda bir komut getirme döngüsünün T2–T4 turlarında M/IO', RD', WR', DT/R' ve DEN' hangi değerleri alır? Bu değerler
MOV AL, [BX]'in veri döngüsünden farklı mıdır?Cevap
M/IO' = 1, RD' = 0, WR' = 1, DT/R' = 0, DEN' = 0. Değerler bir bellek okumasıyla aynıdır; kontrol pinlerinden komut getirme ile veri okuma ayırt edilemez. Ayrımı T2–T4'teki S4 S3 bitleri (getirmede 10 = CS,
[BX]okumasında 11 = DS) ve maksimum modda durum kodu (100 / 101) yapar.Adres kilidi olarak yükselen kenarda yakalayan bir D flip-flop yongası kullanılıp saat girişine doğrudan ALE bağlanırsa ne olur? 5 MHz'lik 8086'nın zaman değerleriyle açıklayın.
Cevap
Flip-flop adresi ALE'nin yükselen kenarında yakalar. ALE, T1'in başından en geç TCLLH = 80 ns sonra yükselir; adres ise en geç TCLAV = 110 ns sonra geçerli olur. Yakalama anında adres henüz oturmamış olabilir ve yanlış adres kilitlenir. Çözüm ALE'yi tersleyip yakalamayı düşen kenara kaydırmak ya da saydam kilit kullanmaktır.
8284A'ya 30 MHz'lik bir kristal bağlanıyor. CLK, PCLK ve OSC frekansları nedir? Bekleme durumsuz yol döngüsü kaç ns sürer ve saatin yüksek evresi yaklaşık kaç ns'dir?
Cevap
CLK = 30 / 3 = 10 MHz (8086-1), PCLK = 5 MHz, OSC = 30 MHz. T = 100 ns; yol döngüsü 400 ns. Yüksek evre yaklaşık T / 3 ≈ 33 ns, düşük evre yaklaşık 67 ns.
RESET'ten sonra FFFF0h adresinde
EA 00 E0 00 F0baytları bulunuyor. Bu komut ne yapar ve işlemci sonraki komutu hangi fiziksel adresten getirir? O anda IF kaçtır?Cevap
EA uzak JMP'dir. Bağıl konum 00 E0 → E000h, kesim 00 F0 → F000h. CS:IP = F000h:E000h, fiziksel adres F0000h + E000h = FE000h. Sıfırlama bayrakları temizlediği için IF = 0'dır; kesmeler kapalıdır.
Bir semafor
MOV AL, [BX]/CMP AL, 0/JNE bekle/MOV BYTE PTR [BX], 1dizisiyle kuruluyor. İki işlemcili bir sistemde neden güvenli değildir? Kaç bayt ve hangi önekle düzeltilir?Cevap
Okuma ile yazma ayrı komutlardadır; arada öteki işlemci yolu alıp aynı 0'ı okuyabilir ve ikisi birden kritik bölgeye girer. Düzeltme:
MOV AL, 1veLOCK XCHG AL, [BX]. XCHG okuma ve yazmayı tek komutta yapar; LOCK öneki (F0h, 1 bayt) iki döngü arasında yolun devredilmesini engeller.Minimum modda bir DMA denetleyicisi, bir okuma döngüsünün T3 turunda HOLD = 1 yapıyor. İşlemci bu döngünün T4'ünde yolu bırakır mı?
Cevap
Bırakmaz. Veri sayfasına göre yolun o döngünün T4'ünde bırakılması için isteğin en geç T2'de gelmiş olması gerekir. T3'te gelen istek, bir sonraki uygun T4 ya da boşta turunda kabul edilir; HLDA o turun ortasında 1 olur.
10.1.13İleri okuma
- Intel, 8086 16-Bit HMOS Microprocessor veri sayfası (231455): bu notun sayısal değerleri pin açıklamalarından, zamanlama çizelgelerinden ve AC karakteristikleri tablosundan alınmıştır.
- B. B. Brey, The Intel Microprocessors (8. baskı), Bölüm 9: 8086/8088'in pinleri, saat üreteci, yolun tamponlanması, yol zamanlaması, READY ile bekleme durumları ve minimum/maksimum mod, şemalarla anlatılır.
- D. V. Hall, Microprocessors and Interfacing (2. baskı): 8086 sisteminin adres çözümü, bellek ve G/Ç arayüzü ve 8288 ile maksimum mod tasarımı örnek kartlar üzerinden işlenir.
- K. Shirriff'in righto.com'daki 8086 yazıları: kalıp fotoğrafları üzerinden yol arayüzü, kuyruk ve mikrokodun transistör düzeyindeki yapısı incelenir.
10.1.14Kaynaklar
- Intel, 8086 16-Bit HMOS Microprocessor, veri sayfası (231455).
- Intel, 8284A Clock Generator and Driver, 8288 Bus Controller, 8282/8283 Octal Latch veri sayfaları.
- Texas Instruments, SN74LS373 Octal Transparent D-Type Latches ve SN74LS245 Octal Bus Transceivers veri sayfaları.
- Barry B. Brey, The Intel Microprocessors, 8. baskı, Pearson, 2009 (Bölüm 9: 8086/8088 donanım özellikleri).
- Douglas V. Hall, Microprocessors and Interfacing: Programming and Hardware, 2. baskı, McGraw-Hill.
- Mehmet Bodur, Mikroişlemcilere Giriş: Assembler ile Yazılım ve Arayüz, EMO, 2014.
- Ken Shirriff, 8086 kalıp fotoğrafları ve tersine mühendislik yazıları, righto.com.
İlgili sayfalar: Bölüm 10.1 sunumu · Çalışma soruları · Terim sözlüğü · © Sercan Külcü. Tüm hakları saklıdır.