Yüksek-Level Synthesis ile FPGA Performansı

Alan-Programlanabilir kapı Dizileri (FPGA) geleneksel olarak donanım açıklaması dillerinde (HDL) özellikle VHDL ve Datalog gibi derin uzmanlık talep etti. Yüksek Lisans Synthesis (HLS) bu modeli döndürür, geliştiricilerin C, C++ veya SystemC'de algoritmaları yazmasına izin verir ve otomatik olarak optimize edilmiş RTL kodu üretir. Bu değişim, iş donanımını kullanarak gerçek bir proje döngüsüne erişmek için gerekli olan teknikleri kapsar.

Yüksek-Level Synthesis Nedir?

Yüksek seviyeli sentez, sabit bir talimat kümesi olan yazılımlardan farklı olarak, HLS'nin çalışma saatleri, tüm donanım kaynaklarına yönelik işlemleri kısaltır ve veri ile sonlu bir makine üretir.

Kritik avantaj soyutlama: döngüler, diziler ve işlev aramaları doğrudan manuel olarak havalimanları veya borulu veripathleri olmadan sentezlenir.Bu, HLS'yi özellikle video işleme, makine öğrenimi için değerli kılar, dijital sinyal işleme ve ağ işleme, algoritma oluşturma ve donanıma göre daha hızlı ve performansa sahip değildir.

Doğru HLS Tool'ı seçin

