在層次化的設計當中,我們常常將復雜電路系統進行功能模塊劃分,先設計各個子功能模塊電路,然后再在頂層模塊中通過實例化這些子模塊,并通過各個子模塊的輸入輸出端口進行模塊間的互聯,來實現復雜電路設計。
在這里,為了說明實例化的方法,我使用了一個簡單的門電路的例子,幫助大家理解和掌握。當然,在實際當中我們是不會去這樣去進行設計的,當有了這樣的邏輯表達式,我們僅使用一條assign語句就可以實現設計了。這里僅僅是給大家演示實例化的方法。
0****1系統模塊劃分
要實現一個與或非邏輯的電路,可以先將這個電路進行模塊劃分,根據功能劃分為與門和或非門,如下圖所示。
△ 與或非門模塊劃分
0****2子模塊設計
模塊劃分好后,分別對與門和或非門進行獨立設計。在這里,我們可以將子功能模塊看作一個電路或者一個具有一定功能的芯片,我們現在要對這個芯片進行設計。設計包括模塊名稱、端口聲明,電路功能描述。
△ 子功能模塊設計
03頂層模塊搭建
子模塊設計好后,我們需要再新建一個源程序.v文件作為頂層文件,并進行頂層模塊的設計。頂層模塊的端口就是最終整個電路的端口。與或非門有四個輸入端口,分別是A、B、C和D,輸出端口是L。
**規則:**頂層模塊中只出現模塊的實例化,不要有assign或always等功能描述語句。
接下來,我們要將設計的子模塊實例化到頂層文件中。這個過程就好像將一個個帶引腳的芯片,用導線將他們的引腳根據輸入輸出關系進行連接,形成最終的數字電路系統。
模塊實例化中信號與模塊端口的接方式有兩種,位置對應方式和名稱對應方式。
(1)位置對應方式
實例化模塊時,上層模塊的信號必須嚴格按照低層模塊端口聲明的順序一一對應連接。例如本示例中可以這樣寫:
my_AND U1 (A, B, c1);
my_AND U2 (C, D, c2);
my_NOR U3 (c1, c2, L);
(2)名稱對應方式(推薦)
實例化模塊時,使用端口名稱進行連接,使用“.”符號標明原模塊定義的端口,其后所跟括號中為與之相連接的信號名,如下圖所示,即為名稱對應方式的寫法。此方式不需要按順序排列。
△ 頂層模塊設計
my_AND是子模塊的模塊名,實例化后的實例需要一個名稱來唯一指定該器件,例如這里的U1、U2和U3。a、b、c是原子模塊中定義的端口名稱,括號中是在頂層模塊中所要連接的端口。
模塊內部信號,要聲明為wire型,如這里的c1和c2。
總結一下,在設計之初,我們需要將電路系統進行模塊劃分,然后進行子模塊設計,具有相同功能和端口的電路,只需要設計一次,然后在頂層模塊中進行子模塊的實例化,每個實例都有獨一無二的實例名,因為他對應的實實在在的電路,在對相同的模塊進行實例化時,實例化幾次就產生幾個相同的電路,由實例名唯一指定。最后通過端口和信號線將子模塊的輸入輸出根據邏輯關系進行連接。
04自頂向下的設計
自頂向下是一種設計思想,是解決復雜問題的有效方法。在數字系統設計中,設計者要先從整個系統的功能和結構出發,先進行最上層的設計。例如,與或非門設計示例中,我們先設計整個系統的模塊名,輸入、輸出端口。
接下來,將系統分成若干個子系統,每個子系統分成若干功能模塊,模塊還可以繼續向下劃分成子模塊,直至分成許多最基本的數字功能電路。
在自頂向下的設計中,我們可以先逐級設計每一層次中各個子系統或子模塊的輸入、輸出端口,以及模塊之間的連接關系。根據設計可以在在頂層模塊中,將各個子系統通過實例化進行連接。此時,可以不必關心模塊具體是如何實現的,底層模塊的具體設計可以放在最后去完成。
也就是說,實際上,上述“ 02子模塊設計” 與“ 03頂層模塊的搭建 ”兩部分的順序應該顛倒一下,先從全局視角進行頂層模塊的設計與搭建,最終再進行子模塊功能設計。
而最終的系統設計與驗證,則是一個自底向下的過程。先完成每個底層模塊的設計與驗證,再一步步逐級向上進行驗證,直至整個系統正常運行。
-
邏輯電路
+關注
關注
13文章
494瀏覽量
42674 -
連接器
+關注
關注
98文章
14645瀏覽量
136999
發布評論請先 登錄
相關推薦
評論