BİL 361 – BİLGİSAYAR MİMARİSİ VE ORGANİZASYONU 2015

advertisement
BİL 361 – BİLGİSAYAR MİMARİSİ VE ORGANİZASYONU
2015-2016 Güz Dönemi
ÖDEV 4
Son Teslim Tarihi/Saati : 17.12.2015/23:59
Teslim Şekli: e-posta
Teslim Yeri : [email protected]
Uyarı: Bu ödevdeki soruları öğrenciler kişisel çabalarıyla cevaplamalıdır. Grup halinde
ödev hazırlanması, çözümlerin tamamen veya kısmi olarak dersi alan veya almayan
başka herhangi biri tarafından yapılması durumunda, bu öğrenciler ödevde kopya
çekmiş sayılacak ve gerekli işlemler yapılacaktır.
Önbellek [130 puan]
Gömülü sistemlerde kullanılmak üzere tasarlanmış olan basit bir işlemcinin 5-bitlik adres uzayı vardır. Bu
işlemcide byte adreslemesi kullanılmaktadır. İşlemcide mükemmel LRU (Least-Recently Used) veri öbeği
değiştirme politikası kullanılan bir önbellek vardır.
Bir programın bu işlemcide çalışması durumunda yapılan bellek erişimleri ve bu erişimlerinin önbellekte
bulunma/bulunamama (hit/miss) durumları aşağıdaki tabloda verilmiştir.
Başlangıç durumunda önbelleğin geçerli verisi olmadığını varsayarak aşağıdaki soruları yanıtlayın.
Yanıtlarınız mutlaka 2'nin kuvveti sayılar olmayabilir.
Adres
Önbellek Çıktısı
7
Miss
4
Miss
8
Miss
6
Hit
28
Miss
5
Hit
18
Miss
28
Hit
4
Hit
17
Miss
29
Miss
a) [20 puan] Veri öbeği büyüklüğü nedir?
1
b) [20 puan] Önbellek kaç yollu kümeli ilişkili yapıdadır?
c) [20 puan] Önbellekte kullanılan etiketler kaç bittir?
d) [20 puan] Önbelleğin veri saklama kapasitesi nedir?
e) [50 puan] Bu önbelleği Verilog kullanarak gerçekleyin. Önbellek modülünün giriş/çıkış arayüzü
aşağıdaki gibi olmalıdır. X ve Y olarak verilen giriş/çıkış sinyallerinin uygun bit genişliklerini önceki
şıklarda bulduğunuz veri öbeği büyüklüğü, önbellek kapasitesi, vs. değerlerine göre belirleyin. Önbellekte
istenilen adreste verinin bulunması 1 çevrimde tamamlanmaktadır. Diğer işlemlerin kaç çevrim süreceği
aşağıda anlatılmıştır. Önbelleği Write-back (işlemciden gelen isteği sadece önbelleğe yaz, veri öbeği
atılırken ana belleğe yaz) olarak tasarlayın.
“rst” saatin (“clk”) yükselen kenarında senkron olarak çalışan reset girişidir. “rst” mantık-1 değerini
aldığında, saaatin yükselen kenarında önbellek temizlenmeli, yani tüm saklanan verilen geçersiz duruma
getirilmelidir.
İşlemci Arayüzü
• “ready” çıkışı önbelleğin bir sonraki bellek isteğini almaya hazır olduğunu göstermelidir. Bir bellek
isteğinin bellekte bulunamaması durumunda (miss) ana belleğe (Main Memory) gidilir. Ana
belleğe gönderilen okuma isteklerinin kaç çevrimde sonuçlanacağı bilinmemektedir. Ana bellekten
okuma işleminin tamamlandığı “mem_data_in_valid” sinyali mantık-1 olduğunda anlaşılmaktadır.
Ana belleğe yazma istekleri ise bir çevrimde tamamlanmaktadır. Eğer önbellek, ana bellekten
okuma isteği yaparsa, “ready” sinyali ana bellekten istenen veri gelene kadar mantık-0 olur ve
yeni bellek isteği kabul edilmemiş olur.
• “en” girişi işlemciden bir bellek isteği geldiğini belirtir.
• “wr_en” girişi işlemciden gelen bellek isteğinin yazma isteği olduğunu gösterir.
• “address” girişi işlemciden gelen, hangi fiziksel bellek alanına erişilmek istendiğini gösteren
sinyaldir.
• “data_in” girişi işlemciden gelen ve önbelleğe yazılacak veriyi gösterir.
•
•
“data_out” istenilen adresteki verinin önbellekte bulunması durumunda işlemciye gönderilen
veridir.
“data_out_valid” işlemciye giden, “data_out” çıkışının geçerli olduğunu ve bellek isteğinin
tamamlandığı gösteren çıkıştır. Bu çıkış sadece okuma (read) istekleri için mantık-1 olabilir.
Yazma işlemlerinin tamamlandığını göstermek için ise sadece “ready” sinyali kullanılır.
Ana Bellek Arayüzü
• “mem_en” mantık-1 olduğunda ana belleğe istek yapıldığını gösterir.
• “mem_wr_en” mantık-1 olduğunda ana bellek isteğinin yazma işlemi olduğunu gösterir.
• “mem_addr” ana bellek isteği ile hangi adrese erişilmek istendiğini gösterir.
• “mem_data_write” ana belleğe yapılan yazma isteklerinde yazılacak olan veri bu sinyal ile
gönderilir.
• “mem_data_read” ana bellekten okunan veriyi ifade eder.
• “mem_data_in_valid” ana bellekten okunan verinin “mem_data_read” girişinde geçerli olduğunu
gösterir.
Not: Tasarımınızda verilerin geçerli olup olmadığını gösteren “valid” bitlerini kullanmayı unutmayın.
2
module BIL361Cache (
input clk,
input rst,
//CPU Interface
output ready,
input en,
input wr_en,
input[4:0] address,
input[7:0] data_in,
output[7:0] data_out,
output data_out_valid,
//Main memory Interface
output mem_en,
output mem_wr_en,
output[X:0] mem_addr,
output[Y:0] mem_data_write,
input[Y:0] mem_data_read,
input mem_data_in_valid
);
3
Download