W2 SystemVerilog Part1 TR — Transcript
Full transcript
- 0:04Şimdi arkadaşlar tekrardan hoş geldiniz.
- 0:07Dersle ilgili birkaç konudan bahsettik.
- 0:09Zaten geçen hafta da bunlardan
- 0:10bahsetmiştik. Ben size Türkçe
- 0:11kayıtlarını göndereceğim. Şimdi bu geçen
- 0:15hafta giriş yapmıştık. Neleri bilmeniz
- 0:17gerekiyor ondan bahsetmiştim size. E
- 0:19onun slaytlarına muhakkak bakın. Dersin
- 0:21slaytlarını dersten önce gönderiyorum.
- 0:24E isterseniz yani alıp bir tablette
- 0:27filan varsa üzerinde aynı anda not
- 0:30alabilirsiniz. Gerçekten faydalı oluyor.
- 0:32Ben de böyle yapıyordum önceden. Eee
- 0:34faydasını görüyordum. O yüzden size
- 0:36öncesinden paylaşıyorum PDF olarak. Bu
- 0:38derste geçen ders giriş yapmıştık zaten.
- 0:41Bu derste artık hardware description
- 0:43language'leri görmeye başlayacağız ve
- 0:45özellikle hardware description language
- 0:47içinden en güzeli olan sistem verilo
- 0:50görmeye başlayacağız. Şimdi ben geçen
- 0:52derste de bahsetmiştim. Kompleks bir
- 0:55işlemciyi yani şurada gördüğümüz mesela
- 0:57complex bir Apple M4 işlemcisi var.
- 1:00Nasıl tasarlıyoruz?
- 1:03Yaptığımız şu. Normalde bu işlemci
- 1:05tranzistörlerden oluşuyor.
- 1:06Transzistörler bir araya geliyor. Endoor
- 1:08kapılarını oluşturuyor filan. Biz
- 1:10bunlarla hiç ilgilenmiyoruz. Bizim
- 1:12aslında yazdığımız bir kod. Biz hardware
- 1:14description language kullanarak
- 1:16abstraction yapıyoruz. Yani hardware
- 1:18description language'te bir sayısal
- 1:20devreyi betimliyoruz. Onun altındaki
- 1:22hangi end or kapılarını kullandık? FSM
- 1:25mi kullandık? More mu kullandık? Milli
- 1:26mi kullandık? Bizi umursamıyor. Yani
- 1:28burada abstraction yapıyoruz. Aslında
- 1:32detayları gizliyoruz. Eğer bizim için
- 1:34önemli değilse
- 1:36bu noktada eğer siz bir
- 1:40karışık bir işlemci tasarlamak
- 1:42istiyorsanız yapmanız gereken asıl
- 1:43hardware description language kullanarak
- 1:45detayları gizlemek. Detaylardan kastım
- 1:47burada logic, digital circuit, analog
- 1:50circuit, device, physics mesela
- 1:52elektronlarla falan uğraşmıyoruz. E
- 1:54detayları gizlemek. Biz hardware
- 1:56description language'ü kullanarak bu bir
- 1:58dil C++ gibi bir dil ama bu hardware'ı
- 2:01betimleyen bir dil. Bunu kullanarak
- 2:03işlemciyi tasarlıyoruz. İşlemciyi
- 2:06betimliyoruz. E daha sonra bunu
- 2:08sentezliyoruz. Computer aided design
- 2:10tooları var. O toolar vasıtasıyla
- 2:12sentezliyoruz ve çipi üretiyoruz. Çipi
- 2:15tasarlıyoruz, üretiyoruz.
- 2:17Yani şu an most commercial designs build
- 2:20using HTLs. Aslında most değil hemen
- 2:22hemen bütün commercial designların hepsi
- 2:25HTL kullanılarak yapılıyor. Ha böyle
- 2:27analog hocaları olur. Analogçular mesela
- 2:29çipleri kendisi eli şeylerini çip yapmak
- 2:33istediklerinde transistörleri elle
- 2:34şekillendiriliyor. Geçen hafta
- 2:35bahsetmiştik ya. Onlar elle yapıyor ama
- 2:38normalde sayısalcıysanız %99.999 9 9 9
- 2:42HTL kullanmanız gerekiyor. Dünya
- 2:44üzerinde 3 tane önder HTL var. Eee,
- 2:48Verilock, sistem verilo log. Bunlar aynı
- 2:50kategoride veril bir sonraki versiyonu
- 2:52sistem verilo log düşünün. Bir de VHTL
- 2:54var. Sistem ver log burada yıldızı
- 2:58parlayan git gide insanlar VHD ile
- 3:01bırakıp sistem verilo log geçiyor. Çünkü
- 3:02sistem verilog hem tasarımda hem de
- 3:06doğrulamada size büyük fayda sağlıyor.
- 3:11Biz burada bu derste sistem veril
- 3:13göreceğiz. Sistem verilog üzerinde
- 3:15yoğunlaşacağız. VHTL'e bakmayacağız. Biz
- 3:18hardware description güçleri neden
- 3:19kullanıyoruz? Öncelikle sentez bir
- 3:23dediğim gibi bir hardware description
- 3:24language ile işlemci tasarlıyoruz
- 3:26mesela. Sonra bunu sentezliyoruz. E bu
- 3:29sentezlediğimiz bizim hardware'a
- 3:31dönüşüyor. Yine aynı şekilde FPJ
- 3:33sistemleri de böyle. Mesela FPJ bit
- 3:35stream oluşturuyorsunuz. FPJ üzerinde
- 3:37çalıştırıyorsunuz. O da aslında sentez
- 3:38diye geçiyor. Onun da başlangıç noktası
- 3:40hardware description language. Bir
- 3:42sistem verlock'la dijital devre
- 3:44betimlemeniz gerekiyor. Aynı zamanda
- 3:47insanlar hardware description language'i
- 3:49betimledikleri sistem, betimledikleri
- 3:51dijital sistemi simüle etmek için de
- 3:54kullanıyor.
- 3:56Devreye inputlar veriyor. Gerçekten
- 3:58diyor benim tasarladığım gibi çalışıyor
- 4:00mu diyor. Yani ben sentez için
- 4:01kullanabiliyorum bunu. Simülasyon için
- 4:03kullanabiliyorum.
- 4:06Ve simülasyonun bir adım ötesinde
- 4:08insanlar verifikasyon için de
- 4:09kullanıyor. Verifikasyonda şöyle
- 4:12yani simülasyonda asa simüle
- 4:14ediyorsunuz. Input veriyorsunuz
- 4:15outputlar veriliyor size. Verifikasyonda
- 4:18aynı zamanda bunu yapıyorsunuz. Bir de
- 4:20üstüne o aldığım outputluklar outputlar
- 4:23doğru mu diye kontrol ediyorsunuz
- 4:24aslında. Doğrulama birisi simüle etme. E
- 4:28türkçesi şimdi aklıma gelmedi ama
- 4:30verifikasyonda doğrulama.
- 4:34Şimdi burada biz hardware description
- 4:36language yazmaya başlayacağız. Ben size
- 4:38örneklerini göstereceğim ama bunu burada
- 4:40en büyük yapılan hata şimdi siz
- 4:43mühendissiniz. C metlab görerek
- 4:45geliyorsunuz. Bu dili CATL gibi
- 4:47düşünmemeniz gerekiyor. Bu dilde bir
- 4:51betimleme yaparken daima donanımı arka
- 4:53planda kafanızın arkasında düşünmeniz
- 4:56gerekiyor. Bu tam böyle C dili gibi
- 4:58değil. C dilinde nasıl kodları
- 5:00yazıyorsunuz sırayla çalışıyor. Bu dilde
- 5:02öyle değil. Bu dilde yazdığınız kodların
- 5:03hepsi paralel çalışıyor. Aynı anda
- 5:05çalışıyor. Ama belli bir süre sonra
- 5:07pratik yaptıkça zaten anlamaya
- 5:09başlıyorsunuz. Az çok kafanızda
- 5:10canlanmaya başlıyor artık. Ama normal
- 5:12bunu software dili gibi asla düşünmeyin.
- 5:14Bu yeni bir şey. Yeni bir kavram.
- 5:15Yeniden başladığınızı düşünün. Farklı
- 5:18bir kodlama tekniği.
- 5:23Şimdi sistem verilog'u yavaş yavaş
- 5:26tanımaya başlayalım. Bu derste sistem
- 5:28verilog üzerine yoğunlaşacağız. Bundan
- 5:30sonraki derste de risif'a başlayacağız
- 5:32artık. Ya biz normalde ilk derste ne
- 5:33yaptık? Berve yaptık. Logic filan
- 5:35gördük. Hatta dedik bu konseptleri
- 5:37bilmiyorsanız bu dersi bırakabilirsiniz
- 5:39ya da ek vakit ayırıp bunları öğrenmeniz
- 5:43gerekiyor dedik. Eee bu derste sistem
- 5:45verilo göreceğiz. Bir sonraki dersten
- 5:47itibaren de Ris 5'a gireceğiz. Artık
- 5:48işlemcilere gireceğiz. Sonra git gide
- 5:50işlemcinin karmaşıklığı artacak. İlk
- 5:51basit işlemcileri göreceğiz. Sonra çok
- 5:53daha karmaşık işlemcilere eee girmeye
- 5:55başlayacağız. Şimdi sistem ve log
- 5:58modülleri iki tip modül belirtiyorsunuz.
- 6:01Burada modül dediğimiz aslında bizim
- 6:04modül dediğimiz aslında bir tane dijital
- 6:06devre mesela bir flipfop bir modül
- 6:08aslında ya. Bir modül ne? Inputu var
- 6:11inputları var. Bir de output'ları var.
- 6:15Ve burada bazı dijital operasyonlar
- 6:17yapılıyor. Mesela Philip Flock var. İşte
- 6:19end kapısı var. OR kapısı var. Ya bu
- 6:22inputlar geliyor burada bazı
- 6:24operasyonlardan geçiyor. Output
- 6:25veriliyor. Buna biz modül diyoruz.
- 6:27Aslında modül dediğiniz bir tane sayısal
- 6:29devre. Sayısal devreye karşılık geliyor.
- 6:33İki tip modül var. Behavioral veya
- 6:35structural. Eee behavioral
- 6:38biraz daha üst seviyeden modülü
- 6:40tanımladığımız yöntem. E structural da
- 6:43biraz daha alt seviyeden tanımladığımız
- 6:45yöntem. Genelde işlemci
- 6:47tasarlayacaksanız hani çok karmaşık
- 6:48işlemci tasarlayacaksınız
- 6:50çok böyle structural modül çok
- 6:52kullanılmaz. Behavoral yazarsınız
- 6:54kodları. Ama tabii ihtiyaç olursa
- 6:57structurer da yazabilirsiniz. Aslında
- 6:59çok detaylı bir ayrıntı değil bu iki
- 7:01modül tipi olması ama böyle bir ayrım
- 7:04var.
- 7:06Ve sistem verlog'da bir modül
- 7:07tanımlayacaksanız yapacağınız iş şu.
- 7:11Modül ve end modül yazıp arasına burada
- 7:15modülün ne fonksiyon yapacağını yazmanız
- 7:17gerekiyor. Burada şu modüle karşılık
- 7:19gelen sistem veri log kodu var. Şimdi bu
- 7:22modüle bir isim vermişiz biz. İsmi
- 7:24example diye bir isim vermişiz. Modül
- 7:27şurada modül ismi ve modülün aldığı
- 7:29inputlar. AVC inputlarını alıyor ve
- 7:33modülün output'u burada Y output'unu
- 7:36veriyor bu modül. Yani AVC'yi alıyor
- 7:38içeride bazı operasyonlar yapıyor. Y'ı
- 7:40veriyor bize. Ve burada da modülün
- 7:43içinde de fonksiyonu koyuyoruz. Bunu
- 7:45ileride göreceğiz. Ne koyacağız? Şu an
- 7:47mesela bu modül boş. ABC Y diyoruz ya.
- 7:50Bu modül direkt hani ABC inputu alıyor.
- 7:53Y output'u var. Hiçbir şey yapmıyor.
- 7:55Yani Y output da burada ne olur? Geçen
- 7:57ders görmüştük. Z olur. High impedance
- 8:00olur yani. Çünkü v hiçbir şey sürmüyor
- 8:02bu modül şu an. Şu output, logic via.
- 8:05Burada logic tipi önemli. Logic
- 8:07dediğimiz şu. Bu logic bir verival gibi
- 8:10düşünün. Bir kablo. Yani burada bu kablo
- 8:13logic olursa 0 1 olabilir, Z olabilir, X
- 8:16olabilir. Şu Z ile X'i geçen derste
- 8:19görmüştük. Z high impedance. X de unnow.
- 8:22High impedance. Neti sürmüyorsunuz.
- 8:25X'te net sürülüyor ama 0 mı 1 ne olduğu
- 8:29belli değil.
- 8:35Bu logic tipi yani bu dört değişkenden
- 8:38birine denk geliyor. Bu dört değerden
- 8:39bir tanesine denk geliyor. Ya burada
- 8:41benim a b c birer bitlik. Bu arada
- 8:43bunlar birer bitlik sinyallerim modülde.
- 8:46Bir de y outum var. Önemli olan buradaki
- 8:49keywordler modül and modül. Bir de
- 8:52example burada da name of the modül.
- 8:54Modülün içinde şöyle parantezle ben
- 8:57inputu ve output'unu tanımlıyorum.
- 9:00Burada içini doldurduğumuz bir örnek
- 9:02var. Ne yapıyorum burada? Bir yine aynı
- 9:05şekilde bir modülüm var. Example isminde
- 9:093 tane inputum var benim. A B C A B C
- 9:13Bir tane de Y output'um var. Burada bir
- 9:17operasyon yapmışım
- 9:20bu modülün içini. Şimdi artık boş
- 9:21bırakmamışım. Bir operasyon yapmışım.
- 9:24Şunu diyorum. Buradaki Y
- 9:28A'nın tersi and B'nin tersi and C'nin
- 9:32tersi.
- 9:33Sonra bu orlanıyor şununla. Şununla
- 9:36orlanıyor. Sonra şununla orlanıyor. Yani
- 9:38şöyle
- 9:41A'yı alıyorum burada.
- 9:43A'nın aynı zamanda bir de notını
- 9:44alıyorum. Şurada A'nın natı var. Mesela
- 9:47AT, B not, CAT'ı endliyorum. Bunların
- 9:51notları endleniyor mesela. Bir yandan da
- 9:53notlarını aldım
- 9:55ve bunları bir end kapısına sokuyorum.
- 9:59Tabii bu buraya verilmiyor.
- 10:02Daha sonra şu işlemi de yapıyorum
- 10:04burada. A BC'yi alıyorum. Eee, şu işlemi
- 10:06de yapıyorum burada. Burada A, B, C
- 10:09mesela ne yapılıyor? A and, B, not, and,
- 10:12C not. Yani A'nın kendisini alıyorum
- 10:15artık. A'nın notını değil de E kendisini
- 10:17alıyorum. Şuradan kendisini alıyorum.
- 10:20Yine bir end kapısı. B not C not'ı
- 10:22alıyorum burada. Mesela şu şekilde çizim
- 10:25kötü oldu ama hani. Sonra git gide eee
- 10:28şunların alt tutunu orluyorum. Sonra
- 10:31Y'ye veriyorum. Buna bir tane daha
- 10:32geliyor. Burada şu ifade de buraya
- 10:34geliyor. Bir tane daha. Bunun üçünün
- 10:37çıkışını da orluyorum. Aslında burada
- 10:38yaptığım şu. S bu işlem s dediğimiz
- 10:41aslında s y dediğimde aslında Y'ye şu
- 10:46operasyonu ata diyorum. Yani şu logic
- 10:48operasyonu yapıyorum ben. Burada bir
- 10:49sürü end, or, işte not operasyonları
- 10:52var. Bu işlemin sonucunu y'ye ata
- 10:55diyorum. Asign da burada yeni gördüğümüz
- 10:56bir keyword daha.
- 10:59Bunu da çizdiğimiz zaman bu arada şimdi
- 11:01şöyle bu normalde baktığınız zaman 3
- 11:03tane bir tane üç girişli or kapısı var
- 11:06burada. Sonra şuralarda mesela üç
- 11:08girişli end kapıları var. Eee bunların
- 11:11bağlının natı var. Ama siz bunu
- 11:13sentezlediğiniz zaman bu ufalabiliyor.
- 11:16E nasıl oluyor? Mesela bazı ifadeler
- 11:19şurada mesela inat sin var ya bu ortak
- 11:21terim a'yı burada iptal ediyor mesela. O
- 11:24şekilde sentezleyince siz bunu
- 11:26sentezlemeyi bu arada eda tooları
- 11:29yapıyor. Hani biz yapmıyoruz. O da bir
- 11:30abstraction aslında. Ya ben tutup da
- 11:33HTL'ile yazdığım kodu kendim
- 11:35sentezlemiyorum. EDA toolarını
- 11:36veriyorum. o red logic reductionlar
- 11:38yapıyor. En küçük hale getiriyor.
- 11:41Aslında burada baktığınız zaman böyle
- 11:42bayağı bir logic operasyon var gibi
- 11:44gözüküyor ama e çıkan devre
- 11:46sentezlenirse, optimize edilebilirse bu
- 11:48şekilde oluyor. Burada yeni operasyonlar
- 11:52ekledik. Bir assign keyword'ünden
- 11:53bahsettim size. Buradaki operasyonun
- 11:55sonucu Y'ye atanıyor. Asign buna denk
- 11:58geliyor. Bir de şu işaretler de not and
- 12:02or gate'lere karşılık geliyor tam
- 12:03olarak. Hani bizim logic'te gördüğümüz
- 12:05gate'ler aslında A not, B not mesela, C
- 12:09not. Bunların sonra endlenmiş hali. E
- 12:14anlaşılmayan bir şey var mı arkadaşlar
- 12:15burada?
- 12:18Şimdi bu
- 12:22bunu simüle ettiğinizde e şöyle bir
- 12:26sonuç alıyorsunuz mesela. Yani bu
- 12:27normalde fonksiyonel karşılığı bu. Eee,
- 12:30sentezlediğiniz zaman bayağı küçük bir
- 12:31devre oluşuyor. Çünkü buradaki bazı
- 12:33terimler gereksiz. Onlar siliniyor.
- 12:35Silindikten sonra bir simüle ettiğiniz
- 12:38zaman yine verilatör var. Mesela ben
- 12:40size verilatörü göstereceğim. Bu sistem
- 12:43verilog'da betimlediğiniz donanımları
- 12:46nasıl simüle edeceğinizi. Eee, bunu
- 12:48simüle ettiğiniz zaman mesela buna
- 12:50karşılık gelen fonksiyonel şeyi
- 12:52görebiliyorsunuz. E, waveform
- 12:54diyagramını. Burada aslında wave form
- 12:56şeyi gösteriyor size. Hani birler,
- 12:57sıfırlar. Eee, süre ilerledikçe siz bu a
- 13:02inputlarını değiştirdikçe y nasıl
- 13:04değişiyor onu gösteriyor. Aslında burada
- 13:06bu da simüle edilmiş. Şu devrenin simüle
- 13:09edilmiş hali.
- 13:12Buralarda anlaşılmayan bir şey yok,
- 13:13değil mi? Bu en temeli. Bunu, bu yapıyı
- 13:15kullanarak biz daha karmaşık devreler,
- 13:19en sonunda da bayağı karmaşık işlemciler
- 13:21betimlemeye başlayacağız inşallah. Şimdi
- 13:24sistem ve log sintaksia bazı önemli
- 13:27kurallar var. Bunları yapa yapa
- 13:29öğrenirsiniz.
- 13:31Yani hata yapa yapa öğrenirsiniz
- 13:33bunları.
- 13:34Büyük küçük harf önemli burada. Mesela
- 13:37R'si büyük resetle R'si küçük reset aynı
- 13:40sinyal değil.
- 13:42Sonra bu C gibi C gibi eee normalde bir
- 13:46tane mesela modül ismi vermek
- 13:47istiyorsunuz. Harfle şeyle
- 13:49başlayamıyorsunuz.
- 13:51Sayıyla başlayamıyorsunuz.
- 13:54Yani boşluklar
- 13:56ignore ediliyor, önemsenmiyor. Eğer
- 13:58comment koymak istiyorsanız kodun içine
- 14:00bol comment koyun. Eee, yani şu iki
- 14:03comment'i sanırım C'de de böyleydi. Bu
- 14:05iki comment şu mult line olan bu da
- 14:08single line için olan bu şekilde
- 14:10command'ler koyabiliyorsunuz.
- 14:13Burada structural system berlock örneği
- 14:16var. Mesela burada bir modül
- 14:19tanımlanmış. End 3 ismi koyulmuş. Bunu 3
- 14:22end diyemiyordum modül ismini. Çünkü
- 14:25sayıyla başlayamıyorum. End 3
- 14:26diyebiliyorum ama ilk kelimeyle
- 14:28başlıyorum. Sonra harf bir sayı
- 14:30koyabiliyorum. Burada aslında yaptığı şu
- 14:333 ABC birer bitlik logic sinyaller. Bir
- 14:36de output logic sinyalim var. Y bu Y
- 14:40sinyali ABC burada gelince ABC geliyor.
- 14:45End kapısından geçiyor. 3 inputluk bir
- 14:47end kapısı. Y sinyali çıktı olarak
- 14:50veriliyor. Çünkü Y sinyali output. Şu
- 14:52ABC input, Y output.
- 14:56Mesela burada inverter tasarımı var.
- 14:58Inverter ne? Bir tane input'unuz var. Y
- 15:00direkt onun tersi. Signile bu şekilde
- 15:02yapabiliyorsunuz.
- 15:03E nent. Şimdi structural ve log örneği
- 15:07vereceğim dedim size. Şimdi bunlar iki
- 15:08modül değil mi? Ben bunları ikisini de
- 15:10tasarladım. Bir tane modülüm var benim.
- 15:12Bu modülümün ismi end 3. Bir tane daha
- 15:14modülüm var. Bu modülün ismi de
- 15:16inverter. Bu end 3 modülü AVC inputuna
- 15:21sahip ve çıktı olarak da Y var.
- 15:24Inverterda
- 15:26girdi olarak a var. Çıktı olarak eee Y
- 15:30var. Şimdi ben bu iki tane modülü
- 15:34tanımladığım iki modülü kullanarak yeni
- 15:38bir modül oluşturabilirim. Nasıl oluyor
- 15:40bu? Bir tane daha modül yapıyorum ve o
- 15:43modülün içinde bu modülleri çağırıyorum.
- 15:45Hani C'deki fonksiyon çağırma gibi.
- 15:50Burada ne olmuş mesela? A BC inputlarım
- 15:54var benim. A B C inputlarım var. Bir de
- 15:58G o output'um var. Ve içeride modülün
- 16:01içinde bir tane daha sinyal
- 16:03tanımlamışım. 1 bitlik sinyal
- 16:04tanımlamışım. Bu sinyalin ismi N1
- 16:06sinyali. Ve daha sonra şunu yapmışım. Şu
- 16:10N3 modülünü
- 16:12bir tane burada instantiate etmişim.
- 16:14Yani çağırmışım. Burada N3 modülünü
- 16:17çağırınca ne oluyor? Buraya bir tane end
- 16:193 koyuyor adam. Bunun ismi endgate'miş.
- 16:24Ve ABC'yi bu Endgate'e bağlamışım ben.
- 16:28Şimdi çağırırken de şu N3 modülünü
- 16:31çağırdım ya tam karşılığına gelecek olan
- 16:34şu AC şunun giriş ABC'lerini şu end 3'ün
- 16:38giriş ABC'lerine bağlamışım sırasıyla.
- 16:41Bu ABC'ye sırayla bağlanmış. Output'unu
- 16:44da N1'e bağlamışım. Yani şu endgate'in Y
- 16:46output'u M1 diye bunun içindeki sinyale
- 16:49bağlanmış. Daha sonra bu N1'i almışım
- 16:52ben. Bir inverter çağı inverter
- 16:54modülünden instan şey etmişim. Buraya
- 16:56koymuşum aslında. Çağırmak değil de
- 16:58aslında koymak. Yani aynısını alıp
- 16:59buraya kopyalattırıyorum.
- 17:01Bu inverterda N1'i input olarak almış.
- 17:04Y'yı output olarak buraya bağlamış. Şu
- 17:06sinyali buraya bağlamış. E bu inverterün
- 17:09karşılık gelen inputu m1, output'u y.
- 17:12Bunu sırasıyla yazınca böyle birebir
- 17:14karşılık geliyor. Böyle sırasıyla aynı
- 17:16karşılıkta geliyor.
- 17:19Bu şekilde. Yani burada tanımladığım
- 17:20benim iki tane modülü almışım. Burada
- 17:23kullanmışım. Buna structuralı system
- 17:24verlock deniyor. Structural olarak daha
- 17:27önce tanımladığınız modülleri burada
- 17:30çağırabiliyorsunuz. Tekrar tekrar
- 17:31kullanabiliyorsunuz.
- 17:35Burada anlaşılmayan bir şey var mı
- 17:36arkadaşlar? Sistem ve log en basitinden
- 17:38yapısı bu şekilde.
- 17:41Combinational logic burada örnekleri var
- 17:43aslında. Hızlı hızlı geçebiliriz. Burada
- 17:47artık biraz önceki örneklerde size tek
- 17:50binlik tek bitlik sinyalleri
- 17:51anlatmıştım. Burada artık sinyallerimiz
- 17:54eee 4 bitlik. Mesela burada 4 bitlik
- 17:56sinyali nasıl tanıyorum ben?
- 17:57Tanımlıyorum. Input logic 30 diyorum. 30
- 18:01deyince bu şu demek. 3'ten 0'a kadar
- 18:05yani toplam 4 tane eleman var. Aslında
- 18:07bunu bir matriks vektör tanımlama gibi
- 18:09bu. E ben burada 4 bitlik bir A sinyali
- 18:13tanımlıyorum aslında. Yani bunun inputu
- 18:16şurada bu modül diyelim. Şöyle
- 18:18modülümüz.
- 18:20Bu modülün inputu şurada artık A sinyali
- 18:24var ama bu A sinyali 4 bitlik sayı. Yani
- 18:2700'dan
- 18:280'dan
- 18:301 1'e kadar farklı değerler alabilecek
- 18:33bir input. Bu 4 bitlik çünkü. B de aynı
- 18:36şekilde ve çıkışta da dörder bitlik Y1,
- 18:38Y2, Y3, Y4, Y5 outlarım var. Ve ben
- 18:42burada 5 tane Sign kullanarak y1, Y2,
- 18:46Y3, Y4, Y5'e sırasıyla end, or, xor,
- 18:49nend, nor eee, operasyonlarını yapıp
- 18:52çıktılarını buna atıyorum.
- 18:56Burada 5 farklı operasyon yapıyorum.
- 18:58Önceden ben mesela A'la B'ye ne
- 19:01yapmıştım? A'la B birer bitlik sinyaldi.
- 19:03Mesela 0'a 1 dediğim zaman bu Y1 0
- 19:05olacaktı. Artık A'la Bitlik
- 19:09sinyal. Öyle olunca şu endi kullanınca
- 19:12tek end'i kullanınca eee bu mesela şey
- 19:15yapacak. Bitler arası operasyon yapacak.
- 19:16Her bit kendi pozisyonuyla ve çıktısı da
- 19:184 bitlik olacak. Bu şekilde. Bunlar için
- 19:21de aynısı geçerli. Bu aşağıdaki
- 19:23operasyonlar için de aynısı geçerli.
- 19:25Burada bir comment kullanılmış. Eee, bu
- 19:28multiline bir comment kullanılmış.
- 19:31Yani sentezlediğimiz zaman da çıkan
- 19:33sonuç böyle. Şuradaki mesela kullanılan
- 19:35orlar. Tamam, bir tane burada exor
- 19:37kapısı görüyorsunuz ama bu exor
- 19:38kapısının girişleri dörder bitlik. Yani
- 19:40dörder bitlik exorlar artık 40 bitlik
- 19:43değil. Mesela burada not var. Bu not 4
- 19:46bitlik not. 4 bit'i alıyor. Her bir biti
- 19:49ayrı ayrı çevirip 4 bitlik bir output
- 19:51veriyor.
- 19:52Yani şurası bizim modülümüz aslında
- 19:54burada. Sistem verta
- 19:56hiç HDL kullanmayan var mı aranızda?
- 19:59Herkes kullandı mı? EHB mi bölüm?
- 20:02>> Evet.
- 20:02>> Tamam sıkıntı değil. Öğrenirsin.
- 20:08Mesela burada bir tane daha başka bir
- 20:09operasyon var. Normalde ben end'leri ne
- 20:11yapıyordum?
- 20:15iki operatörlü yapıyorum. İki tane
- 20:18inputu oluyordu end'in. E ile b'yi
- 20:20endliyordum. 1 bitlikse 1 bitlik sonuç
- 20:22alıyordum. İşte 4 bitlikse 4 bitlik
- 20:24sonuç alıyordum. Burada bir reduction
- 20:26operasyonu örneği var. Yine aynı şekilde
- 20:28bir modül tanımım var benim. End8 diye.
- 20:318 bitlik bir A girişim var ve 1 bitlik Y
- 20:35çıkışım var. Yaptığım işlem şu. Bu A'nın
- 20:38bütün elemanlarını kendi içinde
- 20:40endliyorum. Şimdi A böyle bütün
- 20:43elemanları yani A0 A1 A7'ye kadar kendi
- 20:46içinde birbirleriyle endleniyor. Bir
- 20:48tane y outuna veriliyor. Bunu da yapmak
- 20:51için end'i tek operantlı olarak
- 20:54kullanıyorum. Yani mesela bunu a and a
- 20:57deseydim A'yı kendi içinde endleyip 8
- 21:00bitlik A'yı Y'ye atacaktı. Gerçi y
- 21:02burada 1 bit ama e ama mesela burada
- 21:05sadece end a dediğimde bu şuna denk
- 21:07geliyor. A'nın bütün şeylerini,
- 21:10elemanlarını birbirleriyle endle. Yani
- 21:12şuna karşılık geliyor. Bu operasyonu
- 21:14yap. 1 bit çıkış ver. Şu bizim modülümüz
- 21:16oldu. Artık
- 21:20conditional assignment var. Bu arada
- 21:22şimdiye kadar hep atama yapmak için
- 21:24assign kullandık. İleride assignı
- 21:26kullanmadığımız örnekler de olacak.
- 21:27Bloglar yazmaya başlayacağız. Öyle
- 21:30olunca dili daha iyi kullanmaya
- 21:31başlayacağız.
- 21:33Şimdi conditional assignment ne? Burada
- 21:36dörder bitlik D0 ve D1 inputlarım var.
- 21:38Bir de çıktım var. Bir de başka bir
- 21:41inputum var S diye. Bir de 4 bitlik Y
- 21:44output'um var. E şu modülümüz
- 21:48burada yaptığı şu. S1 ise D1'i Y'ye
- 21:52atıyor. S0'sa şey S1 ise D1'i Y'ye
- 21:55atıyor. S0'sa D0'ı Y'ye atıyor. Yani bu
- 21:58aslında şu turnleriy operasyon. Bu C'de
- 22:00de var galiba.
- 22:02Eee burada
- 22:04aslında bir max oluşturuyor bu.
- 22:07Ve s burada 1 bitlik değer. 1 bitlik
- 22:10değerin değerine göre y'ye şu 4 bitlik
- 22:13Y'ye D1'i veya D0'ı atıyor. Buna
- 22:15ternerary operasyon deniyor. Sign da
- 22:18burada şunu diyor. Şu operasyonu yap.
- 22:21Onun sonucunu Y'ye ata. Bu şekilde
- 22:29daha önce bahsetmiştik. Internal
- 22:31veriabalar'lar kullanabiliyoruz.
- 22:33Mesela burada PG diye internal
- 22:36variabel'lar var. Bu şu demek. Ben bir
- 22:40log modülü tanımladığım zaman içeride
- 22:44kendim internal variablel'lar
- 22:46tanımlayarak bazı operasyonların
- 22:48sonucunu tekrar tekrar kullanabilirim.
- 22:50Mesela burada bir floder örneği var. A B
- 22:53C in girmiş. Ata fuller ne?
- 22:57A B C in.
- 23:00Çıktısı da s ile C out. Yani fulledir
- 23:04bu. Ala A B bir de carry ini topluyor. S
- 23:08ile C out'a veriyor. Ya aslında hani
- 23:11yaptığı işlem şu. A B C'yin hepsi 1e eee
- 23:14SAM 1 oluyor, carry out 1 oluyor. Bir
- 23:17tanesi 0sa diğeri ikisi 1 ise SAM 0
- 23:21oluyor. Carry out 1 oluyor. Mesela carry
- 23:23var mı yok mu? Taşan var mı yok mu?
- 23:27E bu yani şu A + B + C in operasyonu
- 23:30yapıp 2 bitlik çıktı veriyor bu. Şimdi
- 23:33burada iki tane benim internal sinyalim
- 23:36var. P ile G sinyali. P sinyali aslında
- 23:39baktığınız zaman feder logic tablosunu
- 23:41yazıp kendiniz yaptığınız zaman bir
- 23:43tanesi exora karşılık geliyor. Bir
- 23:44tanesi end kapısı. Daha sonra bu P ile
- 23:46G'yi ben carry inle mesela bir tanesini
- 23:49tekrar XOR'la geçirip aslında A xor, Bor
- 23:52C in Sama'a karşılık geliyor. E carryde
- 23:56şuna karşılık geliyor. Carde de şu G'nin
- 23:59A and B'nin sonucunu burada tekrar şu A
- 24:02and B'ye denk geliyor. Tekrar reuse
- 24:04edebiliyorum. tekrar kullanıyorum yani.
- 24:06Ya şu P aslında mesela şuradaki OR kapıs
- 24:10şey kapısına girerken eee tam olarak
- 24:14pardon G şu G şuradaki or kapısına
- 24:16mesela şu şekilde içeriden
- 24:18aktarılabiliyor. Yani çünkü kendim için
- 24:20de logic tanımlıyorum. Ha tanımlamasam
- 24:24yine olurdu ama o zaman burada P
- 24:25gördüğüm her yere şu operasyonu tekrar
- 24:27tekrar yazacaktım. Şuraya da yazacaktım
- 24:29mesela. Ama tekrar tekrar tekrar use
- 24:32edeceğiniz sinyalleri tekrar burada
- 24:34içeride bir sinyale aktarırsanız e daha
- 24:38da kodunuz sadeleşmiş oluyor.
- 24:47Yani bu aslında logic dediğimiz burada
- 24:49bir wire yani sadece veri taşıyan wire
- 24:52demek. Logic
- 24:54bu operasyonlar arasında bir öncelik
- 24:58var.
- 24:59Şu bu arada hani ben size end oran
- 25:02gösterdim ama çok fazla operasyon var
- 25:04kullanabileceğiniz. Bu not operasyonu 1i
- 25:070 1 yapıyor. Multiplication division
- 25:09modulus operasyonları var. Mesela
- 25:11işlemci tasarlayacağız. Tutup da biz
- 25:13böyle şunu kullanarak bu full header'ı
- 25:16kullanarak e 1 bitlik flader kullanarak
- 25:1964 bitlik flodiri kendimiz yapmayacağız.
- 25:21Ne yapacağız? 64 bitlik iki sinyali artı
- 25:23yazıp geçeceğiz. Direkt toplayacağız.
- 25:24Yani bu mesela toplama çıkartma
- 25:27operasyonları var. çarpma operasyonları
- 25:29da yine aynı şekilde sağa sola shift
- 25:31operasyonu var. Aritmetik shift
- 25:33operasyonu var. Eee ondan sonra
- 25:35comparison operasyonları var. Küçük,
- 25:37küçük eşit, büyük eşit. Eee eşit mi
- 25:39değil mi operasyonları var. End, nend
- 25:41kapıları, or
- 25:44ve terner operasyon. Bunu da görmüştük.
- 25:47Ya bunlar arasında bir öncelik sırası
- 25:48var. E en öncelik olanın at şu aşağıya
- 25:52kadar değişiyor öncelikleri. Bunu
- 25:53ezberlemenize gerek yok. Direkt normalde
- 25:56mesela bunu ezberlemek yerine parantez
- 25:58içinde operasyonları kullanırsanız bu
- 26:01parantezler şu demek oluyor. Parantezin
- 26:03içi çözülmeden parantezin dışına
- 26:05çıkamıyor, çıkılamıyor. O yüzden hani bu
- 26:07tabloyu ezberlemek yerine bir operasyon
- 26:09yazacaksanız daima parantezler
- 26:11kullanarak operasyonlarını yazın ki
- 26:13kendiniz nasıl olmasını, çalışmasını
- 26:16istiyorsanız ona göre e çalıştırırsınız.
- 26:18Çünkü parantez en önceliği. Mesela siz
- 26:21diyelim ki a and b şu not yaptınız
- 26:25mesela. Eee normalde bu operasyon
- 26:28önceliği şu ilk başta A'nın tersini al
- 26:30der. Sonra B ile bu A'nın tersini entle
- 26:33der. Çünkü şu en öncelikli olan bu. Ama
- 26:36sizin yapmak istediğiniz A' la B'yi
- 26:38entleyip onun tersini almaksa buraya bir
- 26:40parantez atarsınız. Parantez size
- 26:42önceliğini getirir. Hani ilk parantezin
- 26:44içine öncelikli çözmeye çalışır. Yani
- 26:46şununla şunu aslında şey yapar.
- 26:48e ayırır. Parantez içini çöz parantez
- 26:51içi çözülmeden dışarıya geçilmez.
- 26:56Şimdi biz sistem verilda kodlama
- 26:58yaparken
- 27:00şeyler de kullanacağız tabii. Numaralar
- 27:02da kullanacağız. Constantlar değişmezler
- 27:05kullanacağız. Eee bu değişmezleri de
- 27:07hardware description lang içinde
- 27:09belirtmek için eee bir formatımız var.
- 27:12Nasıl belirteceğimiz. Burada formatımız
- 27:14şu şekilde. N base value. Yani N şurada
- 27:19kaç bitten oluşur?
- 27:22Kaç bitten oluşacağı daima log 2 bu
- 27:24arada hani 2 ikilik tabanda ikincilik
- 27:27tabanda kaç bitten oluşur? B base base'i
- 27:30sayının base'i sistem verilogta
- 27:34işte binary octal
- 27:37e hexadecimal bir de decimal sayı
- 27:40belirtebilirsiniz.
- 27:42E ve sayının değeri hani şu base'de
- 27:44belirttiğiniz değer mesela şunu
- 27:46diyebilirsiniz. 8 decimal 10. Bu şu
- 27:49demek şuradaki decimal 10 sayısı var ve
- 27:52bu 8 bitten oluşuyor. Daha sonra ben
- 27:55mesela bu sayı üzerinde end kapısıyla
- 27:57işlem yapacağım zaman şimdi 10 normalde
- 27:59ne? 10 1 0 1 0 değil mi? Şurada adam 4
- 28:05tane daha 0 varmış diye kabul ediyor.
- 28:07Çünkü bu sayıyı ben 8 bit dedim. Bunu 8
- 28:09bitlik yapıyor. Normal hardware
- 28:11description language neydi zaten?
- 28:13Hardware'i tanımlamak için. Hardware
- 28:14neydi? Daima binarylerle uğraşıyordu. O
- 28:16yüzden adamın binaryilerle ulaşacak olan
- 28:19işte kodun edatuluun e kaç bitten
- 28:22oluştuğunu bilmesi lazım. Onu da şu nle
- 28:26belirtiyoruz. Kaç bitten oluştuğunu. Ama
- 28:27daima burası bit oluyor. Mesela burada
- 28:298d 10 ama bu ikilik desimal sayı değil.
- 28:32Yani 8'lik 8d10 diyeceğim. Yani kaç
- 28:35bitten oluştu?
- 28:37Burada bazı örnekleri var. Mesela bu
- 28:39binary B, burada binary şu B'nin de
- 28:42kısaltmaları var. İşte B, D, H. E bir de
- 28:47o oktal. Bu binary bu decimal, bu
- 28:49hexadecimal, bu octal. Oktalase 8. Hiç
- 28:53kullanmadım hayatımda. E şimdi burada
- 28:56binary olarak mesela 3 bitlik binary
- 28:59sayı var. 101. E bu 3 bitten oluşuyor.
- 29:03Burada mesela bir tane şey de
- 29:05yapabiliyorsunuz. Şu eni belirtmeden
- 29:07tırnak B11 diyorsunuz ya. Bu unsized
- 29:10oluyor artık. O sırada kaç bite bunu şey
- 29:13yaparsa eee aslında şey yapıyor. E
- 29:15compiler burada nasıl davranıyor
- 29:17bilmiyorum. Değişiyor compilerlara göre
- 29:19de. Yani siz yapmayın belli olmaz.
- 29:21Compiler'a göre değişir bu. Eee bunlar 8
- 29:24bitlik mesela. Bu 3 bitlik decimal 6
- 29:26sayı. Bu 6 bitlik octal 42 sayısı. Bu 8
- 29:31bitlik hexadeimal av sayısı.
- 29:34E 42 unsize. Bunu default olarak decimal
- 29:37olarak alıyor.
- 29:40Mesela şöyle bu herhalde mesela bu
- 29:42sayıyı belirtmezseniz büyük ihtimalle 32
- 29:44bit filan alıyor olabilir. O compilera
- 29:46bağlı. 32 bit alıyordur. Ama bir sayı
- 29:50kullanmak istiyorsanız ki rispack
- 29:52işlemci tasarlarken mecbur
- 29:53kullanacaksınız.
- 29:56Bu şekilde belirtebiliyorsunuz sayıları.
- 29:59Burada bir tane bit manipulation örneği
- 30:02var.
- 30:04Artık modül falan belirtmedim.
- 30:09Y'ye bir assignment yapıyoruz. Y aslında
- 30:13burada şöyle A yani Y assignment'ını
- 30:16aslında birden fazla variable'ın
- 30:19parçalarını toplayarak bir araya
- 30:21getirerek oluşturuyorum. Eee bu bir
- 30:25Y burada 12 bitlik bir sinyal ya. Y
- 30:28logic 110
- 30:32G diye tanımlanmış diyelim yukarıda.
- 30:35Ve bu modülün AB girişleri var. Bu
- 30:38modüle AB sinyalleri giriş yapmış. Bu AB
- 30:42sinyallerinin bazı parçalarını alarak
- 30:44ben sinyali oluşturacağım.
- 30:48A sinyali mesela belki burada
- 30:513 bitlik olabilir. A belki logic logic
- 30:5430 a diye logic 20a diye tanımlı mesela.
- 30:59Eee b sinyali de belki bunun gibi ama
- 31:02yapmak istediğim şu Y sinyali ilk başta
- 31:06list significant bitler olarak 6 bitlik
- 31:081. 0 1 0'dan oluşacak.
- 31:127 biti A0 olacak. Sonra
- 31:168'den 8 9 10 bitleri B0 olacak. Bu şu
- 31:20ifade şunu diyor. B0'ı 3 kere ekle yan
- 31:24yana. 3 tane B0
- 31:273 kere çokla.
- 31:30A0 şurada. Burada da şu 6 bitlik sayı. 6
- 31:34bitlik sayı.
- 31:35Sonra A'nın 2'den 1'e kadar olan kısmını
- 31:39seç. Yani A'nın hepsini değil de ben
- 31:41A'nın 2'den 1'e kadar olan kısmını
- 31:43seçmek istiyorsam A parantez içinde 2 1
- 31:46yazıyorum. Köşeli parantez. Bu şuna denk
- 31:48geliyor. A2 A1 baktığımız zaman burada
- 31:53most significant biti a2 sonra A1 tane
- 31:56B0 sonra A0 da şu 6 bitlik sayıdan
- 32:00oluşan bir 12 bitlik sayıyı ben bu
- 32:02şekilde Y'ye assign edebiliyorum. Yani
- 32:05bu şuna karşılık geliyor.
- 32:09Böyle bazen mesela şurada bir tane
- 32:12sayıyı yazarken 6 bitlik sayı denmiş.
- 32:14Undersore kullanılmış. Sayıyı bazen
- 32:17böyle durmadan 10'ları çok yan yana
- 32:19eklerseniz okuması düşük oluyor. Öyle
- 32:22bir durumda undersore kullanarak sayılar
- 32:24arasında biraz boşluk bırakıp göze daha
- 32:27hoş gelmesini sağlayabilirsiniz. Burada
- 32:29da yaptığı o. Underscore bu işe yaramış.
- 32:34Burada bit manipülasyonlarıyla ilgili
- 32:35ikinci bir örnek var. Bir modül
- 32:37tanımlamışız. Bu modül şunu yapıyor. 8
- 32:40bitlik inputlar alıyor. Select Kutputa o
- 32:448 bit'lik inputlardan bir tanesini
- 32:46veriyor. D0'ı veya D1'e veriyor. Burada
- 32:49structural veril kodu yazmışız. Çünkü
- 32:51daha önce bir max 2 tasarlamıştık
- 32:53hatırlarsanız. Daha önce tasarladığımız
- 32:55max 2 vardı. O 4 bitlik maxı.
- 32:59Şuralarda bir 4 bitlik max tasarladık
- 33:01diye hatırlıyorum.
- 33:06Aynen. Şurada 4 bitlik bir max
- 33:07tasarlamıştık. Bu max'ı iki kere burada
- 33:10kullandığımı düşünün.
- 33:12Bir tanesi list significant bit maxı.
- 33:15Yani aslında 4 bitlik list significant
- 33:17bitlik parçasını bu seçiyor. Most
- 33:20significant bitlik parçalarını bu
- 33:21seçiyor. Bu benim modülüm.
- 33:24Modülümde şu Max 2'den iki tane
- 33:27kullanıyorum. Birisinin ismi LSB Max,
- 33:29diğeri de Most Significant Bit Max.
- 33:32E yine burada bit manipülasyonları nasıl
- 33:34yapılıyor onu göstereceğim. Normalde
- 33:36modülün girişinde 8 bitlik D0 ve D1 var
- 33:39ama benim şu max 2'lerim 4 bitlik.
- 33:42Şimdi ben burada
- 33:44seçme işlemi yapacakken şu list
- 33:47significant bit max'ı eee 0dan 3'e kadar
- 33:52olan bitleri seçmesi gerekiyor.
- 33:53Hangisinden alması gerekiyorsa bu diğer
- 33:56most significant bite bak bakanında
- 33:584'ten 7'ye kadar olan bitleri alması
- 34:00gerekiyor. Öyle bir durumda ne
- 34:01yapıyorum? Bu max 2'ye D0 0'dan 3'e
- 34:05kadar olanları bağlıyorum. D1 için de
- 34:07aynısını yapıyorum. Ve bunun output'u da
- 34:09Y'nin 0'dan 3'e kadar olanını
- 34:12karşılık geliyor. S biti ikisinde de
- 34:15ortak oluyor. Ya bu iki max paralel
- 34:17çalışıyor bu arada. Hani böyle başta
- 34:19dedim ya bunu sequential düşünmeyin. C
- 34:21kodu gibi böyle sırayla çalışıyor değil.
- 34:23Her satır paralel çalışıyor bunda. Yani
- 34:26şu daha önce gösterdiğim örneklerde de
- 34:28mesela burada şuradaki bütün satırlar
- 34:30paralel çalışıyor aslında. Şu satırların
- 34:32hepsi şu eselerin hepsi aynı anda
- 34:33çalışıyor. Öyle düşünmeniz gerekiyor.
- 34:35Böyle sırayla çalışmıyor bunlar. Çünkü
- 34:37donanım oluşuyor. Donanım dediğiniz aynı
- 34:39anda çalışan şeyler. Bizim
- 34:41tasarladığımız işlemciler sequential
- 34:43çalışacak.
- 34:46Burada da dediğim gibi ara parantezde bu
- 34:49bilgiyi verdik. E 4 bitlik girişler var.
- 34:53Select'imiz aynı. Ya burası list
- 34:56significant 4 bit'i seçiyor. Burası most
- 34:58significant diğer 4 bit'i seçiyor. Bu
- 35:00şekilde mesela bir structur ve log kodu
- 35:02yazabiliyoruz. Floating output'tan geçen
- 35:05hafta bahsetmiştik. Floating normalde
- 35:09bir burada ya floating ne zaman
- 35:11oluşuyor? Bir tane wire var. Bunu
- 35:14sürmüyorsunuz. Mesela böyle bir
- 35:15transistör
- 35:17mesela şöyle bir transistör bağladınız
- 35:19bu wire'a. Aslında tam öyle o. Mesela şu
- 35:23VDD şurası VSS
- 35:26eee transistör bağladınız.
- 35:31Altta MOS var. Üstte P mouse var ama
- 35:34bunu sürmüyorsunuz. Mesela bunu şimdi
- 35:36burayı sürmeyince bunların ikisi de
- 35:39kapalı. Öyle olunca bu hatta ne var
- 35:42belli değil. Buna Z deniyor. High
- 35:45impedance. Yani sürülmüyor bu. Kimse
- 35:47sürmüyor bunu. Sürülmeyince de bilmiyor.
- 35:490 mı 1 mi? Referansa göre değişir.
- 35:52Burada da tret bir tane modül yazmışız
- 35:56biz. Şöyle bir trate modülümüz var.
- 35:59Enable input'umuz var. Bu bir bitlik
- 36:00input. Bir de 4 bitlik A inputumuz var.
- 36:04Çıkışımızda da
- 36:06Y output'umuz var. Y output'un türü
- 36:08artık tri. E ya aslında burada output
- 36:12tanımlarken tre kullanılmış. Yani logic
- 36:14yerine tre kullanılmış. Aslında bu biraz
- 36:16daha özel olarak biz tre de
- 36:18kullanılabilir
- 36:19diyoruz. Yani bunda tre değer de
- 36:21gelebilir. Aslında logic de alıyor bu
- 36:22arada. Logic de 0 1 x z'yi alabiliyor bu
- 36:25değerleri ama burada tre diye
- 36:27belirtilmiş. Büyük ihtimalle sentuna
- 36:29diyoruz. Hani burada tre state bir
- 36:31output olabilir diye. Ya ben hayatımda
- 36:33hiç kullanmadım. Hani tre diye bir şey
- 36:35hayatımda kullanmadım. Ama burada
- 36:37örnekte böyle bir kullanımı var. Şimdi
- 36:39böyle bir durumda burada modülün içinde
- 36:41yaptığımız ne? Asign Y deyip enable 1
- 36:45ise A'yı ver.
- 36:48Eğer değilse Z'yi ver. Z ne demek? Sürme
- 36:51demek aslında. Ben tula burada sürme
- 36:53diyorum. Yani Z atıyorum. Z atamak da
- 36:55aslında tula sürme demek. Yani aslında
- 36:57öyle bir durumda tool bunu sürmüyor.
- 37:00Ya böyle bir tre state kullanabilirsiniz
- 37:02ama tre state'ler genelde pek
- 37:04kullanılmıyor. TR state yerine max da
- 37:06kullanabilirsiniz.
- 37:08Genelde max kullanılıyor. Böyle bir
- 37:10sistem verilog yapısı.
- 37:14Bir sorusu olan var mı arkadaşlar bu
- 37:16noktaya kadar? Şu an bizda combinational
- 37:19log'yi gördük.
- 37:21Ara verelim. Aradan sonra sequential
- 37:23logiyi görmeye başlayalım. Bir soru
- 37:25varsa sorabilirsiniz bu arada.
- 37:29Ya konular basit aslında.
- 37:32Diğer dersten itibaren asıl meselelere
- 37:34girmeye başlayacağız.
- 37:37Devam edelim.
- 37:40Şimdi sistem veri logda combination
- 37:41logyi gördük. Sequential'a başlayacağız.
- 37:44Zaten burada artık önemli olmaya
- 37:46başlayacak. Çünkü combination logicle
- 37:48çok ya combination logic aslında bizim
- 37:50için bir aracı. Önemli olan aslında
- 37:53burada sequential logicin içine
- 37:55combinational logic yedirmek. Biz o
- 37:57şekilde işlemcileri yapıyoruz. Yani
- 37:59sequential logicin içine combinational
- 38:01operasyonlar giriyor. O sayede
- 38:03işlemciler oluyor. Yani normalde her şey
- 38:05sequential
- 38:07işlemcide.
- 38:12Sequential logic'te de
- 38:16e ya biz sistem veril okta. Şimdi
- 38:18sequential logic dediğimizde neler
- 38:19vardı? Geçen hafta görmüştük.
- 38:22Leşler ve filifloplar vardı.
- 38:25Bu leh ve flip flop aslında bizim
- 38:28hafızalarımız sequential logic'te. Çünkü
- 38:30neydi? Bir operasyon yapıyorduk. Bunlar
- 38:32end or kapıları, subtractorlar. Ama bir
- 38:35yandan biz bir de state tutuyorduk.
- 38:37Hafızamız vardı. O hafızayı tutmak için
- 38:39de flip flop kullanıyorduk. LH veya
- 38:41fliip flop kullanıyorduk. E bunlarla biz
- 38:45finance state machine oluşturduk. Daha
- 38:46önce de demiştim. İşlemci de zaten büyük
- 38:48bir finance state machine.
- 38:51Şimdi sistem ve log bazı keyword'ler
- 38:53kullanıyor aslında leh ve flip flopları
- 38:55oluşturmak için. Bu kullandığı keyword
- 38:58aslında always. E bu always'in üç farklı
- 39:01türü var. Ondan bahsedeceğim.
- 39:05Şimdi always statement'ı şöyle. Always
- 39:07diyorsunuz, add diyorsunuz. Yine bu
- 39:10keyword. Sensitivity list var. Ve burada
- 39:12bir statement var. Bu always şunu
- 39:14söylüyor size. Şu sensitiv listendi
- 39:16herhangi bir sinyal, ben burada
- 39:19sinyaller belirtiyorum. Herhangi bir
- 39:21sinyal değişirse bu statement'ı çalıştır
- 39:24diyor. Always blow'un yaptığı iş bu
- 39:26aslında. Yani bir sensitive list'tteki
- 39:28herhangi bir sinyal değişirse
- 39:31e bu sensitivity liste veya olan olay
- 39:34oluşursa e bunun türleri var. Buradaki
- 39:37statement çalışacak. Olay bu. En basit
- 39:41örneği mesela ben bir dilip flopu sistem
- 39:43ver kullanarak nasıl betimleyebilirim?
- 39:46Yine aynı mantıkla modül tanımım var. Bu
- 39:50modülün ismi modül fop. Dfil flop yapmak
- 39:54istiyorum.
- 39:55Input olarak clonum var. 4 bitlik girdim
- 39:59var. 4 bitlik çıktım var. Yani bu 4
- 40:01bitlik bir filip flop. Şurada clock
- 40:03inputu var. 4 bitlik D inputu var. 4
- 40:06bitlik Q output var. Ya bu flip flop
- 40:08normalde ne yapıyordu? clockun rising
- 40:11edge'inde bu D''deki değeri buraya
- 40:14yazıyordu. Q'da da aynı zamanda o çıktı
- 40:16olarak duruyordu. Bir sonraki clock
- 40:18kadar da bu değeri saklıyordu.
- 40:22Şimdi ben bu flip flop'u tanımlamak için
- 40:24ne yapıyorum? Always FF diye bu
- 40:26always'in bir üç türünden bir tanesini
- 40:29kullanıyorum. Always FF şunu söylüyor.
- 40:31Ben bu bloğun içinde flip flop yapmak
- 40:33istiyorum. Always FF. FF orada flip
- 40:34flop'a karşılık geliyor. Ve burada
- 40:38event'ım var. Sensitive listte ne olması
- 40:40gerekiyor? Always fage clock deyince bu
- 40:44clock da bir keyword. Şunu diyor. Şu
- 40:47clone yükselen kenarında yani positif
- 40:50edinde 0'dan 1'e doğru giderken bu
- 40:54always f'i çalıştır. Always FF'in içinde
- 40:56ne var? D''yi Q'ya atama var. Yani şu
- 40:58D''yi Q'ye atama var. Şimdi clock yokken
- 41:02mesela şurada veya clone folding edinde
- 41:04bu blok çalışmadığı için aslında ben
- 41:07burada sistem ver dilini kullanarak şunu
- 41:10diyorum. Sadece clock geldiğinde D''yi
- 41:14sakla. Clock yokken veya clock
- 41:16fallingageinde clock 1ken veya 0ken
- 41:20DQ'nun eski değerini sakla. O kalsın.
- 41:23Böylece bir filop yapmış oluyorum. Bunu
- 41:26sentezlediğim zaman da ben bir flip flop
- 41:29elde etmiş oluyorum. Bu en basit 1
- 41:31bitlik veya burada gördüğümüz 4 bitlik.
- 41:33Burada 1 bitlik de olabilirdi. Yani
- 41:35input logic d alıp 1 bitlik sinyalde
- 41:38saklayabilirdik.
- 41:40Şimdi bu basit flip flop. Şimdi reset
- 41:43eklemek istediğimde nasıl yapacağım?
- 41:45Yine bir modülüm var. Flop bu sefer R
- 41:48ekledim. Flop R dedim. Resettable fip
- 41:50flop bu. Çünkü reset lazım bu arada.
- 41:52Hani ilerisi için bilgi vereyim. Mesela
- 41:54bir işlemci yaptınız. Power tuşuna
- 41:56bastınız. İşlemci çalışmaya başladı.
- 41:58Bilinen bir değerde, bilinen bir statete
- 42:01başlatmanız lazım işlemciyi. En
- 42:03basitinden mesela işlemcinin
- 42:05registerlarında bir sayı tutulması
- 42:07lazım. Sıfır tutulması lazım. Mesela
- 42:09işlemci abuk subuk sonuç üretmesin.
- 42:11İşlemcinin bazı statelerini sizin
- 42:13bilinen değerlere atamanız lazım. Bu
- 42:15reset de buna yarar. Yani bilinen bir
- 42:17değerde devre başladığı zaman sonuçta
- 42:20benim registerlarım var. O registerlarım
- 42:22rastgele değerlerle başlamaz. Bildiğim
- 42:24bir değerle başlatırım registerları.
- 42:26Reset de o yüzden işe yarar. Yani
- 42:28kullandığınız flip floplarda reset hemen
- 42:31hemen yani hepsinde kullanmazsınız.
- 42:33Hatta çoğunda reset biz kullanmayız ama
- 42:35önemli flip floplar varsa mesela valid
- 42:37biti gösteren fliip flop eee yaptığımız
- 42:40işlemcide ve o flip flop hayati bir
- 42:42değere sahipse mesela o flip flop
- 42:44register'a yazma yapacak. Şimdi ben
- 42:46devreyi başlattım yazma biti 1 oldu
- 42:49yanlışlıkla başlarken 1 diye başladı.
- 42:51pat diye yazma yapar. O yüzden biz
- 42:52onları hep bilinen
- 42:54stat'te yani etkisiz olacak şekilde
- 42:56başlatırız. Reseti de kullanma amacımız
- 42:58odur. Burada mesela senkron resetli bir
- 43:01flip flopumuz var. Eee senkrondan kasıt
- 43:04şu clock geldiği zaman
- 43:07ben bu resetin değerine bakıyorum. Bir
- 43:10de asenchron reset var. Onu da
- 43:11göreceğiz. Y senchron resette şu
- 43:13şekilde. Ben always yine aynı şekilde
- 43:15always f bloğum var. Always f bloğum ne
- 43:18zaman tetikleniyor? Clone Rising
- 43:19Edge'inde ve clone rising edge'inde ben
- 43:22reset eğer 1 ise Q'yu 0dan başlatıyorum.
- 43:26Yani şurada 0 saklıyorum. Bilinen bir
- 43:28res state'e sokuyorum bunu. Eğer reset
- 43:31yoksa, reset gelmiyorsa, reset o sırada
- 43:331 değilse, 0sa reset direkt eski
- 43:37statement'ı elsini yapıyorum. Else de ne
- 43:39diyor? D''yi Q'ye ata diyor. Yani bu if
- 43:43reset varsa eğer reset yoksa yani reset
- 43:460sa şu elsi yap diyor. Els de zaten
- 43:48bizim bir önceki örnekte gördüğümüz
- 43:50normal fliploptu. Resetsiz filip loptu.
- 43:53Ya burada sadece biz bir f if özel
- 43:56yapısını kullanarak bir bitlik eee
- 43:58resetlik resetlenebilen bir flif flop
- 44:01yaptık. Yani bir bit ekledik reset
- 44:02bitini ve reset bitine göre Q'nun
- 44:05değerini 0 mı saklayacak yoksa D''yi mi
- 44:06saklayacak? Bunu belirledik.
- 44:09resetli halini yaptık bunun. Mesela
- 44:11burada bir enable daha eklenmiş hali
- 44:13var. Resete ek olarak bir de enable'ım
- 44:15var.
- 44:17Eee buradaki resetin türü şu bu arada.
- 44:19Ben artık asenkron reset ekliyorum
- 44:21burada. Nasıl ekliyorum? Bir öncekinde
- 44:23sadece cllo'a bağlı olarak bu always
- 44:26floğu çalışıyordu. Bunda artık hem clowa
- 44:31bağlı olarak hem de resete bağlı olarak
- 44:33bu floğu tetikleniyor. Yani normalde
- 44:37clock rising edge'in de bu alwaysight f
- 44:40bloğu çalışıyor ama aynı zamanda reset 1
- 44:43olsa da bu alwaysight f bloğu çalışıyor.
- 44:45Böyle olunca şu clone rising age olsun
- 44:48olmasın herhangi bir anda ben reseti 1'e
- 44:50çekersem yine çalışıyor bu alwaysf
- 44:52bloğu. Öyle bir durumda ne oluyor? Artık
- 44:56reset clone edine bağlı değil. Asenkron
- 44:59reset olmuş oluyor. Aradaki fark bu. Bu
- 45:02anlaşıldı mı arkadaşlar bu fark? Buyur.
- 45:09>> Hangisini? Şunun reseti mi?
- 45:14Şimdi şöyle o zaman da şöyle bir sorunla
- 45:18karşılaşırsın. Sistem verilog hani bunu
- 45:19ileride göreceğiz ama mesela bu şu
- 45:22resetlemeyi dışarı aldın diyelim. Şuraya
- 45:24aldın. Sistem verilog şu Q'yu hem bir
- 45:28always bloğunda hem başka bir yerde
- 45:30sürmene izin vermez. Eee kafası karışır
- 45:33yani o zaman. Mesela o zaman eee şimdi
- 45:35şöyle diyelim mesela aldım diyelim.
- 45:37Burada Q'yu reset geldi mesela. reset
- 45:41dedin. Hatta turn logic yaptın. Tamam
- 45:43mı? Sign dedin. Q dedin. Eşittir dedin.
- 45:48Eee, reset varsa mesela reset varsa
- 45:51dedin, eee, şey olsun dedin. Tamam mı? 0
- 45:53olsun dedin. Tamam mı? Yoksa da e Q'nun
- 45:57bir önceki değeri olacak demen
- 45:58gerekiyor. Bu arada Q'yu tutması
- 46:00gerekiyor. Şimdi öyle bir durumda. Şimdi
- 46:02bu statement'da bu statement paralel
- 46:03çalışacak. Clock gelecek. Hangisini
- 46:05atayacak? Diyelim ki o sırada da reset
- 46:08yok. Hangisi çalışacak? Yani orada dilin
- 46:11karışıyor. O yüzden sistem veril şeyler.
- 46:12Hani hiçbir zaman bir verival'a bir
- 46:16always şimdi ileride birden fazla always
- 46:18blowu kullanmaya başlayacağız. Ya bir
- 46:20verival'a always bloğunun içinde atama
- 46:22yaptıysan başka yerde atama yapma der.
- 46:24Sistem verilo log yapmaman gerekir.
- 46:26Yani temiz hali bu. Aslında aslında biz
- 46:29burada şunu yapıyoruz. Yani bizim dilin
- 46:32bize yani öyle bir dili kullanıyoruz ki
- 46:35yarın bir gün bu dili dili sentezleyecek
- 46:38tool. sentez yaparken bunun reset
- 46:40olduğunu, resetli flop aldığını anlasın.
- 46:42Yani onu da betimlemenin yöntemi
- 46:44standart bir yöntem bu ya. Bunu mecbur
- 46:46ezberleyeceğiz. Mesela standart
- 46:48yöntemimiz bu. Şimdi burada enable'lı
- 46:51olanı var. Enable'lı olan şöyle bir de
- 46:54şimdi if vardı. Reset olunca ben 0
- 46:57atıyordum. As kısmına geliyorum. As
- 46:59kısmında tekrar bir if koyuyorum. If
- 47:01enable 1 ise Q'yu D''ye atıyorum. enable
- 47:051 değilse
- 47:07hiç Q eski değerini korumaya devam
- 47:09ediyor. Always FF bloğundaki davranış
- 47:11bu. Çünkü burada always FF diye bir
- 47:13keyword'üm var benim. Burada öncelik
- 47:16resette yani reset 1 ise bu
- 47:18resetleniyor. Reset 1 değilse enable 1
- 47:21ise eee bu değer yeni değer yazılıyor.
- 47:24Ha ikisi de reset 0 enable 0 isa Q eski
- 47:27değerini koruyor. Çünkü always f
- 47:29bloğunun yaptığı bu.
- 47:35Burada öncelik sırasında reset öncelikli
- 47:37çünkü yani şurada çalışırken şu reset
- 47:40önden gelen
- 47:42ilk resete bak demiş dil bize. Biz
- 47:45yazarken dili ya bu bunu yaptığımız
- 47:47zaman biz enable ve resetli bir dfil
- 47:49flop e oluşturmuş oluyoruz. Ya enable'lı
- 47:53dfil floplar çok hani genelde resetli df
- 47:56flop kullanırsınız ama enable'lı dil
- 47:58flop yok. Power reduction için genelde
- 48:00clock enable'lı piloplar kullanırsınız.
- 48:04Onları daha farklı bir tür.
- 48:07Şimdi bu always fti. Bir de always lege
- 48:10diye bir yapımız var bizim. Always leh
- 48:12deed oluşturmak için kullanacağımız
- 48:15yapılar. Lech de aslında bir sequential
- 48:17devre elemanı. O da 1 bit tutuyor. Ama
- 48:21leçin geçen derste bahsetmiştik. Leçin
- 48:23tutma mekanizması biraz farklı ve o
- 48:25tutma mekanizması çok sağlık değil. O
- 48:27yüzden ledge kullanımından uzak dururuz.
- 48:30Eğer profesyonelse kullanabilirsiniz.
- 48:32Biz kullandığımızda oluyor mesela
- 48:33leşleri ama yani gerçekten ne
- 48:35yaptığınızı bilmeniz gerekiyor.
- 48:36Tehlikeli eleman. Çünkü normalde bütün
- 48:38dijital devreler aslında filipiloplarla
- 48:40çalışmak üzere kurgulanmış. Sentest
- 48:42toolları tarafından. Lash de yine bu
- 48:44şekilde. Always leh diyorum. Sensitiv
- 48:46list yok. Eğer clock geldiyse artık
- 48:49clockum 1 mesela if clock dedin mi artık
- 48:51bir öncekinde always taraf posage clock
- 48:53diye belirtiyordum ya. Burada
- 48:56artık clone değerine bakıyorum. O slash
- 48:59diyorum. Posage clock filan yok. Eğer
- 49:01clock 1 ise DIYQ'yı atıyorum. Eğer clock
- 49:040a e direkt eski değerini saklıyor. Bu
- 49:07da leç'i oluşturuyor. Ya bir sentlu
- 49:09burada always le'i gördü mü şuraya
- 49:12bakıyor. Şu içindeki statement'lara göre
- 49:15uygun elemanı koyuyor aslında. Burada
- 49:18mesela ben le dediğim için le'i koyuyor.
- 49:20Sentez ama büyük ihtimalle leç
- 49:22kullanmazsınız. Bu derste hiç
- 49:24kullanmazsınız ondan eminim. İleride de
- 49:26eee çok ileri ihtimallerde
- 49:28kullanırsınız. Yani leşler genelde çok
- 49:31kullanılabilir şeyler değil. Uzman
- 49:33olunca kullanırsınız.
- 49:35Eee ama dikkat etmeniz gerekiyor. Bazen
- 49:37mesela öyle kodlar yazarsınız ki
- 49:38örneklerini göstereceğim yanlışlıkla led
- 49:40üretir. Onlara karşı dikkat etmeniz
- 49:42gerekiyor.
- 49:46Ya sequential logyye baktığımız zaman
- 49:48aslında genel yapısı şöyle always var.
- 49:50Bu always aslında burada bir keyword ama
- 49:53normalde always yerine benim şey yazmam
- 49:55gerekiyor. Ya flip flop sistem verilo
- 49:57logta. Bu arada verilo logta always
- 49:59statement'ı var. Sistem verilo logda
- 50:01always fed bir de always comp. Birazdan
- 50:04onu da göreceğiz. 3üncü türü var always
- 50:06comp diye. Eee sistem verilog'da bu
- 50:08always çoklanmış. Yani üç ayrı türü
- 50:12getirilmiş bunun. Ya genelde sequential
- 50:14logic'te ama genel yapı şu şekilde.
- 50:16Always below. Bu always ff, always ledge
- 50:18veya always comp olur. Sensitivity listi
- 50:21var bunun genelde bu FF'te bu sensitive
- 50:24list var. Always FF için. Bu sensitive
- 50:26list de bizim clone rising age mi,
- 50:28falling age mi orada mı tetikleyeceğiz?
- 50:30Onu belli ediyor. Burada da statement
- 50:33var. Çalışacak olan statement. Ya mesela
- 50:35ben burada ki flip flop'umu rising ed'te
- 50:39değil de falling ed'te sample yapsın
- 50:41deseydim ben pos yerine şurada nech
- 50:44yazacaktım.
- 50:45Mesela resetim 1de değil de 0da
- 50:48resetlesin deseydim buraya ne geç reset
- 50:51olacaktı. Nege var bir de. Ama reset
- 50:53için böyle bir durumda eee yani asenkron
- 50:56resetlerde ne geç aslında değeri belli
- 50:59ediyor. 1 veya 0 olmasını belli ediyor.
- 51:00Çünkü bu asenkron reset.
- 51:04Ya reset clock gibi değil. Rising
- 51:05Falling Edge'i yok resetin ama dili
- 51:08tanımlarken hani ortalık karışmasın diye
- 51:10reseti de resetin polaritesini de belli
- 51:13ederken negeage veya posage keyword'ü
- 51:16kullanın demişler ama clock'tan da ayrı.
- 51:17Clone posage negeci e rising mi falling
- 51:21mi onu belli ediyor. Reset için level'ı
- 51:23belli ediyor. 0da mı resetlenecek 1de mi
- 51:26resetlenecek onu belli ediyor.
- 51:30Şimdi
- 51:32sequential logic böyleydi. Şimdi
- 51:33combination logic using always dersek
- 51:37burada da always comp denilen
- 51:40statement'ı kullanmamız gerekiyor. Bu
- 51:413üncü always türü. Always f, always
- 51:43ledch ve always comp. Always comp 3üncü
- 51:45türü. Eee ve artık normalde biz ne
- 51:50yapmıştık? İlk örneklerde assign
- 51:52statement'ı kullanmıştık. Assign why
- 51:54deyip mesela bir operasyonu o atamıştık.
- 51:56Onun yerine artık assign kullanmak
- 51:58yerine always comp deyip assign
- 52:00kullanmadan operasyonlar yapıp atama
- 52:04yapabiliriz. Burada aslında dersin
- 52:06başındaki bu assign'la yaptığımız
- 52:08örneğin aynısı var ama artık always comp
- 52:11blowuyla yapıyoruz bunu. Inputlarımız
- 52:13var. AB inputlarımız dörder bitlik ve
- 52:16outputlarımız var 5 tane. Aynı örneği
- 52:19normalde ben bunu assign always
- 52:21compagini yazmamıştım buraya. E always
- 52:24compagtu. E hepsi assignaydı. Onun
- 52:29yerine ben bunu comp'la yapıyorum. O
- 52:32comp diyorum. Begin diyorum. T'in
- 52:35arasına bu beginin end'in arasında
- 52:38yapacağım operasyonları assign demeden
- 52:40direkt yazıyorum. Mesela burada A and B
- 52:43diyorum. Dörder bitlik 4 bitlik end
- 52:45operasyonu yapılıyor. Y1'e atanıyor bu
- 52:47şekilde. Şimdi ben bu always comp
- 52:50sayesinde normalde always şimdi bunu
- 52:53assign'la da yapabilirsiniz ama always
- 52:55comp'la yaparsanız bunu always compun
- 52:58içinde if case yapıları kullanmaya
- 53:01başlıyorsunuz. O yüzden zaten mümkün
- 53:03mertebe assign kullanmayın. Hani ben
- 53:05size ilk başta gösterdim structural log
- 53:07nasıl oluyor diye ama mümkün mertebe
- 53:09always comp kullanın. Zaten assignile
- 53:11yapabildiğiniz her şeyi always comp'la
- 53:13da yapabilirsiniz. Always comp hatta
- 53:14daha fazla esneklik sağlıyor. Sağladığı
- 53:16esnekliklerde bu if case yapılarını
- 53:19kullanmanız. E bunlar da zaten
- 53:20C'dekileri yapılara benzer.
- 53:33Şimdi case statement nasıl? Eee,
- 53:35normalde burada bir tane daha başka bir
- 53:38örnek var. Seven segment modül örneği
- 53:40var. E, 4 bitlik data girişimiz var. 7
- 53:43bitlik segment çıkışı var. Segment 7
- 53:46bitlik sayı. Aslında bunun yaptığı şu.
- 53:48Eee, ben bir decimal sayı veriyorum
- 53:51burada. Şu data decimal sayı 4 bitlik.
- 53:53Sonuçta 0'dan 9'a kadar ya bunu 4 bit
- 53:56tutabiliyor. E 4 bitlik data. Sev
- 53:59segment dediğimiz aslında bizim şöyle 7
- 54:01tane eee LED ve bu sayı neyse ona
- 54:05karşılık gelen mesela diyelim ki şurası
- 54:07tam sıralamasını bilmiyorum ama E A B C
- 54:10D E F G olsun mesela burası ona karşılık
- 54:14gelen ledleri yakıyoruz. Mesela 1 yazmak
- 54:16istiyorum buraya. A la B'yi yakıyorum
- 54:18sadece. A la B sadece 1 oluyor. İşte 2
- 54:20yapmak istiyorum mesela. F A Y D C
- 54:25mesela yanıyor. Bunu yapan fonksiyon bu.
- 54:28E 4 bitlik data girişi var. Deimal data
- 54:32ve 7 bitlik çıkışı var burada. 7 seven
- 54:35segment. O yüzden seven 7 tane let var.
- 54:38Şimdi ben 0 yazmak istiyorsam şunları
- 54:41yakıyorum sadece. Bu ona karşılık
- 54:43geliyor. 1 yazmak istiyorsam sadece A'
- 54:45la B yanıyor mesela. ona karşılık
- 54:47geliyor. Şuymuş. Eee, tam burada A, B, C
- 54:50benim yazdığım doğru olmayabilir ama
- 54:52hangisine denk geliyorsa artık. Eee,
- 54:54şimdi burada yaptığı da şu modül tanımı
- 54:56var. Always combun içinde case
- 54:58statement'ı kullanıyorum ve case data
- 55:00neyse
- 55:02şu data, bu data 4 bitlik bir data ya.
- 55:05Data neyse onun karşılığı olan segment
- 55:08ataması gerçekleşiyor. Yani data 0sa şu
- 55:10satır çalışıyor. Data 2 ise şu satır
- 55:12çalışıyor. Bu şekilde hiçbiri değilse
- 55:15normalde data burada 0 la 9 arasında
- 55:17olması gerekiyor değil mi? Deci
- 55:18number'la diyelim ki yanlışlıkla eee
- 55:21sistem yanlış çalıştı. 10 dedi. Yani 1
- 55:2410 dedi. Öyle bir durumda bunların
- 55:26hiçbirine girmediği için default
- 55:27statement'a giriyor. Bu da default'u
- 55:30çalışıyor. Yani bu ne demek? Büyük
- 55:31ihtimalle hepsi sönsün demek. Yani
- 55:33yanlış data geldi çünkü demek.
- 55:38Yani default kullanmanız önerilir.
- 55:40Default kullanmazsanız mesela ileride
- 55:42gelecek örneği led oluşturabilirsiniz
- 55:44yanlışlıkla.
- 55:46Çünkü ya biraz bahsedeyim size. Mesela
- 55:49burada default kullanmadınız diyelim.
- 55:51Default yok. Öyle bir durumda bu datanın
- 55:54aslında olabileceği değerler 0 1 1 ya
- 55:57değil mi? Şimdi ama ben normalde bu
- 56:00casein içinde 0'dan 9'a kadar olan
- 56:02atamaları tanımladım. Yani segment e
- 56:05mesela 0 geldiyse şu olacak. 9 geldiyse
- 56:08bu olacak dedim. Bu 0' la 9 arasını
- 56:10tanımladım ama bu gelecek data 0'dan
- 56:1115'e kadar gelebilir. Öyle bir durumda
- 56:15otomatik sentez tool şunu yapar ya der
- 56:17büyük ihtimalle kullanıcı bu always
- 56:19combu tanımlarken eee data 0 la 9
- 56:22arasında gelirse şu değerleri atamamı
- 56:24istedi ama gelmezse mesela 10 geldi
- 56:26diyelim. 10 gelirse segmenti
- 56:29değiştirmememi istedi diye düşünür.
- 56:31Şimdi değiştirmemesini istemek ne demek?
- 56:34bir leç veya flip flow kullanması
- 56:35gerekiyor. Eski değerini tutması
- 56:37gerekiyor. Clock da yok. Clock da
- 56:39olmayınca clock da tanımlanmamış leç
- 56:41kullanır devre. Segmentin eski değerini
- 56:4310 geldiyse tutmak ister. O yüzden bir
- 56:45default statement kullanmak sizi burada
- 56:47led oluşturmaktan yanlışlıkla kurtarır.
- 56:49Ya led oluşturmak da şey demek yani
- 56:51mahvetmek demek. Yani led e çok dikkatli
- 56:54kullanılması gereken devre elemanları. e
- 56:57timingi filan tam uymuyor. O yüzden hani
- 56:59buralarda mümkün mertebe ledden
- 57:01kaçınmanız için default statement
- 57:03tanımlamanız gerekiyor.
- 57:06Burada başka bir örnek var. Priority cas
- 57:09örneği var. E burada
- 57:13örneğimiz ne yapıyor bizim aslında?
- 57:15Priority logy'yi tanımlıyor. Eee
- 57:17normalde most significant bit A4 bitlik
- 57:20sinyal. Bu A4 bitlik sinyalin most
- 57:23significant biti 1 ise çıktım benim 4
- 57:26oluyor. Yani hangi biti bu A'nın hangi
- 57:28biti 1 ise o bitin indeksini veriyor.
- 57:32Yani kaçıncı bitte olduğu ya o bitin
- 57:36indeks karşılığı 1 oluyor. Burada işte
- 57:39A'nın most significant biti 1 ise diğer
- 57:42bitlere bakma diyorum artık. O bakmayı
- 57:44da case Z statement'ı veya case X
- 57:47statement'ı kullanarak söyleyebiliyorum.
- 57:49Yani şurada yine case bu ama şunu
- 57:52diyorum. Case yerine case yazıyorum.
- 57:55Casey de şunu söylüyor. Şu a girişi eee
- 57:59şey diyor. A girişinin eğer son biti 1
- 58:02ise e şuradakileri umursama diyor. Yani
- 58:05buradakileri don't caret diyor.
- 58:11Bu anlaşıldı mı arkadaşlar?
About this transcript
This page contains the full transcript of W2 SystemVerilog Part1 TR by Hasan Erdem Yantır, generated from the public captions YouTube serves with the video. The transcript has 7,463 words across 1,370 segments, with the original timestamps preserved so you can click any line to jump to that moment in the embedded player.
What you can do with it
Use the transcript to take notes, quote the speaker, build a study guide, generate a summary with ChatGPT or Claude via the YouTube Summary tool, or export it as a timed subtitle file with YouTube to SRT. You can also re-open it in the transcriber to translate the transcript into 100+ languages.
Free YouTube transcript tool
YouTube2Text is a free YouTube transcript generator — no signup, no daily limit. Paste any YouTube link and get the full transcript instantly, with timestamps, click-to-jump, translation to 100+ languages, AI prompts for ChatGPT, Claude, and Gemini, and exports to TXT, SRT, VTT, or Markdown.