VHDL ile 32 bitlik cpu tasarımda PC nin değeri

Başlatan yamak, 26 Şubat 2012, 12:57:45

yamak

32 bitlik cpu tasarımı ile uğraşıyorum. PC nin değerini 4 er 4 er artırılması gerekiyormuş bunun nedenini tam olarak anlayamadım. Neden 1er 1er değil de 4 er 4er. Şimdi benim instruction memory imde 32bitlik elemanlardan oluşan bir array var. Ben bu array in elemanlarına pc nin değerini 1er 1er artırarak ulaşabilirim.

fatihinanc

Selamlar,

32 bitlik bir mimaride PC içeriği her seferinde 4 byte artması gerekmiyor mu zaten ?
Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)

yamak

Tamam hocam 4 artması gerekiyor. Ama neden 4 artması gerekiyo. 1er 1er neden artmıyo.

fatihinanc

Çünkü sistem 32 bit mimaride. Yani adresleme o şekilde yapılıyor.
Her erişimde belletkten 4 byte alması gerektiği için bellekte 4 byte yani 4 sefer ileri gitmesi gerekiyor.
Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)

yamak

Şimdi şöyle bi array im var
type deneme_array is array (1 downto 0) of std_logic_vector(31 downto 0);
ve içindeki elemanlar şu şekilde:
constant eleman:deneme_array:=((x"63626160"),(x"68676564"));

Ben bu elemanlara 1 er 1 er ulaşamaz mıyım?

fatihinanc

2 lik 32 bitlik dizi...

Bu dizinin bir seferde tüm elemanlarına ulaşabilmek için CPU nun belleğe erişmini de 32 bit yapmak gerekiyor..
CPU bir erişimde arka arkaya 4 byte çekerken adresi gösteren PC de ona bağlı olarak 4 artacak. Ve bu 4 adım sadece bir seferlik erişim istendiğinde yapılacak.
Yani burada sizin yapmak istediğiniz kısım CPU - RAM erişiminin 4 byte olması aslında. PC de bu erişimlere bağlı olarak 4 er 4 er artacak...
Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)

yamak


yamak

Simdi arkadaslar benim kafami karistiran bir durum var ortada;Benim tum opcode larim 32 bitlik ve bundan dolayi da tasarimimda instruction memory e erisimi 32 bitlik yaptim. Bu durumda ben  pc yi 1 er 1 r artirsam bi sorun olur mu?

berat23

byte byte okunacağına göre 4er 4er arttırmanız gerekiyor.

yamak

Niye byte byte okunuyo anlamadım. instruction memory deki  dizimin herbir elemanı 32 bitlik ben bu elemanlara 4 byte 4 byte ulaşabilirim.

pic365

32-bitlik okuma devrenin alanını büyütür, bir de instruction memory'nin bir kısmı boş kalır ama kaynak kullanımını minimuma indirmek gibi bir amacın yoksa istediğin gibi tasarlayabilirsin, sana kalmış.

pic365

Alıntı yapılan: berat23 - 27 Şubat 2012, 21:02:28
byte byte okunacağına göre 4er 4er arttırmanız gerekiyor.
Benim anladığım kadarıyla 'yamak' instruction'ı byte byte okumuyor. Memory'nin bir adresinde 32-bit tutuyor, bunu tek seferde çekiyor. PC'yi 1 artırdığında bir sonraki 32-bite erişmiş olacak, o nedenle 4'er artırmasına gerek yok gibi.

yamak

Alıntı yapılan: kakalive - 28 Şubat 2012, 19:24:27
Benim anladığım kadarıyla 'yamak' instruction'ı byte byte okumuyor. Memory'nin bir adresinde 32-bit tutuyor, bunu tek seferde çekiyor. PC'yi 1 artırdığında bir sonraki 32-bite erişmiş olacak, o nedenle 4'er artırmasına gerek yok gibi.
Evet aynen böyle.Ama prosedürde byte byte erişiliyosa o şekilde tasarlayacam ben de.

yamak

Alıntı yapılan: gerbay - 28 Şubat 2012, 20:50:43
öyle bir yapı tasarlamak bence biraz problem olur çünkü memory yi sadece çalıştırılacak kod olarak düşünmemek gerekiyor. aynı memory üzerinde data da olacak; şimdi basit bir kod üzerinde düşünelim. standart "strlen" fonksiyonu;
Hocam fakat benim instruction memory im ile data memory im farklı modüller olacak.Bu durum da yine problem oluşturur mu ki?

yamak

Çok teşekkürler hocam.Ben yine dediğiniz gibi prosedürü uygulayıp byte byte erişilecek şekilde tasarlayayım.