現在 C 語言可以設計 FPGA 么?

C 語言可以設計 FPGA 么,希望大神能詳細說說!!


現在可以用 C 開發 FPGA

只不過限制多多

舉個栗子: 在 Xilinx Vivado 中用 C 開發 FPGA

限制: C 必須按照廠家給的規範寫

比如你要用 Xilinx 的 Vivado 就要根據他的規範

而同樣的代碼放到 Cadence 的 C-to-Silicon compiler 就可能

不能編譯 或者 不能綜合

建議: 用已經標準化了的 SystemC 開發

不過雖然 SystemC 是 C++ 的一個庫和宏的集合

可是可綜合的SystemC 只是 SystemC 的一個子集

比如 float 就不能綜合 參考這個文檔的第19頁

======== 問題回答完畢 ========

再說說大家談到的 HLS

HLS 可以加速開發

但是不能明顯的降低開發門檻

也就是說 software guy 還是不能直接上手開發硬體

比如用 C 開發一個 FIR: 引用自 Vivado HLS Overview

void fir (
data_t *y,
coef_t c[4],
data_t x
) {
static data_t shift_reg[4];
acc_t acc;
int i;
acc=0;
loop: for (i=3;i&>=0;i--) {
if (i==0) {
acc+=x*c[0];
shift_reg[0]=x;
} else {
shift_reg[i]=shift_reg[i-1];
acc+=shift_reg[i] * c[i];
}
}
*y=acc;
}

這段 C 代碼和 VHDL 的代碼結構完全一樣

代碼量也差不多(假設你的綜合工具支持定點數)

對我來講差不多節省了 50% 的 coding 時間

主要在 entity interface 上

而且不用考慮累加時的最高位處理了

因為 acc_t 會自動考慮的

可是如果我是一個純 C 工程師

我是不會想到用 acc_t 的

而且我會用不能綜合的浮點數...

所以重中之重還是要了解數字電路啊

腦子裡永遠要有一個清晰的電路結構

HDL 或者 SystemC 之類知識提供一個載體

讓你把電路結構描述清楚而已

舉個例子 Xilinx Vivado 中就算用 C 描述一個演算法

也要告訴綜合工具其中的循環要怎麼處理

是 rolled, unrolled 還是 pipelined.


其實現在很多工具都能做高層次綜合(High Level Synthesis),大多數的工具支持C,也有支持C++, SystemC。有獨立公司做的,也有大公司旗下的。Wikipedia上有一個比較完整的列表:

High-level synthesis

除此之外,Matlab的HDL Coder也被認為是HLS的一種,能從m語言轉換成HDL,再經過FPGA的綜合器綜合。

@方博宇 提到了OpenCL,這的確也是用C語言設計FPGA的一種工具,不過跟之前提到的High Level Synthesis不同的是,OpenCL一般需要一個Kernel,不管這個kernel是硬體實現的還是軟體實現的,用這個Kernel來分發作業。而普通HLS是把C的過程直接翻譯成HDL描述的電路。細節上有些區別。

@載入中 提到的Vivado,其實支持高層次綜合的是Vivado 套件中的Vivado HLS這個工具,跟Xilinx的其他工具配合得比較緊密,可以生成HDL給普通FPGA用,也可以生成帶AXI介面的協處理器加到ZYNQ的ARM上做加速運算。

從目前的狀況來說,HLS工具不能完全替代手寫HDL。它能比較快速地實現演算法類的設計,但是介面類的設計不太適合用HLS工具來設計。對演算法類的設計,HLS可以很方便地修改實現的結構,在短時間內評估同一個演算法的各種實現的資源佔用和運算效率,這方面比手寫HDL的優勢大,看上去也是將來的趨勢。

同時,HLS工具的出現也不是說FPGA工程師要失業了,因為首先HLS還有它不適合的領域,而且要優化出一個高效的設計,還需要有比較深層的對硬體結構的了解。


可以啊,你跑NIOS,裡面全是C語言寫的程序,建立好軟核之後相當於一個單片機,然後就可以像寫51程序一樣往FPGA裡面寫程序


目標:不會硬體的軟體工程師,會C就能玩FPGA


可以使用OpenCL進行FPGA編程了.

http://www.altera.com.cn/products/software/opencl/opencl-index.html


指望搞軟體的寫硬體邏輯?

滿腦子代碼要優雅,要面向對象復用的人去折騰底層效率優化???根本的設計哲學就不一樣嘛

HLS顯然是給以前寫HDL的工程師,提升寫演算法效率用的嘛


真不明白乾嘛要開心新的語言來開發FPGA,verilog vhdl 已經非常簡單了。一個D觸發器,一個邏輯關係描述一下。 簡直不能再簡單了就兩種寫法。 FPGA開發不是語言難而是設計難。不知道為什麼總是糾結於語言。 而且fpga 設計還有穩定性的問題!設計時要好好考慮的


NIOS ii 中就是C語言編程


Richy Su說的很對,HLS很有用,但目前還有很多限制。

業界有不少用C開發ASIC的例子,FPGA則主要是演算法部分,當然FPGA應用的限制會更多。

基本上用哪家的FGPA,就得按哪家的流程來走。

總之HLS是一個很有趣的事情,未來一定會有很多的可能,但指望軟體工程師玩FPGA,呵呵


hdl語言這麼簡單方便,看上去就和一個一個晶元似的,為什麼要用c?


現在的vivado好像有這樣子的綜合。


SystemC

Example code of an adder:

#include "systemc.h"

SC_MODULE(adder) // module (class) declaration
{
sc_in& a, b; // ports
sc_out& sum;

void do_add() // process
{
sum.write(a.read() + b.read()); //or just sum = a + b
}

SC_CTOR(adder) // constructor
{
SC_METHOD(do_add); // register do_add to kernel
sensitive &<&< a &<&< b; // sensitivity list of do_add } };

http://en.wikipedia.org/wiki/SystemC


vivado裡面的hls,以前叫auto esl ,xilinx收購的公司。


推薦閱讀:

pthread_cond_wait 為什麼需要傳遞 mutex 參數?
在哪裡可以找到C語言標準庫的實現源代碼?
為什麼知乎用戶vczh不建議初學編程的人把C作為入門語言?
C語言的取余運算 a%b,如果a<b,那取余a,2%3=2,25%26=25,這是為什麼,規定?
開源代碼里某個函數很長,這種代碼能否認為是好的?

TAG:硬體 | C編程語言 | 現場可編輯邏輯門陣列FPGA |