Verilog ile ROM Tasarımı, dijital elektronik mühendisliğinde oldukça önemli bir konudur Bu eğitimde, Verilog dili kullanarak ROM bellek tasarımını öğreneceksiniz Detaylı bir şekilde anlatılan konular sayesinde, ROM belleklerin çalışma prensipleriyle ilgili önemli bilgiler edineceksiniz Böylece, bu önemli konuda kendinizi geliştirecek ve dijital devre tasarımında başarılı olacaksınız
Bu makalede, Verilog dilini kullanarak ROM tasarımı hakkında tam bir açıklama yapacağız. Read-only bellek yani ROM, verileri sadece okuyabileceğiniz bir hafıza türüdür. ROM, özellikle dijital elektronik tasarımlarında vazgeçilmez bir elemandır. ROM'ların tasarımı oldukça önemlidir ve bu makalede, Verilog dili kullanarak ROM tasarlama adımları hakkında detaylı bilgi vereceğiz.
Verilog dilinin kullanımı oldukça yaygın bir şekilde FPGA (Field Programmable Gate Array) tasarımında kullanılır. FPGA'lar, tasarımda kullanılan mantık elemanlarının konfigürasyonunun yeniden programlanmasına izin veren esnek bir elektronik bileşendir. Bu makalede, Verilog dilinin temel özellikleri ve VHDL'ye karşı avantajları hakkında bilgi verilecek. Ayrıca, Verilog dilinde kullanılan temel yapısal elemanlar hakkında da bilgilendirme yapılacak.
Verilog dilinde sözdizimine ilişkin öğeler, modüller, sinyal değişkenleri ve genel dil yapılarını içerir. Verilog syntax, birçok farklı değişken ve isimlendirme seçeneklerini barındırır. Genel olarak, Verilog dilinde yazılan kodların kolay anlaşılabilir, optimize edilebilir ve hızlı bir şekilde kodlanabilmesi için bir dizi özel yapı vardır.
Verilog'da, tasarımın sürümlerini burada tanımlayacak olan modüller bulunur. Modüller, düzenli bir yapıda tasarlanan birimlerdir ve farklı işlevleri yerine getirmek için kullanılır. Modülleri herhangi bir Verilog tasarımına dahil edebilir ve Verilog modüllerinin birçok farklı türü vardır. Modüller arasında yararlı parametreler göndermek ve iletişim kurmak, tasarımın yapısını iyileştirmek için sinyal değişkenleri kullanılır.
Verilog'da, bir sinyal değişkeni bir değişkenin değerine atanan bir isimdir. Her sinyal değişkeni belirli bir veri türüne sahiptir. Verilog dilinde, giriş sinyalleri, çıkış sinyalleri ve iç sinyaller olmak üzere üç tip sinyal değişkeni bulunur.
ROM tasarımı, kullanıcının yazdığı kodlara bir yanıt oluşturabilen veri bellekleridir. ROM'lar, tasarımın doğru çalışmasını sağlamak ve tasarımın büyüklüğünü azaltmak için sıklıkla kullanılır. Verilog kullanarak ROM tasarlama adımları şu şekildedir:
ROM bellek, her bir veri için bir adres yazılımı barındırır. ROM bellek içindeki her veri için benzersiz bir adres belirlenir. Verilog programında ROM adresleme işlemi, ROM'u dizinleme yoluyla adreslemek için kullanılan tanımlayıcıları içerir.
ROM okuma işlemi, sadece ROM'dan veri almanın videosidir. Ayrıca, çıktı üreten bir devreli anahtar olarak adlandırılır. Verilog'da, ROM bellekten veri almak için "always" ifadesi kullanılır. ROM'dan veri alırken, her okumada tüm adresler okunmalı ve daha sonra veriler tespit edilmelidir.
Bu makalede, Verilog ile ROM tasarımı örnekleri verilecektir. Bu örnekler, kullanıcıların daha iyi bir anlayış kazanmasına yardımcı olacak ve farklı işlevler için veri belleği tasarımları sunacaktır.
ROM Nedir?
ROM, Türkçe'ye "sadece okunabilir bellek" olarak çevrilen "Read-Only Memory" teriminin kısaltmasıdır. ROM, yazılan bilgilere yalnızca okuma işlemini gerçekleştirmek için erişim sağlayabileceğimiz bir çeşit bilgi depolama aygıtıdır.
Bu bellekler, genellikle herhangi bir program dahilinde kullanılacak verilerin saklanması ve işlemcinin okuması için kullanılır. Bu nedenle, ROM bellekler, özellikle çip setleri gibi elektronik aygıtların tasarımı için kritik öneme sahiptir.
Ayarlanabilir veya programlanabilir okunabilir bellekler, örneğin FPGA ve CPLD gibi programlanabilir mantık cihazları da dahil olmak üzere, birçok farklı bellek türü içerir. Bu bellek türleri, değişen çıktılar üretmek için beyaz bir liste olarak kullanılabilir ve programlanabilir liiştelerle donatılabilir.
ROM bellekler, verilerin önceden yazıldığı bir zamanında ve bu belleklerin yanı sıra erişim için kullanılmaktadır. Bu nedenle, önceden yüklenmiş verileri göstermek ya da verileri gizlemek için kullanılan tümleşik devrelerde sıklıkla kullanılır.
Verilog Nedir?
Verilog, dijital devrelerin tasarımında kullanılan bir HDL (High-Level Design Language) dilidir. Bu dil, karmaşık dijital tasarımların kolayca tasarlanabilmesini sağlar. Özellikle FPGA tasarımında oldukça sık kullanılan Verilog, dijital sistemlerin tasarımından, doğrulama ve sentezlemeye kadar birçok alanda kullanılmaktadır.
Verilog, 1984 yılında Phil Moorby tarafından tasarlanmıştır ve günümüzde sürekli olarak geliştirilmektedir. Verilog, temel olarak sinyal seviyesinde tasarım yapmaya odaklanır ve devre elemanlarını ve ara bağlantıları açıkça ifade etmeyi amaçlar. Bu nedenle, Verilog dijital sistem tasarlama sürecinde oldukça yararlı bir araçtır.
Verilog'in temel özellikleri arasında, modül tabanlı tasarım yapabilme, sinyallerin tanımlanması ve yönetilmesi, işlem, karar verme ve döngü gibi kontrol yapılarını içermesi yer alır. Verilog gömülü sistemler, mikroişlemciler, FPGA'lar ve ASIC'ler gibi birçok alanda kullanılan bir dil olduğu için, her seviyede tasarım gereksinimlerine uygunluğu da oldukça yüksektir.
Bu nedenle, Verilog dilini öğrenmek, FPGA tasarımlarının yanı sıra diğer dijital devrelerin de tasarımı açısından oldukça önemlidir.
Verilog Syntax
Verilog, tasarımcıların dijital devreler oluşturmak için kullandıkları bir HDL (Yüksek Düzeyli Dil) dir. Verilog, 1980'lerde Sun Microsystems tarafından geliştirildi ve daha sonra IEEE standardı olan IEEE 1364 olarak adlandırıldı. Verilog, dünya genelinde en popüler HDL'lerden biridir ve FPGA ve ASIC tasarımında sıklıkla kullanılır.
Verilog, sözdizimi bakımından C ve Pascal gibi diğer programlama dillerine benzer. Verilog'da en temel yapısal eleman, modüllerdir. Modüller, dijital devrelerin işlevsel parçalarını temsil eder. Her modül bir giriş listesi ve bir çıkış listesi içerir.
Verilog'da sinyal değişkenleri, dijital devrelerdeki girilen ve çıkan sinyalleri temsil eder. Sinyal değişkenleri, bit genişliği belirtilerek tanımlanır. Verilog'da, çoğu zaman bit genişliği belirtilmezse, değişkenin 1 bit olarak kabul edilir. Bunun dışında Verilog, if-else, case ve for döngüleri gibi diğer programlama dillerindeki yapıları içerir.
Verilog, dijital devrelerin tasarımında kullanılabilecek birçok temel yapısal eleman içerir. Bu yapısal elemanları, bitwise ve mantıksal operatörler ve çeşitli işlevlerle birlikte kullanarak dijital devre tasarımını gerçekleştirebilirsiniz. Verilog hakkında daha fazla bilgi edinmek için, bu temel yapısal elemanlardan ayrıntılı bir şekilde bahsedeceğimiz ileri düzey Verilog eğitimleri de mevcuttur.
Modüller
Verilog'da modüller, farklı elemanlar arasında bağlantı kurmak için kullanışlıdır. Modüller, Verilog kodunda en küçük yapısal eleman olarak kabul edilir. Modüllerin kullanımı, Verilog dilinin tasarım esnekliğini artırır.
Verilog'da modüller, 'module' anahtar kelimesi ile tanımlanır. Tanımlamadan sonra, modülün giriş ve çıkış portları tanımlanır. Giriş portları, modüle gelen verileri kontrol etmek için kullanılırken, çıkış portları ise modülün işlem sonucunu iletmek için kullanılır.
Örneğin, bir basit AND kapısı bir modül olarak tanımlanabilir. Modülün tanımlanması aşağıdaki gibidir:
module and_gate (input a, input b, output c); |
---|
// AND kapısı işlemi burada yapılır |
endmodule |
Yukarıdaki kod, AND kapısının tasarımına ait Verilog modülünü tanımlar. 'a' ve 'b' giriş portları, 'c' ise çıkış portunu tanımlar.
Modüller arasında bağlantı kurmak için, modülü kullanmak istediğimiz kodda 'instance' anahtar kelimesiyle modül tanımlanır. Modül, giriş ve çıkış portlarına bağlantılarla kullanılır.
Aşağıdaki örnek, AND kapısı modülünü kullanarak 'a' ve 'b' değerlerinin çarpımını hesaplar:
module and_tester; |
---|
reg a, b; |
wire c; |
and_gate a1(a, b, c); |
initial begin |
a = 1'b1; |
b = 1'b0; |
#5 $display("a and b is %b",c); |
end |
endmodule |
Yukarıdaki örnek, AND kapısı modülünün kullanımını gösterir. 'a' ve 'b', 'reg' formatında tanımlandıktan sonra, 'and_gate' modülü tanımlanır. 'initial begin' bloğundaki kod, 'a' ve 'b' girişlerine değer atar ve ardından 'c' çıkışı $display() fonksiyonu ile görüntülenir.
Modüllerin kullanımı, Verilog kodunun daha anlaşılır hale gelmesini sağlar ve tasarımın daha organize bir şekilde yapılmasını sağlar.
Signal Değişkenleri
Verilog dilinde sinyaller, tasarım bloklarındaki verilerin taşınmasını sağlar ve modüller ve alt modüller arasında haberleşmeye izin verir. Sinyaller, genellikle bir tür veri türü ve boyutu ile tanımlanır. Bu sinyaller, programlama dillerindeki değişkenlere benzerdir.
Verilog'da sinyaller, belirli türlerde verilere sahip olabilir. Örneğin, bir sinyal tek veya çoklu bit değerleri alabilir. İkinci durumda, belirli bir bit genişliği sinyal ile ilişkilendirilir. Sinyaller, kabul edilebilecek değerlerin belirtilmesi de dahil olmak üzere, belirli bir veri türüne sahip olabilir.
Sinyallerin tanımlanmasında kullanılan Verilog sözdizmi, genellikle 'wire' veya 'reg' tanımlaması ile başlar ve tanımlayıcı takip eder.
Örneğin, single-bit 'a' sinyalinin tanımı 'wire a;' şeklinde yazılır veya multi-bit 'b' sinyali için 'wire [3:0] b;' gibi bir ifade kullanılır.
Bir sinyal genellikle tanımlama ve kullanma aşamalarında değişken olarak düşünülür. Tanımlama aşamasında, sinyalin veri türü, boyutu, genişliği ve bit sıralaması belirtilir. Daha sonra, sinyaldeki verileri okumak veya yazmak için kullanılabilir.
Bir sinyal, bir blok içinde kaydedilmiş bir değer olarak işlev görebilir. Bu kayıtlı sinyaller bir reg değişkeni olarak tanımlanır. Ve bir sinyali kaydetmek için ‘always’ blokları kullanılır.
Verilog dilinde, sinyal değişkenleri, tasarım yapılarında önemli bir rol oynar. Bu nedenle, bir tasarımcı, sinyallerin doğru bir şekilde tanımlanması ve yönetilmesi gereken herhangi bir FPGA tasarımını hatasız bir şekilde başarmak için sinyalleri iyi anlamalıdır.
ROM Tasarımı
Verilog dilini kullanarak bellek tasarımı yaparken, ROM tasarımı oldukça yaygındır. ROM, Read-Only Memory kelimelerinin kısaltmasıdır ve bellek düzenlenmesi için kullanılır. Verilog ile ROM tasarımı yapmak oldukça kolaydır ve bazı temel adımlarla tasarım gerçekleştirilebilir.
ROM tasarlamak için öncelikle bellek boyutu ve bellekte depolanacak veriler belirlenmelidir. Bellek boyutu adres genişliğine bağlıdır, yani bellekte kaç bit adres bulunduğuna bağlıdır. Adres genişliği ile bellek boyutu çarpıldığında toplam bellek kapasitesi elde edilir. Bu adımdan sonra, ROM tablosu verileri oluşturulur ve belleğin içine yerleştirilecek şekilde düzenlenir.
ROM tasarımı yaparken, bellek tablosunun adres girişi kullanılarak bellekten okuma işlemi gerçekleştirilir. Adres girişine bağlı olarak, bellek tablolarından veriler okunur ve çıkışa verilir. Veriler, genellikle 8,16 veya 32 bit olarak okunur ve okuma işlemi adres girişinin dalgalandırılmasıyla gerçekleştirilir.
ROM tasarımlarını gerçekleştirirken, kontrol edilmesi gereken birkaç nokta vardır. Bellek tablolarının doğru şekilde oluşturulduğundan ve bellek düzeninin doğru yapılandırıldığından emin olmak önemlidir. Ayrıca, adres genişliğinin ve veri genişliğinin doğru şekilde belirlendiğinden de emin olunmalıdır. ROM tasarımı yaparken kullanılan bellek kapasitesi, FPGA üzerindeki bellek kaynaklarının optimal şekilde kullanımına göre ayarlanmalıdır.
ROM Adresleme
ROM belleklerde veriler farklı adreslerle işaretlenir. ROM adresleme işlemi, adres girişine göre çıkışa erişim sağlamak için kullanılır. ROM adresleme, her bellek hücresinin bir adresle belirlendiği bir işlemdir. ROM belleklerde adresleme tipik olarak sıradan bir sayaç ile yapılır. Sayaç değerleri bellek hücrelerinin adreslerini ifade eder.
Verilog dilinde, ROM'un adres girişi bir bit veya birden fazla bite sahip olabilir. Verilog'da adres girişleri, "reg" veya "wire" ifadesiyle tanımlanabilir. Ayrıca, ROM veri girişi "parameter" ifadesiyle tanımlanabilir. Bu değişkenler, ROM tasarımında kullanılan Verilog sözdizimi elemanlarıdır.
ROM adresleme için, adres girişi opsiyonel olabilir. Adres girişinin hiçbir kullanımı yoksa, ROM tasarımında sabit veriler kullanılır. Adres girişi kullanıldığında, bellek hücrelerinden birine erişilebilir. Adres girişi, bellek hücrelerinin sayısına göre uzunluğu olan bir sayıdır. Bellek hücre sayısı 2'nin n. kuvveti olarak belirlenir ve adres girişi de n sayısı kadar bite sahip olmalıdır.
Bellek boyutuna bağlı olarak, adres çıkışı birden çok bitli bir dizidir. Adresleme işlemi yapılırken, adres dizisi bellek hücresinin değerini belirler. Adres çıkışı ile belleğe erişilir ve bellek hücresinden veri okunur. Veriler, isteğe bağlı olarak "output" ifadesiyle tanımlanabilen Verilog sözdizimini kullanılarak projeye dahil edilir.
ROM belleği tasarlamak, FPGA ve diğer dijital devreler için önemlidir. ROM belleklerine sadece okuma işlemi yapılabilir. Bu, kullanım alanlarının kısıtlı olduğu anlamına gelebilir, ancak ROM bellek tasarımı için kullanılabilen Verilog öğeleri sayesinde işlem oldukça basit hale gelir.
ROM Okuma İşlemi
ROM okuma işlemi, tasarladığımız ROM üzerinde depolanan verileri okuyarak çıkışı üretmek için gerçekleştirilir. Bellekte saklanan veriler, adres sinyaline göre belirlenen bellek hücrelerinde saklanır. Bellek hücrelerinde depolanan veriler, okuma işlemi sırasında çıkışa aktarılır.
ROM adresleme işlemi sırasında, ROM bellekten veri okumak için gerekli adres sinyali alınır. Adres sinyali, bellek hücrelerine erişim için kullanılan bir çift kutuplu binary sinyaldir. Adres sinyali, belli bir bellek hücresine erişmek için kullanılır. Adres sinyaline göre, bellek hücrelerinde saklanan veriler okunur ve çıkış sinyali oluşturulur.
ROM okuma işlemi genellikle tek yönlüdür. Yani Tüm ROM bellekteki bilgiler bir kerede okunur ve yazılamaz. Bellekteki veriler, sadece okunabilir ve değiştirilemez. Okuma işlemi sırasında, bellekte saklanan veriler belirtilen adrese göre okunur ve çıkışa aktarılır. Tipik olarak, bellekteki veriler seri olarak okunur ve çıkışta farklı bir sıraya yerleştirilir.
ROM okuma işlemi, Verilog dilinde birçok yöntemle gerçekleştirilebilir. İşlem basit olduğu için, tasarım gereksinimlerine göre farklı okuma yöntemleri kullanılabilir. Bu nedenle, ROM tasarımlarındaki okuma işlemleri genellikle tasarımın genel gereksinimlerine göre özelleştirilir.
Örnekler
Verilog dilini kullanarak ROM tasarımını anlatan bu makalede, özellikle tasarım aşamasındaki okuma işlemi hakkında detaylı bilgilendirme yapıldı. Şimdi ise farklı örneklerle ROM tasarımının nasıl yapıldığına dair çeşitli örnekler verilecek.
İlk örnek, en basit ROM tasarımının nasıl yapıldığını anlatıyor olacak. Bu örnek, 4-bitlik bir ROM tasarımıdır ve 4x4 bit veri deposu içermektedir. Bu örnekte, hem adresleme hem de çıkış kontrol sinyalleri gösterilecektir.
Adres | Çıkış |
0000 | 0010 |
0001 | 0110 |
0010 | 1010 |
0011 | 1100 |
Bir sonraki örneğimiz, daha büyük bir ROM tasarımının nasıl yapıldığını göstermektedir. Bu örnek, 32x8 bit veri deposu içeren bir ROM tasarımıdır. Bu örnek, önceki örnekte olduğu gibi ayrıca adresleme ve çıkış kontrol sinyallerini de göstermektedir.
Adres | Çıkış |
00000000 | 11110000 |
00000001 | 00001111 |
00000010 | 00110011 |
00000011 | 11001100 |
..... | ...... |
11111100 | 10100110 |
11111101 | 10100101 |
11111110 | 10101010 |
11111111 | 10101001 |
Son örneğimiz ise, Verilog dilinde kodlamada kullanılan bazı İf-Else yapıları hakkında bilgi vermektedir. Örneğimiz, bir istenilen parametrenin, belirli koşullar altında çıkış olarak verilen bir değere dönüştürüldüğü basit bir yapıdadır. ROM tasarımında sıklıkla kullanılan böyle İf-Else yapıları, kodlama esnasında işleri kolaylaştırmaktadır.
parameter [7:0] input=8'd0;reg [3:0] output = 4'd0;always @ (input)begin if (input == 8'b00000000) output = 4'b0000; else if (input == 8'b00001111) output = 4'd1; else if (input == 8'b11110000) output = 4'd4; else if (input == 8'b11111111) output = 4'd15; else output = 4'd5;end
Bu örnekler Verilog dilinde yapılan ROM tasarımlarının farklı boyut ve şekillerde nasıl olabileceğini göstermektedir. Ayrıca İf-Else yapılarının nasıl kullanılabileceği hakkında da fikirler vermektedir. Yapılan işlemlerin ardından, ROM tasarımınızın neden önemli olduğu ve ne gibi durumlarda kullanılabildiği hakkında bilgi sahibi olmuşsunuzdur.