Mikroişlemciler

Mikroişlemciler

Mikroişlemci mimarisini 8085 ve 8086 üzerinden komut yürütme, yazmaçlar, veri yolları, bellek, kesmeler, zamanlama, seri-paralel I/O, DMA ve modern işlemci kavramlarıyla ele alan ders notu.

Ünite 1: Temel Kavramlar

Üç terimin ayrımı

Mikroişlemci, aritmetik-mantık birimi, yazmaç kümesi ve denetim devrelerini bir işlemci yongasında bütünleştiren programlanabilir işlem birimidir. Klasik 8085/8086 ayrımında ana bellek ve çevre birimleri işlemci dışındadır; modern mikroişlemciler ise önbellek, bellek denetleyicisi ve çeşitli sistem birimlerini aynı paket veya yonga üzerinde bütünleştirebilir.

Mikrobilgisayar, merkezi işlem birimi olarak bir mikroişlemci kullanan, bunun yanında bellek ve giriş-çıkış birimleri bulunan sistemdir.

Mikrodenetleyici, işlemci çekirdeğini, belleği ve çevre birimlerini tek pakette birleştirir. Gömülü uygulamalarda kart üzerindeki bileşen sayısını ve yol gecikmelerini azaltır.

Tanım

Mikroişlemci, bellekte saklı bir programa göre aldığı sayılar üzerinde aritmetik veya mantık işlemleri yapan ve sonuç olarak başka sayılar üreten programlanabilir bir aygıttır.

Tanımın her öğesi ayrı bir tasarım kısıtı taşır:

  • Programlanabilir: Aynı donanım, komut dizisi değiştirilerek farklı işler yapar. Esneklik, sabit işlevli devreye göre başarım kaybı karşılığında elde edilir.
  • Komut kümesi: İşlemcinin yapabileceklerinin tümü, tasarım anında sabitlenmiş komut kümesiyle sınırlıdır.
  • Sayılar: İşlemci yalnız ikili sayı tanır. Aynı bit dizisi, komut kodu, veri veya adres olarak yorumlanabilir; anlamı yürütme bağlamı belirler.
  • Bellekte saklı: Program ve veri aynı bellek uzayında bulunur (saklı program ilkesi).

Söz ve türevleri

İşlemcinin bir seferde işlediği bit grubu söz (word) olarak adlandırılır ve genişliği işlemcinin sınıfını belirler. 4 bit nibble, 8 bit bayt olarak anılır. 8 bitlik bir işlemci büyük sayılarla çalışabilir, fakat bunları 8 bitlik parçalara bölerek işler; her ek parça ayrı komut ve ayrı çevrim demektir.

Bellek haritası ve komut çevrimi

Bellek haritası, adres uzayının hangi bölgesinin hangi fiziksel aygıta ayrıldığını gösteren gösterimdir. Adres yolu genişliği n ise adreslenebilir alan 2^n konumdur; 16 adres hattı 64 KB alan verir.

Bir komutun yürütülmesi üç aşamalıdır:

Getir (fetch)  -> Çöz (decode) -> Yürüt (execute)

İşlemci program sayacının gösterdiği adresten komut kodunu okur, komut kod çözücüsünde yorumlar, gerekli veri erişimlerini yapar ve sonucu yazar. Program sayacı okuma sırasında otomatik artar; dallanma komutları bu artışın yerine yeni bir değer yükler.

Makine dili ve assembly

Makine dili, işlemcinin doğrudan çalıştırdığı ikili kodlardır; onaltılık gösterim yalnız insan için kolaylıktır. Assembly, işlemcinin komut kümesini sembolik anımsatıcılar, etiketler ve assembler yönergeleriyle ifade eder ve assembler tarafından makine koduna dönüştürülür. Kaynak düzeyindeki her ifade zorunlu olarak tek bir makine komutuna karşılık gelmez.

Makine dili işlemciye özgüdür: bir işlemci için yazılmış ikili kod, farklı komut kümesine sahip başka bir işlemcide çalışmaz.

Ünite 2: 8085 Mimarisi

İşlevsel bloklar

8085, 8 bit veri yolu ve 16 bit adres yolu olan, 64 KB adresleyebilen bir mikroişlemcidir. Başlıca blokları aritmetik-mantık birimi, yazmaç kümesi, komut kod çözücü, zamanlama ve denetim birimi, kesme denetimi ve seri giriş-çıkış denetimidir.

Yazmaçlar

8085 yazmaçları:

  • A (akümülatör), 8 bit: Aritmetik ve mantıksal işlemlerde temel operand ve sonuç yazmacıdır.
  • B, C, D, E, H ve L, 8 bit: Genel amaçlı yazmaçlardır. BC, DE ve HL çiftleri 16 bit olarak da kullanılabilir.
  • Bayrak yazmacı, 8 bit: İşlem sonucuna ilişkin durum bilgilerini taşır.
  • PC, 16 bit: Bir sonraki yürütülecek komutun adresini tutan program sayacıdır.
  • SP, 16 bit: Yığının tepe adresini tutan yığın işaretçisidir.
  • W ve Z, 8 bit: İşlemci tarafından geçici amaçlarla kullanılan, programcıya doğrudan görünmeyen iç yazmaçlardır.

HL çifti bellek işaretçisi olarak özel bir konuma sahiptir; M yazımı, HL'nin gösterdiği bellek gözünü ifade eder.

Bayraklar

Beş bayrak tanımlıdır ve bayrak yazmacındaki konumları sabittir:

D7  D6  D5  D4  D3  D2  D1  D0
S   Z   -   AC  -   P   -   CY
  • S (işaret): Sonucun en anlamlı biti 1 ise kurulur.
  • Z (sıfır): Sonuç sıfırsa kurulur.
  • AC (yardımcı elde): 3. bitten taşma varsa kurulur; yalnız ondalık düzeltme komutu tarafından kullanılır.
  • P (eşlik): Sonuçtaki 1 sayısı çift ise kurulur.
  • CY (elde): En anlamlı bitten taşma veya ödünç varsa kurulur.

Her komut bayrakları etkilemez. Koşullu dallanma yazılırken, bayrağı kuran komut ile dallanma arasına bayrağı değiştiren başka bir komutun girmemesine dikkat edilir.

Yol yapısı ve çoklamalı düşük adres

