|
勇敢的芯伴你玩轉Altera FPGA連載30:可綜合的語法子集1 特權同學,版權所有 配套例程和更多資料下載鏈接: http://pan.baidu.com/s/1i5LMUUD
所謂可綜合的語法,是指硬件能夠實現的一些語法,這些語法能夠被EDA工具所支持,能夠通過編譯最終生成用于燒錄到FPGA器件中的配置數據流。無論是Verilog語言還是VHDL語言,可綜合的子集都很小。但是如何用好這些語法,什么樣的代碼風格更適合于硬件實現,是每一位初學者都需要下功夫好好掌握的。 下面是常用的RTL級的Verilog語法及其簡單的用法描述。Verilog和C語言的語法上確實有很多相似相通之處,學習語法時相互類比進行記憶也未嘗不可,但是筆者擔心一旦過多的混淆C語言和Verilog,會讓初學者誤入歧途,畢竟Verilog和C語言在本質上存在著很大的差異,尤其是他們的設計思想和實現載體存在著很大的差異,所以希望大家在語法的學習過程中,盡可能多去了解和比對相關語法最終實現的硬件電路,從而盡快的從軟件式的順序思維中解脫出來,更好的理解硬件式的并行處理。 模塊聲明類語法:module…endmodule。 在每個verilog文件中都會出現該語法,它是一個固定的用法,所有的功能實現語法最終都應該包括在“…”中。Module的語法如下所示,module后的my_first_prj為該module的命名,取名沒有任何限制(默認數字、下劃線和字母的組合均可),隨后一個“()”內羅列出該模塊所有的輸入輸出端口信號名。 module my_first_prj(<端口信號列表> … ); <邏輯代碼> … endmodule 端口聲明:input, output,inout(inout的用法比較特殊,需要注意)。 每個module都會有輸入輸出的信號用于和外部器件或其他module通信銜接。對于本地module而言,這些信號無非可以歸為三類,即輸入(input)信號,輸出(output)信號和雙向(inout)信號。通常在module語法后緊接著就要申明該模塊的所有用于與外部接口的信號。語法上來講,這些信號名也都要在module名后的“()”內列出。 最常見的三種端口申明實例如下: input clk; input wire rst_n; input [7:0] data_in; 第1個申明表示1bit的名稱為clk的輸入信號端口,第2個申明表示wire類型的1bit的名稱為rst_n的輸入信號,第3個申明則表示8bit的名稱為data_in的輸入信號。 |