ile C’deki FPGA’lar Verilog ile bir FPGA programlama programlama gibi harika bir anlaşma görünüyor. Ancak en azından geleneksel anlamda değil. C kodunu almak, ayrıca bir donanım açıklama diline dönüştürmek için bir dizi sistem olmuştur. Bunlardan biri, Cynth, GitHub’da sunduğu gibi kullanımı kolaydır. Denemek istiyorsanız, SCALA’yı ve SBT olarak adlandırılan bir gelişme sisteminin yanı sıra bir gelişme sistemi ayarlayacaksınız.
Tabii ki sınırlamalar var. Bir ön işlemci istiyorsanız, ayrı olarak çalıştırmanız gerekir. Dünya çapında değişkenleri, çarpma, yüzerlerin yanı sıra çok sayıda C parçasını kullanamazsınız. Derleyici, her C işlevi için bir verilog verisi üretir.
Geleneksel bir C programı, bir çok işlemciye göre özel yöntemler kullanmazsanız her seferinde bir şey yürütür. O zaman bile, ne kadar sayıda CPU’nun kontrol edeceğinin tam olarak kontrol edeceğiniz için bazı yararlı bir sınır var. Öte yandan, bir FPGA, paralel olarak gerçekleşen şeyleri yürütmenizi sağlar. Örneğin, bunu düşünün:
süre (1)
{
OUT1 = CTR1 ++;
OUT2 = CTR2 ++;
}
OUT1 değeri, OUT2’deki değerden önce biraz bitlenme yapacak. Bunların çoğuna sahip olsaydınız, OR999’un kadarıyla, gecikme önemli olabilir. Eşdeğer Verilog Kodu gibi görünebilir:
her zaman @ (Posedge CLK)
başlamak
OUT1 <= CTR1;
Ctr1 <= Ctr1 + 1;
OUT2 <= CTR2;
CTR2 <= CTR2 + 1;
son
Bu pratik olarak aynı görünüyor, ancak çıktılar tam olarak ne kadar sayıda var olursa olsun, aynı zamanda aynı zamanda değiştirilecektir. Çok daha fazlası, göremediğiniz diğer tüm şeylerin aynı zamanda aynı zamanda gerçekleşmesi de olacağıdır. Tıpkı bir donanım gibi, girişi, girişlerini "taramıyor", bir FPGA tüm girişlerini yanı sıra çıkışları üretir.
CYNTH'nin durumunda, her C işlevi, varsa, eğer varsa, iade değeri için bir anlaşmazlıkla birlikte aynı argümanlara sahip bir verilog modülü üretir. Aynı şekilde, sistem saati, sıfırlama sinyali ve üç yönetimi sinyalinin yanı sıra girilecektir. Biri işlemeye izin veren bir giriştir. İki çıkış var. Biri, fonksiyonun birinin daha fazlasını gösterdiğinin yanı sıra izin verecek şekilde sunulduğunu gösterir.
Kodla sunulan örnek, dört LED'i kullanan bir Cylon göz desenidir. Saf Verilog ile üretilen iki dış fonksiyon vardır. Write_leds işlevi, LED'leri ve bir uyku fonksiyonunun bir gecikme oluşturur.
C kodu, Roving adlı basit bir işlevdir:
süre (1)
{
Eğer (Dir && C == 8)
dir = 0;
EĞER (! DIR && C == 1)
dir = 1;
if (dir)
c << = 1;
Başka
c >> = 1;
write_leds (c);
uyku (1000); // 1s
}
İlgili Verilog verileri, bir verilog emülatörünü kullanarak onaylayabileceğiniz gibi aynı işlevi gerçekleştirir.
Üretilen kodu kazmak istiyorsanız, Verilog hakkında bazı projelerle daha fazla keşfedebilirsiniz. Eğer C senin bir şey değilse, her zaman Python’u deneyebilirsiniz.