8085'in düşük sekiz adres biti ile veri yolu aynı pinleri paylaşır (AD0-AD7); yüksek sekiz adres biti ayrıdır (A8-A15). Pin sayısını azaltan bu çoklama, adresin dış devrede tutulmasını zorunlu kılar.

ALE (adres tutucu izinleme) sinyali her makine çevriminin ilk T durumunda etkinleşir ve düşük adres baytının bir sekizli mandala (latch) yazılmasını sağlar. Sonraki durumlarda aynı pinler veri taşır. Bu ayırma işlemine ayrıştırma (demultiplexing) denir ve 8085 tabanlı her sistemde bulunması zorunlu ilk dış devredir.

Denetim ve durum sinyalleri

RD ve WR işlemin yönünü, IO/M sinyali erişimin bellek mi giriş-çıkış mı olduğunu belirtir. S0 ve S1 durum sinyalleri ile birlikte makine çevriminin türü dışarıdan tanınır.

IO/M  S1  S0   Makine çevrimi
 0     1   1   Komut kodu getirme
 0     1   0   Bellek okuma
 0     0   1   Bellek yazma
 1     1   0   G/Ç okuma
 1     0   1   G/Ç yazma

READY girişi yavaş belleklerin işlemciyi bekletmesini sağlar; düşük tutulduğu sürece işlemci bekleme durumları (wait state) ekler. Bu düzenek, farklı hızdaki bileşenlerin tek yol üzerinde çalışmasını mümkün kılar.

Saat

8085 dahili saat üretecine sahiptir; X1-X2 uçlarına bağlanan kristalin frekansı ikiye bölünerek dahili saat elde edilir. 6,144 MHz kristal yaklaşık 3,07 MHz dahili saat, dolayısıyla yaklaşık 325 ns'lik bir T durumu verir. Tüm zamanlama hesapları bu tek periyot üzerinden yürür.

Ünite 3: Komut Kümesi ve Adresleme Modları

Komut biçimi

Her komut işlem kodu (opcode) ve işlenen (operand) bölümlerinden oluşur. 8085 komutları uzunluklarına göre üç gruptadır:

  • Tek baytlık: Yalnız işlem kodu içerir (MOV A,B, ADD C).
  • İki baytlık: İşlem kodu ve 8 bitlik veri (MVI A, 32H).
  • Üç baytlık: İşlem kodu ve 16 bitlik adres veya veri (LXI H, 2050H, JMP 2000H).

16 bitlik değerler bellekte düşük bayt önce saklanır. Komut uzunluğu doğrudan getirme çevrimi sayısını, dolayısıyla yürütme süresini belirler.

8085'in komut kümesi 74 temel işlem türü ve 246 farklı işlem kodu içerir; 8 bitlik işlem kodu alanının 256 kombinasyonunun tamamı kullanılmamıştır.

Komut grupları

Veri transferi: Veriyi bir yerden diğerine kopyalar; kaynak değişmez ve bayraklar etkilenmez. MOV, MVI, LDA, STA, LXI, LDAX, STAX, LHLD, SHLD, XCHG, IN, OUT.

Aritmetik: ADD, ADI, ADC, SUB, SUI, SBB, INR, DCR, INX, DCX, DAD. Bayrak etkisi komuta göre değişir: ADD/ADC/SUB/SBB ailesi ilgili durum bayraklarını günceller; INR ve DCR CY bayrağını değiştirmez; INX ve DCX bayrakları etkilemez; DAD ise yalnız CY bayrağını etkiler. Bu nedenle 16 bitlik sayaçların sıfır koşulu ayrıca sınanmalıdır.

Mantık: ANA, ORA, XRA, CMA, CMP, CPI ve döndürme komutları RLC, RRC, RAL, RAR. Karşılaştırma komutu çıkarma yapar fakat sonucu saklamaz, yalnız bayrakları kurar. RLC akümülatörü kendi içinde döndürür, RAL ise elde bayrağını döngünün parçası yapar; bu ayrım çok baytlı kaydırmalarda belirleyicidir.

Dallanma: Koşulsuz JMP, CALL, RET; koşullu JZ, JNZ, JC, JNC, JP, JM, JPE, JPO ve bunların çağrı-dönüş karşılıkları.

Makine denetimi: NOP, HLT, EI, DI, SIM, RIM.

Adresleme modları

  • Anlık (immediate): Veri komutun içindedir. MVI A, 32H
  • Yazmaç (register): İşlenenler yazmaçtır. MOV A, B
  • Doğrudan (direct): Komut belleğin adresini taşır. LDA 2050H
  • Dolaylı (indirect): Adres bir yazmaç çiftindedir. MOV A, M
  • Örtük (implicit): İşlenen komutun tanımında saklıdır. CMA

Dolaylı adresleme dizi ve tablo işlemlerinin temelidir: adres yazmaç çiftinde tutulduğu için INX H ile artırılarak aynı komut farklı gözlere uygulanır. Doğrudan adreslemede adres komutun içinde sabit olduğundan böyle bir esneklik yoktur.

Ünite 4: Zamanlama, Makine Çevrimleri ve Gecikme Döngüleri

Zamanlama hiyerarşisi

T durumu      : bir saat periyodu, en küçük zaman birimi
Makine çevrimi: yol üzerinde bir erişim (3-6 T durumu)
Komut çevrimi : bir komutun tamamlanması (1-5 makine çevrimi)

Komut kodu getirme çevrimi normalde 4 T durumu sürer; işlemcinin dahili işlem yapması gereken durumlarda 6 T durumuna uzar. Bellek ve giriş-çıkış okuma-yazma çevrimleri 3 T durumudur.

Örneğin MOV A, B tek makine çevrimi ve 4 T durumu, LDA 2050H dört makine çevrimi ve 13 T durumu, CALL beş makine çevrimi ve 18 T durumu alır.

Gecikme döngüleri

Yazılımla gecikme üretmenin temeli, bilinen sayıda T durumu tüketen bir döngüyü sayaçla tekrarlamaktır.

        MVI C, N        ; 7 T
LOOP:   DCR C           ; 4 T
        JNZ LOOP        ; 10 T (dallanır), 7 T (dallanmaz)

Son yinelemede dallanma gerçekleşmediği için 3 T durumu eksik harcanır:

