Tang Nano FPGA

Tang Nano FPGA Geliştirme Kartı İncelemesi

Öncelikle öğrenci arkadaşların VHDL veya Verilog uygulamalarında kullanabilecekleri ucuz bir geliştirme kartı olmasından dolayı incelemeye karar verdim. Diğer geliştirme kartları gerçekten çok pahalılar.

 Sipeed Tang Nano FPGA Board - Seeed Studio | Mouser

Sipeed firmasının geliştirme kartı olarak tasarladığı ve bütçe olarak oldukça ucuz bir FPGA kartı olan Tang Nano kartını ve IDE'sini inceleyeceğiz.

Öncelikle Tang Nano nedir bu soruyu yanıtlayalım.

Üzerinde GW1N-1 Gaoyun Little Bee serisi FPGA bulunan bir geliştirme kartıdır. Üzerinde bulunan bu FPGA çipinin genel olarak özellileri şunlardır.

  • FPGA çipinin tam kodu GW1N-LV1QN48C6/I5 (Datasheet incelemek isteyenler bakabilir.)
  • 1152 LUT4 lojik kaynak
  • 1 PLL
  • 4 Bloktan oluşan toplam 72Kbit SRAM
  • FPGA paketi QFN48

Ayrıca bu geliştirme kartı üzerinde 64MBit PSRAM bulunmaktadır.

LCD ekran veya VGA çeviricilere bağlanabilen RGB arayüze sahiptir. Standart 40pin RGB LCD ve sürücü devreside kart üzerinde bulunmaktadır. Böylece ekran uygulamalarında kullanılabilecek bir özellik kazandırılmış. Kart üzerinde 24MHZ kristal ve yazdığınız kodları yükleyebilmeniz için USB JTAG downloader'a sahip. Type C bir USB Data kablosu ile bilgisayarınaza takıp kullanabilirsiniz. Yani ayrıyeten bir programlayıcıya ihtiyaç duymuyoruz. Kart üzerinde debug için kullanabileceğiniz bir RGB SMD LED mevcut. Kart üzerinde IOBank'ları kullanarak IO pinlerini istediğiniz voltaj seviyesine ayarlayarak kullanabilirsiniz.

https://tangnano.sipeed.com/en/ adresinden pinout diyagramını detaylı olarak görebilirsiniz.

 Bazı yararlı kaynaklara bu linklerden ulaşabilirsiniz.

GoWin official download station

 dl Download station

 Tang nano Schematic.pdf

 Şimdi kodlama yapacağımız IDE'nin kurulumuna geçelim.

IDE Kurulumunun Yapılması

 Öncelikle bu siteden IDE programını indirelim. Gowin IDE . Açılan site çince olarak açılıyor. İngilizceye çevirdiğinizde indirme linkleri kayboluyor malesef. Çince olan siteden aşağıdaki resimde gösterilen windows için verilen programı bilgisayarınıza indirin.

İndirmiş olduğunuz sıkıştırılmış dosyayı açın ve exe dosyasını çalıştırın.

"Next" butonuna basarak ilerleyin.

 "I Agree" butonuna basarak lisans anlaşmasını onaylayarak ilerleyin.


"Gowin" ve "Gowin programmer" seçeneklerini seçerek "Next" butonuna basarak devam edin.

 

IDE'nin kurulacağı klasörü seçin ve "Install" butonuna basarak kurulumu başlatın.


 "Please install USB driver for windows7/8/10" ve "Please install USB driver for windowsXP" seçeneklerini seçerek "Finish" butonuna basıp kurulumu bitiyoruz.

Geliştirme kartı üzerinde bulunan FTDI COM sürücüsünü kurulumu ekrana gelecektir. 

"Extract" butonu basarak ilerleyin.

"Next" butonuna basarak ilerleyin.

 "I accept this agreement" seçeneğini seçip "Next" butonuna basarak ilerleyin.

Böyelce sürücüler işletim sisteminize kurulmuş oldu.

"Finish" butonuna basarak kurulumu bitirin.

Şimdi Kartımız bilgisayarımıza Type C Data kablosu ile bağlayalım ve programı çalıştıralım.

Kart üzerinde kırmızı Power Led'i yanacaktır.

 

Masaüstünde oluşan "Gowin_V1.9.8" program kısayolunu tıklayıp programı çalıştıralım.

Program çalıştırıldıktan sonra lisans ayarlaması yapmadığımızdan dolayı aşağıdaki hata ekranı gelecektir. "OK" butonuna basarak Lisans ayarlama menüsüne geçeriz.

 

