硬件原則主要針對HDL代碼編寫(xie) 而言。應該明確FPGA/CPLD的邏輯設計所采用的硬件描述語言同軟件語言是有本質區別的!以Verilog語言為(wei) 例,雖然Verilog許多語法規則和C語言相似,但是Verilog作為(wei) 硬件描述語言,他的本質作用在於(yu) 描述硬件!應該認識到Verilog是采用了C語言形式的硬件的抽象,他的最終實現結果是芯片內(nei) 部的實際電路。所以評判一段HDL代碼的優(you) 劣的最終標準是其描述並實現的硬件電路的性能(包括麵積和速度兩(liang) 個(ge) 方麵)。評價(jia) 一個(ge) 設計的代碼水平較高,僅(jin) 僅(jin) 是說這個(ge) 設計由硬件向HDL代碼這種表現形式轉換的更流暢、合理。而一個(ge) 設計的最終性能,在更大程度上取決(jue) 於(yu) 設計工程時所構想的硬件實現方案的效率以及合理性。
片麵追求代碼的整潔、簡短,這是錯誤的,是與(yu) 評價(jia) HDL的標準背道而馳的!
硬件原則的另外一個(ge) 重要理解是“並行”和“串行”的概念。硬件係統比軟件係統速度快、實時性高,其重要原因就是硬件係統中各個(ge) 單元的運算是獨立的,信號流失並行的。而C語言編譯後,其機器指令在CPU的高速緩衝(chong) 隊列中基本是順序執行的,即使有一些並行處理的技術,也是在一定程度上是十分有限的。所以在寫(xie) HDL代碼的時候,應該充分理解硬件係統的並行處理特點,合理安排數據流的時序,提高整個(ge) 設計的效率。
RTL級Verilog描述語法和C語言描述語法的區別舉(ju) 例:
1、循環
在C語言的描述中,為(wei) 了使代碼執行效率高,表述簡潔,經常用到下麵的for語句
for(i=0;i<16;i++)
...
Verilog代碼設計中,在RTL級編碼中極少使用FOR循環,因為(wei) for循環會(hui) 被綜合器展開為(wei) 所有變量情況的執行語句,每個(ge) 變量獨立占用寄存器資源,每條執行語句並不能有效的複用硬件邏輯資源,造成巨大的資源浪費。RTL硬件描述中,遇到類似算法,推薦的方式是先搞清楚設計的時序要求,做一個(ge) reg型計數器,在每個(ge) 時鍾沿累加,並在每個(ge) 時鍾沿判斷計數器情況,做相應的處理,能複用的處理模塊盡量複用,即使所有操作都不能複用,也采用case語句展開處理。如:
reg [3:0] counter;
always @(posedge clk)
if(syn_rst)
counter <= 4'b0;
else
counter <= counter+1;
always @(posedge clk)
begin
case(counter)
4'b0000:
...
default:
endcase
end
2、條件判斷
C語言中主要有if...else和switch語句,兩(liang) 者之間的區別主要在於(yu) 程序的長短。
Verilog中也有相應的if...else和case語句,但其描述結構就有很大的區別。if...else語句是有優(you) 先級的。一般來說第一個(ge) if的優(you) 先級最高,最後一個(ge) else優(you) 先級最低。而case語句是“平行”的結構,沒有優(you) 先級。
轉載請注明出處。







相關文章
熱門資訊
精彩導讀

























關注我們

