Kavramlar ve Parametreler
Tekrar su benzetmesinden elektronların dünyasına dönecek olursak, bazı kavramları anlamızın kolaylaştığını göreceğiz.
PRECHARGE: Bu kelimeyi çoğumuz duymuşuzdur. Özellikle BIOS'ta RAM'lerle ilgili parametrelerle oynayıp bellek modüllerinden son performans damlasını sıkarak çıkartmaya çalışanlarımız RAS-to-Precharge Delay gibi terimlerle karşılaşmıştır. PRECHARGE'ın karşılığı, sütunlara ait ana boruların okuma ve yazma öncesinde doldurulmasıdır. Gerçekte benzetmemizdeki borular yerine metal hatları su yerine elektronlarla yani elektriksel yükle doldurduğumuz için 'PRE-CHARGE' yani 'ÖN YÜKLEME' terimi kullanılmıştır.
CAS: Diğer bir parametre olan ve CAS diye tabir edilen Column Access Strobe yani Sütun Erişim Darbesi de aynı mekanizmayla kolayca açıklanabilir. Okuma sırasında hücremiz sütuna ait borudan su emerek borudaki su seviyesini azaltmaya çalışırken, seviyedeki bu azalma, hücremizin boyutları önceden belirttiğimiz az yer kaplaması amacıyla küçük tasarlanması sonucu hücremizi ana boruya bağlayan vananın bulunduğu hat dar olduğu ve hücremizin emiş gücü de boyutlarıyla orantılı olarak düşük olduğundan, yavaş gerçekleşmektedir. Dolayısıyla ana borudaki su seviyesi algılayıcının bu azalmayı alglılayabileceği seviyeye ulaşması ve algılma işleminin başlatılabilmesi için belli bir süre beklenilmesi gerekiyor. Aynı zamanda adreste belirtilen sütun numarasının da çözümlenmesi bankadaki sütun sayısına bağlı olarak zaman alıyor. İşte bu süreye CAS gecikmesi (CAS Latency - kısaca CL) deniyor. Bu gecikme genellikle belleği kontrol eden ana saat sinyalinin periyodu cinsinden verilir. Örneğin, CL=2 demek okuma başladıktan yani haznenin vanası açıldıktan itibaren algılama komutu verilinceye kadar 2 saat periyodu süresince beklemek gerekiyor. Dolayısıyla CL değeri büyük olan bellekler, daha uzun beklemeleri gerektiğinden daha yavaş çalışırlar.
RAS: Adreste belirtilen satır numarasının çözümlenmesi ve belleğimizde o satırda yer alan bütün hücrelere ait vanaların açılabilmesi için beklenmesi gereken süreye RAS (Row Access Strobe) yani Satır Erişim Darbesi deniyor. RAS da CAS gibi saat periyodu cinsinden belirtiliyor. Dolayısıyla RAS'ı küçük lan bellekler daha hızlı oluyorlar.
RAS-TO-CAS DELAY: Erişim sırasında, bildiğimiz gibi, önce bankadaki ilgili satır okunmaya başlıyor, bit hattını temsil eden borudaki su yani yük seviyesi ilgili hazneler tarafından algılanabilir seviyeye çekilene kadar bekleniyor, ardından ilgili sütun belirleniyor ve o sütuna ait algılayıcılara algıla' komutu veriliyor. İşte satırdaki haznelerin açılmasından bit hatlarındaki yük miktarının (gerilim olarak ta düşünebiliriz) algılanabilir seviyeye ulaşmasına kadar beklenilmesi gereken süreye RAS-TO-CAS DELAY (Satır Erişim Darbesi-Sütun Erişim Darbesine Arası Gecikme) deniyor. Anlaşılacağı üzere bu parametre ne kadar düşük olursa bellek o kadar hızlı demektir. Diğer parametreler gibi bu da saat işaretinin periyodu cinsinden ifade edilir.
RAS-TO-PRECHARGE DELAY: Bildiğimiz gibi her okuma ve yazma işlemi 'öncesinde', diğer bir bakışla, (her yazma ve okuma öncesi başka okuma ve yazma işlemleri gerçekleştiği düşünüldüğünde) 'sonrasında' sütunlara ait ana hatlar suyla dolduruyor yani PRECHARGE ediliyor. Eğer bu işlem, herhangi bir okuma ve yazma işlemi sırasında açılan ve hazneleri sütuna ait boruya bağlayan vanalar kapanmadan yapılırsa aynen 1 yazma işleminde olduğu gibi yüksek basınçla boş olan hazneyi boşaltabilir ve verinin bozulmasına neden olabilir. Bunu engellemek ve vanalar açıkken PRECHARGE işlemine başlamayı engellemek için belli bir süre beklenmesi gerekiyor. Bu da elbette takip eden okuma ve yazma işlemlerine başlamayı geciktirerek (unutmayalım ki boruların erişim öncesi tamamen dolu olması gerekiyor) performansı azaltıyor. Bu gecikme de saat periyodu cinsinden ifade ediliyor ve küçük bir sayı olması hızlı bellek olduğuna işaret ediyor.
SAAT FREKANSI: Önceden tanımladığımız CAS, RAS gibi gecikme süreleri işte bu ana saat sinyalinin periyodu cinsinden belirtiliyor.
PERİYOD=1/FREKANS
eşitliğine göre, saatin frekansı ne kadar yüksekse periyodu o kadar kısa oluyor, dolayısıyla CAS gibi saat periyodu cinsinden ifade edilen bekleme süreleri kısaltılmış oluyor. Bu süre belleğin kaldırabileceğinden fazla kısaltılırsa, önceden belirtildiği gibi, veri kayıpları oluyor, bellek hatalı çalışıyor ve sonuçta PC'ler ya boot etmiyor ya da etse dahi çalışma sırasında beklenmedik kilitlenmelere yol açıyor. Kısaca, RAS ve CAS gibi, birimi zaman olan parametreler saat frekansıyla doğrudan etkileniyor. Mesela, 133 MHz saat frekansında CAS=2'de çalışabilen bir bellek 166 MHZ'de ancak CAS=2.5 ya da 3'te çalışabiliyor. İdeal olanı, belleğin yüksek saat frekanslarında ve düşük CAS, RAS gibi parametrelerle çalışabiliyor olması.
Saat işareti basitçe bir kare dalga biçiminde; periyodun yarı süresi aralıklarla periyodik olarak bir yükseliyor, bir düşüyor. Saat işaretinin değiştiği bu bölgelere düşen ve yükselen kenarlar deniyor. Saat frekansının belirlediği aralıklarla gelen bu kenarlar, yonga üzerindeki bellek bankalarının ve diğer devrelerin eş zamanlı olarak (senkronize bir şekilde) çalışmasını sağlar. Örneğin sütunlarda yer alan algı yükselticilerine 'algıla' komutu ya da okunmak istenen veriyi bankalardan alarak yonganın dışına süren sürücülere 'sür' komutu bu kenarlar aracılığıyla verilir. SDR belleklerde komutlar yükselen kenarlarda verilirken DDR belleklerde bu hem yükselen hem de düşen kenarlarda gerçekleşir. Bu sayede, DDR belleklerdeki veri çıkışı SDR'ların teorik olarak iki katıdır çünkü bir saat periyodu içinde iki kere (hem yükselen hem düşen kenarda) veri çıkışı olur.
ADDITIVE LATENCY: 'Ekli Gecikme' denilen ve sadece DDR-II tipi bellekler için geçerli olan bu gecikme süresi CAS'in üzerine ekleniyor ve CAS'i arttırma yani belleği yavaşlatma etkisi yapıyor. Elbette ki istenilen bu değerin düşük olması. DDR-II bellekleri henüz PC'lerde sistem RAM'i olarak görmeye başlamadıysak ta bir süredir ekran kartlarında kullanılmaktalar. Ama sizleri şimdiden bu tip parametreleri BIOS'larda görmeye hazırlayalım diye düşündük.
BURST ve BURST LENGTH: Burst kelimesinim tam Türkçe karşılığını bulmak zor ancak illa da yakın sayılabilecek bir terim bulalım dersek sanıyorum Ardışıl Veri Aktarımı diye nitelendirmek yerinde olur. Erişim sırasında biliyoruz ki bankadaki bütün satır aynı anda okunuyor ya da yazılıyor. İşte bu noktada BURST kavramı devreye giriyor: Aynı satırdaki komşu byte'lar, veri yolunun elverdiği ölçüde, saat işaretinin birbirini takip eden ilgili kenarlarında ardı sıra dışarıya sürülüyor ya da içeri alınıyor. Okunmak ya da yazılmak istenilen veri bellekte aynı satırda yer alıyorsa, bu şekilde CAS ve RAS gecikmelerini beklemeksizin ardışıl konumdaki veri grubu, bellek yongası ve anakart arasında hızlıca taşınabiliyor. Burst olayının ardışıl olarak kaç saat periyodu süreceği ya da diğer bir deyişle ne kadar verinin burst yoluyla taşınacağını belirten parametre ise BURST LENGTH (Burst Uzunluğu). Verinin ardışıl konumda olduğu durumlarda burst uzunluğunun büyük tutulması performansı arttırır ancak tersine bir durumda yani verini bellek tablosu içinde farklı satırlara dağıldığı (bir bakıma sabit sürücülerdeki fragmente olma durumu gibi) burst az da olsa performansı olumsuz etkileyen bir etken olarak karşımıza çıkabilir. Sanıyoruz ki en akıllıcası, BURST uzunluğunu orta bir seviyede tutmak olacaktır.
BESLEME GERİLİMİ: İşlemci ve bellek, daha genel haliyle her yonga, çalışabilmesi için bir besleme gerilimine ihtiyaç duyar. Besleme gerilimi, suyu, vanaları ve boruları kullandığımız benzetmemizde suyun kaynaklarındaki (emme ya da basma) akış hızına ya da bir bakıma basıncına denk gelir. Su ne kadar basınçlıysa bit hatlarında gerçekleşen precharge ve hazneye olan su akışı o derece hızlı gerçekleşir dolayısıyla bellek belli bir görevi daha hızlı yerine getirir, beklemesi gereken süreler kısalır ve böylece ya aynı saat frekansında daha küçük RAS,CAS v.s. değerleriyle ya da aynı RAS, CAS değerleriyle daha yüksek saat frekanslarında çalışmaya devam edebilir. Overclock'la uğraşanlarımız bilir ki işlemcileri yüksek frekanslarda çalıştırmanın en etkili yolu besleme gerilimini arttırmaktır. Bu konuya overclocking hakkında bilinmeyenleri açıklamaya çalıştığımız makalemizde detaylı olarak deyinmiştik. Bellek yongaları da işlemciler gibi birer tümdevre olduklarından aynı prensiplere tabidirler ve dolayısıyla besleme geriliminin arttırılması bellek yongalarının aynı işi daha kısa sürede tamamlamalarına yardımcı olacağından daha yüksek saat frekanslarında çalışmalarına imkan tanıyacaktır.
Çeşitli bellek türleri için normalde gereken besleme gerilimi şu degerleri almaktadır:
RAM Türü Besleme Gerilimi
SDRAM 3.3 Volt
DDR-I RAM 2.5 Volt
RD-RAM 2.5 veya 1.8 Volt
DDR-II RAM 1.8 Volt
Voltaj seviyelerinin yeni nesillerde giderek düşmesine rağmen performansın artması çelişkisinin yanıtı, üretim teknolojileri geliştikçe küçülen transistörlerin aynı hızda çalışabilmeleri için daha az gerilimle beslenmeye ihtiyaç duymalarında ve bellek mimarilerindeki ilerlemelerde yatmaktadır.
Kontrol ve Veri İşaretleri
Sıra, bellek modülümüze ait giriş ve çıkış işaretlerini incelemeye geldi. Modül (örneğin DIMM) anakarta üzerindeki belli sayıda iğneden oluşan bir port aracılığıyla bağlanıyor. DIMM'lerde 168 iğne varken bu sayı SIMM'ler için 144. Bu iğnelerin her birinin taşıdığı elektriksel işaretler, modül üzerindeki sinyal hatları üzerinden bellek yongalarının iğnelerine taşınıyor. Bu işaretler, besleme ve toprak gerilimlerinin yanısıra adres ve veri işaretlerini, saat işaretini, bellek yongalarını kontrol eden komutları taşıyan işaretleri ve de modül üzerindeki SPD yongasından gelen verileri içeriyor. Şimdi bu işaretlere ve ne
anlam taşıdıklarına bakalım.
ADRES İŞARETLERİ: Adres işaretleri, anlaşılacağı üzere, adres bilgilerini bellek yongaların taşımaktan sorumlu. Bilgisayar dünyasında, işaret, daha büyük bir bütünün parçasıysa ( mesela bir byte'ın) genellikle bit kelimesiyle anılır. Bu sebeple, bu bölümde olduğu üzere, yeri geldiğinde işaret yerine bit kelimesini kullanacağız. Tekrar hatırlayalım: Bir işaret ya da bir bit, mantıktaki 0 ya da 1 mantık değerlerinden birini taşır. Adresimizi bir bütün olarak ele alırsak, adresi oluşturan her işarete adres biti dememiz daha doğru olacaktır. Adresi oluşturan bit sayısı belleğin kapasitesine göre değişik değerler alır. Her bir bit, 0 ya da 1 olmak üzere iki değeri temsil edebiliyorsa, birlikte kullanıldıklarında:
Bit Sayısı Temsil Edilen Değer Sayısı Temsil edilen değerler
1-bit 2^1 = 2 0,1
2-bit 2×2 = 2^2 = 4 0,1,2,3
3-bit 2×2x2 = 2^3 = 8 0,1,2,3,4,5,6,7
4-bit 2×2x2×2=2^4 = 16 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
… … …
N-bit 2×2x2x…x2 (N tane)=2^N 0,1,2,3,4,…,(2^N-1)
farklı değeri temsil edebilir. Buna göre, adresimizin, belleğimizdeki 2 byte'ın yanyana gelemesiyle yani 16-bit'ten oluşan çift-byte'ları işaret ya da temsil ettiğini varsayarsak ve toplam kaç çift-byte'ımız olduğunu bilirsek, kaç tane adres bitine ihtiyaç duyduğumuzu kolayca bulabiliriz. Örneğin, belleğimiz 256 Mega Byte (MB) ise, yani 256/2=128 Mega Çift-Byte ise ve 1 Mega'nın 2^20 (2 üzeri 20) demek olduğunu biliyorsak, belleğimizde 128*(2^20)=2^27 adet çift-byte var bulunduğunu söyleyebiliriz. Yukarıdaki tablomuza göre N sayısının yerine 27 geliyor, dolayısıyla adresimiz 27 bitten meydana geliyor. Bu 27 bitin bir kısmı bankaları, bir kısmı bankalardaki satırları, bir kısmı da bankalardaki sütunları adreslemek için kullanılıyor. Pratik bir bilgi olarak bellek yongalarının genellikle 4 banka olarak tasarlandığı düşünülürse ve 4=2^2 olduğuna göre bankaları adreslemek için 2 bit gerektiği hesaplanabilir. Geriye kalan 25 bit satır ve sütun adreslemesi için kullanılıyor. Varsayalım ki her banka, 8192 (=2^13) satırdan ve 512 (2^9) sütundan oluşuyor. Bu demek oluyor ki 13 bit satır adreslemesi, 9 bit de sütun adreslemesi için ayrılmış durumda. Buraya kadar 2 + 13 + 9 = 24 bit kullanılmış durumda ve elimizde 3 bit kaldı. Bu üç bit ise bize modülümüz üzerinde 2^3=8 adet bellek yongası bulunduğu bilgisini veriyor.
VERİ İŞARETLERİ: Veri işaretleri, daha doğrusu veri bitleri, bellek yongalarının adres bitleriyle gösterilen hücrelerine yazılır ya da bu hücrelerden okunur. Yukarıdaki örneğimize kaldığımız yerden devam edecek olursak, her bir bellek yongası, 24 bitin kullanılmasıyla adreslenen 16-bitlik çift-byte bilgisini dışarı veriyor ya da dışarıdan alıyor ve de elimizdeki 8 yonga bir araya gelerek 8*16-bit=128-bit'lik veriyi modülün 144 bitlik portunun bir parçası olarak oluşturuyor.
KOMUT İŞARETLERİ: Bellek yongaları, çeşitli amaçlar için belirlenmiş belli komutları işleme yeteneğine sahipler. Sadece adresi alıp veriyi okutan ya da yazan yongalar değiller. Bu komutların belli başlı olanlarına burda kısaca değinmek konumuzun bütünlüğü açısından sanırız yararlı olacaktır.
NOP (No OPeration=Etkisiz Komut): Yonganın herhangi bir işlem yapmadan beklemesi gereken durumlarda verileblecek yeni komutların yonga tarafından işlem sırasına alınması engellenir. Komut sırasında işlem görmekte olan diğer komutlar etkilenmeden tamamlanır.
DESELECT (Seçmeyi Bırak): Bu komutla işlem halindeki bellek yongasının seçilmesi durdurulur, yonga askıya alınır ve başka yeni komut kabul etmeyeceği bir konuma getirilir. Komut sırasında işlem görmekte olan diğer komutlar etkilenmeden tamamlanır. İşlevsel olarak NOP komutuna benzer.
ACTIVE (Aktive Et): Adreste belirtlen bankayı seç ve ilgili satırı aktif hale geçir.
READ (Oku): Adreslenen banka ve sütun seçilir, ardışıl okuma (burst read) başlatılır.
WRITE (Yaz): Adreslenen banka ve sütun seçilir, ardışıl yazma (burst write) başlatılır.
PRECHARGE (Ön Yükleme): Bit hatlarının (boruların) okuma ve yazma öncesi tamamen yüklenmesini (suyla doldurulmasını) hatırlayalım. Bu işlem sonrasında bir ya da daha fazla bankadaki adreslenen ve işleme alınmak üzere olan satır iptal edilmiş oluyor.
AUTO PRECHARGE (Otomatik Ön Yükleme): Ayrıca bir Precharge komutu vermeye gerek kalmaksızın otomatik olarak ve belli aralıklarla bit hatlarının ön yüklemesinin yapılmasını sağlar.
BURST TERMINATE (Burst Bitir): Devam etmekte olan bir ardışıl (burst) okuma ya da yazma işlemi, belirtilmiş olan burst uzunluğunun tamalanması beklenmeden iptal edilir.
SELF-REFRESH ya da AUTO-REFRESH (Kendini Tazele): Modül güç tasarrufu modundaysa ve herhangi bir saat sinyali verilmese bile sakladığı verinin kaybolmadan korunnmasini sağlar. Autorefresh ise belli aralıklarla saklanılan verinin otomatik olarak tazelenmesini sağlar ama farklı olarak bir saat işaretine ihtiyaç duyar.
LOAD MODE REGISTER (Mod Yazmacını Yükle): Yongayla ilgili bilgilerin ve komutlarla ilişkili verilerin (burst uzunluğu ya da kendini otomatik tazeleme aralığı gibi) mod yazmacına yüklenmemesi için kullanılır
Band Genişliği
Bant genişliği, bilgisayar dünyasında çok sık sözü geçen bir kavram. Yonga setlerinde, ekran kartlarında, işlemcilerde, internet bağlantılarında, kısaca verinin taşındığı her ortamda bu kavram geçerlidir. Tanımlamak gerekirse, bant genişliğ, bir ortamda verinin ne kadar hızlı taşındığının ölçüsüdür. Kısaca, birim zamanda taşınan veri miktarıdır. Bu tanımı belleklere uygulayacak olursak, bellek modülümüzle anakart arasında belli bir süre içerisinde ne kadar veri alışverişi gerçekleşebiliyor sorusunun cevabı bant genişliğidir.
Önceden bahsettiğimiz gibi, DIMM'ler, anakarta 168 bitlik bir port üzerinden bağlı ve bunun 128 biti veri için ayrılmış durumda. SDR bellekleri ele alırsak, saat işaretinin her yükselen kenarında modül ve anakart arasında 128 bitlik veri transferi olduğu ve modülün saat frekansının birimi olan Hertz (Hz)'in aslında bir saniye içinde kaç saat periyodu sığdığını bize söylediği düşünülürse, saat frekansıyla 128-bit'i çarptığımızda, bir saniyede (birim zamanda) kaç bit (ne kadar veri) taşındığı kolayca hesaplanır ve bu da bize bit/saniye cinsinden bant genişliğini verecektir. Mesela, belleğimizin saat frekansı 166 MHz (Mega Hertz) olsun. Bu durumda SDR belleğimizin bant genişliği :
128bit * 166MHz = 21248000000 bit/saniye
= 2656000000 byte/saniye
=2.47 Giga Byte/saniye (GB/s)
olarak hesaplanabilir.
DDR belleklerimizde ise veri transferi saatin sadece yükselen değil aynı zamanda düşen kenarında da gerçekleştiği ve dolayısıyla aynı sürede iki kat daha fazla bilgi taşınabildiği için bant genişliği 2.47 * 2 = 4.94 GB/s olarak hesaplanabilir.
Geleceğe Bakış
Hiç şüphesiz ki bellek teknolojileri, işlemci teknolojilerinin bir adım önünde, aynı hızda gelişmeye devam edecek, bant genişliği yüksek, güç tüketimi ve üretim maaliyeti düşük yeni bellek türleri ve mimarileri ortaya çıkacak. Bank genişliği konusu özellikle 64-bit işlemcilere sonunda bizlerin de kavuşacağı günlerin yaklaştığı bugünler ve sonrasında daha da önem kazanacak, çünkü bu işlemcilerin 64-bitlik veriye aç işleme motorlarını tam kapasite besleyebilmek için FSB (Front Side Bus: İşlemciyi Yongasetine bağlayan veriyolu) genişletilecek ve frekansları arttırılacak.
Umuyoruz ki bu yazımızın sonunda, siz okuyucularımız kendinizi, bellekler hakkında siz biraz daha fazla bilgi sahibi hissediyorsunuzdur. Her makale de olduğu gibi burada da amacımız okuyucularımızın bilgi düzeylerinde bir fark yaratabilmek. Bu makaleyi okuyarak kazandıklarınız, konuyu daha yakından takip edebilmenize ve daha akılcı kararlar vermenize yardımcı olursa ne mutlu bize.
(ALINTIDIR)