Elektrotekno.com Ana Sayfa || Dijital devreler, projeler


CPU Tasarlıyoruz - Bölüm 4

Kayıt: 10 Mar 2009
Mesajlar: 343
Konum: Güneşin En Güzel Battığı Şehir
Offline
FxDev
Tarih: 23 05 2009 15:53

3. bölümü de işledikten sonra artık kafamızda işlemci nedir, çalışma mantığı nasıldır oturmuş olması gerekiyor...

Bu bölümde;
Gelecek Bölümde:
-VHDL ile işlemci tasarımına giriş
-İşlemci ALU'sunun tasarımı ve açıklaması
-İşlemciye komut yazımı
konularını işleyip tasarımımızı son haline getireceğiz...

Bölüm 4 - VHDL ile Tasarımın Gerçekleştirilmesi
Tasarımın bu aşamasında VHDL diline az çok hakim olmak gerekiyor. Bu konuda sizlere MIT'nin 'Circuit Design with VHDL' kitabını baştan sona örnekleriyle birlikte iyice irdelemenizi tavsiye ederim.

CPU Tasarlıyoruz - Bölüm 4

Burada single cycle'ın mimari yapısı görülmektedir. Her yapının kendine has özellikleri bulunmak ile birlikte VHDL ile tasarımda bir kaç kod yazılarak elde edilebilmektedir.
Biz burada CPU'nun en önemli parçalarından biri olan Function Unit yani hepimizin bildiği tabirle gelişmiş bir ALU'yu VHDL ile tasarlayalım. Aşağıdaki kodlara göz atacak olursak;


Kod
--www.FxDev.org


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity ALU is
    Port ( A,B     : in   STD_LOGIC_VECTOR (7 downto 0);
           F_SEL     : in   STD_LOGIC_VECTOR (3 downto 0);
           V,C,N,Z : out  STD_LOGIC;
           F        : out  STD_LOGIC_VECTOR (7 downto 0));
end ALU;

architecture Behavioral of ALU is
   signal temp_a,temp_b: std_logic_vector(8 downto 0);
   signal sonuc        : std_logic_vector(8 downto 0);
   signal topla        : std_logic_vector(7 downto 0);

begin
   temp_a <= '0' & A;
   temp_b <= '0' & B;

   with F_SEL select
               --Aritmetik Kısım--
      sonuc <= temp_a                     when "0000",
               temp_a + 1                 when "0001",
               temp_a + temp_b            when "0010",
               temp_a + temp_b +1         when "0011",
               temp_a + (not temp_b)      when "0100",
               temp_a + (not temp_b) + 1  when "0101",
               temp_a - 1                 when "0110",
               --Logic Kısım
               temp_a                     when "0111",
               temp_a and  temp_b         when "1000",
               temp_a or   temp_b         when "1001",
               temp_a xor  temp_b         when "1010",
               not temp_a                 when "1011",
               temp_b                     when "1100",
               
               --Kaydırmalar--
               '0' & temp_b(8 downto 1)          when "1101", --B'yi bir sağa kaydır...
               temp_b(7 downto 0) & '0'          when "1110", --B'yi bir sola kaydır...
      
               (others => 'Z') when others;
               
      topla <= ('0' & A(6 downto 0))+ ('0' & B(6 downto 0));
      
      F <= sonuc(7 downto 0);                                          --Sonuç
      V <= sonuc(8) xor topla(7);                                    --Taşma Var
      C <= sonuc(8);                                                   --Toplamın Eldesi
      N <= '1' when sonuc(7)='1' else '0';                           --Sonuç Negatif
      Z <= '1' when sonuc(7 downto 0)="0000000000000000" else '0';   --Sonuç Sıfır


end Behavioral;


Kodlara bakıldığında aslında işin o kadar da zor olmadığı gözükür. Aslında yukarıdaki tüm işlemler biz seçmesek dahi yapılır, bizim istediğimiz ise o yapılan işlemlerden bize özel olanı seçmektir. Buradaki V bayrağı taşmayı, N bağrağı negatifliği, Z sıfır olmayı ve C ise toplam sonucunda elde olup olmadığının bilgilerini bizlere vermektedir. Girdiler A ve B kanallarından 8bit şeklinde alınıp sonuç yine F kanalından 8bit büyüklüğünde çıkmaktadır. Fonksiyon ünitesi işlemci saatinden bağımsız olup, kombinasyonel bir devredir...

Kodları hangi sırayla nasıl yürüteceğimiz ise Instruction Memory'e yükleyeceğimiz değerlerle alakalıdır. Komut hafızamızın kodları aşağıda görüldüğü üzere gayet sadedir.

Kod
--www.FxDev.org--

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity Inst_Memory is
    Port ( Adress : in  STD_LOGIC_VECTOR (7 downto 0);
           Inst    : out  STD_LOGIC_VECTOR (15 downto 0));
end Inst_Memory;

architecture Behavioral of Inst_Memory is

