Karmaşık programlanabilir mantık cihazı (CPLD), donanım repertuarınızda olmazsa olmaz bir parçadır. Adından da anlaşılacağı gibi, bu çipleri ihtiyaç duyduğunuz mantık fonksiyonlarını sağlayacak şekilde programlayabilirsiniz. Bu, eski çiplerin yerini almak veya sadece farklı teknolojileri öğrenmek ve denemek için bir yol olabilir. CPLD kullanarak ve deneyerek öğrenmekten daha iyi bir yol olabilir mi?
Lehim gerektirmeyen devre tahtaları da dahil olmak üzere birçok şeye takabilmek için bir CPLD modülü oluşturdum, ancak bir hata yaptım. Lehim gerektirmeyen devre tahtasında mevcut bağlantı alanı 1,1 inçmiş. Ben de 1 inç genişliğinde bir alan oluşturdum, bu da her iki tarafta da bir sıra kablo için yer bırakmadı. Hmm.
Ama biraz geriye dönüp ne yaptığımı daha detaylı anlatayım: Kit halinde monte edilebilen, evde kolayca lehimlenebilen, bir devrede programlanabilen ve 3.3 veya 5 volt ile çalışabilen programlanabilir bir mantık devresi yapmak istiyorum.
Kolay lehimlenebilir bir kit oluşturmak için, 3.3V ve 5V versiyonları da bulunan ve güç kaynağından bağımsız olarak programlamasını koruyan eski bir CPLD bileşeni kullandım. Mantık devresi ise, 32 veya 64 makro hücreli devre kartları için uygun iki versiyonu bulunan Altera Max serisinden bir CPLD entegresidir. Makro hücreler, mantıksal "terimler" kullanılarak programlanan ve daha sonra programlanabilir ara bağlantılar aracılığıyla diğer makro hücrelerle birbirine bağlanan temel mantıksal yapı taşlarıdır.
Şemaya baktığınızda, çok fazla içeriğe sahip olmadığını görebilirsiniz: temelde CPLD, devre içi programlama devresi ve CPLD mantığını çalıştıran osilatör.
Bu parça, 44 pinli plastik uçlu çip taşıyıcı (PLCC) kullanan EPM7032 ve EPM7064 olarak adlandırılır; uç kısmının J şeklinden dolayı bazen J uçlu olarak da adlandırılır. Bu paket, delikli sokete takılabilir veya doğrudan PCB'ye lehimlenebilir.
Dahili bir osilatör içerdiğinden, CPLD harici bir saate ihtiyaç duymadan durum tabanlı işlemler gerçekleştirebilir ve kendi başına hızlı sayaçlar oluşturabilir. Harici bir saat mevcutsa, modül üzerindeki yüksek hızlı saat, harici saatin her yükselen veya düşen kenarında bir saat olayı oluşturmak için kullanılabilir ve yine de CPLD/FPGA yönergelerine uyulabilir; yani, saat girişini "Asenkron" sürücüler yerine dahili global saat ağını kullanmanız gerekir. Bu osilatörün nominal güç kaynağı voltajı 1,8 ile 5,5 volt arasındadır.
Videoyu izlerseniz, osilatördeki "INH" pinini nasıl ele alacağıma dair kişisel tercihlerimi anlattığımı göreceksiniz; kısaca, teknik özellikler sayfasının yasal olup olmadığını kontrol ettikten sonra, genellikle boşta bırakıyorum.
Bu tür işlevlerle uğraşırken aklıma gelen nedenler arasında, giriş pinlerini doğrudan güç hatlarına bağlamaktan (mümkünse) hoşlanmamam da vardı. Yani, gerek olmasa bile, geçici durumlar sırasında akımı sınırlamak için seri dirençler kullanmayı tercih ediyorum.
Yıllar içinde üretimde (büyük partilerde) bazı sorunlar gördüm ve bazen güç döngüsü gibi durumlar, doğrudan güç rayına bağlı pinlerin, çipin kendisinden daha yüksek bir voltaja sahip olmasına neden oluyordu ki bu kötü bir durum. Son olarak, pini bir direnç (güç veya topraklama) aracılığıyla güç rayına bağlayın ve insanlar fikirlerini değiştirip pini daha sonra kullanabilirler. Bu, özellikle kullanılmayan kapılarla ilgili deneyimimde geçerlidir; muhtemelen bu kapıların asla boşta veya bağlantısız bırakılmaması gerektiğini biliyorsunuzdur. Bir pull-up direnci kullanarak, sinyali bağlayabilir ve bakır izlerini kesmeden kapıyı kullanabilirsiniz.
10 pinli konektör ve birkaç direnç, programlama devresini oluşturuyor. Tüm dirençler pull-up direnci olsaydı, bir direnç ağı kullanırdım, ancak ne yazık ki, bir tanesi topraklanmış durumda.
Böyle bağımsız bir CPLD'yi programlamak için özel bir programlayıcı gereklidir. Bunu söylemek benim için kolay, çünkü genellikle yanımda birkaç tane bulunduruyorum, ancak sizde yoksa, oyuna girmek çok da zor olmayacaktır. Onaylı "Altera USB Blaster" 50 dolara satılıyor ve Digikey ve diğer yerlerden satın alınabilir. eBay'den birkaç klonum var, bunlardan biri Altera, Xilinx ve Lattice'i aynı anda destekleyen bir klon. İnternette kendi klonunuzu yapmak için kullanılabilecek bir proje ve kod var, bunu programlayıcı klonları yapma projesi için olası videolar listemde belirteceğim. Ayrıca anakart, Arduino, PIC vb. programlanabilen bir shield tasarımı da göstereceğim.
CPLD'yi derlemek ve programlamak için gereken yazılım Altera'dan ücretsiz olarak temin edilebilir, ancak bu eski parça eski 9.1 sürümünü gerektiriyor. İyi haber şu ki, bu benim en sevdiğim eski sürümdü. Sezgisel bir zamanlama analizörü vardı, ancak daha sonraki bir sürümde kaldırıldı.
PCB, devre kartı uygun olduğu sürece basit, çift taraflı bir tasarıma sahiptir; topraklama ve bazen de güç kaynağı için bakır kullanma eğilimindeyim. Bazen döküm o kadar bozulur ki, sorunlara veya özensiz sonuçlara yol açabilir; bu nedenle bakır dökümü yine bir araçtır, ancak yönetilmesi gerekir.
Günümüzde birçok (hatta çoğu) CAD yazılım paketi, nihai ürünün 3 boyutlu görünümlerini içeriyor; ancak görüntülerin doğruluğu, parçaları temsil etmek için kullanılan 3 boyutlu modellerin doğruluğuyla sınırlıdır. Burada 44 pinli soket, programlama konektörü ve osilatör için 3 boyutlu modeli nereden seçtiğimi görebilirsiniz. İşte kullanmayı sevdiğim bazı 3 boyutlu yazılım paketleri:
Birçok şirket ayrıca bileşenlerinin 3 boyutlu modellerine de sahip. Molex, bu alanda iyi iş çıkaran şirketlerden sadece bir örnek.
Yaptığım hata estetik gibi işlevleri etkilemiyor ve asıl sorun da bu değil; sorun, tek lehim gerektirmeyen devre tahtası için uygun olmaması.
Tasarımı birileriyle paylaşmayı düşündüğüm anda, CPLD'nin şematik sembollerinden ve 40 pinli konektörün pin düzeninden (yani toplam kapladığı alandan) hemen memnun kalmadım. 40 pinli çift sıralı bir konektör sembolü aldım ve 1 inçlik bir kapladığı alana göre ayarladım, ancak pin numaraları 1, 2, 3, 4... değil, DIP paketindeki gibi yan tarafta 1'den başlayarak 3, 5, 7... şeklinde numaralandırılmış, tıpkı şerit kablo konektörleri gibi. Bu nedenle, modüle nasıl bağlanılacağını belirlemek ve sorun gidermek için sezgisel olmayan bir kapladığı alan söz konusu.
Benzer şekilde, CPLD pin atamaları biraz kafa karıştırıcıydı ve semboller oluşturmak için Sınır Tarama Tanımlama Dili (BSDL) kullanan bir dizi yardımcı program kullandım. Çoğu büyük üretici, ana akım bileşenleri için BSDL dosyaları sunar ve bu dosyalar sembolleri ve paketleri (yarı) otomatik olarak oluşturmanıza olanak tanır. Herhangi bir otomasyon gibi, bu da bir araç olarak görülmeli ve en iyi sonuçlar için daha fazla işlem gerektirebilir. Bu durumda, pinleri alfabetik sırayla listelemesine izin verdim, bu da kart üzerindeki pinleri takip ederken neredeyse rastgele bir durum yaratıyor. Sadece o gün çok endişeli olduğumu söyleyebilirim.
Bu kısayolların bedelini bir gün yolda ödersiniz. Bu modülü değiştirmeye gittiğimde, parçanın kendisine uygun bir pin yerleşimi belirleyeceğim, böylece osiloskop probunuzu nereye koyacağınızı bilmek, şematik sembole bakmak kadar kolay olacak.
Devre kartları kullanırken, çoğunlukla estetik veya kullanışlı olan başka iyileştirmeler de vardır. Pin 1 göstergesinin birçok pakette daha yaygın olması gerekiyor ve ben her zaman osiloskop topraklaması veya VOM kablosunu bağlamak için basit bir topraklama noktası tercih ederim. Bunu, güç ve topraklamanın alt pinlere sıkıştırılmak yerine doğrudan karta uygulanabilmesi için iki pinli bir konektör ekleyerek sağlayabilirim.
Devre kartını değiştirmeden önce, fiziksel ve estetik sorunlar açısından düzgün çalıştığından emin olmak istiyorum. Güç verdikten ve osilatörün düzgün çalıştığını doğruladıktan sonra, programlayıcıyı taktım. 3.3V sürümü programlama yazılımından daha yeni olmasına rağmen, CPLD'yi algıladı ve "bilinmeyen" bir cihaz olarak gösterdi.
Ardından, Quartus'ta bir sayaç oluşturdum ve pin numaraları atadım. Hızlı derleme ve indirme işlemleri ile osiloskopta görülen sayaç fonksiyonu, tasarımın uygulanabilir olduğunu doğruluyor.
Verilog'da hızlı test devresi oldukça basittir. Kod aşağıda listelenmiştir. Şematik ve Verilog test devresini içeren bir ZIP dosyasını Quartus II projesi olarak indirebilirsiniz (9.1 sürümü gereklidir).
Daha önce de belirttiğim gibi, tasarımı paylaşırken veya herhangi bir sorun giderme işlemi yaparken gereken detaylara daha fazla dikkat etmek için devre kartında ikinci bir revizyon yapacağım. Alt konektörün genişliğini 0,9 inç veya daha az olarak ayarlamam gerektiğinden, standart bir "geniş" DIP paketi olan 0,6 inç'e ayarlamaya devam edebilirim. Bunu yapmak, alt pinlerin CPLD soketinin ayak izinden dışarı çıkmasına izin vermek anlamına gelir. Bunu üretim ortamında yapmazdım çünkü o zamanlar elle monte edilmişti, ancak amaçlardan biri elle lehimleme kiti yapmaktı. Elle lehimlemenin dezavantajı, osilatörün SMD yüzey montajlı bir muhafazada olması gerektiğidir; delikli versiyon çok büyüktür ve genellikle istediğim voltaj aralığını desteklemez.
Bu modülleri kullanarak eksiksiz, basit bir bilgisayar oluşturmak mümkün mü? Sanırım bellek eklemem gerekiyor.
Haha...evet, bilgisayarın türüne bağlı. Ancak "gerçek" mikrodenetleyiciler/mikrobilgisayarlar, modülün "pin bağlantısından" etkilenir; bu da modülden herhangi bir işe yarar şey yapabilmek için yeterli terminoloji elde edemeyeceğiniz anlamına gelir.
64 bit boyutunda, işlemci gerektirmeyen, tamamen NTSC kamera zamanlama ve mod kontrolcüsü oluşturdum.
Nand to Tetris kitabında kullanılan Structural Verilog ve HDL aşağı yukarı aynıdır.
Delikli parçalar neden kullanılır? 0805 kaynak işlemi çok kolay! Her tamirci için bu beceriyi öğrenmenin tam zamanı.
Üstteki soketi alttan lehimlenmiş pinlerin üzerine gelecek şekilde yerleştirirsem, "6 merkezli (40 pinli bir çipi simüle eden) veya çapraz vb." kullanabilirim. Bu, alt uçları lehimlemek için tamamen manuel lehimleme bileşenleri olacaktır. Üst soket ayakların arkasında.
Ancak, yeni başlayanlar için alttan lehimlemek zordur. Breadboard'un PCB'si için pin başlıkları lehimlerken (eBay'de bulabileceğiniz bu ucuz SMD adaptör kartları prototipleme için kullanılabilir), pin başlıklarını breadboard'a takıyorum, sonra PCB'yi üzerine koyuyorum ve ardından kolayca lehimleyebiliyorum. Breadboard'lar için çok uygundur. Alttan lehimlemeniz gerekiyorsa, daha da zordur.
CPLD ortada ise (kablolaması daha kolay olabilir), üst üste binmeden çapraz olarak monte edilebilir, 4 sıra bulunur; veya CPLD bir tarafta olabilir:
Lehimlemeden önce konektörü devre tahtasına takma öneriniz için teşekkür ederim. Benimki biraz dengesiz.
Bir ucunda DIP formatında devre tahtası pinleri, diğer ucunda ise çip soketinin "dongle" tipi olan bir bağlantı noktası nasıl olur? Çip, devre tahtasının ucuna asılabilir. Kablo yönlendirmesi sıkışık olacaktır.
|####### ******************** |. Evet, tıpkı Xilinx ve Lattice'in "ücretsiz" sürümleri olduğu gibi, ben de Altera'nın "ücretsiz" sürümünü kullanmaya karar verdim. Açık kaynaklı desteğin neleri kapsadığını anlamak için Al Williams ile olan süreci tamamlamam gerekiyor; bu da cihaz serisinin özel özelliklerini içermeli. Bununla birlikte, ücretsiz sürümle de çok şey başardım.
Evet, sanırım CPLD'nin pinlerle çakıştığını gösteriyorsunuz. Doğru anladıysam, bu rev 2 gibi görünebilir. (Seri) üretim için tasarım yaparken, "elle lehimleme" adımına her zaman alerjim var çünkü bunlar çakışıyor (aslında bileşen olmayan taraftaki lehim pinleri). (Zaten elle lehimlenmiş bir bileşen) ama bu sadece küçük bir kit, üretim odaklı bir tasarım değil. Yaşım ilerledikçe kurtulması zor olan bazı alışkanlıklarım var. 
Bence, geniş T şeklinde bir bölümü olan CPLD ve pasif bileşenler içeren T şeklinde bir devre kartı, breadboard'un kenarına asıldığında çok kullanışlı olacaktır. Adafruit RasPi T-Cobbler'a (http://www.adafruit.com/products/2028) benzer bir şey. Bu, breadboard alanının büyük bir kısmının kullanılabilir olmasını sağlayacaktır.
Ne yazık ki, bu üretimin durdurulması, XR2206 ve ICL8038 tabanlı tüm fonksiyon jeneratörlerinde olduğu gibi, yan projelerdeki kullanımını ciddi şekilde sınırlayacaktır.
İlginç bir fikir. Bu iki çipi beğendim. CPLD eski bir teknoloji değil, sadece 3.3V'ta daha ucuza satın almanın bir yolu.
"Saçmalık" dediğin şeye gelince... gerçekten de devre tahtasına yerleştirmek için yeni bir düzen oluşturmadın. Önce kabloyu devre tahtasına yerleştir, sonra da CPLD'yi kabloya bağla. Ya da, eğer güç ve topraklama şeritlerini birinden çıkarabiliyorsan, 2 devre tahtası kullan.
Altium ve Eagle hakkında. KiCad'i düşündünüz mü? Altium'u Eagle'a tercih etmenizi gerektirecek herhangi bir sınırlaması yok ve varsayılan olarak bağlantısız tüm pinler için DRC hataları üretiyor. Bir pini gerçekten açmak istiyorsanız, bunu belirtmeniz gerekiyor. (Belki sadece giriş için, çıkış için değil ve henüz kontrol edilmedi). Bir diğer harika özelliği ise öğrenmesinin çok kolay olması. Sadece bir öğleden sonra sürdü ve mükemmel giriş kılavuzu sayesinde başladım.
Delikli bağlantı yerine (daha büyük olan) SMD direnci tercih ederim. Kullanımı daha kolay. PCB'yi sürekli çevirmek zorunda kalmıyorsunuz. (Aynalama yüzünden bazı aptalca hatalar yapıldı...). Ayrıca direncin ucunu kesmek zorunda kalmıyorsunuz. Bir tasarımı paylaşırken, birden fazla paket bir PCB'ye veya tek bir parçaya rahatlıkla yerleştirilebilir. SMD direnç delikli bağlantı. (Yerleşimi biraz daha karmaşık hale getiriyor).
"KiCad Başlangıç Kılavuzu"nu PDF formatında kullandım. Kullandığım eski sürüm 29 sayfa, en yeni sürüm ise 52 sayfa. Diğer eğitimlerde (video bağlantıları dahil) bulabilirsiniz: http://kicad-pcb.org/help/tutorials/
Hackaday ve The Amp Hour'dan [Chris Gemmell]'in KiCad hakkında bir dizi video hazırladığını biliyorum: http://kicad-pcb.org/help/tutorials/
KiCad faydalı olabilir, Rev 2'de neler olacağına bakayım. Önerileriniz için teşekkür ederim. Bağlantısız girişler DRC (ERC) için iyidir ve bağlantı elemanları ve onları yumuşak veya G/Ç tutan diğer şeyler için çoğu CAD bağlantı kesme mesajından genellikle kaçınılabilir.
Hızlı bir test yapın ve konektörü boş bir tabloya ekleyin, açıklamaları ve DRC'yi çalıştırın. Her pin için DRC hataları verdi. Ancak, bilinen bağlantısız pinleri işaretlemek çok basit.
Pasif moda ayarlandı. Arama yapmam gerekiyor (Bileşeni Düzenle -> Kütüphane Düzenleyici ile Düzenle). Kütüphane düzenleyici açılır ve bileşeninizi ayrı bir pencerede yükler, bileşenin herhangi bir bölümünü kontrol edebilir veya değiştirebilirsiniz. Değiştirilen bileşen şemanızda kaydedilebilir veya güncellenebilir. Bu, bileşenleri değiştirmeyi çok kolaylaştırır. Kütüphaneyle çok ilgilenmiyorum. Örneğin, cpld kullanıyorsanız, pinlere anlamlı isimler atamak istersiniz. Daha da önemlisi, kendi bileşenlerinizi tasarlamak için iyi bir arayüz var.
KiCad'in ERC'sinde, "bağlantısız" pinler "pasif pinlerden" farklı bir pin türüdür ve tüm "bağlantısız" pinler hata üretecektir. ERC'nin çalışma şekli kendi tercihlerinize göre kolayca ayarlanabilir: Araçlar -> Elektrik Kuralları Denetleyicisi -> Seçenekler.
Yayın tarihi: 18 Kasım 2021





