BELLEĞE ERİŞİM

Okuma İşlemi

1-Saat işaretinin 1'den sıfıra inmesiyle,adres bilgileri adres yoluna konur.

2-Adres yolu üzerinde adres bilgisinin oluşmasının ardından bellek gözü seçici canlandırılırsa kod

çözücü ile belirlenen bellek gözü seçilecektir.

3-Bellek gözünün seçilmesinin ardından oku emrinin gönderilmesi ile, adreslenerek seçilen bellek

gözünün içeriği veri yoluna aktarılır.Veri yoluna aktarılan veriler,birinci aşamada belirlenen

adreslerin adres yolu üzerinde kaldığı,bellek gözü seçicinin etkin olduğu ve OKU girişi 1'de

bulunduğu sürece veri yolu üzerinde görülmeye devam eder.

Yazma İşlemi

1-Saat işaretinin 0'a inmesiyle,seçilen bellek gözünün adresi adres yoluna konulur.

2-Yazılacak veri,veri yolu üzerine konulur.

3-Oku/yaz sinyali yaz konumuna (0 konumu) getirilir.

4-Bellek seçici 0 konumuna getirilerek belleğin seçilmesi sağlanır.Bunun sonucunda adres yolunda 

belirtilen bellek gözü seçilir.Ardından veri yolundaki veriler seçilen bellek gözüne yazılır.






BELLEK DÜZENİ

         Belleğin temel birimine bit denir.Bitler yanyana konarak bir bellek gözünü (satırını) meydana

getirir.Dinamik belleklerde bellek gözleri genellikle bir gözeden oluşmaktadır.Statik belleklerde ise

bir bellek gözü genelde 8 bitten oluşur.Ancak bir gözünde 1,2 veya 4 bit olan statik belleklerde

üretilmektedir.4 bitlik yapıya dörtlü,8 bitlik yapıya ise sekizli adı verilmektedir.Bellek bitleri yan

yana konarak bir gözü(satırı) ,bu gözler üst üste konarakta bellek oluşturulur.Bu belleğe N x M

boyutlu bir matris olarakta bakabiliriz.Burada N satır sayısına yani bellek gözü sayısına,M ise sütun

sayısına yani bir gözdeki bit sayısına karşılık gelmektedir.

           Belleğin aynı sütunda bulunan tüm gözelerinin girş ve çıkış uçları birbirine bağlıdır.

Sonuçta,belleğin göz sayısı ne olursa olsun veri bağlantı ucu,bir gözdeki bit sayısına eşittir.Göze

çıkışlarının bir hatta toplanabilmesi için her gözenin çıkışı üç konumlu kapı biçiminde t

tasarlanmaktadır.Veri yolundaki verilerin bitlere yazılması veya bitlerden veri yoluna veri aktarılması

yine üç konumlu kapılar ile yapılmaktadır.Salt oku bellekler her zaman oku yönünde çalıştıkları için

yönlendiriciye gerek duymazlar.




Bir seçici,bir bellek gözünün tüm bitlerine bağlıdır ve hepsini birlikte seçer veya seçmez.Bir sütundaki bitlerin giriş ve çıkışlarının birbirine bağlı olması ve sonunda tek bir veri hattına ulaşması,bir anda sadece bir bellek gözünün veri yoluna bağlanabilmesi koşulunu gerektirmektedir.Bir başka deyişle,bir anda sadece bir bellek gözüne erişebilir.








ASENKRON AŞAĞI SAYICILAR

Şimdi 2 bitlik bir Asenkron yükselen kenar tetiklemeli aşağı sayıcıya bakalım.


Buradaki en önemli nokta 2.flip flopumuzun clock girişi.Yükselen kenar tetiklemeli yukarı sayıcıda bu giriş Q' den alınıyordu.Burada ise Q dan alınıyor.Ve çıkışlarımız(b) ona göre oluşuyor.Burada sayıcımız şekilde (b)'de görüldüğü gibi 0 3 2 1 0 3 2 1 şeklinde sayacaktır.

Ve negatif (düşen) kenar tetiklemeli






ASENKRON YUKARI SAYICILAR