T(toplam) = 7 + N·14 - 3
t(gecikme) = T(toplam) · T(saat)

Tek 8 bitlik sayaçla üretilebilecek en uzun gecikme 256 yineleme ile sınırlıdır. Daha uzun gecikmeler için yazmaç çifti kullanılır (DCX bayrak kurmadığından sonuç ayrıca sınanır) veya iç içe iki döngü kurulur. İç içe döngüde toplam süre, iç döngü süresinin dış sayaçla çarpımına dış döngünün kendi ek yükü eklenerek bulunur.

Bu yöntemin sınırı açıktır: gecikme saat frekansına bağımlıdır, işlemciyi tümüyle meşgul eder ve bir kesme geldiğinde süre uzar. Kesin ve işlemciyi bloke etmeyen zamanlama için donanım zamanlayıcı kullanılır (Ünite 10).

Ünite 5: Yığın ve Altprogramlar

Yığın

Yığın, yığın işaretçisi tarafından gösterilen ve son giren ilk çıkar (LIFO) düzeninde çalışan bellek alanıdır. 8085'te yığın azalan yönde büyür: PUSH işaretçiyi önce azaltır, POP okuduktan sonra artırır.

PUSH B  : SP = SP-1, [SP] = B ; SP = SP-1, [SP] = C
POP  D  : E = [SP], SP = SP+1 ; D = [SP], SP = SP+1

PUSH PSW akümülatör ile bayrak yazmacını birlikte saklar; kesme hizmet altprogramlarının ilk komutu genellikle budur.

Yığın işaretçisi program başında LXI SP ile bellek alanının üst ucuna kurulur. Yığın aşağı doğru büyüdüğü için, veri alanının alt uçtan yukarı büyümesi tasarım kuralıdır; iki alanın buluşması yığın taşmasıdır ve sessizce veri bozar.

PUSH ve POP komutlarının sırası ters simetrik olmalıdır. Sıra bozulursa yazmaç içerikleri karışır; dönüş adresi üzerine yazılırsa program denetimi tümüyle kaybolur.

Altprogramlar

CALL, bir sonraki komutun adresini yığına iter ve program sayacına hedef adresi yükler. RET yığından iki bayt çekerek program sayacına yazar. Koşullu CALL ve RET biçimleri de vardır.

Bu düzenek altprogram iç içeliğini (nesting) doğal olarak destekler; derinliğin tek sınırı yığın için ayrılan bellektir. Özyineli çağrı da aynı mekanizmayla çalışır.

Parametre geçirme yolları: yazmaçlar üzerinden (hızlı, sayı sınırlı), bellekte belirlenmiş alan üzerinden, işaretçi olarak bir yazmaç çifti üzerinden veya yığın üzerinden. Yığın üzerinden geçirmede dönüş adresinin altındaki gözlerin okunması gerekir; çağrı sonrası yığının temizlenmesinden hangi tarafın sorumlu olduğu bir sözleşme meselesidir.

Altprogramın kullandığı tüm yazmaçları girişte saklayıp çıkışta geri yüklemesi (yazmaç sözleşmesi), çağıran ile çağrılan arasındaki gizli bağımlılıkları ortadan kaldırır. Modern derleyicilerdeki çağrı sözleşmelerinin (calling convention) doğrudan atasıdır.

Ünite 6: Bellek ve Arayüzleme

Bellek hücresinden yongaya

Temel bellek hücresi, veri girişi ve saat kapısı bulunan bir D mandalıdır. Çıkışa üç durumlu (tri-state) tampon, girişe yazma denetimli tampon eklenerek aynı hücre ortak bir yola bağlanabilir hale gelir. Üç durumlu tampon, seçilmeyen yongaların yol üzerinde yüksek empedansta kalmasını sağlar; ortak yolun temel çalışma koşulu budur.

Bir yazmaç oluşturmak için hücreler yan yana, bellek dizisi oluşturmak için yazmaçlar alt alta bağlanır. Belirli bir yazmacı seçen izinleme hattı, adres bitlerinin kod çözücüden geçirilmesiyle üretilir.

Bellek yongası iki sayı ile ölçülür: uzunluk (göz sayısı) ve genişlik (göz başına bit). 2K × 8 bir yonga 2048 göz ve gözde 8 bit taşır ve 2^11 = 2048 olduğundan 11 adres hattı kullanır.

Adres kod çözme

16 adres hattının bir bölümü yonga içindeki gözü, kalanı hangi yonganın seçileceğini belirler. Yonga seç (CS) girişi bu üst bitlerin kod çözülmesiyle sürülür.

A15 A14 A13 A12 A11 A10 | A9 ... A0
   yonga seçimi          |  yonga içi adres

Üst bitlerin belirli bir kombinasyonu bir yongaya adres aralığı atar. Aralığın başlangıcı, yonga içi adres bitlerinin tümü sıfır; sonu ise tümü bir yapılarak bulunur.

Tam kod çözme tüm üst adres bitlerini kullanır; her yonganın tek bir adres aralığı olur. Kısmi kod çözme bir bölümünü kullanır; devre basitleşir, karşılığında aynı fiziksel göz birden çok adresten görünür (görüntü, foldback). Küçük sistemlerde kabul edilebilir bir ödünleşimdir, fakat bellek haritasında görünmeyen çakışmalar yarattığı için sistem büyütüldüğünde hata kaynağı olur.

Aynı yaklaşım giriş-çıkış aygıtlarına da uygulanır. 8085 ayrı bir giriş-çıkış adres uzayına sahiptir: IN ve OUT komutları 8 bitlik port adresi kullanır ve 256 port adresler; kod çözmede IO/M sinyali de dikkate alınır. Alternatif olarak aygıt bellek uzayına yerleştirilir (bellek eşlemli G/Ç); bu durumda tüm bellek komutları aygıta uygulanabilir, bedeli bellek adres alanının bir bölümünün harcanmasıdır.

Ünite 7: Kesmeler

Yoklama ve kesme

Yoklamada (polling) işlemci aygıtın durum bitini döngü içinde okur; basit fakat işlemci zamanının büyük bölümü boşa harcanır ve yanıt gecikmesi döngü süresine bağlıdır. Kesmede aygıt hazır olduğunda işlemciye sinyal verir; işlemci ancak o zaman ilgilenir.

