C'den Silikon'a: Donanım olarak yazılım / ürün yazılımı çözümü nasıl uygulanır?


13

Bu sorunun ışığında, bir yazılım çözümünü bir donanım uygulamasına dönüştürmek için oldukça standart bir süreç olup olmadığını merak ediyordum. Beni ve hayal gücümü affedin, ama bir C programı alıp transistörler, dirençler, vb.

Bu senaryoya yanlış açıdan bakabileceğimin farkındayım. Tarihsel olarak kendi tecrübelerime göre, birisinin bir yazılım çözümü olarak uyguladığı bir donanım parçanız var (donanım öykünmesini düşünün). Tersine bu kavram var mı? Yazılım ve donanım IP yönlendirmesi gibi daha büyük şirketler bunu nasıl yapıyor?


Ayrıca bkz. "Tek başlı C programımı neden otomatik olarak çok iş parçacıklı yapamıyorum?"
pjc50 28:13

@ pjc50: "Neden tekli C programımı otomatik olarak çok iş parçacıklı hale getiremiyorum?" ?
davidcary

Aklımda belirli bir örnek yok, ama bu daha önce insanların sorduğu bir soru. Aynı zamanda, donanımın insanların kendileri hakkında düşünme ve program yazma biçimleri açısından "doğal" bir şekilde sıralanmasıyla, donanımın kendiliğinden paralel olmasıyla da ilgilidir.
pjc50

Yanıtlar:


11

Hayır, yazılımı donanıma dönüştürmek için standart bir çözüm yoktur. Genel olarak, bir donanım uygulaması göz önünde bulundurularak yazılmayan yazılımların alınması, büyük israf ve verimsizlikler olmadan kolayca donanıma dönüştürülemez. Genellikle, yapılacak en iyi şey sadece bir CPU ve ROM'a sahip bir çip yapmak ve yazılımı ROM'a koymaktır.

Yıllar geçtikçe, VHDL veya Verilog'un donanıma derlenebildiği gibi, "C-Like" kodunu alıp donanıma derleyen derleyiciler de vardı. Ama asıl önemli olan, C değil, "C-Like" olmasıdır. Örneğin, PI hesaplayan ve sihirli bir şekilde PI hesaplayan donanıma dönüştüren bir C / C ++ programı alamazsınız. Bu C-Line dillerinin çoğu kayboldu veya herhangi bir sayıda kullanılmadı. Bunun en popüler sürümlerinden biri SystemC'dir , ancak C / C ++ olmadığını ve genel "yazılımı yazıp sonra donanıma derleyelim" için yararlı olmadığını belirtmek önemlidir. Yine de "yazılıma derlenebilecek bazı donanımlar yazmanız" gerekir.

Anahtarlar ve yönlendiriciler genellikle donanımda yaygın olarak kullanılan ve hız kritik yönlendirici işlevlerinin çoğunu (yönlendirme tablolarındaki şeyleri arama, kuyrukları yönetme vb.) Yapan donanıma sahiptir ve daha sonra yaygın olmayan tüm işlevleri yapmak için bir CPU kullanır (istisnaları, hataları, yönlendirme tablosu güncellemelerini vb. işleme). Birçok yönden bu, donanımda en yaygın opcodların yapıldığı ve bazen bazı opcodların yazılımda gerçekte uygulandığı modern CPU'nun çalışmalarına benzer (örneğin, bir FPU mevcut olmadığında kayan nokta talimatları).


Sadece SystemC gerçek C ++ değil, sadece bir C ++ kütüphanesi. SystemC ile istediğiniz herhangi bir sıradan C ++ kodunu kullanabilirsiniz. Bununla birlikte, SystemC'nin otomatik olarak üretilen donanım ile ilgisi yoktur. Daha çok sistemleri simüle etmeye, mimari kararlar almaya yardımcı olmaya ve yazılım ekiplerinin donanım hazır olmadan başlamalarına izin vermeye yöneliktir.
Mart'ta Theran

Bu gerçekten belirli görevleri gerçekleştiren belirli donanımların neden olduğunu anlamama yardımcı oluyor.
Chad Harrison

Bu amaç için tasarlanmış birçok C - HDL derleyicisi vardır.
Anderson Green

5

