İçindekiler:

On Bit Bilgisayar - VHDL: 4 Adım
On Bit Bilgisayar - VHDL: 4 Adım

Video: On Bit Bilgisayar - VHDL: 4 Adım

Video: On Bit Bilgisayar - VHDL: 4 Adım
Video: VHDL ile FPGA PROGRAMLAMA - Ders4: VHDL IEEE ve SYNOPSYS Package Tanımları ve İçerikleri 2024, Temmuz
Anonim
On Bit Bilgisayar - VHDL
On Bit Bilgisayar - VHDL

Yapan: Tyler Starr ve Ezzeedden Gazali

Tanıtım

Bu proje, Cal Poly SLO'daki CPE 133 final projesinin bir parçası olarak tamamlandı. Bilgisayarların en alt düzeyde nasıl çalıştığını ve görevlerini nasıl başardıklarını anlamak isteyen biri için harika bir proje. Proje, Albert Malvino'nun Digital Computer Electronics kitabında anlatılan 8 bitlik SAP bilgisayarından sonra modellenmiştir. Ancak, daha fazla op kodunun (işlem kodları) uygulanmasına izin vermek için bilgisayarı 10 bit'e çıkardık. Kullanıcı, belirli talimatları girerek bilgisayarı bir dizi işlemi gerçekleştirecek şekilde programlayabilir.

Sistem ve Devre Mimarisi:

Bilgisayar VHDL'de yazılmıştır ve Digilent'in Basys 3 kartında yer alacaktır. Girişler, kartın altındaki anahtarlara eşlenecektir. Sıfırlama ve Yazma işlevleri için iki dokunsal anahtar kullanılacaktır. Çıktı, kartın 7 segmentli ekranında görüntülenecektir.

Bilgisayar, farklı işlemleri gerçekleştiren daha küçük devrelere (modüllere) bölünecektir. Her modül aşağıdaki adımlarda ayrıntılı olarak açıklanacaktır.

Adım 1: Malzemeler

Malzemeler
Malzemeler

Bu proje için gereken tek şey Digilent'in Basys3 FPGA kartı ve kartı bilgisayarınıza bağlamak için bir mikro USB kablosu.

Adım 2: Devre Modüllerinin Blok Şeması

Devre Modüllerinin Blok Şeması
Devre Modüllerinin Blok Şeması
Devre Modüllerinin Blok Şeması
Devre Modüllerinin Blok Şeması
Devre Modüllerinin Blok Şeması
Devre Modüllerinin Blok Şeması

Yukarıdaki blok şemalar, 10 bitlik bilgisayarı oluşturan farklı devre modüllerini göstermektedir. Aşağıda, yukarıdaki şemalarda gösterilen ayrı parçaların/modüllerin her biri için açıklamalar bulunmaktadır.

Program sayıcı

Girişlerin Tanımı: giriş, program sayacına bir sayı yüklemek için 5 bitlik bir giriştir. Cp yüksek olduğunda, sayaç düşen saat kenarlarını sayar. Clr, sayacı 0'a sıfırlar. Ep yüksek olduğunda, sayaç mevcut sayımı verir. Sp yüksek olduğunda sayaç, girişteki sayıyı ayarlar

  • Çıktıların Açıklaması:

    çıktı, LED'ler 0-15'te kullanım için sayımın bir kopyasıdır. Count, mevcut sayımın çıktısını verir.

  • Sistemdeki Genel Yer: Bu sayaç, programın bulunduğu bellek konumunun kaydını tutar. Tüm programlar 00000 (0) bellek adresinde başlar ve durma kullanılmadığı sürece 11111'e (31) kadar gider. Atlama ifadelerinde program sayacı, programın atladığı adresten itibaren saymaya devam eder.

MUX girişi

  • Girişlerin Tanımı: Adres, 11'den 15'e kadar olan anahtarlardan girişi alır. MAR, girişi MAR olarak kullanılan 10 bitlik kayıttan alır. Program, hangi girişin çıkışa yönlendirileceğini kontrol eder.
  • Çıkışların Tanımı: çıkış, seçilen girişi RAM'e yönlendirir.
  • Sistemdeki Genel Yer: Bu MUX, adresin anahtarlardan mı yoksa veri yolundan mı RAM'e yönlendirileceğini belirler. Program modunda anahtarlardan gelen adres yönlendirilir ve çalışma modunda veri yolundan gelen adres yönlendirilir.