Burada kullanıcıya iki tip lisans seçimi veriliyor. 

"Local License File" ve "Floating License Server" bunlardan ilki bilgisayarınıza indereceğiniz bir lisan dosyasını işaret eder. Bu lisans dosyasını firmadan istemek için menünün altında mavi renkte yazılmış olan "Apply for License" kısa yoluna tıklayarak web sitesinde bir forma bağlanırsınız. Gerekli bilgi alanlarını doldurarak firmaya lisans isteğini gönderirsiniz. Firma mail adresinize lisansı gönderince "Browse" butonunu kullanarak lisansın bulunduğu yolu programa eklersiniz.

Diğer seçenek ise server üzerinden lisans kullanmaktır. 

Burada Sipeed firmasının vermiş olduğu server IP numarasını gireriz ve "Test Connection" butonuna basarak test ederiz. Server IP numarası : 45.33.107.56 Port 10559 'dur.

"Save" butonuna basarak lisans ayarlamasını bitiriyoruz.

Yeni Bir Proje Oluşturma

Gowin programını çalıştırıyoruz.

Quick Start kısmında bulunan "New Project" ikonuna basın.

Gelen menüden "FPGA Design Project" kısmını seçerek "OK" butonuna basın.

Proje ismine "led_blink" yazıyoruz. Proje dosyalarının olması gereken klasörünü siz dilediğiniz yer olarak seçebilirsiniz. "Next" butonuna basarak devam edelim.

Şimdi açılan menüden Tang Nano geliştirme kartımızın üzerinde bulunan FPGA kodumuzu GW1N-LV1QN48C6/I5 olarak seçelim. "Next" butonuna basarak devam edelim.

Bu kısımda seçmiş olduğumuz FPGA ve oluşturduğumuz projenin bilgileri özet olarak verilmektedir. Artık "Finish" butonuna basarak kod yazma kısmına geçebiliriz.

Proje ismin üzerine gelip mouse sağ tıklayıp çıkan menüden "New File" seçeneğini seçelim.

Açılan menüden ilk olarak "Verilog File" olarak verilog dosyası oluşturalım. Bu incelemede önce verilog daha sonra ise VHDL olarak aynı kodu yazıp geliştirme kartı üzerinde çalıştıracağız. "OK" butonuna basıp ilerleyelim.

Dosya ismine "led_blink" yazıp "OK" butonuna basalım. Artık boş bir verilog dosyamız oluştu. Şimdi basit bir led yakp söndürme kodu yazalım.

module tutorial_led_blink
  (
   i_clock,
   i_button,
   o_led_drive
   );
 
  input i_clock;
  input i_button;
  output o_led_drive;
    
  // Constants (parameters) to create the frequencies needed:
  // Input clock is 24 MHz, chosen arbitrarily.
  // Formula is: (24 MHz / 10 Hz * 50% duty cycle)
  // So for 100 Hz: 24,000,000 / 10 * 0.5 = 1,200,000
  parameter c_CNT_10HZ = 1200000;
 
  // These signals will be the counters:
  reg [31:0] r_CNT_10HZ = 0;
   
  // These signals will toggle at the frequencies needed:
  reg        r_TOGGLE_10HZ = 1'b0;
 
begin
   always @ (posedge i_clock)
    begin
      if (r_CNT_10HZ == c_CNT_10HZ-1) // -1, since counter starts at 0
        begin        
          r_TOGGLE_10HZ <= !r_TOGGLE_10HZ;
          r_CNT_10HZ    <= 0;
        end
      else
        r_CNT_10HZ <= r_CNT_10HZ + 1;
    end
 
  assign o_led_drive = r_TOGGLE_10HZ & !i_button;
    
   
end
   
endmodule

Burada giriş olarak 24MHz clock girişi, bir adet buton girişi ve led çıkışı kullanılmıştır. 24MHz saat sinyali sayılarak 1,200,000'de bir led yakıp söndürülmektedir. Saniyede 10 defa yanıp sönmesi anlamına gelir. Şimdi diğer ayarlamaları yapalım.

Şimdi resimde görüldüğü gibi "Process" kısmını açalım. "Synthesize" kısmını çift tıklayarak çalıştıralım. Kodumuzu sentezleyelim. Kodumuzda herhangi bir hata yok ise "Synthesize" yeşil tik olarak görülecektir.

Şimdi kullanılacak olan pinleri belirlememiz gerekiyor. Bunun için şematikten pinleri belirleyelim.


Biz uygulamamızda mavi ledi kullanalım. Buna göre şu şekilde bir bilgiye ihtiyacımız olacak.