En yakın şey Altera'nın C-to-Hardware (C2H) Derleyicisi olacaktır . Önerdiğiniz şeylerden bazılarını yapabilir. Ancak meydan okurcasına uyarılar var. Herhangi bir C kodunu donanıma dönüştüremezsiniz, ne de istemezsiniz. Ancak belirli işlevler oldukça iyi çalışır ve performansta çarpıcı bir artış görebilirsiniz.

Genellikle bir Altera FPGA içine bir NIOS II softcore işlemci uygularsınız. Daha sonra bunun için başka bir işlemcide olduğu gibi ANSI C kodu yazarsınız. Sonra, yazdığınız C işlevlerinden birinin, bazı paralel yürütmelerden performans açısından fayda sağlayacak bazı ağır matematik içerdiğini varsayalım. C2H derleyicisini çağırırsınız, "Donanımda Uygulama" deyin ve esasen bu işlevi NIOS II softcore işlemcinin bir çevre birimine dönüştürür.

Aşağıda , ANSI C'de bir Mandelbrot hesaplamasının kodlanmasına ve daha sonra donanımda uygulanmasına bir örnek verilmiştir:

C2H derleyici hızlandırmalı Mandelbrot algoritması, derleyici optimizasyon düzeyi 2 (-O2) kullanılarak en hızlı Nios II işlemcide çalışan aynı algoritmaya kıyasla en az 60x hız artışı sağlar. Bu hız artışı, genel amaçlı bir işlem biriminden mümkün olmayan donanımın sağlayabileceği paralellik ve hızlı yineleme hızlarından kaynaklanmaktadır.

Örneğinize dönersek, NIOS II işlemci Linux çalıştırabilir. Yönlendirme görevlerini yerine getirmek için gerekli olan bazı işlevler donanım hızlandırmasından yararlanabilir. Büyük olasılıkla saf bir yazılım yönlendiricisinden daha iyi performans gösterecektir. Ancak asla özel olarak tasarlanmış özel ASIC'lerin performansına yaklaşmayacaktır.


1
Xilinx, daha önce AutoESL olarak bilinen Vivado HLS (Yüksek seviye sentez) adı verilen karşılaştırılabilir bir araca sahiptir. Benzer uyarılar geçerlidir: RTL'ye otomatik olarak dönüştürülmesi kolay bir kod türü ise, kodu RTL'ye dönüştürmek iyi bir iş çıkarır.
Theran

@Theran Xilinx'in rakip bir ürünü olduğunu bilmiyordum. Bunu kontrol etmem gerekecek. Teşekkürler!
embedded.kyle

2

Başlığınızda "Silikondan C'ye" ve vücutta tahta seviyesinde ürünlerden bahsediyorsunuz. Bu denklemin var olan kısmına odaklanacağım -> "C'den Silikona" tasarım akışları. C'nin kendisi, donanımın doğal paralelliğine, yarış koşullarını ve diğer sorunları önleme ihtiyacı için bazı temel desteklerden yoksun olduğu ve bu kavramları temsil edebilmesinde belirgin bir ifade olmadığı için, donanımın tanımı için doğal bir uyum değildir. Ya da Verilog ve VHDL kadar değil.

Sentezlenebilir (yani bir donanım açıklamasına dönüştürülebilen) ve burada donanım = dijital mantık olan C kodu, yazılım geliştiricileri tarafından değerlendirilen hiçbir kodlama yarışmasını kazanamaz.

İşte ASIC akış kalabalığı için C -> Silikon araçları tedarik eden bazı önemli satıcıların listesi.

  • Forte Cynthesizer

  • Mentor Mancınık

  • BlueSpec C

  • Synopsys Synphony (Synfora hariç)

  • Kadans C-Silikon


1

Makul bir donanım bekliyorsanız yazılımı donanıma dönüştürmek tamamen önemsiz bir iş değildir. Donanım, alan / maliyetle ilgili kaynak kullanımını dikkatlice yönetmek için daha fazla mimariye ihtiyaç duyma eğilimindedir. Bunu söyledikten sonra, C'yi bir şekilde alan, donanıma özgü bilgiler eklemenize (örneğin, donanım arabirimi nedir?) Ve optimize edilmiş donanım oluşturmanıza izin veren birkaç araç vardır. Yetkin kullanıcılar elle kodlanmış RTL'den daha kısa sürede daha iyi sonuçlar elde edebilir.

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.