İlk flip flop'a clock sinyali uygulanır.Diğer flip flopların clock girişine ise ilk flip flop'un çıkışı bağlanır.(Q veya Q')Her clock vuruşunda Toggle(tersleme) işlemi yapılacağından daha önce gördüğümü J-K'nın 1-1 ve T flip flop'unun 1 olması durumları burada kullanacağımız flip floplardır.1 olma durumuna dikkat edin çünkü sadece o durumda tersleme işlemi yapan 2 flip flopumuzdur J-K ve T.

Asenkron Yukarı Sayıcı

Aşağıdaki 2 bitlik asenkron pozitif kenar tetiklemeli yukarı sayıcıya bir göz atalım.


Öncelikle flip flop'umuz kaç bit 2. 2^2=4'e kadar sayan bir  sayıcı devremiz var. 0 1 2 3 0 1 2 3 diye devam ediyor.Flip floplarımızın isimleri aklımızı karıştırmasın.En düşük değerlikli bitimiz en soldaki yani clock sinyalini alan flip floptur.Yukarıdaki sayıcımızda 'B' en düşük değerlikli bitimizdir.Bildiğiniz üzere flip floplar 1 bitlik veriyi tutan devrelerdi.Sayıcı devremizi a'da tasarladık.İlk flip flopumuzun Q' çıkışı ikinci flip flopumuzun clock girişine bağlandı.Bunun nedeni sayıcımızın sayıcımızın pozitif kenar tetiklemeli olmasıdır.Bu durumlarda flip flopumuzun JK mı ? T mi ? olduğuna dikkat etmemiz gerekiyor.İleride değineceğiz.Çıkış dalgalarımıza bakacak olursak ilk clock sinyalimizi ele almalıyız.Çünkü devremizin çalışmasını sağlayan gerçek clock sinyali o'dur.Pozitif kenar tetiklemeli clock sinyalimizde her yükselen kenar tetiklendiğinde Qb değerimiz 0'dan 1'e 1'den 0'a inecektir.Böylece Qb ve Qb' nin çıkış sinyallerini elde ettik.Şimdide Qb' her pozitif kenar tetiklemesi için Qa durum değiştirir.Ve son olarak oluşan Qa ve Qb durumlarına bakarsak,sayıcımızın 0 1 2 3 0 1 2 3 diye saydığını görürüz.Eğer Qa ve Qb çıkışlarımıza led bağlarsak bu olayı daha net görebiliriz.


Bakın burada negatif kenar (düşen kenar tetiklemeli) flip flop kullandık bir sonraki flip flopumuzun clock girişi Q oldu.Ve clock girişindeki yuvarlak ile de bun belirttik..





















SAYICILAR(COUNTERS) GİRİŞ

Giriş darbelerine bağlı olarak belirli bir durum dizisini tekrarlayan lojik devrelere "sayıcı" ismini veriyoruz.

Şimdi sayıcıların nasıl sınıflandırıldığına bakalım.

a)Tetikleme sinyalinin uygulanmasına göre
  1)ASENKRON SAYICILAR
  2)SENKRON SAYICILAR

b)Sayma yönüne göre
  1)YUKARI-İLERİ SAYICILAR
  2)AŞAĞI-GERİ SAYICILAR
  3)YUKARI/AŞAĞI SAYICILAR

c)Elde edilen sayının kodlanmasına göre
  1)İKİLİ SAYICI (BINARY COUNTERS)
  2)BCD SAYICI(BCD COUNTERS),
  3)ONLUK SAYICI(DECIMAL COUNTERS)

SAYICININ MOD'U
  
   n sayıdaki flip flop ile 2^n sayıda sayma yapabilir.Örneğin 3 flip flop ile 0-7 ve arasını sayabiliriz.Bir sayıcının tekrar yapmadan sayabildiği sayı miktarına o sayıcının mod'u denir.
Mod13->0-12 Mod9->0-8 arasını sayar.







SWİNG İLE OKUDUĞUMUZ DOSYAYI GÖRÜNTÜLEME

/**
 *
 * @author Gökhan
 */
import java.io.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;



public class DosyaOku extends JFrame implements ActionListener{
        JTextArea jtxa;
        int i;
        DefaultListModel<String> dlm;
        JList<String> jlist;
    public DosyaOku(){
        this.setDefaultCloseOperation(3);
        this.setSize(new Dimension(500,500));
        this.setLayout(new FlowLayout());
        JPanel jpn=new JPanel();
        jpn.setPreferredSize(new Dimension(400,400));
 
       
dlm = new DefaultListModel<String>();

jlist = new JList(dlm);

JScrollPane jscp = new JScrollPane(jlist);
jscp.setPreferredSize(new Dimension(166, 150));

jpn.add(jscp);
        JButton jbtn=new JButton("Dosyayı Göster");
        jbtn.setPreferredSize(new Dimension(120,30));
        jbtn.addActionListener(this);
       
     
        jpn.add(jbtn);
         
        this.add(jpn);
        this.setVisible(true);
    }
    public static int satirDondur(){
        int sayac=0;
  try{
            FileInputStream f=new FileInputStream("A.txt");
    try (DataInputStream d = new DataInputStream(f)) {
        BufferedReader b=new BufferedReader(new InputStreamReader(d));
        while(b.readLine()!=null){
            sayac++;
        }
    }
       }
        catch(Exception e)
       {
            System.err.println("Hata" + e.getMessage()); 
       }
  return sayac;
 
    }
   