Kesme geldiğinde işlemci yürürlükteki komutu tamamlar, program sayacını yığına iter ve hizmet altprogramına dallanır. Hizmet sonunda RET ile kesilen noktaya dönülür.

8085'in kesme yapısı

8085 kesme girişleri:

  • TRAP: Maskelenemez ve vektörlüdür. Vektör adresi 0024H'dir; kenar ve seviye duyarlılığı birlikte kullanılır.
  • RST 7.5: Maskelenebilir ve vektörlüdür. Vektör adresi 003CH'dir; pozitif kenar tetiklemelidir ve kesme isteği tutulur.
  • RST 6.5: Maskelenebilir ve vektörlüdür. Vektör adresi 0034H'dir; seviye duyarlıdır.
  • RST 5.5: Maskelenebilir ve vektörlüdür. Vektör adresi 002CH'dir; seviye duyarlıdır.
  • INTR: Maskelenebilir ve vektörsüzdür. Sabit bir vektör adresi yoktur; kesme onay çevrimi sırasında dış donanım tarafından sağlanan komut üzerinden yönlendirilir.

Öncelik sırası yukarıdan aşağıya doğrudur. Vektörlü kesme, hizmet adresi donanımca sabitlenmiş olandır. RST n komutlarının vektör adresi n × 8 ile bulunur.

TRAP maskelenemez; güç kesintisi gibi durdurulamaz olayların bildirimi için ayrılmıştır. RST 7.5 dahili bir mandal içerdiğinden kenar tetiklidir: sinyal kaybolsa bile istek saklanır. Seviye tetikli girişlerde istek sinyalinin hizmet başlayana kadar korunması gerekir.

EI ve DI komutları kesme izin flip-flopunu kurar ve siler; bir kesme kabul edildiğinde bu flip-flop donanımca silinir, dolayısıyla iç içe kesmeye izin verilecekse hizmet altprogramı içinde EI yeniden verilmelidir.

SIM ve RIM

SIM komutu akümülatördeki kalıbı kesme maskesi olarak yazar:

D7   D6   D5   D4    D3   D2    D1    D0
SOD  SDE  --   R7.5  MSE  M7.5  M6.5  M5.5

Maske bitleri ancak MSE biti 1 iken yazılır; bu koruma, seri çıkış için SIM kullanıldığında maskelerin yanlışlıkla değişmesini önler. R7.5 biti RST 7.5 mandalını temizler.

RIM komutu maskeleri, kesme izin durumunu ve bekleyen kesmeleri akümülatöre okur:

D7   D6    D5    D4    D3  D2    D1    D0
SID  P7.5  P6.5  P5.5  IE  M7.5  M6.5  M5.5

Vektörsüz kesme ve öncelik

INTR kabul edildiğinde işlemci INTA sinyali üretir ve dış devrenin yol üzerine bir RST n veya CALL komut kodu koymasını bekler. Böylece hizmet adresi tümüyle dış donanım tarafından belirlenir.

Birden çok aygıtın tek INTR hattını paylaşması durumunda öncelik kodlayıcı kullanılır: aygıt istekleri kodlanır ve karşılık gelen RST komut kodu üretilir. Bu görevi tümleşik olarak yerine getiren programlanabilir kesme denetleyicisi (8259A), önceliklendirme, maskeleme, iç içe kesme ve döngüsel öncelik gibi işlevleri tek yongada sunar.

Kesme gecikmesi

Bir kesmenin bildirimi ile hizmetin başlaması arasındaki süre, yürürlükteki komutun kalan süresi, kesme kabul çevrimleri ve hizmet altprogramının bağlam saklama komutlarının toplamıdır. Gerçek zamanlı sistemlerde önemli olan ortalama değil, en kötü durum gecikmesidir; en uzun komutun ve kesmelerin kapalı tutulduğu en uzun kritik bölümün süresi bu üst sınırı belirler. Kesmelerin uzun süre kapatılması, en kötü durum gecikmesini doğrudan büyütür.

Ünite 8: Seri İletişim

Paralel ve seri iletim

Paralel iletimde tüm bitler ayrı hatlarla aynı anda gönderilir; hızlıdır fakat hat sayısı ve hatlar arası gecikme farkı (skew) nedeniyle yalnız kısa mesafelerde kullanılır. Seri iletimde bitler tek hat üzerinden sırayla gönderilir; yavaştır fakat maliyeti ve kablo karmaşıklığı düşüktür.

İşlemci içindeki veri paralel olduğundan, gönderimde paralel-seri, alımda seri-paralel dönüşüm gerekir.

Senkron ve asenkron iletim

Senkron iletimde verici ve alıcı ortak bir zamanlamayla çalışır; veri blokları aralıksız gönderilir ve çerçeve senkronizasyon karakterleriyle sağlanır. Büyük blokların yüksek hızda aktarılmasına uygundur.

Asenkron iletimde her karakter kendi başlangıç ve bitiş bitleriyle çerçevelenir; iletim herhangi bir anda başlayabilir. Alıcı, başlangıç bitinin düşen kenarını yakalayarak kendi saatini hizalar ve her biti bit süresinin ortasında örnekler.

[start=0][d0][d1]...[d7][parity][stop=1]

Baud hızı saniyedeki sembol sayısıdır; iki seviyeli iletimde bit hızına eşittir. Bir bitin süresi baud hızının tersidir: 1200 baud için 833 µs. Yazılımla seri iletim yapılırken gecikme döngüsü bu değere göre boyutlandırılır.

Etkin veri hızı, çerçeveleme bitleri nedeniyle baud hızından düşüktür: 8 veri biti, 1 başlangıç, 1 bitiş ve 1 eşlik biti kullanıldığında her 11 bitin 8'i veri taşır.

Hata denetimi

Eşlik (parity) biti, karakterdeki 1 sayısını tek veya çift yapacak biçimde eklenir. Tek bitlik hataları yakalar, çift sayıda hatayı yakalayamaz.

Sağlama toplamı ve çevrimsel artıklık denetimi (CRC), blok halinde gönderilen verilerde kullanılır ve çok daha yüksek yakalama gücü sağlar.

Alıcı tarafında üç tipik hata ayırt edilir: eşlik hatası, çerçeveleme hatası (beklenen konumda bitiş biti bulunamaması) ve taşma hatası (önceki karakter okunmadan yenisinin gelmesi). Çerçeveleme hatalarının yığılması genellikle baud hızı uyuşmazlığına işaret eder.

