Kayıt Aktarım Mantığı (RTL), verilerin register’lar arasında nasıl aktığını ve bu verilere mantıksal ve matematiksel işlemlerin nasıl uygulandığını tanımlayan bir dildir. Mühendisler, belirli bir işlevi yerine getirmek için kullanılan ayrı bir bileşenin davranışını tanımlamak için işlevsel blokları tanımlamak üzere RTL tasarımını kullanır. Her işlevsel blok, bloktaki register’ların bir tanımını, sıralı devre olarak adlandırılan ve işlevsel blok için mantık işlemini içeren bir kombinasyonel devreyi içerir. Ayrıca, devre boyunca veri akışını tanımlamak için işlevsel blokların nasıl bağlandığını tanımlamak için Donanım Tanımlama Dili (HDL) kullanırlar.
RTL tasarımının gücü, karmaşık bir sistemi HDL kodu ile temsil edilen nispeten basit bloklara bölme biçiminde yatmaktadır. RTL tasarımının nasıl kullanılacağını anlamanıza yardımcı olacak birkaç temel kavram aşağıdadır.
Register’lar
RTL tasarımında, belirli miktarda veri depolayabilen bir donanım elemanına register denir. Bunlar genellikle D flip-flop’ları olarak uygulanır. Bir register’ın değeri, bir mantık işleminin girişi olarak okunabilir veya bir işlemin çıktısı olarak ayarlanabilir. Verilerin register’lar arasında nasıl aktığını ve bir işlem tarafından verilerin nasıl değiştirildiğini karakterize etmek, RTL tasarımının temel amacıdır.
Donanım Tanımlama Dili (HDL)
RTL tasarımının en önemli kısmı, devrenin davranışını tanımlayan koddur. HDL, değişkenler, fonksiyon çağrıları, if-then-else ve CASE gibi mantık ifadeleri, Boolean ve matematiksel ifadeler içeren bir programlama diline çok benzeyen bir tanımlama dilidir. Ancak HDL, genellikle entegre devreler olmak üzere elektronik devrelerin davranışını ve yapısını tanımlamak için özel olarak tasarlanmıştır. HDL’yi programlama dillerinden ayıran bir şey, işlemlerin devredeki saat darbeleriyle tetiklenebilmesi için dile zaman kavramının dahil edilmesidir.
Bu, devredeki dijital saat darbesinin değerini tanımlayan bir değişken kullanılarak yapılır, aşağıdaki basit VHDL örneğinde bir invertörde olduğu gibi, çıkış (Q), saat darbesi değeri clk, düşük durumdan yüksek duruma geçtiğinde (yükselen kenar) giriş (D) değerine ayarlanır:
D
process(clk) begin if rising_edge(clk) then Q end if; end process;
VHDL (Çok Yüksek Hızlı Entegre Devre Donanım Tanımlama Dili), C diline benzemeyen bir sözdizimine sahip, uzun ve güçlü bir dildir. Daha karmaşık sistem tasarımlarını tanımlamak için tercih edilen HDL’dir.
Verilog veya onun genişletilmiş versiyonu SystemVerilog, bir diğer popüler HDL’dir. Daha özlü, zayıf ve esnektir ve sözdizimi C koduna benzer. Öğrenmesi ve tanımlama oluşturması kolay olduğundan, mühendisler başlangıçta veya devreleri çok karmaşık olmadığında bunu tercih ederler. IEEE, hem Verilog hem de VHDL’yi endüstri standardı olarak tanımlar.
Aşağıda, her iki dilde basit bir AND geçidi örneği verilmiştir. Bir AND geçidinin iki girişi ve bir çıkışı vardır. Her iki giriş de 1 ise, çıkış 1’dir. Eşit değillerse veya her ikisi de 0 olarak ayarlanmışsa, çıkış 0’dır.
Mantıksal İşlemler
RTL tasarımında iki tür işlem vardır. İlk olarak, mantıksal işlemler bit değerlendirmeleri gerçekleştirir ve register’larda depolanan verileri değiştirir. AND, OR, NOT, XOR ve kaydırma gibi mantıksal işlemler, HDL’de mantıksal davranışı tanımlayarak oluşturulur. Yukarıdaki örnek, AND’nin VHDL ve Verilog’da nasıl temsil edilebileceğini göstermektedir. Mantıksal işlemler, donanımda mantık geçitlerini temsil eder.
Aritmetik İşlemler
RTL tasarımındaki ikinci işlem türü aritmetik işlemlerdir. Register’lardaki verileri alır ve toplar, çıkarır, çarpar ve böler. Bunlar, HDL’de standart matematiksel operatörler kullanılarak temsil edilir. Örneğin, VHDL’de iki sayıyı toplamak şu satırı kullanır:
rst
— burada inp1 ve inp2 iki giriş register’ıdır ve rst çıkış register’ına atanır. RTL’deki aritmetik işlemler, toplayıcılar, çıkarıcılar, çarpanlar ve bölücüler gibi özel fiziksel elemanları temsil eder.
Senkron ve Asenkron Eylemler
RTL tasarımı, veri akışını senkron veya asenkron olarak temsil edebilir. Senkron için, bir alt program, fonksiyon için sistem saati girişi tarafından yürütülür veya tetiklenir. Asenkron için, bir veya daha fazla giriş kapısının değeri belirli bir şekilde değiştiğinde alt program yürütülür. Bu, saat girişi veya saat olmayan girişlerin giriş değerlerinin bir if ifadesi ile değişip değişmediğini kontrol ederek yapılır.