    public static void main(String[] args) {
       new DosyaOku();
    } 

    @Override
    public void actionPerformed(ActionEvent e) {
         String [] str=new String[satirDondur()];
       
        try{
            FileInputStream f=new FileInputStream("A.txt");
    try (DataInputStream d = new DataInputStream(f)) {
        BufferedReader b=new BufferedReader(new InputStreamReader(d));
        for(i=0;i<str.length;i++){
        str[i]=b.readLine();
        dlm.addElement(str[i]);
        }
    }
       }
        catch(Exception ex)
       {
            System.err.println("Hata" + ex.getMessage()); 
       }
           
    }
}


Bir önceki yazımızda klasörümüze eklediğimiz bir text dosyamızı nasıl okuyabileceğimizi görmüştük.Şimdi de JList,JScrollPane ve JButton component'leri ile okuduğumuz dosyayı listeliyoruz.Böylece dosya üzerinde silme veya güncelleme işlemleri yapabilir.Veya bu dosyaları kontrollü bir şekilde veritabanına yazabiliriz.

İYİ ÇALIŞMALAR...

JAVA-Dosya Okuma

/**
 *
 * @author Gökhan
 */
import java.io.*;



public class DosyaDonusturucu {
    public static int satirDondur(){
        int sayac=0;
  try{
            FileInputStream f=new FileInputStream("A.txt");
    try (DataInputStream d = new DataInputStream(f)) {
        BufferedReader b=new BufferedReader(new InputStreamReader(d));
        while(b.readLine()!=null){
            sayac++;
        }
    }
       }
        catch(Exception e)
       {
            System.err.println("Hata" + e.getMessage()); 
       }
  return sayac;
 
    }
    public static void main(String[] args) {
        String [] str=new String[satirDondur()];

        try{
            FileInputStream f=new FileInputStream("A.txt");
    try (DataInputStream d = new DataInputStream(f)) {
        BufferedReader b=new BufferedReader(new InputStreamReader(d));
        for(int i=0;i<str.length;i++){
        str[i]=b.readLine();
        System.out.println(str[i]); 
        }
    }
       }
        catch(Exception e)
       {
            System.err.println("Hata" + e.getMessage()); 
       }
    } 
}


Öncelikle oluşturduğumu txt dosyasını java projemize ekledik sonrada txt dosyamızın kaç satırdan oluştuğunu öğrenmek için bir fonksiyon oluşturduk.Bunun nedeni dosyayı okuyacağımız için oluşturacağımız dizinin boyutunu belirlemek.Böylece geriye null değerler dönmeyecektir.Bu yordama gerek kalmadanda array.split kullanarak dosyayı okumamız mümkün...

İYİ ÇALIŞMALAR...

BOOTSTRAP UYGULAMA-1

<!DOCTYPE html>
<html lang="en">
   <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
     

    <!-- Bootstrap CSS -->
       <link rel="stylesheet" type="text/css" href="css/fontawesome-all.min.css"/>
        <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"/>
        <link rel="stylesheet" type="text/css" href="css/main.css"/>
       <link href="https://fonts.googleapis.com/css?family=Indie+Flower" rel="stylesheet">
       <link href="https://fonts.googleapis.com/css?family=Caveat" rel="stylesheet">
       <title>CODINGISLIFE</title>

    </head>