ramMUX

  • Girişlerin Tanımı: userInput, kullanıcının program modu sırasında girdiği giriştir. aRegInput, A kaydında bulunan verilerdir, bu bir taşıma işlemi sırasında kullanılır. kontrol, bu MUX için seçimdir.
  • Çıkışların Tanımı: çıkış, RAM'e 10 bitlik veri girişidir.
  • Sistemdeki Genel Yer: Bu MUX, RAM modülünde kullanılan 10 bitlik giriş verilerini çıkarır. Kontrol biti yüksek olduğunda, MUX, kullanıcının program modunda girdiği verileri çıkarır. Kontrol biti düşük olduğunda, MUX, verileri kontrol veri yolundan çıkarır.

ramModül

  • Girişlerin Tanımı: inputData, RAM'de depolanan verilerdir. inputAddress, verilerin depolandığı konumdur. program, bilgisayarın program modunda mı yoksa çalışma modunda mı olduğunu gösterir. readWrite, bir okuma veya yazma işleminin gerçekleşip gerçekleşmediğini gösterir. notCE, RAM modülünün kontrol bitidir. hareket, bir taşıma işleminin gerçekleştirildiğini gösterir.
  • Çıkışların Tanımı: outputDataToBus, RAM'den veri yoluna giden verilerdir. outputData ve output Address, talimat kaydına giden veri ve adrestir.
  • Sistemdeki Genel Yer: RAM, bir program çalıştırmadan önce bellekte program ve veri depolamasına izin verir. Program çalıştığında, RAM MAR'dan bir adres alır ve bu adresteki veriyi bus'a gönderir.

adresROM

  • Girişlerin Tanımı: opCode, bilgisayar tarafından gerçekleştirilen işlem kodunun adresini içeren giriştir.
  • Çıktıların Tanımı: opCodeStart, ilgili opCode'un ilk mikro komut konumunu gösteren bellek adresidir.
  • Sistemdeki Genel Yer: Bu modül, kilitli mikro talimatı alır ve bu mikro talimat dizisinin başlangıcına karşılık gelen bellek konumunu çıkarır.

halkaSayaç

  • Girişlerin Tanımı: sıfırlama, sayacı 100000'e geri ayarlar (ilk "T durumu"). Clk, düşen saat kenarında sayacı bir artırır. NOP, mevcut durumun/döngünün "işlem yok" döngüsü olduğunu gösterir.
  • Çıktıların Tanımı: count, sayacın çıktısıdır.
  • Sistemdeki Genel Yer: Halkalı sayaç, önceden ayarlanabilen sayacı kontrol eder ve her talimat döngüsünde (T1-T6) altı mikro adımı tanımlar.

ön sayıcı

  • Girişlerin Tanımı: opCodeStart, yürütülmekte olan opCode için mikro talimatların bellek konumudur. T1, yüksek olduğunda sayacı 0'a sıfırlar. T3 yüksek olduğunda, opCodeStart yüklenir ve kalan 3 döngü (T4-T6) için sayım bu konumdan devam eder. Clr, sayacı 0'a ayarlar. Clk, düşen kenarda sayacı bir artırır.
  • Çıktıların Tanımı: controlWordLocation, yürütülecek kontrol kelimesinin bellek konumunun çıktısını verir.
  • Sistemdeki Genel Yer: Her işlem kodunun 3 mikro talimatı vardır. Sayaç, ilk 3 döngü için (getirme döngüsü) 0'dan başlayarak 1 artar. Sayaç daha sonra adresi opCodeStart'a yüklemek için halkalı sayaç tarafından tetiklenir ve kalan 3 döngü için 1'er artar. Bu şekilde preCounter, gerçekleştirilecek mikro talimatların sırasını kontrol eder.

kontrol ROM'u

  • Girdilerin Açıklaması: controlWordLocation, controlROM'un çıkaracağı controlWord'ün adresidir. NOP, konumun "işlem yapılmayan" bir konum olduğunu belirtir.
  • Çıkışların Tanımı: controlWord, istenen bir işlemi gerçekleştirmek için farklı bilgisayar modüllerini etkinleştiren/devre dışı bırakan kontrol kelimesidir.
  • Sistemdeki Genel Yer: Bu modül, önSayaçtan bellek konumunun kodunu çözer ve istenen işlem için controlWord çıktısını verir.