Birkaç olgun HLS araçları mevcut, her biri bir satıcı ekosistemiyle sıkı bir şekilde entegre edilir veya üçüncü taraf EDA şirketleri tarafından sunulmaktadır.Seçen sık hedef cihaz ailesi ve tasarım karmaşıklığına bağlıdır.

  • [FONT=0]AMD Vitis HLS (eski olarak Vivado HLS): [DOST:1) MDT Xilinx cihazları için temel, C++ ürünü sayfasını destekler ve AçıkCLT çekirdeği sentez eder. Doğrudan Vivado IP bütünleme ve hızlanan uygulamalar için Vitis birleşik yazılım platformu ile çalışır.
  • [FONT=0)Intel High-Level Synthesis Compiler (HLS Compiler): ), Intel Quartus Prime'a entegre edilmiş, Intel Çevikler için C++'ı Intel Çevik sayfası için sentezler ve Arria FPGA'lar.
  • [FONTs of SystemC veya C++'dan sentezlenen bir satıcı-agnostic araç, hem ASIC hem de FPGA hedefleri için yaygın olarak kullanılır.
  • [FONT:0) Açık Kaynak Seçenekleri: [Dönetici: [FONT HLS aracı ) Politecnico di Milano'dan gelen esnek aramalar standart C kabul eden ve Verilogu oluşturmadığı aktif olarak muhafaza edilir.

Her bir araç kendi pragma sözelasyonu ve optimizasyon felsefesine sahiptir, ancak temel HLS konseptleri tutarlıdır. Bu makalede satıcılar tarafından üretilen aletlere odaklanır, ancak platformlar boyunca geniş bir şekilde uygulanır.

HLS-Based Design Flow

HLS'yi kabul etmek, bir RTL-santrik bir akıştan kodlama, simülasyon ve artışsal rafineriye geçiş anlamına gelir. Aşağıdaki adımlar algoritmadan biraz akışa kadar tam bir akış oluşturur.

Adım 1: Algoritma ve C-Level Validasyon

Tüm köşe vakalarını kapsayan test vektörleri ile C veya C++'ı “altın model” olarak uygulamanız gerekir, çünkü HLS sentezleri, gerekli olmayan veri türlerinden ayırılabilir ve özel bir şekilde veri kümesine bağlanır:)TFL'den korunmak için gerekli olan belirli bir noktaya kadar kullanılabilir.

Standart C derleme ve simülasyon ile altın modeli uygulayın (örneğin, GCC veya MSVC kullanarak). Bu, donanım simülasyonu başlamadan önce algoritma hataları erken yakalar. HLS aracı daha sonra C/RTL co-simulation için aynı test kullanır, bu yüzden burada yatırım yapmak, modeli vurgulamak için rastgele testler yapar.

2. Adım: Tool Konsülasyonu ve Hedef Özellikler

Seçilmiş bir araçta yeni bir HLS projesi oluşturun (Vitis HLS, Intel HLS Compiler, vs.).

  • sentezleme için üst işlev.
  • Mevcut kaynakları, saat frekansı ve cihaz mimarisini belirleyen hedef FPGA parçası veya yönetim kurulu.
  • Saat süresi kısıtlamaları, genellikle nanosaniyelerde. Bu sürücülerin zamanlama ve boru kararları.
  • Simülasyon ayarları ve Vitis HLS için, C simülasyonu veya dış bir RTL simülatörü ile işbirliği yapmak.

Proper konfigürasyonu, aracın optimizasyonlarını fiziksel zamanlama yetenekleri ile uyumlu kılar. Ortak bir hata aşırı iyimser bir saat dönemi oluşturur, sentez başarısızlıklarına neden olur. Daha sonra muhafazakar bir hedefle başlayın (örneğin, 10 ns / 100 MHz) ve yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş yavaş zamanlama raporları.

Adım 3: Pragmas ve Yönergeler Kullanımı

Pragmas, HLS aracına rehberlik etmek için birincil mekanizmadır. Onlar olmadan, araç sentezleri güvenli ama alt optimize edilmiş bir tasarım - tam paylaşılan kaynaklar, en az paralellik Anahtar optimizasyon yönergeleri içerir:

  • [FONT=0)Loop borulining:[Dönetici:[Dönetici:0)[Dönlendirme:0)Loop boru hatları, ilk geç olmadan bir saat döngüsüne bir sonuç verir, maxing throughput.
  • [FONT:0)Loop kayıt dışı:[Dönetici:[Dönetici:0)[Dönetici:0)Loop kayıt dışı dengeler için birden fazla iterasyon uygulamak için döngü organları.
  • [FONT:0)Array bölümleme ve yeniden şekillendirme: [FONTD:7) Paralel erişim için daha küçük hafıza bankalarına bölünmüşlerdir. ”
  • [FONT=0]Function inlining: [FONTFLT:9) birliktelikleri bir araya getirir, çapraz optimizasyon için daha fazla kapsamı sağlar.
  • [FONT:0) Interface pragmas: [Dönetici: [Dönetici bağlantının nasıl birbirine bağlandığını] [DÜT:10], akış için [[Dönetici kontrol arayüzü için, [[Dönetici kontrol arayüzü, [[Döneticileri kontrol etmek için,|saire erişim, vb.
  • [FONT:0)Dataflow:[Dönetici:[Dönetici: 9) Görev seviyesinde paralellik sağlar, bir dizi işlev veya döngüler akış kanalları ile eş zamanlı olarak çalıştırılır.
  • [FONT:0)Kaynak tahsisi:[DÜDÜT:0)[FONT:0) Kaynak tahsisi:[FONT:0)[[FONT=FONT=FONT=FONT=FONT=FONT=0))

Well-chosen pragmas, kaynak idleini terk eden bir tasarım arasındaki farkı ve kaynak arasındaki farkı anlamına gelebilir. optimizasyon süreci iteratif: Uygulama yönergeleri, sentezleme, performans ve kullanım raporları ve rafinerileri tut.Bu pragmas'ın deneyi ve etkilerini alan ve geç kalmış bir girişini tut.

Adım 4: Synthesis ve Analiz

RTL kodu ve kapsamlı raporları üretmek için HLS sentezini çalıştırın. En önemli rapor, her döngünün geç saatini ve boru hatları derinliğini gösteren performans profilidir.

Modern HLS araçları da bir program izleyicisi (a Gantt grafiği) ve bağlayıcı bir harita oluşturur, ameliyatların saat döngüleri ve işlevsel birimlerde nasıl dağıtıldığına yardımcı olur.Eğer elde edilen başlangıç aralığı veya geç kalmışlık istenenden daha yüksekse, “loop-karrişimli bağımlılıklar” veya hafıza liman çatışmaları için raporda işaretlenir. sık sık sık sık ince bir C inşa - bir cumulatorluk gibi - önceki değere bağımlıdır - II=1 yeniden giriş yapmadan veya dizinleme yapmadan.

Adım 5: C /RTL Co-Simulation

RTL'yi daha büyük bir FPGA tasarımına entegre etmeden önce, aynı giriş vektörlerini doğrulayın ve devre dışı bırakma işlemine karşı orijinal C testibench'i yalnızca bir paketleyici kullanarak gösteren RTL'yi ortaya çıkarır (örneğin, Xcelium, ModelSim veya Vivado Simulator). Aynı giriş vektörlerini geçer ve devreleri döngüsüne geçilir. Co-simulation sadece doğrulayıcı değil aynı zamanda yanlış eşleştirmeleri de ortaya çıkarırken, C modeli hemen hafızayı yazarken yazar.

Yanlış eşleştirmeler meydana gelirse, dalgaformu veya işlem logunu inceler. C model veya pragmas (örneğin, eklemeler) RTL davranışı altın model döngüsüyle eşleşene kadar uygun gecikmeler.

Adım 6: İhracat IP ve FPGA Design Flow'a entegre

Doğrulanmış bir şekilde, tasarımı paketlenmiş bir IP çekirdeği olarak ihraç edin - IP-XACT veya Intel Qsys formatındaki kopyaları içerir ve sonra bir blok tasarımında (örneğin, Vivado IP bütünor) diğer RTL modüllerinin yanı sıra, yumuşak işlemciler veya bellek kontrolörleri ile birlikte kullanılabilir. HLS-I zaman sınırlamaları içerir ve yerleştirme ve kesintiye hazırdır.

Geleneksel FPGA akışında, daha sonra hedef saati rahatlamak veya yeniden sunmak için sentez ve uygulama çalıştırabilirsiniz.Geçmiş uygulama zamanlama raporları dikkatlice karşılanabilir. HLS araçları, önceden yer değiştirme modellerine dayanan tahmini zaman çizelgesi sağlar; gerçek yerleştirme daha uzun süre gecikmeleri ortaya çıkarabilir, HLS kısıtlamalarını geri almak için sizi talep edebilir.Eğer bir döngünün hedefi II. Donanımda karşılanamazsa, araç zamanlamasını azaltacaktır.

Pratik Örnek: HLS ile FIR Filtresini Uygulamak

Bu kavramları sağlamlaştırmak için, sonlu bir dürtü cevabı (FIR) filtreyi düşünün - ortak bir dijital sinyal işleme binası bloğu. Aşağıdaki C kodu, sabit nokta katları ile 16-tap FIR filtre uygular.

#include <ap_fixed.h>
#include <hls_stream.h>

typedef ap_fixed<16,8> data_t;
typedef ap_fixed<16,8> coeff_t;

void fir(hls::stream<data_t> &in, hls::stream<data_t> &out, coeff_t coeffs[16]) {
#pragma HLS INTERFACE axis port=in
#pragma HLS INTERFACE axis port=out
#pragma HLS INTERFACE s_axilite port=coeffs
 static data_t shift_reg[16];
#pragma HLS ARRAY_PARTITION variable=shift_reg complete dim=1
 data_t acc = 0;
 // Shift and accumulate
 ShiftLoop:
 for (int i = 15; i > 0; --i) {
#pragma HLS PIPELINE II=1
 shift_reg[i] = shift_reg[i-1];
 acc += shift_reg[i] * coeffs[i];
 }
 shift_reg[0] = in.read();
 acc += shift_reg[0] * coeffs[0];
 out.write(acc);
}

Bu örnekte Anahtar pragmas:

  • [FONTFACE:0]INTERFACE eksen:[DÜT:1] girdi ve çıktı için AXI4-Stream'ı kullanın, sürekli veri akışı için ideal.
  • [FONT:0]ARRAY PARTITION Tamam:) Değişimin bireysel kayıtlara kaydı, tüm musluklara paralel olarak erişim sağlar.
  • [FONT=0)PIPELINE II=1:Bir yeni örnek, ilk geç saatlerden sonra saat döngüsünde işlenir.

sentezden sonra, raporları kontrol edin: değişim döngüsü II=1'e ulaşmalı ve kaynak kullanımı (DSP'ler çok fazla sayıda C işlevinin yüksek performanslı bir donanım hızlandırıcısına nasıl benzediğini gösterir. Bu tasarım daha sonra IP çekirdeği olarak ihraç edilir ve daha büyük bir sisteme entegre edilmelidir - örneğin, bir sensörden veriye bağlanmak için AXI DMA.

Performans ve Alan için optimizasyon Stratejileri

Etkili HLS, geçncy ve kaynak tüketimi dengelemeyi gerektirir. Başarılı tasarımlarda birçok desen yeniden kullanılabilir.

  • [FONT=0)Öyle sabit nokta arithmetic:[D) DSPT:1) DSP ve LUT'u korumak için önemli kaynaklar ve limitler kullanın. Dinamik aralık kritik değilse, sabit nokta türleri kullanın (örneğin Vitis HLS)
  • [FONT:0] rastgele hafıza erişimi yerine, veri bir boru hattı aracılığıyla akışlandığında en verimlidir.UseENFLT:19) veya benzer akış görevleri bağlamak için, tahkim ve tampon tezgahlara yol açan büyük paylaşılan anılardan kaçınır.
  • [FONT:0] Mükemmel döngü nestleri için mükemmel döngü için başlangıçlar:[Dön 1: 1) Aracın en iç en fazla döngüyü otomatik olarak boru hattına bağlanabilir.Pozitif olmayan bağımlılıklar bilinen desenlerin ötesindedir (örneğin, azaltım).
  • [FONT:0) Yapılanabilirlik için şablon metaprogramını kullanın: ) C++ şablonları, seri boyut ve veri genişliklerinin zaman parametrelendirilmesine izin verir, aynı HLS kaynağı performans kaybı olmadan cihazlarla yeniden kullanılabilir hale getirir.
  • [FONT:0)Balance kaynak paylaşımı ve geç kalmışlık: TheurFLT:20) Direktif, pahalı operatörlerin bölünme gibi paylaşımını zorlayabilir. Ancak, aşırı paylaşım işlemleri serileştirebilir ve gecikme artırılabilir; boru hattı performansına karşı ağırlık verebilir.
  • [FONT:0)Leverage bit-accurate types smart:[Döneticileri kullanarak sabit ayarlı sabit nokta temsilleri, donanım maliyeti en aza indirilir. Örneğin, [[Dönetici verileri için minimum kaynaklar kullanırken, algoritmak toleransa karşı ölçüm hatası her zaman.

HLS araçları ayrıca birden fazla optimizasyon setlerini (örneğin, “düşük alanı”, “yüksek aktarım”) koruyabileceğiniz ve bunları karşılaştırmanız için "çözüm" yönetmenleri sunar.

Debugging ve Verification Best Practices

HLS tasarımlarını her iki yazılımdan ve RTL debuggingten farklı olarak takip eder. Çünkü kaynak kodu C++, geleneksel debuggers işlevselliğini doğrulayabilir, ancak donanım paralelliği veya zamanlama hatalarını ortaya çıkarabilir.

  • Aynı arayüz protokolleri kullanan bir döngü-yaklaşık saf C++ modelini koruyun (örneğin, akış) böylece hızlı bir şekilde simüle edebilirsiniz.
  • Kendinizi rastgele giriş nesil ve altın referans çıktıları ile kontrol etmek.
  • HLS aracının logunu kullanın ve pragma uyarıları agresif bir şekilde. -synthesiz yapıları veya alt optimize döngü yapıları hataları olarak ele alın.
  • Tüm tasarıma ölçeklendirmeden önce küçük bir alt-module üzerinde erkenden başlayın. Bu, sentez sorunları hızla izole eder.
  • HLS aracının uzun RTL simülasyonları çalıştırmadan önce başlangıç aralığı şişelerini görüntülemek için yerleşik performans analizi kullanın.
  • Oluşturulan RTL kodunu beklenmedik yapılar için tahmin edin: örneğin, büyük çokluxers genellikle karmaşık koşullu şubeleri gösterir.Heplify koşulals by flattening nestedurZEFLT:22.

Ortak Pitfalls ve Them'dan Nasıl Kaçırmak

Deneyimli mühendisler bile HLS'ye taşındıklarında tekrar sorunları karşılaşmaktadır. geçişleri ön saflaştırır.

  • [FONT:0)Bağlantılı döngüler:[Dönemli yolculuklar, derleme zamanında hesaplanamaz olan değişken yolculuk sayıları doğru şekilde planlanamaz.En iyi seyahat sayılarını tanımlayabilme ve kullanım için [[FONTFLT:23)
  • [FONT:0]Large bellek arayüzleri fakir bant genişliği ile çalışır: Büyük veri dizileri için tek bir AXI4-Lite master arayüzü, yüksek kod için AXI4-Stream veya AXI4 master'ı uygun dönüşüm ve patlama desteği ile kontrol eder.
  • [FONT:0) Sıfırlama ve başlangıçlamayı görmezden gelir: [DÜDÜT:1] Saf RTL'den farklı olarak, HLS bazen kayıtların geçerli bir durumda başlayabilir. Temiz bir sıfır stratejisine sahip olmanızı ve gerekli olmayan yerel dizilere sahip olmanızı sağlayın (örneğin, gerekli olan RAM’leri).
  • [FONT:0) Aracın otomatikleştirilmesine bağlı olarak: [Dönetici: 0,0] HLS aletleri güçlü olsa da, tasarım niyetini tahmin edemiyorlar. Basit bir elhak protokolü açık bir şekilde gerektirebilir, açık bir şekilde doğrulanmış davranışlara bağlı olarak; varsayılan arayüzlere güvenmek yanlış bir arayüze yol açabilir.
  • [FONT:0) Gerçek dünya zamanlama kısıtlamalarından yoksundur: HLS zamanlama basit bir zamanlama modeli kullanır. Yüksek fanout netlerin fiziksel yerleşimi veya büyük birden fazlaxers beklenmedik zaman ihlallerine neden olabilir - HLS'den 10-20 daha yüksek bir saat aralığına hedef.
  • [FONT:0) Boru hatlarının doğrulanması için:[Dönetici:0) Bir boru hattında, giriş akış tezgahları, boru hattı ölü olmadan tahliye edilebilir. geri basınç-aware arabirimleri kullanın ve kon-simülasyonda durgun davranışı doğrulayın.

HLS'yi Heterojen sistemlerle bütünleştirmek

Modern FPGA platformları zor işlemci sistemleri ile çift programlanabilir mantık (örneğin, Zynq, Çevik SoC) HLS doğal olarak bu mimarilere uyuyor.Ortalama HLS belgesi) ve Xilinx Runtime (XRT) ile entegre edilmiş bir hızlandırıcı yapılandırmak için geniş bir kılavuz oluşturmak için tasarlanmıştır.

Gerçek zamanlı kontrol sistemleri için, HLS, işlemcinin AXI interconnect, zaman-kritik I/O ile bağlantı kurmanın, işlemcinin politikaları ve ağ yığınlarını yönetebilmesi için özel bir RTL periferisi üretebilir. Bu tür sistemler tasarlarken, veri toplayıcısı ile dikkat edin: AXI4 HLS çekirdeğinde zaman-kritik bir eksende patlayan bir eksenelleme mantığını gerektirir.

Yüksek Lisans Synthesis'in Geleceği

HLS hızla gelişiyor, derleyici heuristics, formal doğrulama ve kütüphane ekosistemleri ile. Birkaç trend yol önceden şekillendiriyor:

  • [FONT-style HLS: Araçlar, en iyi pragma yapılandırmalarını öngören ML modellerini dahil etmeye başlıyor, manuel ayarlamayı hedefliyor. Her iki akademi ve endüstriden araştırma, rakipleri uzman-çaklı tasarımları inşa etmeyi hedefliyor.
  • [FONT:0) C++17 ve ötesindeki standartlaşma: HLS ön uçları modern C++ standartlarını kabul ediyor, tasarımcılar, constexpr, kuzudas ve şablon metaprogramlamaları yüksek parametreli, yeniden kullanılabilir donanım kütüphaneleri yazmak için.
  • [FONT:0) Yüksek seviyeli doğrulama ile yakınlaşma: Universal Verification Methodology (UVM) ve SystemC işlem seviyesi modelleme, HLS ile birlikte birleşik tasarım-ve-verification akışları oluşturmak için bir araya getirilir, doğrulama şişesini azaltır.
  • [FONT:0)Açık kaynak donanım yığınları: Projeler [FONTD:2)CHIPS Alliance) HLS çerçevelerini ve kütüphanelerini teşvik ediyor, HLS'yi büyük FPGA satıcılarının ötesinde daha erişilebilir hale getiriyor.
  • [FONT:0) Dinamik yeniden yapılandırma için teşvik edilen destek:[Dönetici:0) Future HLS akışları, çekirdeklerin zaman değiştirmesine izin verebilir, iş yüklerini değiştirmeye yardımcı olan adaptif sistemlere izin verebilir.

FPGA yoğunluğu büyümeye devam ettikçe, RTL seviyesindeki karmaşıklığı yönetmek güvenilmez hale gelir. HLS, bu karmaşıklığı soyutlama seviyesini yükseltmek için bir yol sunarken, donanım verimliliğini korurken, Mastering HLS şimdi bir sonraki yüksek performanslı, yeniden yapılandırılabilir sistemler inşa etmek için mühendislere, kenar AI hızlandırıcılarından yüksek hızlı ağ ekipmanlarına kadar.