Elektriksel standart

RS-232, mantık seviyelerini işlemcinin TTL seviyelerinden farklı tanımlar; arada seviye dönüştürücü gerekir. Standart, sinyal seviyelerinin yanında bağlayıcı ve el sıkışma hatlarını da tanımlar.

8085'in seri uçları

8085, SOD (seri çıkış) ve SID (seri giriş) uçlarını SIM ve RIM komutlarıyla kullanır. Bir bit göndermek için veri biti SOD konumuna yerleştirilir, SDE biti kurulur ve SIM çalıştırılır; almak için RIM sonrası akümülatörün en anlamlı biti okunur.

Çerçeveleme, bit zamanlaması ve kaydırma tümüyle yazılım tarafından yürütülür; bu nedenle iletim boyunca işlemci bloke olur ve kesme gecikmeleri bit hatasına dönüşür. Adanmış bir seri iletişim yongası (USART) bu işi donanımda yaptığından hem işlemciyi serbest bırakır hem de zamanlama hassasiyetini garanti eder.

Ünite 9: Paralel Giriş-Çıkış ve 8255A

Yapı

8255A programlanabilir çevre arayüzü 24 giriş-çıkış hattını üç porta böler: A, B ve C. Denetim mantığı iki grup halinde çalışır; A grubu port A ile port C'nin üst dörtlüsünü, B grubu port B ile port C'nin alt dörtlüsünü yönetir. Denetim sözcüğü yazılarak port yönleri ve çalışma modu belirlenir.

Çalışma modları

Mod 0 (basit giriş-çıkış): Portlar el sıkışma olmadan giriş veya çıkış olarak kullanılır. Anahtar, LED ve benzeri yavaş aygıtlar için yeterlidir.

Mod 1 (el sıkışmalı giriş-çıkış): Port A ve B veri taşır, port C'nin bitleri el sıkışma sinyallerine ayrılır. Girişte STB aygıtın veriyi yerleştirdiğini, IBF tamponun dolduğunu bildirir; çıkışta OBF verinin hazır olduğunu, ACK aygıtın aldığını bildirir. INTR çıkışı ile aktarım kesme tabanlı yürütülebilir.

Mod 2 (çift yönlü): Yalnız port A için geçerlidir; aynı hatlar üzerinden hem gönderme hem alma yapılır ve gerekli el sıkışma sinyalleri port C'den sağlanır.

BSR modu (bit set-reset): Denetim sözcüğünün en anlamlı biti sıfır olduğunda, port C'nin tek bir biti diğerlerini etkilemeden kurulur veya silinir. Röle ve benzeri tekil çıkışların denetimi için port bütününü yeniden yazmayı gereksiz kılar.

El sıkışmanın gerekçesi

İşlemci ile çevre aygıt arasındaki hız farkı büyüktür. El sıkışma sinyalleri, verinin alınmadan üzerine yazılmasını ve alınmamış verinin okunmasını önler; hız uyumsuzluğunu akış denetimiyle çözer. Aynı ilke modern arabirimlerde hazır-geçerli (ready-valid) el sıkışması olarak sürdürülmektedir.

Ünite 10: Programlanabilir Zamanlayıcı-Sayıcı

Yapı

8253/8254 üç bağımsız 16 bitlik sayıcı içerir. Her sayıcının kendi saat girişi, kapı (gate) girişi ve çıkışı vardır. Denetim sözcüğüyle sayıcı seçilir, okuma-yazma biçimi, çalışma modu ve sayma tabanı (ikili veya BCD) belirlenir; ardından başlangıç değeri yüklenir.

Sayıcı, saat darbeleriyle geri sayar ve sıfıra ulaştığında çıkışını moda özgü biçimde değiştirir.

Modlar

  • Mod 0 — sayım sonunda kesme: Çıkış sayım boyunca düşük, sayım bitince yüksek kalır. Tek seferlik olay zamanlaması.
  • Mod 1 — donanım tetiklemeli tek atım: Kapı tetiklendiğinde çıkış sayım süresince düşüktür; tetik yenilenirse süre baştan başlar.
  • Mod 2 — hız üreteci: Sayım sonunda çıkış bir çevrim düşük olur ve sayıcı otomatik yeniden yüklenir. Periyodik kesme kaynağı olarak kullanılır.
  • Mod 3 — kare dalga: Çıkış yükleme değerinin yarısı kadar yüksek, yarısı kadar düşük kalır. Saat ve baud üreteci olarak kullanılır.
  • Mod 4 — yazılım tetiklemeli darbe: Yükleme sonrası sayım biter bitmez tek çevrimlik darbe üretilir.
  • Mod 5 — donanım tetiklemeli darbe: Aynı davranış kapı girişiyle tetiklenir.

8254, 8253'ten farklı olarak geri okuma (read-back) komutu içerir; sayıcının anlık değeri ve durumu, sayım kesilmeden okunabilir.

Donanım zamanlayıcının üstünlüğü

Yazılım gecikme döngüsü işlemciyi bloke eder ve kesmelerden etkilenir. Donanım sayıcı bağımsız çalışır, işlemciyi yalnız sayım bitiminde kesmeyle uyarır ve zamanlaması saat frekansı dışında hiçbir yazılım koşuluna bağlı değildir. Deterministik zamanlama gerektiren her uygulamada tercih edilen çözümdür.

Ünite 11: Veri Transfer Şemaları

Programlı giriş-çıkış

İşlemci IN ve OUT komutlarıyla aktarımı bizzat yürütür. İki alt biçimi vardır:

Koşulsuz aktarım: Aygıtın her zaman hazır olduğu varsayılır. Yalnız yavaş ve basit aygıtlarda güvenlidir.

Koşullu (yoklamalı) aktarım: İşlemci durum bitini okuyup hazır olana kadar bekler. Güvenlidir, fakat bekleme süresi boyunca işlemci başka iş yapamaz.

Kesme tabanlı aktarım

Aygıt hazır olduğunda kesme üretir. İşlemci ana işini sürdürür, yalnız gerçek aktarım anında müdahale eder. İşlemci kullanımı yüksektir; bedeli, her aktarım için bağlam saklama ve geri yükleme yükü ödenmesidir. Çok küçük veri parçalarının çok sık aktarıldığı durumlarda bu ek yük aktarımın kendisinden büyük olabilir.

