Neden FuseSoC? (YARIM)

Yapılacaklar

Yazıyı tamamla

FuseSoC, açık kaynak, ücretsiz, Python dilinde geliştirilmiş, Windows ve Linux üzerinde çalıştırılabilen FPGA projeleri için geliştirilmiş

  • 1️ paket yöneticisi ve

  • 2️ build system (derleme,sentezleme sistemi) dir.

Projenin ana geliştiricisi ve yürütücüsü Olof Kindgren olup, projenin geçmişi 2012 yılına kadar gitmekte ve kaynak kodu GitHub üzerinde bulunmaktadır. [1]

Bu yazıdaki temel amacım aslında FPGA projelerimizde böyle bir aracın kullanımının bizlere sağlayacağı avantajlardan bahsetmektir. FuseSoC aracının kullanımından ve temel çalışma biçiminden de bahsedecek olsam da bunları istediğiniz zaman aracın kendi dokümantasyonundan veya başka kaynaklardan daha detaylı öğrenebilirsiniz.

Daha önemli olanın FuseSoC ya da benzeri bir aracın çalışma ortamınıza katabileceği değerleri kavramak olduğuna inanıyorum.

FPGA Projeleri ve Git

2018 yılının başlarında ACCLOUD, Accelerated Cloud, isimli bir AR-GE projesini başlattık. Yaklaşık 3 yıl süren bu projenin birçok aşamasında baştan sona görev aldım. Bu projede yoğun bir FPGA kullanımı vardı ve bugüne kadar çalıştığım takım yapısından farklı olarak fiziksel olarak bir arada olmayan, aynı FPGA tasarımına farklı lokasyonlardan katkı sunan kişilerden oluşan bir takım oluştu. Bu durum, bana o güne kadar biraz daha deneysel takıldığım Acaba FPGA projelerini bir yazılım projesi gibi düzgün bir şekilde Github/Gitlab gibi platformlarda nasıl tutabiliriz? başlıklı araştırmalarımı ve denemelerimi hayata geçirmek için bir fırsat oluşturdu. FPGA projelerimizi, Gitlab üzerinde tutmaya başladık. Bu çalışmada Xilinx, şimdiki AMD, firmasının ürünleri ve araçları kullanıldı. Fakat önemli bir engel vardı. Xilinx gibi FPGA firmalarının araçlarının çoğu, Vivado gibi, Git ile konfigürasyon takibi yapmaya ve CI/CD süreçleri ile otomatik derleme yapmaya çok da uygun değildi.


Kağıt üstünde baktığınız zaman, Vivado’nun 2010’lu yılların ilk versiyonlarından itibaren Git ile uyumlu olduğunu söylediğini görebilirsiniz. Fakat bunun ayağı ne kadar yere basıyor? Bugün bir yazılım projesini, bir framework ya da araç ile oluşturduğunuz zaman size birçoğu bir .gitignore dosyası sunuyor örneğin. Örneğin bilgisayarınızdaki Word dosyalarını, .docx, alıp bodoslama git init, git add . ve git commit ile Git versiyon kontrolü altına aldığınızda Word, Git uyumlu bir program mı oluyor?

Vivado gibi EDA araçları, sentez/derleme sırasında birçok ara dosya üretmekte. Günün sonunda sizin amacınız belki 5-6 adet VHDL/Verilog/Block Design dosyasından bir bitstream’e gitmek. Ama araçlar bu hedef bitstream dosyasını üretirken onlarca, belki yüzlerce ara dosyalar üretebiliyor.

Bir projenin sağlıklı bir şekilde versiyon kontrolünün yapılabilmesi için, Git gibi bir sistemde hangi dosyaların gerçekten bir kaynak dosya olduğu hangilerinin ise göz ardı edilebileceğini bilmek gerekiyor. Örneğin sentez ya da derleme sırasında üretilen ara dosyaların prensip olarak versiyon kontrol altında olmaması gerekiyor. Olmasının getireceği en önemli problemlerden biri git diff gibi bir komut ile iki commit arası farka baktığınız zaman aslında anlamlı olmayan dosyaların size bir diff noise yaratacak olmasıdır. Bunun dışında başka durumlar da var elbette ama yazıyı çok uzatmak istemiyorum.

../_images/fusesoc-neden-vivado.png

Vivado’dan örnek verecek olursak ara çıktı dosyaları ve bitstream dosyası da, şaşırtıcı gelebilir belki, versiyon kontrol altında olmamalı. Proje dosyalarınız ile beraber projenizin ayarları ise versiyon kontrolü altında olmalı.


via GIPHY

Saçma git diff çıktıları arasında önemli farkları ararken ben…


Önemli

Bir projenin çalışma dizinin en azından düzgün bir .gitignore ile konfigüre edilmeden olduğu gibi Github/Gitlab gibi platformlara push edilmesi o projenin Git ile sağlıklı bir şekilde takip edildiği anlamına gelmemektedir.


Vivado’dan bir örnek ver.

Problem: Tekrarlanabilir Çıktılar Alma

Yazılacak…

  • Script ile yapmanın önemi

  • hem local hem CI

ACCBuild

Yazılacak.

FuseSoC ile Tanışma

Yazılacak…

FuseSoC Nasıl Çalışıyor?

Yazılacak..

FuseSoC’u Ben Nasıl Kullanıyorum?

Yazılacak…

  • pipenv örnek

  • hook

  • BD

FuseSoC (ve Benzerleri) vs “Ev Yapımı” Araçlar

Yazılacak…

Alternatifler: Hog (HDL on git) ve Diğerleri

Yazılacak…