現在 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 Overviewvoid 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&
sc_out&
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
}
};
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 |