<body>
   
    <section id="cover">
        <div class="container">
            <div class="row">
                <nav class="navbar navbar-toggleable-sm fixed-top navbar-expand-lg navbar-light bg-green">
                    <a class="navbar-brand" href="#"><img src="img/logo.png" alt="CODINGISLIFE"/></a>
              <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
                <span class="navbar-toggler-icon"></span>
              </button>
              <div class="collapse navbar-collapse justify-content-end" id="navbarNav">
                <ul class="navbar-nav">
                  <li class="nav-item">
                    <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
                  </li>
                  <li class="nav-item">
                    <a class="nav-link" href="#">Code</a>
                  </li>
                  <li class="nav-item">
                    <a class="nav-link" href="#">About</a>
                  </li>
                  <li class="nav-item">
                    <a class="nav-link " href="#">Contact</a>
                  </li>
                </ul>
              </div>
            </nav>
        </div>
            <div class="row text-center">
                <div class="col-sm-12">
                    <h1>CODINGISLIFE</h1>
                </div>
                <div class="col-sm-12">
                    <h2>HOW IS IT GOING ?</h2>
                </div>
                  <div class="col-sm-12">
                   <a href="#"><button type="buton" class="btn btn-secondary">GO TO CODE</button></a>
                </div>
            </div>
    </div>
</section>
   
     
      <script src="js/jquery-3.3.1.min.js"></script>
      <script src="js/bootstrap.min.js"></script>
      <script src="js/main.js"></script>
  </body>
</html>

-------------------------Main.css------------------------
html,
body,
#cover{
    height: 100%;
}
#cover{
    background:url('../img/sec.jpg') no-repeat center fixed;
    -webkit-background-size:cover;
}
.fixed-top{
    max-width: 1140px;
    margin:0px auto;
    margin-top: 30px;
}
h1{
    margin-top:15%;
    font-family: 'Indie Flower', cursive;
    font-size 45px;
    color:#ffffff;
    font-style:italic;
}
h2{
    font-family: 'Caveat', cursive;
    color:#ffffff;
}
.btn-secondary{
    background-color: yellow;
    color: red;
    font-size: 30px;
    padding:40x 40px;
}
a.nav-link{
    color:white !important;
   
}



Uygulamamızdaki önemli yerler değinelim.İlk olarak section ile başladık çünkü bu uygulamadaki amacımız bir web sitesinin üst kısmını tasarlamak.Daha sonra bunun için konteynır'ı kullandık nedeni belli bir bölge yaratmaktı.Oluşturduğumuz bölgeleri satırlara böldük.Ve en üst tarafta logo ve menü
kısmını tasarlamak için nav etiketini ve gerekli bootstrap.css class'larından faydalandık.Ve daha sonra menumuzu tasarlamak için <li> etiketlerinden faydalandık.Tabi ki burada da bootstraptan faydalandık.Bootstrapsız bu işi yapmaya çalışsaydık,boyutlarından renklerine,renklerinden liste özelliklerine herşeyi ayarlamamız gerekecekti.Size tavsiyem bir önceki yazımızdaki şekilde bootstrap'ı kurup paylaşacağım örnekleri satır satır deneyerek çalıştırıp öğrenmeniz.Giriş düzeyinde anlattım fakat sonraki örneklerde anlatma olmayacak.Önemli olan bu kodları uygulamak.Bootstrap'ı çok iyi bir şekilde öğrenmek istiyorsanız yapmanız gereken tek şey bol örnek.

İYİ ÇALIŞMALAR...

DURUM GEÇİŞ TABLOLARI

Bu yazımızda dün çözdüğümüz örneğin durum geçiş tablosuna göz atacağız.Örneği anlamadan direkt buraya atlamanızı tavsiye etmem.O örnekte durum geçiş şemasını oluşturmuştuk.Bu örnekte ise durum geçiş tablosunu oluşturacağız.



Tablomuzdan kısaca bahsedecek olursak Mevcut durumumuz A=0 B=0' dan başlayalım.Tıpkı bir önceki örnekte olduğu sonraki durumu buluyor.Sonraki durum önceki durum ile aynı idr o durum konumunu koruyordu.Sonraki durum A=0 B=0 konumunu korur.x=1 olduğunda A=0 B=1 01 durumuna geçer.Bu arada Y' değerimizide unutmuyoruz.Anlayacağınız durum geçiş şemasını çizerseniz.Bu tabloyu çıkartmak o kadar da zor değil.Şimdi tek tek A ve B flip flopu için bakalım.
Burada A' x=0'da hangi noktalarda "1" sorusuna cevap arayıp bunları lojik olarak yazacağız.Bunun amacı tabloyu terimler ile ifade edebilmektir.

Bir sonraki yazımızda durum indirgemelere bakmaya çalışacağız.İYİ ÇALIŞMALAR

ARDIŞIL DEVRE ANALİZİ-2

Bir örnek üzerinden devam edelim.