Doğrudan bellek erişimi

Yüksek hızlı ve blok halindeki aktarımlarda veri, işlemci üzerinden geçmeden aygıt ile bellek arasında doğrudan taşınır. Denetleyici HOLD sinyaliyle yolu ister; işlemci yürürlükteki makine çevrimini tamamlar, yol sürücülerini yüksek empedansa alır ve HLDA ile onay verir. Aktarım süresince yol denetimi denetleyicidedir.

İki çalışma biçimi vardır. Döngü çalma (cycle stealing) modunda her seferinde tek bir aktarım yapılır ve yol işlemciye geri verilir; işlemci yavaşlar fakat çalışmaya devam eder. Blok modunda tüm blok kesintisiz aktarılır; en yüksek verimi verir, karşılığında işlemci blok süresince durur ve kesme gecikmesi belirgin biçimde artar.

Doğrudan bellek erişimi, işlemci gözüyle görünmeyen bellek yazmaları ürettiği için önbellekli sistemlerde tutarlılık sorunu doğurur; modern sistemlerde bu, önbellek tutarlılık protokolleri veya yazılımla önbellek geçersizleştirme ile çözülür.

Ünite 12: 8086 ve 16 Bit Mimariye Geçiş

Temel özellikler

8086, 16 bit veri yolu ve 20 bit adres yolu olan, 1 MB adresleyebilen bir mikroişlemcidir. 40 pinlik pakete sığması için adres, veri ve durum sinyalleri çoklanmıştır; AD0-AD15 adres ve veri, A16-A19 adres ve durum bilgisi taşır.

İşlemci iki çalışma kipinde yapılandırılır. Minimum kip tek işlemcili sistemler içindir ve denetim sinyalleri doğrudan işlemciden üretilir. Maksimum kip çok işlemcili sistemler içindir; durum sinyalleri bir yol denetleyicisi tarafından çözülerek yol paylaşımı ve eş işlemci desteği sağlanır.

İki birimli yapı

8086 içsel olarak iki bölümden oluşur:

Yol arayüz birimi (BIU) adres üretir, bellek erişimlerini yapar ve getirilen komutları bir kuyruğa doldurur (8086'da altı bayt, 8088'de dört bayt).

Yürütme birimi (EU) kuyruktan komut alır, çözer ve yürütür.

Bu ayrım, yürütme birimi bir komutu işlerken yol arayüz biriminin sonraki komutları önceden getirmesini sağlar. Getirme ve yürütmenin örtüşmesi, boru hattı (pipeline) kavramının ilk ve en basit biçimidir. Kazanç, dallanmada kuyruğun boşaltılması gerektiği için kaybedilir; dallanma cezası, modern boru hatlarında da aynı nedenden kaynaklanır.

Yazmaçlar

Genel amaçlı AX, BX, CX, DX yazmaçları yüksek ve düşük yarımları ayrı adreslenebilir biçimde kullanılabilir. SI ve DI dizin, BP ve SP işaretçi yazmaçlarıdır. IP komut işaretçisidir.

Bayrak yazmacında altı durum bayrağı (CF, PF, AF, ZF, SF, OF) ve üç denetim bayrağı (TF adım adım yürütme, IF kesme izni, DF dizgi yönü) bulunur.

Bellek bölütleme

Dört bölüt yazmacı (CS, DS, SS, ES) 16 bitlik bölüt adreslerini tutar. Fiziksel adres:

Fiziksel adres = (bölüt yazmacı × 16) + öteleme

Bu şema, 16 bitlik yazmaçlarla 20 bitlik adres uzayına erişimi sağlar. Bölüt sınırları 16 baytlık paragraflara hizalıdır ve her bölüt en çok 64 KB kapsar. Aynı fiziksel adres birden çok bölüt-öteleme çiftiyle ifade edilebildiğinden, işaretçi karşılaştırmaları normalize edilmedikçe güvenilir değildir.

Bölütleme aynı zamanda ilkel bir yeniden konumlandırma düzeneğidir: program içindeki ötelemeler değişmeden, yalnız bölüt yazmaçları değiştirilerek kod ve veri belleğin başka bir bölgesine taşınabilir.

Adresleme modları ve dizgi komutları

8086 anlık, yazmaç, doğrudan, yazmaç dolaylı, taban-artı-dizin ve göreli adreslemeyi destekler; öteleme, taban ve dizin bileşenlerinin birleşimi dizi ve yapı erişimlerini tek komuta indirir.

Dizgi komutları (MOVSB, CMPSB, SCASB, LODSB, STOSB) kaynak ve hedefi SI ve DI üzerinden alır, DF bayrağının yönünde otomatik ilerler. REP önekiyle CX sayacı sıfırlanana kadar tekrarlanırlar; bellek blok kopyalama ve arama işlemleri döngü kurmadan tek komutla yürütülür. Bu, karmaşık komut kümesi (CISC) felsefesinin tipik örneğidir: sık kullanılan bir yazılım kalıbının donanıma gömülmesi.

Ünite 13: Klasik Kavramların Güncel Karşılıkları

CISC ve RISC

8085 ve 8086, değişken uzunluklu komutlar, bellek-yazmaç aritmetiği ve çok çevrimli karmaşık komutlar taşıyan CISC mimarileridir. RISC yaklaşımı sabit uzunluklu komut, yalnız yükle-sakla ile bellek erişimi ve geniş yazmaç kümesi kullanır; kod yoğunluğundan ödün verir, karşılığında kod çözmeyi basitleştirip derin boru hattı ve yüksek saat frekansı sağlar.

Bugün gömülü alanda ARM Cortex-M ve RISC-V aileleri baskındır. Ayrım pratikte bulanıklaşmıştır: modern x86 işlemciler karmaşık komutları dahili olarak basit mikro-işlemlere çevirerek RISC benzeri bir çekirdek üzerinde yürütür.

Boru hattı

8086'nın komut kuyruğu getirme ile yürütmeyi örtüştürür. Modern boru hatlarda aşama sayısı beş ile yirmi arasındadır ve her aşama farklı komut üzerinde çalışır. İdeal durumda çevrim başına bir komut tamamlanır.