Sistem clock        input        pin 35

Mavi Led            output        pin 17

S1 butonu            input        pin 14

 Şimdi "Floor Planner" kısmından pin atamalarını yapalım.

"Floor Planner" kısmını tıklayalım.

Gelen mesaj kutusuna "OK" basarak ilerleyelim.


Açılan menüden "Package View" kısmını seçelim.

 

"Netlist" penceresinde kod içerisinde tanımladığımız i_clock, i_buton ve o_led_drive sinyallerini görüyoruz. Bu sinyalleri mouse sol tuşuyla tutup sağ tarafta bulunan ilgili FPGA pinlerinin üzerine getirip bırakarak pinlere bağlıyoruz.

"I/O Constraints" kısmında yaptığımız atamaları görmekteyiz. "Ctrl+S" tuşlarına basarak yaptığımız atamaları kayıt edelim ve bu menüyü kapatıp projemize geri dönelim.

Şimdi pin atamalarımızı da yaptıktan sonra "Process" kısmındaki "Place & Route" kısmını çift tıklayalım ve derleme işlemini bitirelim.

 

Atamalarımızda da herhangi bir hatamız yok ise "Place & Route" kısmı yeşil tik sembolü oluşacaktır.

Evet şimdi kodumuzu geliştirme kartımıza yükleyip çalıştıralım. Bu işlem için "Process" penceresinde bulunan "Program Device" kısmına çift tılayalım.

"Gowin Programmer" penceresi açılacaktır.

Açılan menüde "Operation" kısmında yazan "SRAM Program" seçilir ise yazdığımız kod RAM içerisinde işletilir. Geliştirme kartımızın enerjisini kesip verdiğimizde kod uçacaktır ve yeniden yüklenmesi gerekecektir.


"Operation" kısmını değiştirmek için yazı kısmı seçilerek resimde gösterilen ikon tıklanır.

 

 Bu konfigurayon menüsünde istenilen özellik seçilerek FPGA programlanabilir. Biz şimdilik kodumuzu SRAM üzerinden çalışacak şekilde programlayalım.

Yazı kısmı seçilerek resimde gösterilen ikona basarak kodumuzu geliştirme kartımıza atarak çalıştıralım.

 

Artık geliştirme kartımız çalışır duruma gelmiştir. Kart üzerinde bulunan "B" ile isimlendirilmiş olan butona basılı tuttuğunuzda mavi led saniyede 10 kez yanıp sönerek çalışacaktır.

Aynı kodu VHDL olarak çalıştıralım.

Yeni bir proje oluşturalım ve dosya ekleme kısmında verilog yerine VHDL seçerek dosyamızı projemize ekleyelim.

Aşağıdaki kodu yazalım ve yukarıdaki anlatılan tüm işlemlerin hepsini gerçekleştirelim.

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
 
entity tutorial_led_blink is
  port (
    i_clock      : in  std_logic;
    i_button     : in  std_logic;
    o_led_drive  : out std_logic
    );
end tutorial_led_blink;
 
architecture rtl of tutorial_led_blink is
 
  -- Constants to create the frequencies needed:
  -- Formula is: (24 MHz / 10 Hz * 50% duty cycle)
  -- So for 10 Hz: 24,000,000 / 10 * 0.5 = 1,200,000
  constant c_CNT_10HZ : natural := 1200000;
 
  -- These signals will be the counters:
  signal r_CNT_10HZ : natural range 0 to c_CNT_10HZ;
   
  -- These signals will toggle at the frequencies needed:
  signal r_TOGGLE_10HZ : std_logic := '0';
   
begin
   
  p_10_HZ : process (i_clock) is
  begin
    if rising_edge(i_clock) then
      if r_CNT_10HZ = c_CNT_10HZ-1 then  -- -1, since counter starts at 0
        r_TOGGLE_10HZ <= not r_TOGGLE_10HZ;
        r_CNT_10HZ    <= 0;
      else
        r_CNT_10HZ <= r_CNT_10HZ + 1;
      end if;
    end if;
  end process p_10_HZ;
 
  o_led_drive <= r_TOGGLE_10HZ and not i_button;
 
end rtl;

Kodumuz geliştirme kartımızda aynı şekilde çalışacaktır.

Başka çalışmalarda görüşmek üzere. Üniversite öğrencisi kardeşlerime tavsiyemdir. Sayısal tasarım öğrenmeniz durumunda aranan mühendis olabilirsiniz.












Hiç yorum yok:

Yorum Gönder