一般在模組設計的時候要把握以下的埠型別定義的原則,不然模組是沒法用的,在我最開始使用的時候,演算法寫完了發現定義的變數型別不一致,導致程式演算法都得從寫,先總結如下的規律:
1 輸入埠可以由net/register驅動,但輸入埠只能是net
2:輸出埠可以是net/register型別,輸出埠只能驅動net
3:雙向埠輸入/輸出只能是net型別
1、被測module中,輸入為wire,輸出為reg
輸入訊號是由模組外部決定的,輸入資料的狀態是變化的,與外部模組是通過線連線,所以用wire,不用reg
2、testbench中,輸入為reg,輸出為wire
所謂暫存器型別就是暫存乙個資料,保持資料不變。
在testbench裡定義的a,b輸出給被測模組,因此對於testbench來說,a,b是輸出,資料需要儲存才能輸出給被測module,用reg型
在testbench裡定義的result用來接收從被測模組中輸入的資料
因此對於testbenchb來說,result是輸入,用導線與被測模組連線,用wire型
也就是說,tb的輸出對應著被測模組的輸入;tb的輸入對應著被測模組的輸出
注意:只要是always塊內部的變數輸出,都用reg型
模組的定義以關鍵字module開始,模組名、埠列表、埠宣告和可選的引數宣告必須出現在其他部分的前面,endmodule語句必須為模組的最後一條語句。埠是模組與外部環境互動的通道,只有在模組有埠的情況下才需要有埠列表和埠宣告。模組內部的5個組成部分是:變數宣告、資料流語句、低層模組例項、行為語句塊以及任務和函式。
埠是模組與外界環境互動的介面。對外部環境來講,模組內部是不可見的,對模組的呼叫只能通過其埠進行。這種特點為設計者提供了很大的靈活性:只要介面保持不變,模組內部的修改並不會影響到外部環境。常將埠成為終端。(terminal)
在模組的定義中包括乙個可選的埠列表。如果模組和外部環境沒有交換任何訊號,則可以沒有埠列表。
埠列表中的所有埠必須在模組中進行宣告,verilog中的埠具有以下三種了型別:input、output、和inout。在verilog中,所有的埠隱含地宣告為wire型別,因此如果希望埠具有wire資料型別,將其宣告為三種型別之一即可:如果輸出型別的埠需要儲存數值,則必須將其顯式的宣告為reg資料型別。
不能將input和inout型別的埠宣告為reg資料型別,這是因為reg型別的變數是用於儲存數值的,而輸入埠只反映與其相連的外部訊號的變化,並不能儲存這些訊號的值。
注意,在verilog中,也可以使用ansi c風格進行埠宣告。這種風格的宣告的優點是避免了埠名在埠列表和埠宣告語句中的重複。如果宣告中未指明埠的資料型別,那麼預設埠具有wire資料型別。
如:
module fulladd4
(output reg [3:
0] sum,
output reg c_out,
input [3:
0] a,b,
input c_in)
;endmodule
將乙個埠看成由相互鏈結的兩個部分組成,一部分位於模組內部,另一部分位於模組外部。當在乙個模組中呼叫(例項引用)另乙個模組時,埠之間的連線必須遵守一些規則。
輸入埠:從模組內部來講,輸入埠必須為線網資料型別,從模組外部來看,輸入埠可以連線到線網或者reg資料型別的變數。
輸出埠:從模組內部來講,輸出埠可以是線網或者reg資料型別,從模組外部來看,輸出必須連線到線網型別的變數,而不能連線到reg型別的變數。
從模組內部來講,輸入/輸出埠必須為線網資料型別;從模組外部來看,輸入/輸出埠也必須連線到線網型別的變數。
在對模組進行呼叫的時候,verilog允許埠的內、外兩個部分具有不同的位寬。一般情況下,verilog**器會對此警告。
verilog允許模組例項的埠保持未連線的狀態。例如,如果模組的某些輸出埠只用於除錯,那麼這些埠可以不與外部訊號連線。
在對模組呼叫的時候,可以使用兩種方法將模組定義的埠與外部環境中的訊號連線起來:按順序連線以及按名字連線。但兩種方法不能混合在一起使用。
需要連線到模組例項的訊號必須與模組宣告時目標埠在埠列表中的位置保持一致。
Verilog學習筆記(二) 模組
模組是 verilog 的基本描述單位,用於描述某個設計的功能或結構及其與其他模組通訊的外部埠。乙個設計的結構可使用開關級原語 門級原語和使用者定義的原語方式描述 設計的資料流行為使用連續賦值語句進行描述 時序行為使用過程結構描述。乙個模組可以在另乙個模組中使用。乙個模組的基本語法如下 module...
FPGA學習筆記 Verilog語言的模組化設計
在進行模組化設計中,對於複雜的數字系統,我們一般採用自頂向下的設計方式。可以把系統劃分成幾個功能模組,每個功能模組再劃分成下一層的子模組 每個模組的設計對應乙個module,乙個module設計成乙個verilog程式檔案。因此,對乙個系統的頂層模組,我們採用結構化的設計,即頂層模組分別呼叫了各個功...
Verilog 模組和埠
模組定義以關鍵字module開始,模組名 埠列表 埠宣告和可選的引數宣告必須出現在其他部分的前面,endmodule語句必須為模組的最後一條語句。模組內部的5個組成部分是 變數宣告 資料流語句 低層模組例項 行為語句塊以及任何和函式。在模組的組成部分中,只有module 模組名 endmodule必...