Üç tehlike (hazard) türü bu ideali bozar: veri tehlikesi (bir komut önceki komutun henüz yazılmamış sonucuna ihtiyaç duyar), denetim tehlikesi (dallanma sonucu belli olmadan sonraki komutlar getirilmiştir) ve yapısal tehlike (aynı donanım kaynağına eşzamanlı ihtiyaç). Çözümler sırasıyla ileri besleme, dal öngörüsü ve kaynak çoğaltmadır.

Gerçek zamanlı sistemlerde boru hattı ve dal öngörüsü, ortalama başarımı yükseltirken en kötü durum yürütme süresinin analizini zorlaştırır. Zamanlama kesinliği gereken çekirdeklerde bu nedenle sığ boru hattı tercih edilir.

Bellek hiyerarşisi ve önbellek

8085'te tüm bellek tek hızdadır. Modern sistemlerde işlemci hızı ile ana bellek hızı arasındaki fark, aradaki her erişimi darboğaza çevirir. Bu fark, yazmaç-önbellek-ana bellek-kalıcı depolama hiyerarşisiyle kapatılır.

Önbellek, zamansal ve uzamsal yerellik varsayımına dayanır: yakın zamanda erişilen ve yakın adresteki verilere yeniden erişilme olasılığı yüksektir. Erişim isabetliyse gecikme birkaç çevrim, ıskaysa yüzlerce çevrimdir. Ortalama erişim süresi:

t(ortalama) = t(önbellek) + ıska_oranı · t(ceza)

Deterministik davranış gereken sistemlerde önbellek yerine, gecikmesi sabit ve programcı denetiminde olan sıkı bağlı yerel bellek (TCM, scratchpad) kullanılır.

Kesme denetimi

8085'in beş kesme hattı ve dış öncelik kodlayıcısının yerini, çekirdeğe tümleşik kesme denetleyicileri almıştır. Cortex-M ailesindeki iç içe vektörlü kesme denetleyicisi yüzlerce kesme kaynağını, programlanabilir öncelik seviyeleriyle ve otomatik bağlam saklamayla yönetir; öncelik önalımı (preemption) donanımca yürütülür.

Değişmeyen ilke şudur: kesme gecikmesinin en kötü durum sınırı, gerçek zamanlı bir sistemin tasarımında ortalama başarımdan daha belirleyicidir.

Çevre veri yolları

Klasik dersteki paralel port ve el sıkışma düzeneğinin bugünkü karşılıkları farklı ödünleşimlerle konumlanır:

  • UART: Asenkron seri iletimin doğrudan devamı; noktadan noktaya, düşük hız, saat hattı yok.
  • SPI: Senkron, tam çift yönlü, yüksek hızlı; her köle için ayrı seçim hattı gerekir.
  • I²C: İki hatlı, adreslenebilir çoklu aygıt; hız düşük, kablolama en az.
  • CAN: Fark sinyalli, önceliğe göre yol tahkimi yapan, gürültülü ortamlar için tasarlanmış yayın veri yolu.
  • USB ve Ethernet: Yüksek hızlı, katmanlı protokolleri ve kendi denetleyicileri olan arabirimler.

Seçim ölçütü aynıdır: hat sayısı, mesafe, hız, aygıt sayısı ve gürültü dayanımı arasındaki ödünleşim.

Doğrudan bellek erişiminin bugünü

Modern mikrodenetleyicilerde çok kanallı DMA denetleyicileri, çevre birimlerinden gelen tetiklerle çalışır ve dairesel tampon, çift tamponlama, bellekten belleğe aktarım gibi kipleri destekler. Yüksek örnekleme hızlı analog-sayısal dönüştürücü verilerinin işlemciye hiç uğramadan belleğe alınması bugünkü tipik kullanımdır.

Koruma ve güvenlik

8085'te bellek koruması yoktur; her komut her adrese erişebilir. Modern çekirdekler bellek koruma birimi ile bellek bölgelerine erişim izni tanımlar; ayrıcalıklı ve kullanıcı kipleri ayrılır. Güvenli bölge teknolojileri (örneğin TrustZone) güvenilir ve güvenilmeyen yürütme alanlarını donanımda ayırır.

Gömülü sistemlerde güvenlik artık bir seçenek değil kısıttır: güvenli önyükleme, imzalı yazılım güncellemesi ve hata ayıklama arayüzünün üretimde kilitlenmesi standart gereklerdir.

Çok çekirdeklilik

Tek işlemcili modelin yerini, ortak bellek üzerinde çalışan birden çok çekirdek almıştır. Bu, ders boyunca sessizce varsayılan iki şeyi geçersiz kılar: bellek erişimlerinin bir tek sırası olduğu ve okuma-değiştirme-yazma dizisinin bölünemez olduğu.

Sonuç olarak önbellek tutarlılık protokolleri, bellek sıralama modelleri ve atomik komutlar devreye girer. Yığın kavramı çekirdek başına ayrı yığınlara, kesme ile ana program arasındaki paylaşımlı değişken sorunu ise genel eşzamanlılık denetimi problemine dönüşür.

Genel Kavramsal Çerçeve

Mikroişlemci sistemi, birbirine üç yolla bağlanmış üç bileşenden oluşur: işlemci, bellek ve giriş-çıkış. Adres yolu nereye, veri yolu neyi, denetim yolu ne zaman ve hangi yönde sorularını yanıtlar. Dersin tüm konuları bu üç sorunun somutlaşmasıdır.

Adresleme kod çözme problemidir. Bellek yongası seçimi, giriş-çıkış port seçimi ve bölütleme aynı işi farklı ölçeklerde yapar: adres bitlerini bölüp bir bölümünü hedef seçimine, kalanını hedef içi konuma ayırmak.

Zamanlama uyumsuz hızları uzlaştırma problemidir. Bekleme durumları, el sıkışma sinyalleri, tamponlama ve önbellek, aynı sorunun farklı katmanlardaki çözümleridir.

Denetim akışı bağlam saklama problemidir. Altprogram çağrısı, kesme ve görev değiştirme, aynı düzeneğin giderek genişleyen biçimleridir: yürürlükteki durumu yığına al, başka bir yere dallan, dönüşte durumu geri yükle. Yığının doğru yönetilmemesi her üç durumda da aynı sonucu doğurur.