ALU

  • Girişlerin Tanımı: A ve B, ALU'nun aritmetik ve mantık işlemlerini gerçekleştirdiği Kayıt A ve Kayıt B'den gelen girdilerdir. Çıkarma etkin olduğunda, B'nin A'dan çıkarıldığını gösterir.
  • Çıktıların Açıklaması: sonuç, A ve B'nin eklenmesinin veya B'nin A'dan çıkarılmasının sonucudur. Daha büyük, daha küçük ve eşittir. Çıktılar (AB veya A=B) olup olmadığını belirtir ve koşullu atlama modülünde kullanılır. hata, etkin olduğunda taşma veya yetersizlik olduğunu gösterir.
  • Sistemdeki Genel Yer: ALU, bilgisayar tarafından gerçekleştirilen aritmetik ve mantık işlemlerinin mantığını içerir. Bu modül iki adet 10 bitlik ikili sayı ekleyebilir ve çıkarabilir. ALU ayrıca A>B, A olup olmadığını da belirleyebilir.

koşulluJmp

  • Girişlerin Tanımı: inputCount, mevcut sayımı kilitlemek için kullanılır. inputAddress, atlanacak adresi kilitlemek için kullanılır. loadFromRegister, inputAddress'i düşük mandalladığında. loadCount, düşük inputCount'u kilitlediğinde. outputEnable düşük olduğunda çıkış,.gT'ye atlamak için adrese ayarlanır, iT ve eQ hangi koşulun kontrol edildiğini belirler. Daha büyük, daha az ve eşittir, ALU'dan A ve B arasındaki karşılaştırmanın sonucunu gösteren girişlerdir. Clk'nin yükselen saat kenarında inputCount ve inputAddress kayıtlara okunur.
  • Çıktıların Tanımı: outputJmp, program sayacının okuyacağı adrestir.
  • Sistemdeki Genel Yer: bu modül bilgisayar için koşullu ve koşulsuz atlamaları yönetir. Modül, gT, iT ve eQ girişlerine bağlı olarak hangi koşulun kontrol edileceğini ve bu koşulun doğru mu yanlış mı olduğunu belirler. Koşul doğruysa, atlanacak talimatın adresini verir, aksi takdirde bir sonraki talimatın sayısını verir.

binToBCD

  • Girişlerin Tanımı: ikili kodlu ondalık sayıya dönüştürmek için 10 bitlik sayıyı numaralandırın.
  • Çıktıların Tanımı: İkili sayının yüzler basamağında yer alan yüzler basamağı. ikili sayının onlar basamağındaki basamağı onlar. ikili sayının birler basamağındaki rakam.
  • Sistemdeki Genel Yer: Bu modül, dört basamaklı ekran sürücümüzün sayıyı 7 segmentli ekranda ondalık olarak göstermesi için çıkış kaydındaki 10 bitlik sayıyı BCD'ye dönüştürür.

dörtDigitSürücü

  • Girişlerin Tanımı: sayı, kod çözücüye sürülen 16 bitlik ikili giriştir. inClk, Basys kartlarının dahili saatidir ve saat bölücü olarak kullanılır. RST, rakamları sürmek için kullanılan saati sıfırlar.
  • Çıkışların Tanımı: anot, hangi basamak yerinin aydınlatılacağını belirler. rakam, kod çözücüye giriş numarasıdır.
  • Sistemdeki Genel Yer: Bu modül, BCD numarasını ekrana çıkarmak için dekoderi çalıştırır.

kod çözücü

  • Girişlerin Açıklaması:inputNumber, sürücüden gelen ve kodu çözülecek olan rakamdır.
  • Çıkışların Tanımı: katotlar, istenen basamağı görüntülemek için hangi katotların açılacağını belirler.
  • Sistemdeki Genel Yer: Bu modül, 7 segmentli ekranda görüntülenecek rakamın kodunu çözer.

