目錄
Part1 基本Verilog的使用第1章 導論:運用VerilogHDL作邏輯設計1.1計算機輔助數位設計的發展1-21.2硬體描述語言(HDL)出場1-31.3標準設計流程1-41.4硬體描述語言的重要性1-61-5VerilogHDL的普及1-71-6硬體描述語言未來的趨勢1-7第2章 階層模組的觀念2.1設計方法2-22.24位元漣波進位計數器2-42.3模 組2-52.4別 名2-82.5模 擬2-102.6例 題2-112.6.1 設計區塊2-112.6.2 觸發區塊2-132.7總 結2-162.8習 題2-16第3章 使用Verilog的基本概念3.1語法協定3-23.1.1 空白3-23.1.2 註解3-33.1.3 運算子3-33.1.4 數字規格3-33.1.5 字串3-53.1.6 定義名稱(Identifers)與關鍵字(Keywords)3-53.2資料型態3-53.2.1 數值組3-53.2.2 接線3-63.2.3 暫存器3-73.2.4 向量3-83.2.5 整數、實數、和時間暫存資料型態3-103.2.6 陣列3-113.2.7 記憶體3-123.2.8 參數3-123.2.9 字串3-133.3系統任務和編譯指令3-143.3.1 系統任務3-143.3.2 編譯命令3-183.4總 結3-193.5習 題3-20第4章 模組與輸出入埠4.1模 組4-24.2輸出入埠4-64.2.1 輸出入埠的列表4-64.2.2 埠的宣告4-74.2.3 輸出入埠的連接規定4-94.2.4 輸出入埠與外部訊號連接的方法4-114.3階層化的取名方法4-134.4總 結4-154.5習 題4-15第5章 邏輯閘層次模型5.1閘的種類5-25.1.1 And/Or閘5-25.1.2 Buf/Not閘5-55.1.3 別名陣列5-75.1.4範例5-85.2閘的延遲5-155.2.1 上昇,下降,和關閉延遲5-155.2.2 Min/Typ/Max數值5-175.2.3 延遲的範例5-185.3總 結5-215.4習 題5-21第6章 資料處理模型6.1持續指定的描述6-36.1.1 隱含式的持續指定6-46.1.2 隱含式的接線宣告6-56.2延 遲6-56.2.1 正規指定延遲6-66.2.2 隱含式連續指定延遲6-76.2.3 接線宣告延遲6-76.3運算式、運算子與算元6-86.3.1 運算式6-86.3.2 運算元6-86.3.3 運算子6-96.4運算子的種類6-96.4.1 算術運算子6-116.4.2 邏輯運算子6-136.4.3 比較運算子6-146.4.4 相等運算子6-146.4.5 位元運算子6-156.4.6 化簡運算子6-176.4.7 移位運算子6-186.4.8 連結運算子6-186.4.9 複製運算子6-196.4.10 條件運算子6-196.4.11 運算子的優先順序6-216.5例 題6-216.5.1 四對一的多工器6-226.5.2 四位元加法器6-246.5.3 漣波進位計數器6-276.6總 結6-336.7習 題6-33第7章 行為模型7.1結構化程序7-37.1.1 initial敘述7-37.1.2 always敘述7-67.2程序指定7-77.2.1 阻礙指定7-87.2.2 無阻礙指定7-97.3時序控制7-137.3.1 延遲基礎時序控制7-147.3.2 事件基礎時序控制7-177.3.3 位準感測時序控制7-217.4條件敘述7-217.5多路徑分支7-237.5.1 case敘述7-237.5.2 關鍵字casex,casez7-267.6迴圈7-277.6.1 while迴圈7-277.6.2 for迴圈7-297.6.3 Repeat迴圈7-307.6.4 forever迴圈7-327.7循序和平行區塊7-337.7.1 區塊型態7-337.7.2 區塊的特殊特性7-367.8產生區塊7-397.8.1 迴圈化產生7-407.8.2 條件化產生7-447.8.3 組合條件化產生7-467.9範 例7-477.9.1 4對1多工器7-477.9.2 4位元計數器7-487.9.3 紅綠燈控制器7-497.10總 結7-557.11習 題7-57第8章 任務與函數8.1任務與函數的不同之處8-28.2任 務8-38.2.1 任務宣告與引用8-48.2.2 任務範例8-58.2.3 自動任務8-88.3函 數8-108.3.1 函數的宣告與引用8-108.3.2 範例8-118.3.3 自動(遞迴)函數8-148.3.4 常數函數8-168.3.5 有號函數8-178.4總 結8-178.5習 題8-18第9章 有用的程式技巧9.1程序持續指定9-29.1.1 assign和deassign9-29.1.2 force和release9-49.2複寫參數9-69.2.1 defparam敘述9-69.2.2 模組別名參數指定9-79.3有條件的編譯與執行9-99.3.1 有條件的編譯9-109.3.2 有條件的執行9-119.4時間刻度9-139.5有用的系統任務9-159.5.1 檔案輸出9-169.5.2 顯示出階層9-189.5.3 閃控9-199.5.4 亂數產生器9-209.5.5 從檔案來設定記憶體的初始值9-229.5.6 數值變化轉儲檔案9-239.6總 結9-259.7習 題9-26Part2 高等Verilog技巧第10章 時序與延遲10.1延遲的模型10-310.1.1 分散式延遲模型10-310.1.2 整組式延遲模型10-410.1.3 接腳對接腳延遲模型10-510.2路徑延遲模型10-610.2.1 指定區塊10-710.2.2 在指定區塊內10-810.3檢查時間設定10-1610.3.1 $setup與$hold的檢查方式10-1710.3.2 $width檢查10-1910.4延遲時間加入原有的設計10-2010.5總 結10-2110.6習 題10-22第11章 交換層次的模型11.1交換層次的元件11-211.1.1 金氧半導體式的開關11-311.1.2 互補式金養半導體開關11-411.1.3 雙向開關11-511.1.4 電源與接地11-611.1.5 電阻式開關11-711.1.6 在開關中的延遲設定11-811.2範 例11-911.2.1 互補半導體非或(NOR)邏輯閘11-911.2.2 2對1多工器11-1111.2.3 簡單的互補式電晶體正反器11-1311.3總 結11-1611.4習 題11-16第12章 自定邏輯閘12.1自己定義邏輯閘的基本概念12-212.1.1 自己定義的邏輯閘的可用基本關鍵字12-312.1.2 自己定義的邏輯閘的使用原則12-312.2自己定義的組合邏輯電路12-412.2.1 自訂組合邏輯閘的定義12-412.2.2 狀態真值表12-612.2.3可以忽略值的速記符號12-712.2.4 使用自己定義的邏輯閘12-812.2.5 一個使用自己定義的組合邏輯閘的範例12-912.3循序自定邏輯閘12-1212.3.1 訊號位準敏感循序自定邏輯12-1312.3.2 訊號緣敏感循序自定邏輯12-1512.3.3 循序自定邏輯範例12-1712.4自定邏輯閘中的一些常用速記符號12-1912.5自定邏輯閘的使用方針12-2012.6總 結12-2112.7習 題12-22第13章 程式語言介面13.1使用程式語言介面13-413.2連結與引用程式語言介面的任務13-513.2.1 連結PLI的工作13-613.2.2 引用程式語言介面13-613.2.3 使用程式語言介面的流程13-713.3內部資料表示模式13-813.4程式語言介面的通用函示庫13-1113.4.1 存取程序13-1113.4.2 工具程序13-2013.5結 論13-2413.6習 題13-26第14章 邏輯合成14.1什麼是邏輯合成?14-214.2邏輯合成的影響14-514.3使用Verilog作邏輯合成14-714.3.1 Verilog語法14-714.3.2 Verilog運算元14-914.3.3 一些Verilog語法的解釋14-1014.4使用邏輯合成的設計流程14-1414.4.1 由高階語言到邏輯閘14-1414.4.2 一個由高階語言到邏輯閘的範例14-1914.5驗證邏輯層次的線路14-2314.5.1 功能驗證14-2414.6撰寫適合邏輯合成Verilog程式的秘訣14-2714.6.1 Verilog語法的風格14-2714.6.2 區分設計14-3114.6.3 設計限制指定14-3314.7可以作邏輯合成循序電路設計的範例14-3414.7.1 設計規格14-3414.7.2 線路需求14-3414.7.3 有限狀態機器14-3514.7.4 Verilog語法14-3614.7.5 科技資料庫14-3914.7.6 設計限制14-4014.7.7 邏輯合成14-4014.7.8 最佳化後的邏輯閘層次的設計14-4014.7.9 驗證14-4314.8總 結14-4514.9習 題14-46第15章 進階驗證技巧15.1 傳統驗證流程15-315.1.1 架構模型15-515.1.2 功能驗證環境15-615.1.3 模擬15-915.1.4 分析15-1215.1.5 涵蓋率15-1315.2 查驗式驗證法15-1415.3 正規驗證15-1615.3.1 半正規驗證15-1715.3.2 等效驗證15-1915.4 總 結15-20Part3 附 錄附錄A 強度模型和進階接線定義A.1強度等級14-2A.2信號競爭14-3A.2.1 具有相同值與不同強度的多個信號14-3A.2.2 具有不同值與相同強度的多個信號14-3A.3進階的接線型態14-3A.3.1 tri14-4A.3.2 trireg14-4A.3.3 tri0與tri114-5A.3.4 supply0與supply114-5A.3.5 wor、wand、trior與triand14-6附錄B PLI常式列表B.1慣例14-2B.2存取常式14-2B.2.1 處理常式14-2B.2.2 接鄰常式14-4B.2.3 觀察值關連(VCL)常式14-5B.2.4 提取常式14-6B.2.5 工具存取常式14-8B.2.6 修改常式14-9B.3工具(tf_)常式14-9B.3.1 取得呼叫任務與函式的資訊14-10B.3.2 取得引數列的資訊14-10B.3.3 取得參數值14-10B.3.4 放置參數值14-11B.3.5 監看參數的變化14-11B.3.6 同步化任務14-12B.3.7 長算術14-13B.3.8 顯示訊息14-13B.3.9 各式的工具常式14-14B.3.10 管理任務14-14附錄C 關鍵字,系統任務,編譯器指令的列表C.1關鍵字14-2C.2系統任務與函式14-3C.3編譯器指令(CompilerDirectives387)14-3附錄D 正式的語法定義D.1SourceText14-3D.1.1 LibrarySourceText14-3D.1.2 ConfigurationSourceText14-3D.1.3 ModuleandPrimitiveSourceText14-4D.1.4 ModuleParametersandPorts14-4D.1.5 ModuleItems14-5D.2Declarations14-6D.2.1 DeclarationTypes14-6D.2.2 DeclarationDataTypes14-8D.2.3 DeclarationLists14-9D.2.4 DeclarationAssignments14-9D.2.5 DeclarationRanges14-9D.2.6 FunctionDeclarations14-10D.2.7 TaskDeclarations14-10D.2.8 BlockItemDeclarations14-11D.3PrimitiveInstances14-12D.3.1 PrimitiveInstantiationandInstances14-12D.3.2 PrimitiveStrengths14-13D.3.3 PrimitiveTerminals14-13D.3.4 PrimitiveGateandSwitchTypes14-13D.4ModuleandGeneratedInstantiation14-14D.4.1 ModuleInstantiation14-14D.4.2 GeneratedInstantiation14-14D.5UDPDeclarationandInstantiation14-15D.5.1 UDPDeclaration14-15D.5.2 UDPPorts14-15D.5.3 UDPBody14-16D.5.4 UDPInstantiation14-16D.6BehavioralStatements14-16D.6.1 ContinuousAssignmentStatements14-16D.6.2 ProceduralBlocksandAssignments14-17D.6.3 ParallelandSequentialBlocks14-17D.6.4 Statements14-17D.6.5 TimingControlStatements14-18D.6.6 ConditionalStatements14-19D.6.7 CaseStatements14-20D.6.8 LoopingStatements14-20D.6.9 TaskEnableStatements14-21D.7SpecifySection14-21D.7.1 SpecifyBlockDeclaration14-21D.7.2 SpecifyPathDeclarations14-21D.7.3 SpecifyBlockTerminals14-22D.7.4 SpecifyPathDelays14-22D.7.5 SystemTimingChecks14-24D.8Expressions14-27D.8.1 Concatenations14-27D.8.2 Functioncalls14-27D.8.3 Expressions14-28D.8.4 Primaries14-29D.8.5 ExpressionLeft-SideValues14-30D.8.6 Operators14-31D.8.7 Numbers14-31D.8.8 Strings14-32D.9General14-32D.9.1 Attributes14-32D.9.2 Comments14-32D.9.3 Identifiers14-33D.9.4 IdentifierBranches14-34D.9.5 Whitespace14-35附錄E Verilog的花絮附錄F Verilog範例F.1可合成的FIFO模型14-2F.2行為模式的DRAM模型14-12參考書目參-1光碟使用說明1圖1-1 標準設計流程1-4圖2-1 上而下的設計方法2-3圖2-2 下而上的設計方法2-3圖2-3 漣波進位進位計數器2-4圖2-4 T型正反器2-4圖2-5 漣波進位計數器的階層化架構2-5圖2-6引用設計區塊的模擬區塊2-10圖2-7 在一個多餘的最高層次區塊中引用設計區塊與模擬區塊2-11圖2-8 觸發與輸出波形2-13圖3-13-7圖4-1 Verilog模組的組成元件4-3圖4-2 SR閂4-4圖4-3 Top與全加器模組別名的輸出與輸入埠4-6圖4-4 輸出入埠的相連規定4-9圖4-5 SR閂模擬模組的階層化架構圖4-14圖5-1 基本閘5-3圖5-2 Buf/Not閘5-5圖5-3 Bufif/notif閘5-6圖5-4 4-to-1多工器5-8圖5-5 多工器的邏輯電路5-8圖5-6 一位元全加器5-12圖5-7 四位元全加器5-13圖5-85-19圖5-95-20圖6-1 延遲6-6圖6-2 四位元的漣波進位計數器6-27圖6-3 T型正反器6-28圖6-4 有clear訊號且負緣觸發的D型正反器6-28圖6-5 主從式JK正反器6-35圖6-6 有clear與count_enable訊號的四位元同步計數器6-36圖7-17-50圖9.1 數值變化轉儲檔案除錯分析的流程9-24圖10-1 分散式延遲模型10-3圖10-2 整組式延遲模型10-5圖10-3 接腳對接腳延遲模型10-6圖10-4 平行連接10-8圖10-5 完全連接10-10圖10-6 設定與保持時間10-17圖10-7 延遲時間註記10-21圖11-1 N-通道金氧半導體與P-通道金氧半導體開關11-3圖11-211-4圖11-311-5圖11-411-9圖11-5 二對一多工器11-12圖11-611-13圖11-7 正反器(反相器)11-14圖12-1 自己定義的邏輯閘可用的關鍵字12-3圖12-2 4對1多工器12-9圖12-3 正反器12-13圖12-4 負緣觸發暫存器12-15圖13-113-3圖13-213-7圖13-313-8圖13-413-9圖13-513-10圖13-613-11圖14-1 設計工程師心中的邏輯合成工具著力點14-4圖14-2 基本計算機輔助邏輯合成流程14-5圖14-314-12圖14-414-15圖14-514-18圖14-614-21圖14-714-31圖14-814-32圖14-914-33圖14-1014-35圖14-1114-42圖15-1 傳統驗證流程15-3圖15-2 系統模型15-6圖15-3 一個標準的功能驗證環境15-8圖15-5 硬體加速15-10圖15-615-12圖15-7 查驗式檢驗15-15圖15-8 正規驗證流程15-17圖15-9 半正規驗證的流程15-18圖15-10 等效驗證15-19圖F-1 FIFO的輸出輸入埠14-2圖F-2 DRAM的輸出輸入埠14-12表3-13-6表3-23-6表3-3 特殊字元3-13表3-4 格式定義表3-15表5-1 真值表5-4表5-2 真值表5-5表5-3 真值表5-6表6-1 運算子的種類與符號6-10表6-2 相等運算子6-15表6-3 位元運算子的真值表6-16表6-4 運算子的優先順序6-21表8-1 任務與函數8-3表11-111-4表11-2 訊號強度衰減對照表11-7表11-3 延遲時間設定與半導體與互補式半導體開關的關係11-8表11-4 延遲時間設定與雙向開關的關係11-8表12-112-19表13-113-21表14-1 適合邏輯合成的Verilog語法14-8表14-2 可合成的運算元14-9表A-1 強度等級14-2表B-1 處理常式14-3表B-2 接鄰常式14-4表B-3 觀察值關連常式14-6表B-4 提取常式14-6表B-5 工具存取常式14-8表B-6 修改常式14-9表B-7 取得呼叫任務與函式的資訊14-10表B-8 取得引數列的資訊14-10表B-9 取得參數值14-10表B-10 放置參數值14-11表B-11 監看參數的變化14-11表B-12 同步化任務14-12表B-13 長算術14-13表B-14 顯示訊息14-13表B-15 各式的工具常式14-14表B-16 管理任務14-14例題2-1 模組的別名2-8例題2-2 非法的巢狀模組宣告2-9例題2-3 漣波進位計數器2-11例題2-4 T型正反器2-12例題2-5 D型正反器2-12例題2-6 觸發區塊2-14範例3-3 顯示任務3-15範例3-4 特殊字元3-16範例3-5 Monitorstatement3-17範例3-6 中止和完成模擬運算3-18範例3-7 `define的用法3-19範例3-8 `include的用法3-19範例4-1 SR閂的各個部分4-4範例4-2 輸出入埠的列表4-7範例4-3 埠的宣告4-7範例4-4 DFF埠的宣告4-8範例4-5 ANSIC的宣告使用習慣4-8範例4-6 非法的輸出入埠連接4-10範例4-7 依照輸出入埠的列表順序連接4-11範例4-8 階層化架構名稱(HierarchicalNames)4-14範例5-1 And/Or閘的取別名5-3範例5-2 Bur/Not閘的取別名5-5範例5-3 取別名bufif/notif閘5-7範例5-4 別名陣列5-7範例5-5 多工器的Verilog程式5-9範例5-6 模擬程式5-10範例5-7 一位元全加器的Verilog程式5-12範例5-8 四位元漣波進位全加器5-13範例5-9 模擬程式5-14範例5-10 延遲設定的型態5-16範例5-11 最大,典型,最小延遲數值5-17範例5-12 用Verilog定義模組D5-19範例5-13 模擬D模組5-19範例6-1 持續指定6-4範例6-2 以邏輯方程式的方式設計的四對一多工器6-22範例6-3 用條件運算子來設計一個四對一的加法器6-23範例6-4 運用資料處理運算子設計的4位元全加器6-24範例6-5 四位元進位預算全加器6-25範例6-6 漣波進位計數器6-29範例6-7 T型正反器6-29範例6-8 負緣觸發D型正反器6-30範例6-9 漣波進位計數器的觸發模組6-31範例7-1 initial敘述7-3範例7-2 初始值指定7-5範例7-3 輸出入埠初始值指定7-5範例7-4 初始值指定結合ANSIC標準的輸出入埠宣告方式7-6範例7-5 always敘述7-6範例7-6 阻礙指定7-8範例7-7 無限定指定7-10範例7-8 無阻礙指定消除競爭情況7-12範例7-9 使用阻礙指定來實現無阻礙指定7-13範例7-10 正規延遲控制7-14範例7-11 指定內部延遲7-15範例7-12 零延遲控制7-17範例7-13 正規事件控制7-18範例7-14 命名事件控制7-18範例7-15 事件或控制7-19範例7-16 事件或控制7-19範例7-17 使用@*7-20範例7-18 條件敘述7-22範例7-19 四對一多工器7-24範例7-20 包含x和z的case敘述7-25範例7-21 casex7-27範例7-22 while迴圈7-28範例7-23 for迴圈7-29範例7-24 Repeat迴圈7-31範例7-25 forever迴圈7-32範例7-26 循序區塊7-34範例7-27 平行區塊7-35範例7-28 巢狀區塊7-36範例7-29 命名區塊7-37範例7-30 禁能命名區塊7-38範例7-31 對N位元的匯流排做位元互斥運算7-41範例7-32 產生一個漣波型加法器7-42範例7-33 參數化乘法器7-45範例7-34 組合條件化產生7-46範例7-35 行為模型4對1的多工器7-47範例7-36 行為模型4-bits計數器7-48範例7-37 紅綠燈控制器7-51範例7-38 紅綠燈控制器的模擬7-54範例8-1 宣告任務的語法8-4範例8-2 任務中的input與output8-5範例8-3 利用ANSIC的慣用方式來定義任務8-7範例8-4 直接作用於reg變數上的任務8-7範例8-5 自動任務8-9範例8-6 宣告函數的語法8-10範例8-7 奇偶計數器8-12範例8-8 使用ANSIC的方式來定義函數8-13範例8-9 左/右移位器8-13範例8-10 利用遞迴呼叫來做階乘8-15範例8-11 常數函數8-16範例8-12 有號函數8-17範例9-1 程序持續指定D型正反器9-3範例9-2 defparam敘述9-6範例9-3 ANSIC形式的參數宣告9-7範例9-4 模組別名參數數值9-8範例9-5 有條件的編譯9-10範例9-6 使用$test$plusargs進行有條件的執行9-11範例9-7 使用$value$plusargs的條件執行9-12範例9-8 時間刻度9-13範例9-9 檔案描述符號9-16範例9-10 顯示出階層9-19範例9-11 閃控9-20範例9-12 亂數產生9-21範例9-13 利用$random任務產生正整數以及負整數9-21範例9-14 設定記憶體的初始值9-22範例9-15 數值變化轉儲檔案的系統任務9-24範例10-1 分散式延遲10-3範例10-2 整組延遲模型10-5範例10-3 接點到接點的延遲10-7範例10-4 平行連接10-9範例10-5 完全連接10-10範例10-6 Specparam10-12範例10-7 條件式路徑延遲10-12範例10-8 上昇延遲,下降延遲與關閉延遲時間10-14範例10-9 配合著最小值、最大值與標準值的路徑延遲10-15範例11-1 NMOS與PMOS開關的初始化11-3範例11-2 使用CMOS開關11-5範例11-3 使用雙向開關11-6範例11-4 非或邏輯閘的Verilog描述11-10範例11-5 以交換層次的寫法來描述一個多工器11-12範例11-6 反相器11-14範例11-7 互補式電晶體正反器11-15範例12-1 名字與埠定義12-5範例12-2 ANSIC形式的組合邏輯閘宣告12-5範例12-3 udp_or12-6範例12-4 使用自定邏輯閘12-8範例12-5 4對1多工器的自訂邏輯閘12-10範例12-6 4對1多工器的測試模組12-11範例12-7 訊號位準敏感循序自定邏輯12-14範例12-8 ANSIC形式的循序自定邏輯閘宣告12-15範例12-9 有清除輸入的負緣觸發暫存器12-16範例12-10 使用自定邏輯的T型暫存器12-17範例12-11 水波型計數器12-18範例13-1 2對1多工器的Verilog程式13-9範例13-2 存取所有的輸出入埠13-14範例13-3 觀察連接線上邏輯值的變化13-16範例13-4 自定的顯示函式13-18範例13-5 用C語言寫的my_stop_finish13-22範例14-1 暫存器轉移層次的敘述14-20範例14-2 比較器的邏輯閘層次的描述14-22範例14-3 比較器的測試模組14-24範例14-4 14-25範例14-5 輸出波形圖14-26範例14-6 報紙販賣機的暫存器移轉層次的敘述14-36範例14-7 經過最佳化後的邏輯層次程式14-40範例14-8 報紙販賣機的測試模組14-43範例14-9 報紙販賣機的測試輸出14-44範例F-1 可合成的FIFO模型14-3範例F-2 14-13
Part1 基本Verilog的使用第1章 導論:運用VerilogHDL作邏輯設計1.1計算機輔助數位設計的發展1-21.2硬體描述語言(HDL)出場1-31.3標準設計流程1-41.4硬體描述語言的重要性1-61-5VerilogHDL的普及1-71-6硬體描述語言未來的趨勢1-7第2章 階層模組的觀念2.1設計方法2-22.24位元漣波進位計數器2-42.3模 組2-52.4別 名2-82.5模 擬2-102.6例 題2-112.6.1 設計區塊2-112.6.2 觸發區塊2-132.7總 結2-162.8習 題2-16第3章 使用Verilog的基本概念3.1語法協定3-23.1.1 空白3-23.1.2 註解3-33.1.3 運算子3-33.1.4 數字規格3-33.1.5 字串...