Örnek

    Aşağıda verilen mantık devresi ardışıl bir fonksiyon gerçekleştirmektedir.Devrenin girişi "x" çıkışı "y",durumlar ise "A-B" çiftidir.Durum geçiş şemasını oluşturunuz...

Sorumuzda bize verilen yerler...


Yazımdan dolayı özür diliyorum :) Amacımızın öğrenmek olduğunu düşününce yazının pek öneminin kaldığı söylenemez zaten :)

Çözüm



Öncelikle inceleyeceğimiz 4 durumumuz var.A=0,0,1,1 B=0,1,0,1 değerlerini tek tek incelememiz gerekiyor.Bununla birlikte A=0 B=0 X=0 ve A=0 B=0 X=1 için de ayrı ayrı hesaplamalıyız.Yukarıda yaptığımız tek şey A,B ve X değerlerini yerine koyarak Rb,Sb ve Ra,Sa yı bulmak.Burada bulduğumuz değerlere göre A ve B nin yeni değerlerini buluyoruz.Bu yeni değerlerden durum değişikli olup olmayacağını bulup  hangi X ve Y değerlerinde durum değişikliğinde olduğunuda durum dairemizin üzerine yazıyoruz.Örneğin A=0 B=1 Sa=1 Ra=0 ve Sb=0 Rb=1 değerlerini elde ettik.A'nın yeni değeri 1 olacaktır.Çünkü R-S flip flopta set'leme söz konusu.Diğer tarafta B=0 olacaktır.Çünkü bir resetleme söz konusudur.Yeni değerlerimi A=1 B=0 yani 10 durumumuza gideceğiz.Bu duruma hangi X ve Y değerleri ile gittiğimiz okumuzun üzerine yerleştiriyoruz..Birkaç soru çözdükten sonra işiniz gerçekten basit..Bir sonraki yazımızda bu sorunun Durum geçiş tablosunu tasarlayıp bazı işlemler yapacağız.

İYİ ÇALIŞMALAR...


ARDIŞIL DEVRE ANALİZİ-1

1-DURUM GEÇİŞ ŞEMASI YÖNTEMİ
2-DURUM GEÇİŞ TABLOSU YÖNTEMİ
3-DURUM DENKLEMLERİ

Sırası ile bu işlemeleri gözden geçirelim...

1-DURUM GEÇİŞ ŞEMASI

     Devrenin her bir durumu devre ile durumlar arasındadır.Geçişler ise daireleri birbirine bağlayan yönlü oklar ile gösterilir.Her dairenin içinde ki 2'li sayi dairenin temsil ettiği durumu tanımlar.Geçişleri gösteren oklar üzerine ise söz konusu durum geçişinin hangi girdilerle gerçekleştiği ve çıktının ne olduğu yazılır.Bu gösterim için '/' işareti kullanılır.Kesme işaretinin soluna girdi sağına çıktı yazılır..

Şimdi bir tam toplayıcı devresi üzerinden bellirttiğimiz adımlardan faydalanarak devrenin geçiş şemasını çizelim..







Di eldemizin 0 olduğu,Dj eldemizin 1 olduğu durumdur.İlk satır ile başlayacak olursak bakın A=0,B=0,TOPLAM(SUM)=0 bu durumda elde değerimiz 0 olur.Bu durum Di=0'dan başladı öyle değil mi ? Peki şimdi ne oldu ?Değerimiz 0'dı 0 kaldı.Değerimiz değişmediği için ok'u kendi durumumuza(state) geri döndürüyoruz.Eldemizin 1 olduğu durumlarda da Dj durumumuza geçiyoruz.Yazım kuralımıza bakacak olursak örneğin 1,1/0 A=1 B=1 Toplam=0 Elde=1 olduğundan durum değiştirdik..Otomat dersi alan aslında bunun bir nevi mealy makinesi olduğunu görmüştür.Yukarıda da belirttiğimiz gibi ilk giriş/çıkış şeklinde yazılıyor.

Yazılarımda normal konuşma dilini kullandığımdan noktalama işaretlerini gözden kaçırıyor olabilirim.Bu gibi durumları iletişimden(footer bölümünden) bana bildirebilirseniz mutlu olurum.

İYİ ÇALIŞMALAR...

Spring Boot Uygulamasını Heroku üzerinde Deploy Etme

Bu yazımızda sizlere spring boot ile yazılmış basit bir Rest api'nin heroku üzerinde nasıl deploy edebileceğimizi göstereceğim. Önce ...