作者序
Verilog語言是一種一般性的硬體描述語言,它的語法與C語言相似,易學易用,而且能夠允許在同一個模組中有不同層次的表示法共同存在,設計者可以在同一個模組中混合使用:電晶體層次(Transistor Model)、邏輯閘層次模型(Gate Level Model)、暫存器轉移層次(Register Transfer Level),以及行為模型(Behavioral Model)等4種不同層次的表示法來描述所設計的電路。
有鑒於市面上本介紹Verilog硬體描述語言的書籍,一般都普遍將電路描述的目標放在不同層次的仿真機制,能夠作為仿真的Verilog電路描述並不能代表著就能通過邏輯合成的步驟;也就是說有些Verilog的語法是專門用來作為電路仿真之用的,並不適用於邏輯合成的,因而讓一些剛開始使用Verilog來設計數位電路的新手們感到困惑,也因此釀成了筆者編寫此書的動機。
本書是教導學習Verilog硬體描述語言的書籍,目的在於藉由學習Veri-log語言的過程中去瞭解硬體描述語言的設計概念,進而完成設計數位晶片的最終目標。筆者是由淺入深地介紹各種電路的設計方式,或是同一種功能的電路但使用不同的語法敘述來設計,並且也有在電路的運作效能及面積等方面作概略性地比較。
本書使用Verilog硬體描述語言來實作出來,每個電路模組都是電腦輔助設計工具ModelSim之下,完成了模組電路作編譯、合成、仿真以及驗證…等等步驟,所以本書的各個模組都是可以實作得出來的。
第一章主要是介紹數位電路的設計觀念,其中包括了:數位系統的實作方法,以及典型的「半訂制」(Semi Customize)IC設計流程。
第二章主要是Verilog硬體描述語言簡介,主要內容包括:硬體描述語言(Hardware Description Language,HDL)和傳統數位電路設計的優缺點比較,Verilog硬體描述語言(VHDL)的特性、電腦輔助設計工具(CAD):Xilinx Vivado的介紹、Primitive Cell的介紹、ModelSim的介紹,以及Verilog模組整合與仿真的流程(Synthesis and Simulation Flow)-使用Xilinx Vivado。
第三章主要是討論Verilog的模組與架構,主要內容是:Verilog的四大模型(Model)、模組(Module)、語法協定,Verilog的資料型態(Data Types)以及時間控制(Timing Control)方式,還有談到階層式設計(Hie-rarchy Design)的觀念。
第四章介紹的是Verilog HDL編譯器能否用於電路合成的語法,目的在於:將Verilog的語法分成可以用於電路合成以及不能用於電路合成兩大類,並介紹其中可以用於電路合成的語法之說明,並以一些簡單的範例來作說明它們的使用方法。
第五章主要是介紹的是Verilog常用的敘述。
第六章介紹的是Verilog的訊號(signal)與變數(variable)觀念,使用括弧來描述複雜的電路結構,善用「常數」(Constant)、運算元的位用寬度(operator bitwidth)以及重置(Reset)訊號與預設(Preset)訊號的重要性。
第七章介紹算術運算,包括:數字系統,二進位數值系統(Binary Num-bering System)中『無號數整數』、『有號數整數』、『無號數小數』和『有號數小數』的優缺點、可以表示的資料範圍,以及相對應的四則運算:『加法』、『減法』、『乘法』以及『除法』運算。
第八章的內容則是將數位電路中的組合(Combination Logic)邏輯電路,從最簡單的布林方程式之實作(Implementation of Boolean Equa-tion)、編碼器、解碼器,到簡易的算術邏輯運算單元(ALU)的設計…等等。
第九章的內容則是將數位電路中的循序邏輯電路,像是:存儲元件、移位元暫存器(Shift Register)、計數器電路(Counter)、除頻電路…等等。
第十章的內容則是將數位電路中的有限狀態機器與簡易的CPU設計,例如:同步(Synchronous)與非同步(Asynchronous)循序電路、完全指定狀態(Completely Specified)與不完全指定狀態(Incompletely Speci-fied),以及三個特殊的控制電路…等等。
第十一章是記憶體設計與應用,包括:基本的隨機存取記憶體設計、隨機存取記憶體的擴充方式設計、基本的唯讀記憶體設計、唯讀記憶體的擴充方式設計、唯讀記憶體的應用,以及用RAM來設計快取記憶體電路。
第十二章是屬於進階課程,內容主要是將一些設計較大型的電路系統時,可以應用什麼樣的方式幫助我們讓硬體描述語言容易修改、調整,以及可以讓電路在效能或者是面積上可以得到較佳的設計。
第十三章的內容是Verilog 2001增強特色,還有Verilog 2001新增的保留字、運算子、函數、compiler directive以及token。
第十四章的內容是Verilog的檔案處理與除錯輔助功能。
第十五章的內容是用來建立用於Verilog電路模擬的User Defined PrimitiveS(UDPs)。
花了很大的心思及時間著手編寫這本書,除了當成自己手邊的參考書籍以外,更希望大家能夠馳騁於Verilog硬體描述語言的世界裡,設計出更多實用的晶片來。
本書於編寫期間承蒙前中華大學資訊工程系所劉淳燁副教授的指導,另外也要感謝Synopsys的使用者參考手冊(HDL Compiler for Verilog Re-ference Manual)、行政院科學委員會‧國科會晶片設計製作中心(CIC,Chip Implementation Center)的訓練課程教學講義作為參考資料,以及3支由Synplicity公司設計的控制電路程式(程式碼前有註明Copyright (c) 1995 by Synplicity, Inc. You may distribute freely, as long as this header remains attached.),經由筆者修改後完成的有限狀態機範例,使得本書之編寫得以順利完成。
本書幾經校對、更正與增修,如有任何疏漏與錯誤,請各位先進與前輩們給予指正,筆者由衷地感謝。
鄭信源
於新北市 2016.4.2