begin
   with Adress select
         ---|Opcod||D||A||B|---
   Inst <= "0000010011011111" when "00000000",
           "0000001001001000" when "00000001",
           "0000001001001000" when "00000010",
           "0001110011001001" when "00000011",
           "0000010011010111" when others;   

end Behavioral;


Komutlar yukarıda belirtildiği sırada yerleştirilmeli, yani önce opcode, sonra D adresi, sonra A ve B. Opcode yapacağımız işlemin özel kodududur ve 3. bölümde açıklamalı bir şekilde bunların neler olduğu açıklanmıştır.

Gelecek Bölümde:
-Tasarımın Oluşturulması ve Denenmesi
-Simülasyon Çıktıları

Önemli Not: Çalışmamız VHDL dili üzerinden Xilinx ISE kullanılarak yapılacağından buradaki kaynağı okumanızı şiddetle önerir, sitede bulunan VHDL kaynaklarına bakmanızı öneririm.


Reklamlar
Kayıt: 10 Mar 2009
Mesajlar: 343
Konum: Güneşin En Güzel Battığı Şehir
Offline
FxDev
Tarih: 25 05 2009 02:15

Bölüm 5 yayınlanmıştır...
Başa dön
Kayıt: 24 Eyl 2008
Mesajlar: 788
Konum: gurbeti diyar
Offline
scorpioan
Tarih: 25 05 2009 23:28

çok teşekkürler oldukça faydaı bir çalışma sayenizde az da olsa cpu hakkında birkaç bir şey öğrendik
Başa dön
Kayıt: 10 Mar 2009
Mesajlar: 343
Konum: Güneşin En Güzel Battığı Şehir
Offline
FxDev
Tarih: 26 05 2009 02:10

Bilgi paylaştıkça çoğalır hocam...
Ufak bir merak kırıntısı dahi giderebilmişsem ne mutlu bana...
Başa dön
Kayıt: 29 May 2009
Mesajlar: 3

Offline
temha3
Tarih: 29 05 2009 13:36

cpu tasarımı


merhaba arkadaşım çok güzel bir çalışma fakat biraz eksikleri var.benimde cpu projemdeki eksikler gibi Very Happy
bize verilen proje biraz daha karışık bu konuda yardım edebilirseniz sevinirim özelden mesaj atarsanız güzel olur.maalesef projemi şimdilik buraya koyamıyorum çünkü buraya koyarsam projemden sıfır alma olasılığım çok yüksek.proje tesliminden sonra mutlaka koyacağım.yardımlarınız için şimdiden teşekkürler
Başa dön
Kayıt: 10 Mar 2009
Mesajlar: 343
Konum: Güneşin En Güzel Battığı Şehir
Offline
FxDev
Tarih: 29 05 2009 14:18

Re: cpu tasarımı


temha3 yazmış
merhaba arkadaşım çok güzel bir çalışma fakat biraz eksikleri var.benimde cpu projemdeki eksikler gibi Very Happy
bize verilen proje biraz daha karışık bu konuda yardım edebilirseniz sevinirim özelden mesaj atarsanız güzel olur.maalesef projemi şimdilik buraya koyamıyorum çünkü buraya koyarsam projemden sıfır alma olasılığım çok yüksek.proje tesliminden sonra mutlaka koyacağım.yardımlarınız için şimdiden teşekkürler


Kodlar eksik değil eke koydum hepsini eğer kastınız o ise. Ayrıca bu en başta bahsettiğim gibi en basit CPU tasarımı, komplike şeyler beklemek yanlış olur. Özelden ulaşırsanız elimden geldiğince yardım ederim...
Kolay gele...
Başa dön



CPU Tasarlıyoruz - Bölüm 4


Benzer Konular
- Bölüm Kuralları!
- Bölüm Kuralları ve yeni konu formatı!
- Bölüm Kuralları!

- Bölüm Kuralları!

- Bölüm Kuralları!
- Bölüm Kuralları!
- Bölüm Kuralları!
- Bölüm Kuralları!
- Bölüm Kuralları!

- Aydınlatma projeleri için ayrı bölüm açılmıştır

- Topraklama ve Paratoner projeleri için ayrı bölüm açılmıştır

Sitemize üyelik ve içeriğin indirilmesi tamamen ücretsizdir. Sitemizde paylaşılan tüm dokümanlar (Tezler, makaleler, ders notları, sınav soru cevaplar, projeler) paylaşımcıların bireysel çalışmaları olup telif hakları kendilerine aittir ya da açık bir şekilde kamusal alana yerleştirilmiş dokümanların birer kopyalarıdır. Kişilerin bireysel çalışmalarını sitemizde yüklemesinde, sitemizde paylaşıma teşvik eden puanlama sisteminin de etkisi büyüktür. Bunlara rağmen hala size ait olan ve burada bulunmasına izin vermediğiniz dokümanlar varsa iletişim bölümünden yöneticilere bildirmeniz durumunda derhal silineceklerdir.
Powered by phpBB | Translated by phpBB Turkiye | Ads by Google Adsense | Design by Crazy Bat based