Veri aktarımı, işlemcinin ne kadar dahil olacağı ekseninde sıralanır: koşulsuz programlı aktarım, yoklama, kesme, doğrudan bellek erişimi. Sıralamada aşağı inildikçe işlemci kullanımı artar, karşılığında donanım karmaşıklığı ve öngörülemezlik artar.

Klasik 8085 malzemesinin bugünkü değeri, bu ilkelerin karmaşıklık katmanları olmadan görülebilmesidir. Aynı ilkeler modern çekirdeklerde ortadan kalkmamış, boru hattı, önbellek, bellek koruma ve çok çekirdeklilik katmanlarının altına gömülmüştür.

Temel Kavramlar ve Hızlı Başvuru

  • Mikroişlemci != mikrobilgisayar != mikrodenetleyici (biri yalnız işlem birimi, biri tam sistem, biri tek pakette tümleşik sistem)
  • Komut kodu != işlenen (biri ne yapılacağını, diğeri neyle yapılacağını söyler)
  • Komut çevrimi != makine çevrimi != T durumu (biri komutun tamamı, biri tek yol erişimi, biri tek saat periyodu)
  • Bayt sayısı != T durumu sayısı (komut uzunluğu ile yürütme süresi ayrı büyüklüklerdir)
  • Adres yolu genişliği != veri yolu genişliği (biri kapasiteyi, diğeri sözü belirler)
  • ALE != adres yolu (ALE çoklanmış düşük adresin ne zaman tutulacağını söyler)
  • Doğrudan adresleme != dolaylı adresleme (adres komutun içinde mi yazmaçta mı)
  • Anlık adresleme != doğrudan adresleme (biri veriyi, diğeri verinin adresini taşır)
  • Kopyalama != taşıma (MOV kaynağı değiştirmez)
  • CMP != SUB (biri yalnız bayrak kurar, sonucu saklamaz)
  • RLC != RAL (biri akümülatör içinde döner, diğeri elde bayrağını döngüye katar)
  • INR != INX (biri bayrak kurar, diğeri kurmaz)
  • Yığın işaretçisi != program sayacı (biri veri tepesini, diğeri komut adresini gösterir)
  • PUSH sırası != POP sırası (ters simetrik olmak zorundadır)
  • CALL != JMP (biri dönüş adresini yığına yazar)
  • Yoklama != kesme (biri işlemcinin sorması, diğeri aygıtın bildirmesi)
  • Maskelenebilir != maskelenemez kesme (TRAP yazılımla kapatılamaz)
  • Vektörlü != vektörsüz kesme (hizmet adresi donanımca sabit mi dışarıdan mı verilir)
  • Kenar tetikli != seviye tetikli (kenar tetiklide istek mandalda saklanır)
  • EI != SIM (biri genel kesme iznini, diğeri tekil maskeleri yönetir)
  • Kesme gecikmesi ortalaması != en kötü durum gecikmesi (gerçek zamanlılıkta ikincisi bağlayıcıdır)
  • Tam kod çözme != kısmi kod çözme (kısmi kod çözme adres görüntüleri üretir)
  • Bellek eşlemli G/Ç != ayrı G/Ç uzayı (biri bellek adres alanı harcar, diğeri IN/OUT ile sınırlıdır)
  • Bellek uzunluğu != bellek genişliği (göz sayısı ile göz başına bit sayısı)
  • Senkron != asenkron iletim (ortak saat mi karakter başına çerçeveleme mi)
  • Baud hızı != veri hızı (çerçeveleme bitleri veri taşımaz)
  • Eşlik denetimi != hata düzeltme (eşlik yalnız yakalar, düzeltmez)
  • Seri iletim != paralel iletim (hat sayısı ile mesafe ve hız arasındaki ödünleşim)
  • 8255 mod 0 != mod 1 (el sıkışma sinyallerinin varlığı)
  • BSR modu != G/Ç modu (biri tek bit kurar-siler, diğeri port yapılandırır)
  • Yazılım gecikme döngüsü != donanım zamanlayıcı (biri işlemciyi bloke eder ve kesmelerden etkilenir)
  • Kesme tabanlı aktarım != DMA (birinde veri işlemci üzerinden geçer)
  • Döngü çalma != blok modu DMA (işlemcinin durma süresi ve kesme gecikmesi farkı)
  • Bölüt adresi != fiziksel adres (fiziksel adres bölüt×16 + öteleme ile bulunur)
  • Komut kuyruğu != önbellek (biri sıradaki komutları önceden getirir, diğeri veri ve komutu yerelliğe göre saklar)
  • Boru hattı != paralel işlemci (biri tek akışın aşamalarını örtüştürür)
  • CISC != RISC (komut karmaşıklığı ile kod çözme basitliği arasındaki ödünleşim)
  • Ortalama başarım != en kötü durum yürütme süresi (gerçek zamanlı tasarımın ölçütü ikincisidir)

Kaynakça

  • Gaonkar, R. S. (2002). Microprocessor architecture, programming, and applications with the 8085 (5th ed.). Prentice Hall. (Konu sıralaması ve kapsamın temel dayanağı.)
  • Intel Corporation. (1979). MCS-85 user's manual. (8085A komut kümesi, zamanlama ve kesme yapısı.)
  • Intel Corporation. (1979). iAPX 86/88 user's manual. (8086/8088 mimarisi ve bölütleme.)
  • Hall, D. V. (2005). Microprocessors and interfacing: Programming and hardware (2nd ed.). McGraw-Hill.
  • Brey, B. B. (2008). The Intel microprocessors (8th ed.). Pearson.
  • Patterson, D. A., & Hennessy, J. L. (2020). Computer organization and design RISC-V edition: The hardware/software interface (2nd ed.). Morgan Kaufmann.
  • Hennessy, J. L., & Patterson, D. A. (2019). Computer architecture: A quantitative approach (6th ed.). Morgan Kaufmann.
  • Yiu, J. (2013). The definitive guide to ARM Cortex-M3 and Cortex-M4 processors (3rd ed.). Newnes.
  • Waterman, A., & Asanović, K. (Eds.). The RISC-V instruction set manual. RISC-V International. https://riscv.org/technical/specifications/
  • Bosch. (1991). CAN specification version 2.0.
Bu sayfanın QR kodu