VHDL için açık kaynak kütüphaneleri C ++ veya python için olduğu gibi var mı?


11

C ++ veya python'da bir soruna yaklaştığımda, kodumun ağır kaldırılmasını sağlayan birçok kitaplık var. C ++ için GNU GSL , BOOST veya FFTW ve python için NumPy veya SciPy hakkında düşünüyorum . Birçok açıdan, bu kaynakların mevcut olması, kütüphaneler tüm düşük seviyeli şeyleri sıfırdan yeniden yazmak zorunda kalmamanızı engellediğinden, bu ilgili dillerde kodlamayı değerli kılmaktadır.

IEEE standart kütüphaneleri sadece veri türleri (C standart kütüphanelerine benzer) gibi temelleri kapsamaktadır.

VHDL'de olduğu gibi, bir açık kaynak kitaplığı kullanmak yerine bir sorunu çözecek bazı "IP Çekirdekleri" satın alabilir / bulabilirsiniz. Python'da, bir seri cihazla konuşmak istersem, sadece import serialve temelde bitirdim. VHDL'de ya seri bir protokolü sıfırdan yazmakta sıkışıp kalırdım, ya da bu tür işler yapan bir şey bulana kadar çeşitli depolarda google'a gitmek zorunda kalırdım. Daha sonra, sadece bir şey dahil etmek ve bunu çağırmak yerine, kod parçalarını projeme eklerdim. Benzer şekilde, bir FFT yapmak istersem, VHDL'de google üzerinden FFT örnekleri bulabilirim, ancak bulabileceğim FFTW gibi basit bir şey yok.

Projelerime aktarabileceğim kapsamlı bir açık kaynak kütüphanesi var mı? Neden herkes bu kadar çok şey için kendi kodunu kullanıyor gibi görünüyor?


2
Opencores.org'u aradınız mı?
MarkU

3
VHDL doğrulama kütüphaneleri için bkz. Osvvm.org
Jim Lewis

Opencores, çeşitli kaynaklardan kütüphaneler de satın alabilirsiniz. Çoğu iyi belgelenmediği için açık çekirdekten çoğu çekirdeğe biraz zaman harcayacaksınız.
Voltaj Başlangıcı

Yanıtlar:


14

' The PoC Library'de geliştirici ve koruyucuyum . Paketlerden (yeni tür ve işlevlerin toplanması) ve modüllerden oluşan böyle bir kütüphane sağlamaya çalışıyoruz. Ortak beşli, aritmetikler, saat yönünden bileşenler, düşük hızlı I / O bileşenleri ve bir Ethernet / IP / UDP yığını (bir sonraki sürüm) ile birlikte gelir.

@Crgrace'ın açıkladığı gibi, tasarım modülleri için oldukça karmaşıktır:

  • birçok platformda çalışın
  • Çoğu satıcı alet zincirini destekleyin
  • ek / daha az ek yük ekle

Kütüphanemiz, satıcıları, cihazları ve hatta cihaz alt ailelerini doğru kodu veya optimize edilmiş bir uygulamayı seçmek için ayırt etmek için bir dahili konfigürasyon mekanizmasına (PoC.config) sahiptir. Ayrıca bazı noktalarda sentez ve simülasyon kodu arasında ayrım yapar.

Örneğin PoC.fifo_cc_got, 'ortak saat' (cc) arayüzüne sahip bir FIFO ve fifo'yu kontrol etmek için sinyaller koydu. Fifo, genişlikler, derinlikler, dolgu durumu bitleri ve uygulama tipinde yapılandırılabilir. LUT tabanlı RAM veya Çip Üzerinde RAM (ocram) uygulama türü seçmek mümkündür. Bu fifo Altera için okram seçeneğiyle sentezlenirse, altsenkram kullanır; Xilinx seçilirse, genel bir BlockRAM açıklaması kullanır ve açık taşıma zinciri örneğiyle işaretçi aritmetiğini uygular (Xilinx XST en uygun çözümü bulamaz, bu yüzden manuel olarak yapılır).

'Bağımlı saat' (dc) ve bağımsız saat (ic) arayüzlü 2 farklı fifo tipi vardır. Dolayısıyla, normal bir fifo'dan saat yönündeki bir fifo'ya (PoC.fifo_ic_got) geçmek gerekirse, varlık adını değiştirin ve bir saat ekleyin ve ikinci saat alanı için sıfırlayın, hepsi bu.

Bu kanıtlıyor, birden fazla platformda çalışan ve farklı araçlarda (Spartan-> Virtex, Cyclone -> Stratix; ISE, Vivado, Quartus) derlenen ortak modüller yazmak mümkündür.

PoC'nin yanı sıra başka açık kaynak kütüphaneleri de vardır:


GitHub'daki "Serbest ve Açık Kaynak Silikonu Keşfet " ( FOSSi ) projeleri, esas olarak , , veya diğer önemli donanım açıklama dillerini ( ) kullanan tüm GitHub projelerinin göz atılabilir bir veritabanını sunar .

Ayrıca bakınız:


Yaptıklarınızı ve başkalarının yaptıklarını göstermek için +1. İyi uzun bir liste.
Bay Mystère

3

Açıkladığınız gibi açık kaynaklı kütüphaneler, VHDL veya Verilog için genel amaçlı bir programlama dili kadar yararlı olmaz. Bunun nedeni, belirli bir işlevi NASIL uyguladığınıza, ne yapmaya çalıştığınıza bağlı olarak çok fazla şey yapabilmesidir. Kod ve FPGA için iyi bir kod muhtemelen bir ASIC için çok iyi değil veya tersi.

Ayrıca, donanımı açıkladığımız için, bir FFT yapan bir işlev, kelime genişliği ve saat ve sıfırlama stratejisi gibi özellikleri gerektirecek ve ellerinizi bağlayacak ve tüm tasarımınızı kısıtlayacaktır. Fonksiyonu çok esnek hale getirirseniz, muazzam bir yüke sahip olurdu.

Son olarak, örneğin, C'ye çok sayıda kitaplık eklediğinizde yürütülebilir dosya boyutunuza bakın. Orada bir ton şişkinlik var. Bu, yazılım geliştirme (çoğu zaman) için önemli değildir, ancak FPGA ve özellikle ASIC geliştirme için çok önemlidir. İhtiyacınız olmayan bir sürü ek yükü sentezlemenin bir anlamı yok.

Sonuçta böyle bir kütüphane yok ve şu anki yaklaşımınız sağlam.


Alternatif (IP) çekirdekli jeneratörler ayrıca satıcıların Scylla ve Chabydris'in kilitlenme ve sonuçta ortaya çıkan şişlik risklerini sağlar. FPGA ve ASIC kapasiteleri, şişkinliği destekleyecek kadar büyüdü, sorun daha sonra maliyet ve test, şişkin standardizasyonunun yardımıyla (örneğin AMBA AXI4). Tüm endüstriler tarafından halihazırda "Zamana ihtiyacınız yok" ile Piyasaya Kadar Süre Kapalı ticareti. Donanım tasarımı yerine yapı taşlarını kullanan sistem tasarımı, ikincisi VHDL'nin kurtarıcısı.
user8352

Üçüncü paragrafınız, derleyicilerin ve sentez araçlarının nasıl çalıştığından oldukça cahildir - araçlar, gerekli olmayan şeyleri ve sonuçları kullanmamalı, hatta bir dijital mantık ortamında daha fazla yerel dilin bulunduğu bir üst düzey dil kütüphanesinden daha fazla özellikle dinamik olarak bağlıysa, kütüphane soyutlamasının ek yükü olan değişkenler ve bellek ayırmaları.
Chris Stratton

2

VHDL ve Verilog açıklayıcı dillerdir ve donanım bloklarını tanımlarlar. C ++ 'daki seri sürücü VHDL / Verilog'da Seri IP'ye dönüşebilir.

opencores.org, bugüne kadarki en büyük açık kaynaklı veritabanıdır.

Arama, indirme ve kod tarama işlemini (Github aracılığıyla) kolaylaştırmak için bu modern arayüzü kullanabilirsiniz:

http://freerangefactory.org/cores.html

Örneğin, seri için arama yaparsanız, burada bitirebilirsiniz:

http://freerangefactory.org/cores/communication_controller/serial_uart_2/index.html

ve doğrudan GitHub'daki koda atlayın. Orada, seri modülü kolayca başlatabileceğinizi ve kendi devrenizi ona bağlayabileceğinizi ve veri göndermeye ve almaya başlayabileceğinizi göreceksiniz. Bu C ++ seri lbs kadar basit.

Umarım bu yardımcı olur.


0

Bu tür şeyler için gittiğim ilk site (@MarkU'nun belirttiği gibi) opencores.org.

Örneğin , BSD lisansı altında piyasaya sürülen VHDL'de yazılmış parametreli bir FFT motoru vardır . Durum "beta" dır.


OP'nin istediği bu değil. Opencores.org'a bakmayı biliyor. Parametreli bir FFT motoru, Python'da standart bir matematik kütüphanesini içe aktarıp kullanmaktan çok uzak. Genel gider nedeniyle donanımda "ara katman" diye bir şey yoktur.
30'da crgrace

0

Doğrulama için Açık Kaynak VHDL Doğrulama Metodolojisi (OSVVM) vardır.
OSVVM, işlevsel kapsamın, kısıtlı rastgele ve Akıllı Kapsama Rastgele (akıllı bir testbench metodolojisi) uygulanmasını basitleştiren kapsamlı, gelişmiş bir VHDL doğrulama yöntemidir. Ayrıca paylaşılan konuşma metni dosyalarının uygulanmasını, hata raporlamayı, günlükleri (koşullu yazdırma) ve bellek modellemeyi kolaylaştırır.

OSVVM'nin web sitesi ve blogu http://osvvm.org adresindedir . Paketler ayrıca github'da şu adresten edinilebilir: https://github.com/JimLewis/OSVVM

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.