dörtDigitEkran

  • Girişlerin açıklaması: sayı, 7 segmentli ekranda görüntülenecek sayıdır. hata, ekranın ne zaman "Err" okuması gerektiğini gösterir. Clk, ekranın çalıştığı saat sinyalidir. Bu sinyal, ekranın 4 haneli yerin tümünü aynı anda gösterebilmesi için yaklaşık 60 Hz olmalıdır.
  • Çıkışların Tanımı: anot, hangi basamak yerinin etkinleştirildiğini belirler. katot, istenen basamağı görüntülemek için hangi katotların etkinleştirildiğini belirler.
  • Sistemdeki Genel Yer: Bu modül 7 segmentli ekranda bir sayı görüntüler. Ekranı kullanmak için hangi katotların ve anotların etkinleştirildiği hakkında bilgi için Basys 3 kartı talimat kılavuzuna bakın. Hata biti yüksek olduğunda ekranda "Err" görüntülenir.

çıktıMUX

  • Girişlerin Tanımı: progModeInput, programlama modu sırasında hangi led'lerin açık olduğunu belirler. runModeInput, çalışma modu sırasında hangi led'lerin açık olduğunu belirler. modeSelect, MUX için seçim veya kontrol bitidir.
  • Çıkışların Tanımı: ledOutput, hangi ledlerin açılacağını gösterir.
  • Sistemdeki Genel Yer: Bilgisayarın bulunduğu moda (program veya rom) bağlı olarak, MUX farklı led'leri yakar. Program modunda (modeSelect '0'), MUX, bilgisayarın içinde bulunduğu bellek konumuna ve içerdiği şeye benzemek için led'leri açar. Çalışma modunda (modeSelect '1'dir), MUX hata ayıklama için kullanılır, ancak başka herhangi bir şeyi gösterecek şekilde ayarlanabilir.

saatBölücü

  • Girişlerin Açıklaması: stop, bir durdurma komutunu ('11111') algılamak için veri yolundan beş MSB bitini okur ve saati durdurur. inputClk, Basys 3 kartının dahili saat sinyalidir.
  • Çıktıların Tanımı: ouputClk, yavaşlatılmış yeni saattir.
  • Sistemdeki Genel Yer: Bu saat, kullanıcının neler olup bittiğini belirlemesini mümkün kılmak için bilgisayarı yavaşlatmak için kullanılır. Saat çok daha hızlı çalışabilir, ancak şu anda 2 Hz olarak ayarlanmıştır.

triStateBuffer

  • Girişlerin Tanımı: Din, ara belleğe giden 5 bitlik giriştir. Ep, kontrol bitidir.
  • Çıktıların Açıklaması: Dout, arabelleğin 5 bitlik çıktısıdır.
  • Sistemdeki Genel Yer: Kontrol biti Ep aktif olduğunda, arabellek girişi çıkış olarak verir. Kontrol biti aktif olmadığında, arabellek herhangi bir çıktı vermez.

onBitDRKayıt

  • Girişlerin Tanımı: Dbus, kaydın bulunduğu giriştir. Clk, kaydın yükselen bir saat kenarındaki verileri okumasına izin verir. ARST, kaydı eşzamansız olarak 0'a ayarlar. outputEnable düşük olduğunda, kaydın içeriği çıktıdır. ReadIn düşük olduğunda, yazmaç Dbus'u yükselen saat kenarında kilitler.
  • Çıkışların Tanımı: Qbus kaydın çıktısıdır
  • Sistemdeki Genel Yer: Kayıt, bilgisayarda birden çok kez kullanılır ve işlemler yapılırken bilgileri depolamak için kullanılır.

beşBitDRKayıt

  • Girişlerin Tanımı: Dbus, kaydın bulunduğu giriştir. Clk, kaydın yükselen bir saat kenarındaki verileri okumasına izin verir. ARST, kaydı eşzamansız olarak 0'a ayarlar. outputEnable düşük olduğunda, kaydın içeriği çıktıdır. ReadIn düşük olduğunda, yazmaç Dbus'u yükselen saat kenarında kilitler.
  • Çıkışların Tanımı: Qbus kaydın çıkışıdır.
  • Sistemdeki Genel Yer: Kayıt, bilgisayarda birden çok kez kullanılır ve işlemler yapılırken bilgileri depolamak için kullanılır.

3. Adım: Kodlayın

Aşağıda, 10 bit bilgisayar için kısıtlama ve kaynak dosyalarını içeren bir klasör bulunmaktadır.

Adım 4: Demo ve Örnek Kod

Yukarıdaki video, 10-bit bilgisayarın Basys 3 FPGA kartında nasıl programlanacağını gösterir. İşlem kodlarını ve örnek programı içeren bir pdf de aşağıda eklenmiştir.

Önerilen: