VerilogHDL-黑金
-
組合語言、 C 語言的作用是用來控制處理器,HDL 語言的作用是建立一個硬體的模組
-
基本上 RTL 級建模的基本單元會是“暫存器”,然而組合邏輯級的建模基本單元就是邏輯閘
-
組合邏輯級建模給人最直接的印象就是模組都不帶“時鐘訊號”,反之 RTL級建模的最大特徵性,就是模組都會伴隨“時鐘訊號”
-
要掌握 Verilog HDL 語言就是“掌握 Verilog HDL語言的思想”。即建模和時序
-
建模是 Verilog HDL 語言的結構或者說是它的地基,然而時序是所有模組的活動記錄。
-
微控制器這個硬體,它們都是產品,一些基本的硬體資源已經嵌入在微控制器當中。餘下,尤其說學習微控制器還不如說我們學習如何控制微控制器的暫存器更為貼切。一些硬體的發生,使用者可以完全不用知道,我們只要懂得如何配置控制該硬體的暫存器就可以了
-
相比之下 FPGA 可以稱為赤裸裸的樂高積木,如果讀者要實現串列埠,讀者就要自行建立串列埠硬體模組。首先需要明白串列埠的操作原理,然後根據需要自定義和修改原理的發生。最後還要考慮這個串列埠硬體模組如何被控制?是否獨立化它(見介面建模)?這些就是建模思路。
-
在軟體方面,我們可以用 C 語言去配置微控制器的暫存器和編輯微控制器操作的邏輯。但
對於使用者來說,他們只是關心步驟而已,反而不會過於關心“一共被執行了多少指令”
和“消耗了多少個時鐘”。相反的對於 Verilog HDL 語言來說,尤其是 RTL 級的建模,
時鐘代表了模組執行所要消耗的單位 -
只要 FPGA 的邏輯資源允許的話,讀者要在一個時鐘內完成 1 萬個 1 億個操作都沒有問題。這個事實也暴露了 Verilog HDL 語言是有並行的性質
-
把每一個時鐘中的模組活動記錄都連結起來的話,就會形成俗稱的“波形圖”
-
發生在 Verilog HDL 語言身上的時序是“理想”的,是不存在任何瑕疵
-
如果讀者無法很好掌握“時序”的概念,模擬會非常不好使的
-
Verilog HDL 語言有兩個部分,是綜合語言和驗證語言。綜合語言也就是建模最常用的,在這
裡筆者比較習慣稱為它們建模語言 -
很神奇,綜合語言中除了一個下標符我沒有用過其他都知道。(包括關鍵字和操作符)
-
當我們建模的時候“解讀能力”的優先順序往往都高過“內容精簡性”
-
“基於仿順序操作想法”
-
當讀者使用 * / 和 % 的數學運算子的時候,筆者請你們再三的三思(九思?呵呵!),因為使用它們的代價很大。如果讀者所使用的 FPGA 有內嵌硬體乘法器又或者除法器的話,那麼這些乘法器和除法器就會被消耗。相反的,如果讀者說使用的 FPGA 是沒有包含這些東西的話,資源邏輯的消耗是很大的,一般上,如果是為了求出 *2 *4 *8 *16 又或者 /2 /4 /8 /16 筆者建議使用位操作的運算子,亦即 << 和 >> ,它們也可以求出同樣的結果。如果想要求出的結果是不在 2N 範圍之內的話,讀者還是求與其他的方法 … 只有在用盡辦法的時候才使用它們。至於 %的數學運算子,它真的是一個罪惡,沒有可以替代的第三方法 …
-
事實上“HDL 語言是 HDL 語言”“FPGA 是 FPGA”各自都有自己的中心。筆者比較喜歡把 FPGA 看成是一個巨大的“樂高積木資源庫”,HDL 語言是組合這些積木的工具,理論上工具是理想和完美的,工具只有用錯方法的時候,如何“有效發揮這工具“這才是 Verilog HDL 語言的中心。是更多的時候,眾多參考書所表達的是“怎樣利用工具來完成目的”而不是“如何有效使用這個工具”
-
單檔案主義其實就是模組劃分