0.png (62.24 KB, 下載次數(shù): 92)
下載附件
2017-12-1 04:07 上傳
0.png (98.08 KB, 下載次數(shù): 95)
下載附件
2017-12-1 03:58 上傳
第0章: Verilog HDL掃盲文
會翻開這本筆記的讀者,估計你們都受夠了參考書的 “ 權威 ” ,即使把厚厚的參考書都啃完了 , 發(fā)覺自己對 Verilog HDL 語言的理解還是 “ 迷迷糊糊 ” 。 呵呵 , 筆者也是過來人 ,筆者當然清楚這樣的心情,那種感覺真的是想 “ 涅破了蛋蛋 ” 。當讀者還沒有進入正章之前 , 筆者有責任幫讀者們來個簡單的掃盲掃盲 。 掃盲的目的有許多 , 第一是更進一步刷新讀者對 Verilog HDL 語言的認識。第二則是可以清楚表達筆記所要討論的范圍。
0.1 各種的 HDL 語言
很多進入 FPGA 世界不久得朋友,第一個要學習當然是 HDL 語言,在網(wǎng)上流行的有Verilog 和 VDL 這兩個 HDL 語言 。 如果讀者是 VDL HDL 語言的愛好者 , 那么讀者可以立即把這本筆記關了 。 在筆者的眼中 VDL 太石板了 , 好像帶著三角眼睛的中年女老師,對男學生都要求和尚頭;對女生的裙字一定要長裙,這就是 VDL 給筆者的印象 。筆者不是說它不好 , 只是筆者嫌它麻煩而已 。 反之 Verilog 卻像是一個活潑而且愛搗蛋的小男孩,我們知道小男孩的思想很簡單卻很俏皮,我們要很難捉拿它。網(wǎng)上有一個很常見的問題 : “ 學習 VDL HDL 好?還是學習 Verilog HDL 好? ” ... 唉 ~朋友 , 很多問題的答案都是明顯的 。 筆者會很好客的說 : “ 來來來 ! Verilog HDL 很有趣也很好玩,不要理那個石板的 VDL HDL ” 。
“ 為什么筆記選擇 Verilog HDL 語言? ”
嗯 ... 這個問題筆者也很難回答,筆者是被特權同學帶入這個世界的。當時學習的時候沒有考慮那么多 , 但是后來發(fā)現(xiàn)到 Verilog HDL 語言有太多的潛能了 , 筆者不小心就陷入研究它的陷阱了。 Verilog HDL 語言的語法和格式都比較隨便,它沒有 VDL HDL 語言那么嚴謹 , 可能是這個原因吧?事實上選擇 VDL HDL 語言 也好 , 還是選擇 VerilogHDL 語言也好,都是一些蘿卜青菜的問題(各有所愛 ) 。筆者自身不喜歡受限制太多 ,故 Verilog HDL 語言和筆記意氣相投,所以筆者最終還是選擇了它。
0.2 HDL 語言的層次有一個很好笑的話題,老師常常都說 HDL 語言的層次是匯編語言和 C 語言的之間 。 假設匯編語言是低級語言, C 語言是高級語言,那么 HDL 語言既是不上又不小?啊哈哈哈 , 如果站在人類之中它亦是不男也不女 。 我們不需要為這個無聊的話題 , 浪費太多思考的時間。 HDL 語言的英文全名是 Hardware Description Language ,中文譯名就是硬件描述語言 。 事實上無論是匯編語言也好還是 C 語言也好 , 它們的作用就是用來控制處
理器,反之 HDL 語言的作用只是用來建立一個硬件的模塊而已。打個比方 , 假設有一個 c51 單片機的串口硬件 , 我們可以使用匯編語言去控制它 , 我們也可以使用 C 語言去控制它 。 但是站在 HDL 語言的角度上 , 我們可以建立一個受控制的串口硬件模塊,我們也可以建立一個不受控制(是自動的意思,而不是暴走的意思 )的串口硬件模塊,當然我們也可以用 HDL 去控制一個可以受控制的串口硬件模塊。從這一點 , 我們就可以看出 HDL 語言和匯編語言與 C 語言基本上就在不同的層次上的東東,我們又何為把它們來作比較呢?但是在一些標準上 HDL 語言卻是硬件語言又是低級語言 ( 凡是涉及硬件的通通都被打入低級語言的冷宮 ) , 總而言之 HDL 語言的層次就是很曖昧就是了。
實際上還有不同層次級的 HDL 語言 , 如 SystemVerilog 或者 SystemC 。 傳言上它們都是系統(tǒng)級的 HDL 語言 , 相比之下 Verilog HDL 語言 和 VDL HDL 語言的層次都稱為模塊級 。 但是這些層次的區(qū)分一點也不重要 , 只要把 Verilog HDL 語言掌握得好 , 讀者什么層次都可以實現(xiàn)。
0.3 RTL 級和組合邏輯級
筆者說太多廢話了還是切入正題吧 。 雖說 Verilog HDL 語言是用來描述硬件 , 但是這些都是一些刻板的認識和標準而已。從筆者的眼中 Verilog HDL 語言建立的硬件模塊可以分為有時鐘源和無時鐘源。
有時鐘源的意思是需要時鐘信號作為操作最基本消耗單位 , 硬件模塊才能執(zhí)行 。 無時鐘源的意思就是不需要消費時鐘信號 , 硬件模塊也可以被執(zhí)行 。 無時鐘源最好的例子就是由組合邏輯建立的硬件模塊 , 一些典型的設計如 : 硬件乘法器 , 硬件除法器等基本上都是由一些復雜的邏輯門組合 , 故它們根本就不需要時鐘來操作 , 或者說它們只需要一個步驟又或者只需要一個時鐘就可以完成任務。打個比方,就如同人類吃飯,在無時鐘源的情況下,放在餐桌上的食物一下子被吃光 ,而且瞬間食物被消化和被吸收(事實上這是不可能的 ) 。反之有時鐘源,就像我們需要心跳來提供身體一個節(jié)拍,每一個節(jié)拍都有固定的動作,先張口,送入飯,吃下飯 , 消
化飯,然后吸收。
由此就有 RTL 級和組合邏輯級的建模之分 。 基本上 RTL 級建模的基本單元會是 “ 寄存器 ” , 然而組合邏輯級的建模基本單元就是邏輯門 。 單單用幾行的文字來講述 RTL 級和組合邏輯級的建模實在太抽象了,筆者聚個簡單的例子:
0.png (16.41 KB, 下載次數(shù): 118)
下載附件
2017-12-1 04:05 上傳
0.png (47.35 KB, 下載次數(shù): 95)
下載附件
2017-12-1 04:04 上傳
0.4 Verilog HDL 語言真的那么難掌握?
Verilog HDL 語言容易入門但是不容易掌握,估計這是所有學習 Verilog HDL 語言人們的心聲 。 其實要掌握 Verilog HDL 語言是很簡單的 , 筆者的秘訣就是 “ 掌握 Verilog HD L語言的思想 ” 。 在筆者眼中 Verilog HDL 語言的思想有兩種 , 一種是建模和另一種是時序 。建模是 Verilog HDL 語言的結構或者說是它的地基,然而時序是所有模塊的活動記錄 。這些概念,目前的讀者不明白也不要緊,筆者已經(jīng)分為兩個筆記來詳談了它們了。筆者相信很多接觸 FPGA 的朋友之前都有接觸過單片機,在不知不覺之中,自然而然學習單片機的想法就主宰了學習 FPGA 。 筆者也是過來人 , 這樣的心情筆者非常的了解 。當我們再學習單片機的時候 , 很多人估計都是直接以 C 語言入門吧?筆者就先說說單片機這個硬件吧 : 它們都是各大產(chǎn)商的產(chǎn)品 , 一些基本的硬件資源老早就已經(jīng)嵌入在這個小小的單片機當中 。 余下 , 尤其說學習單片機還不如說我們學習如何控制單片機的寄存器更為貼切 。 一些硬件的發(fā)生 , 使用者可以完全不用知道 , 我們只要懂得如何配置控制該硬件的寄存器就可以了。
相比之下 FPGA 可以稱為赤裸裸的樂高積木 , 如果讀者要實現(xiàn)串口 , 讀者就要自行建立串口硬件模塊 。 要建立一個串口硬件模塊 , 首先需要明白串口的操作原理 , 然后根據(jù)需要自定義和修改原理的發(fā)生 。 最后還要考慮這個串口硬件模塊如何被控制?是否獨立化它(見接口建模 ) ?這些就是建模思路。在軟件方面 , 我們可以用 C 語言去配置單片機的寄存器和編輯單片機操作的邏輯 。 但是有一點請讀者不要忘了 , C 語言也是一個產(chǎn)品 , 它和 Verilog HDL 語言不同 C 語言在出生之后它就有自己的結構和自己一套的使用規(guī)則 。 最后根據(jù)單片機的產(chǎn)商需要 , C 語言還可以進一步被自定義 , 這種現(xiàn)象不難看見 , 學習 c51 和學習 AVR 基本上就有兩套的C語言用法。反之 Verilog HDL 語言雖然有語法 , 但是 Verilog HDL 語言就沒有自身的結構也沒有自己一套的用法 。 在網(wǎng)上這種現(xiàn)象很普遍 , 讀者會看到五花八門 , 百花齊放 , 各種各樣的模塊內(nèi)容 。 很多時候 , 這些模塊的內(nèi)容只有設計者自己看懂而已 , 別人估計要花上幾倍的精力才可以搞明白 “ 它在干嘛 ” 。為此 , 如果要把 Verilog HDL 語言掌握好 , 第一要提供 Verilog HDL 語言的結構 , 第二要提供 Verilog HDL 語言一套用法(使用規(guī)則 ) 。前者筆者是用建模來解決,后者筆者用 “ 仿順序操作 ” 的想法來補充。
0.png (121.6 KB, 下載次數(shù): 87)
下載附件
2017-12-1 04:01 上傳
余下完整的pdf格式文檔51黑下載地址(共26頁pdf):
VerilogHDL掃盲文.pdf
(3.23 MB, 下載次數(shù): 92)
2017-11-30 21:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|