1. 程式人生 > >Verilog HDL基本知識介紹分享(1)——Verilog 簡介

Verilog HDL基本知識介紹分享(1)——Verilog 簡介

近期準備抽空準備做一個Verilog HDL 的簡單分享,以供初學者瞭解學習,技術認知有限,有錯誤處歡迎大家指出來一起交流。file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image001.gif 一、Verilog 語言簡介 1.硬體描述語言說明 概念:硬體描述語言(HardwareDiscription Language, HDL)以文字形式來描述數字系統硬體結構和行為,是一種用形式化方法來描述數位電路和系統的語言,可以從上層到下層逐漸描述自己的設計思想,即用一系列分層次的模組來表示複雜的數字系統,並逐層進行驗證模擬,再把具體的模組組合由綜合工具轉化成門級網路表,然後再利用佈局佈線工具把網路錶轉化為具體電路結構的實現。 優勢:文字形式描述,有利於將系統劃分子模組化,便於團隊開發,通用性和可移植性強。 2.Veriolg  VS  VHDL 水太深,沒學過VHDL,不敢妄加品論,想了解的可以參考

http://blog.sina.com.cn/s/blog_5084855b0100b08i.html這篇部落格。 3.Verilog HDL 與C語言 Verilog 語言從C語言發展而來,因此具備了C語言簡潔、易用的特點。主要差別體現在以下三點: 1)互連:在硬體系統中,互連是一個非常重要的組成部分,而在C語言中,並沒有直接可以用於表示模組間互連的變數;而Verilog HDL 中的wire型變數配合一些驅動結構,能有效的描述出網線的互連。 2)併發:C語言天生是序列的,不能描述硬體之間的併發特性。C語言編譯後,其機器指令在CPU的高速緩衝佇列中基本是順序執行的;而Verilog可以有效描述並行的硬體系統。 3)時間:執行C程式時,沒有一個嚴格的時間概念,程式執行時間的長短主要取決於處理器本身的效能;而Verilog語言本身定義了絕對和相對的時間度量,在模擬時可以通過時間度量與週期關係描述訊號之間的時間關係。 4.Verilog HDL 可以用來做什麼? 1)基本邏輯閘電路的實現; 2)可以使用者自定義原語(UDP),既可以是組合邏輯原語,也可以是時序邏輯原語; 3)開關級基本結構模型(如pmos和nmos等) 4)提供顯示語言結構指定設計中的埠到埠延時以及路徑延時,以及設計的時序檢查 5)支援3種方式或混合方式建模:行為描述方式(使用過程化結構建模)、資料流方式(使用連續賦值語句方式建模)和結構化方式(使用門和模組例項語句描述建模)。 6)兩種資料型別:線網資料型別和暫存器資料型別。線網型別表示構件間的物理連線,而暫存器型別表示抽象的資料儲存元件。 7)能夠描述層次設計,可使用模組例項結構描述任何層次。 8)能夠在多個層次上加以描述,從開關級、門級、暫存器傳送級(RTL)到演算法級,包括程序和佇列級 。。。。。。 太多了,數不勝數 二、Verilog HDL 設計流程 典型的FPGA/CPLD設計流程如下
  三、Verilog HDL 模組設計 1.概念:用於描述某個設計的功能或結構及其與其他模組通訊的外部埠。 模組對應著的硬體電路,他們之間是並行執行的,也是分層的,高層模組通過呼叫、連結底層模組的例項來實現複雜的功能。如果要將所有的功能模組連線成一個完整的系統,則需要一個模組將所有的子模組連線起來,這一模組也被稱為頂層模組(Top Module)。為了便於管理,一般一個.v檔案實現一個模組 2.模組的基本結構一個完整的Verilog HDL 模組結構如下所述: modulemodule_name(port_list)    //模組開始     //宣告各種變數、訊號     reg            //暫存器     wire           //網線     parameter      //引數     input          //輸入訊號     output         //輸出訊號     inout        //輸入輸出訊號     function     //函式    task        //任務 //程式程式碼  initial assignment always assignment module assignment gate assignment UDP assignment continuous assignment  endmodule  //模組結束 實際中不需要具備以上所有結構特徵,基本模組結構如下,可以滿足一般模組設計 module <模組名> (<埠列表>)     <定義>     <模組條目> endmodule  其中,<模組名>   是模組唯一性的識別符號;           <埠列表> 定義了和其餘模組進行通訊連結的訊號,根據資料流方向可以分為輸入、輸出和雙向埠3類;           <定義>     用於指定資料物件為暫存器型、儲存器型、網線型及過程塊;           <模組條目> 可以是initial結構、always結構、連續賦值或模組例項。 3.埠說明模組埠是指模組與外界互動資訊的介面,包括如下三種類型: input:輸入介面,模組從外界讀取資料的介面,在模組內不可寫。 output:輸出介面,模組往外界送出資料的介面,在模組內不可讀。 inout:輸入/輸出埠,也稱為雙向埠,可讀取資料也可送出資料,雙向流動。 上述3類埠中,input埠只能是wire資料型別;output埠即可是wirel型別,也可為reg型別;inout只能申明為wire型別。 關於wire和reg兩種型別的區別這裡就不詳細討論了,可以參考下面兩個連結:
http://blog.chinaunix.net/uid-21227800-id-65935.html
http://wenku.baidu.com/link?url= ... 55QN_-xNChR-MRQrAMW 今天的分享就到這裡了,下次繼續,敬請期待。