2012-01-24 340 views
21

在大學時我用C語言編寫了一個FPGA。不過,我也知道一個人通常使用Verilog或VHDL編程FPGA。這是設計師的選擇嗎?如果是這樣,性能缺點是什麼?你能用C語言編程FPGA嗎?

我會非常喜歡的類C語言對FPGA進行編程,而不是VHDL。

我想獲得一個賽靈思的Virtex-5,如果這有什麼差別嗎?

+1

對VHDL的反對意見是什麼 - 語法或功能? –

+0

也許OpenCL更充分:https://www.altera.com/products/design-software/embedded-software-developers/opencl/overview.html –

回答

6

簡短的回答是「是的,當然」。

這裏的C編譯器爲基於FPGA的FPGA和系統的優秀的調研。

C-to-hardware compiler (HLL synthesis)

性能缺點和考慮在系統架構和通信帶寬,而不是在使用C對一個硬件設計語言(HDL)中找到。使用C和HDL的考慮因素在於編程時間和軟件維護問題,而不是性能問題。

1

我猜你用亨德爾C.其下的子集,從我知道結果是不是很優化。 Verilog和VHDL允許更多的優化。我基礎上,我與韓德爾Ç經驗,幾年前說這句話的

+0

有人支持Handel C嗎? –

1

你可能想看看C到硬件技術,在這裏你可以寫C代碼,它會被編譯/翻譯成VHDL或Verilog。 This post列出了一些編譯器。沒有使用它我自己,所以我沒有任何經驗。希望這可以幫助!

1

許多設計人員使用VHDL/Verilog代替高級語言,原因與許多程序員過去使用過(並且在某些情況下仍然使用)編寫程序集代替Java的相同原因:您可以調整資源使用情況和性能低級。 VHDL和Verilog都是爲設計硬件而設計的語言。 C不是。如果有足夠的時間,你總是可以用VHDL/Verilog編寫一個程序,該程序將勝過高級語言程序。 HLL給你的是1)更快的開發,2)易於維護,3)可能更大的可移植性。

已經有許多努力編寫現有的高級編程語言(C是一個)FPGA目標。實際上,他們中的大多數都會生成優化的代碼。例如,Impulse C是C的一個子集,帶有一些支持進程級並行機制的附加庫,以及一個用於優化指令級並行機制的C輸入的編譯器。它管道循環,將某些操作映射到知道底層FPGA系列提供的高性能硬件原語等。(完整披露:我幫助構建了Impulse C工具鏈。)

The C-to-hardware environments列表Carlito和David Pointer鏈接到非常詳盡。賽靈思Virtex-5得到了其中許多廠商的支持,如果您正在使用來自主要供應商的最新FPGA系列,那麼選擇硬件應該不成問題。一些HLL環境支持內置(或軟核)嵌入式CPU比其他更好。

21

FPGA的不是處理器。 C是爲處理器設計的語言。

是的,這裏有C到FPGA的編譯器。

他們是個好主意嗎?我會說沒有。你將要結束的設計是(從我所看到的)通常是一個狀態機,它在C中每行代碼有一個狀態。狀態機然後移動狀態執行該算法。無論是那種還是其他類型的圖靈機都可以執行代碼。

這是不是 FPGA設計人員通常會如何解決問題。這是一個緩慢的,可能是門戶飢餓的方式。

以同樣的方式,英語是一種更好的語言來寫小說比Fortran語言,VHDL和Verilog是更好的語言來描述邏輯電路比C

如果你認真使用FPGA,使用語言旨在描述邏輯電路。這可能是一個陡峭的學習曲線,但結果會好得多恕我直言。

+0

當然,也可以使用[C to HDL](https://en.wikipedia.org/wiki/C_to_HDL)編譯器將C程序翻譯成VHDL或Verilog。 –

1

你應該看看SystemC。使用基於C語言的優勢非常豐富。尤其是,從系統設計的角度來看,您可以利用其他軟件(固件和其他低級別的東西)用C編寫。因此,您的軟件團隊可以對rtl代碼進行真正的早期階段測試。

2011年,賽靈思收購了開發SystemC高級綜合產品的AutoESL公司。賽靈思在發佈其產品「AutoESL」時重新使用該名稱。特別是在他們的新電路Zynq中,有一個與FPGA邏輯一起嵌入的雙核ARM Cortex A9,這可能會成爲系統開發的強大工具。

4

你可以在裏面安裝一個軟核處理器這個FPGA邏輯,然後在虛擬處理器內部運行你的C代碼。賽靈思擁有Microblaze(許可)和Picoblaze(免費)內核。還有其他可以實現的軟核(MIPS,x86,8051等)。

但是,這在很大程度上被認爲是「黑客」,因爲核心與真實核心相比非常慢。而且我認爲,從C到FPGA的轉換最終會開始聞起來像是在運行一個軟內核,而不會給你在FPGA上運行的效率。 FPGA不是圖靈機,它們是一大堆邏輯門。你可以在大門外建一個圖靈機,但這不是你買了一大堆門的原因。

它有點像買了一盒樂高積木,並且用磚頭砌出一把錘子和一套釘子。它可能會奏效,但你最好買一把錘子來敲釘子,最好是用樂高玩具建造城堡,太空船和消防站。

2

確實有一些編譯器允許您使用像C這樣的高級語言來推斷(使用不完整的描述來解決)硬件電路。「C-to-gates」實際上是流行的流行詞。圖片公司宣傳的是,如果程序員使用的語言是他們用來描述軟件的語言,他們就能夠編寫硬件。由於多種原因,這是非常錯誤的,其中最主要的是由C語言和硬件描述語言等語言假設的執行模型之間的根本區別。

一個說明性的例子:C假定它的核心是一個大的隨機可訪問的線性尋址內存 - 這個假設很少適用於硬件。 C-to-gates編譯器面臨着所描述的程序的行爲的具有挑戰性的任務,並且設計具有相同行爲的硬件電路。

雖然類似C語言是在有限的使用情況有很大的生產力工具,這些編譯器肯定不會讓你突然知道如何設計的硬件,如果你熟悉C.

希望這有助於

0

我想添加一些我認爲是OP最接近問題的答案。如果你正在尋找一個類似C的語言(與C不一樣),你一定要檢查Synflow。這個想法是有一種現代語言,可以讓您在沒有VHDL/Verilog學習曲線的情況下進行更快速的設計,而且不會帶來任何開銷。它也是免費和開源的!

信息披露:我是Synflow的聯合創始人:-)