1 Verilog HDL 數字設計總論
1.1 幾個重要的概念
-
EDA(Electronic Design Automation)
電子技術自動化 -
EDA工具
類似于軟件工程中的IDE(集成開發環境),能夠使用Verilog HDL語言描述電路設計,并且能夠通過邏輯綜合工具將用Verilog HDL描述的電路自動轉換為門級網表,當然還有其他的一些功能,并且EDA工具的功能越來越強大。接下來的章節中,我將使用Vivado 2017.4來進行數字電路設計。
-
RTL(Register Transfer Level):
寄存器傳輸級 -
RTL級描述
即:寄存器傳輸級描述,一般會使用專業術語RTL級描述,講這個概念拆分為兩部分:寄存器和傳輸級在本概念中,寄存器相當于科技黑箱(也就是你只需要知道它的外部接口,以及如何使用,不必管內部是什么),寄存器在本概念中不是重點 ,重點是對于傳輸的描述。
這也就是說,設計者需要
- 在概念模型的層次描述清楚數據是如何在寄存器之間傳輸的;
- 在RTL級描述的層次,使用Verilog HDL語言來“翻譯”構建的概念模型(這種概念模型,在數字設計中被稱為“行為描述”)。
對于這樣的總體結構來說,設計者無需管寄存器或信息內部細節是什么,只需要描述好他們之間的聯系,將連線部分內容以及他們的接口描述清楚,并且能夠調用信息和寄存器即可進行RTL級描述。
可以將RTL級描述與《數據結構》這門課程進行類比學習,這樣你能更輕松明白其含義。
Verilog HDL | 數據結構 |
---|---|
行為描述 | ADT模型 |
RTL級描述 | ADT模型的實現 |
如果你之前沒有學過數據結構這門課程,沒有關系,接下來我來解析一下行為描述。
- 行為描述
對于一個現實問題,設計者通過分析問題,從抽象的角度,設計出數字電路的總體結構、功能和接口,這也就是行為描述。然后,設計者就可以根據行為描述來進行RTL級描述了。
1.2 典型數字設計流程
先給出當今時代,典型的數字流程設計流程,然后做出解釋
-
對于RTL級描述的后續內容,將會使用Vivado軟件進行講解,在后續內容將會詳細提及,目前先了解如下內容即可。
- 邏輯綜合工具:將RTL級描述描述自動轉換為門級網表,但是自動轉換的門級網表不一定是優化的方案
-
對于【行為描述】–>【RTL級描述】部分,談及之前,先來說明一下Verilog HDL的幾種描述方式
描述方式 | 抽象程度 | 應用 | 對比學習 |
---|---|---|---|
門級描述 | 低 | 常嵌套在RTL級描述中 | 比匯編語言還底層一些 |
RTL級描述 | 中 | 目前主流都是用它 | 匯編語言 |
行為級描述 | 高 | 暫時沒有成為主流 | 高級語言 C/C++ |
開關級 | 暫不談 | 高級主題先不管 |
特別注意:在實際數字設計中,RTL級(寄存器傳輸級)描述通常是指能夠被邏輯綜合工具接受的行為級描述和數據流級描述的混合描述,這里對于RTL級描述做了概念上的拓展,不再單純指數據流級描述。
對于行為描述來說,可以使用這三種形式中任意形式來進行實現,并且,對于同一個數字電路模型,這三種形式可以混合使用。
目前的主流是使用RTL級描述,行為級描述在更加抽象的程度上來實現了行為描述,行為級綜合工具允許直接對電路的算法和行為進行描述,它最符合人類思維方式,基于C/C++描述,但是有些RTL級描述做的事情它并不能完成,目前暫時沒有得到主流設計者的認可。
至于門級描述,它就像匯編語言一樣,非常繁瑣麻煩和惡心,人們很少會直接使用他,但是會在特定的情況下, 為了提高電路的速度,在RTL級描述中嵌套一些必要的門級描述(因為自動生成的門級網表不一定是優化的)。這就好像,軟件工程師(比如C++工程師)可能會在他們的程序中直接自定義導入一些由匯編語言編輯的代碼一樣。
簡而言之,數字電路設計者要先分析問題得出行為描述,然后使用RTL級描述來實現行為描述,為了提高電路速度,可以在RTL級描述中嵌套門級描述。
問題1:對于過程“RTL級描述描述–>門級網表”,門級網表等同于門級描述嗎?
待解決
問題2:行為級綜合工具的出現允許Verilog HDL進行行為級描述,那么它是可以將行為級描述轉換為RTL級描述嗎?
待解決
問題3:行為級描述與RTL級描述的區別?行為級描述能夠完成RTL級描述的所有事情嗎?
目前來說,行為級描述只能完成部分工作,以減輕進行RTL級描述的負擔,但是有些工作只能用RTL級描述來完成。
至于區別,舉一個例子,以Python和C++作比較,對于【輸出“你好!”】這件事情。
Python會這樣做
print("你好!")
但是C++卻需要寫這么長的內容
#include <iostream>
int main()
{std::cout << "你好!";return 0;
}
顯然,對比之下,Python是高效的。不過,有些事情Python做不到,但是C++可以完成,比如對內存的管理。不過整體來說,Python確實比C++高效。
Python與C++的對比,廣義上來說,可以相當于行為級描述與RTL級描述的對比,我這樣說,你應該明白了,不過這樣的比喻可能并不是很嚴謹,我想通過類比的方法讓你更容易理解這件事,不過你也要明白,類比并不能夠一 一對照完全相同。
1.3 系統級設計
在這里簡單介紹一下系統級設計,它相當于一個大型企業項目,也可以相當于一個圖片設計作品。
C++有STL庫,程序員可以直接調用別人已經完成的模塊,來完成自己的項目;圖片設計中,設計師可以直接使用一些已有的素材,將它們進行加工處理來完成自己的設計作品。這樣的做法效率會很高。
所以,在系統級設計中,設計者也可以做類似的事情來提高效率,設計者可以使用已有的功能模塊來快速搭建自己的系統,然后通過RTL級描述來使他們建立起聯系。
我舉一個例子來說明這一點
設計一個含有CPU、圖形處理芯片、I/O芯片和系統總線的系統
這時候,設計者可以直接使用CPU設計者完成的CPU,圖形處理芯片和I/O芯片以及第三方提供的系統總線來快速搭建系。
設計者只需對他們進行RTL級描述,進行系統級仿真等等。這樣做效率很高,在工程上大大縮短了開發周期,降低了開發成本。
1.4 小結
將最重要的內容,以最精簡的方式呈現出來。
- EDA與EDA工具:能夠幫助硬件開發設計者高效率完成開發工作
- 行為描述,類似于ADT抽象模型
- 行為描述的實現(可以互相嵌套)
- 行為級描述
- RTL級描述【最常用】
- 門級描述
- 開關級描述
- 自動化功能
- 行為級綜合工具
- 邏輯綜合工具
- 驗證與優化流程
- 具體實現到物理版圖上(不必掌握)
目前來說有個印象記個大概即可,因為這些都是概述,后期不斷掌握其細節后,會逐漸加深理解他們!
1.5 章節檢測
回顧復習本章的重要內容,如果不能完全掌握,請回顧復習,不要繼續往下學!