新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Verilog HDL基礎(chǔ)知識(shí)7之模塊例化

Verilog HDL基礎(chǔ)知識(shí)7之模塊例化

作者: 時(shí)間:2024-02-21 來源:電子森林 收藏

Verilog使用模塊(module)的概念來代表一個(gè)基本的功能塊。一個(gè)模塊可以是一個(gè)元件,也可以是低層次模塊的組合。常用的設(shè)計(jì)方法是使用元件構(gòu)建在設(shè)計(jì)中多個(gè)地方使用的功能塊,以便進(jìn)行代碼重用。模塊通過接口(輸入和輸出)被高層的模塊調(diào)用,但隱藏了內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)。這樣就使得設(shè)計(jì)者可以方便地對(duì)某個(gè)模塊進(jìn)行修改,而不影響設(shè)計(jì)的其他部分。

本文引用地址:http://butianyuan.cn/article/202402/455550.htm

在verilog中,模塊聲明由關(guān)鍵字module開始,關(guān)鍵字endmodule則必須出現(xiàn)在模塊定義的結(jié)尾。每個(gè)模塊必須具有一個(gè)模塊名,由它唯一地標(biāo)識(shí)這個(gè)模塊。模塊的端口列表則描述這個(gè)模塊的輸入和輸出端口。

module <模塊名>(<模塊端口列表>);
...
<模塊的內(nèi)容>
...
...
endmodule

使用Verilog既可以進(jìn)行行為描述,同時(shí)也可以進(jìn)行結(jié)構(gòu)描述。根據(jù)設(shè)計(jì)需要,設(shè)計(jì)者在每個(gè)模塊內(nèi)部可以在4個(gè)抽象層次中進(jìn)行描述,而模塊對(duì)外顯示的功能都是一樣的,僅與外部環(huán)境有關(guān),而與抽象層次無關(guān)。模塊的內(nèi)部結(jié)構(gòu)對(duì)于外部環(huán)境來講是透明的。因此,對(duì)模塊內(nèi)部抽象層次的改變不會(huì)影響外部環(huán)境。這些抽象層次的定義如下:

1.行為或算法級(jí):Verilog所支持的最高抽象層次。設(shè)計(jì)者只注重其實(shí)現(xiàn)的算法,而不關(guān)心其具體的硬件實(shí)現(xiàn)細(xì)節(jié)。在這個(gè)層次上進(jìn)行的設(shè)計(jì)與C語言編程非常類似。

2.數(shù)據(jù)流級(jí):通過說明數(shù)據(jù)的流程對(duì)模塊進(jìn)行描述。設(shè)計(jì)者關(guān)心的是數(shù)據(jù)如何在各個(gè)寄存器之間流動(dòng),以及如何處理這些數(shù)據(jù)。

3.門級(jí):從組成電路的邏輯門及其相互之間的互連關(guān)系的角度來設(shè)計(jì)模塊。這個(gè)層次的設(shè)計(jì)類似于使用門級(jí)邏輯簡圖來完成設(shè)計(jì)。

4.開關(guān)級(jí):Verilog所支持的最低抽象層次。通過使用開關(guān)、存儲(chǔ)節(jié)點(diǎn)及其互連關(guān)系來設(shè)計(jì)模塊。在這個(gè)層次進(jìn)行設(shè)計(jì)需要了解開關(guān)級(jí)的實(shí)現(xiàn)細(xì)節(jié)。

Verilog允許設(shè)計(jì)者在一個(gè)模塊中混合使用多個(gè)抽象層次。在數(shù)字電路設(shè)計(jì)中,術(shù)語寄存器傳輸級(jí)(RTL)描述在很多情況下是指能夠被邏輯綜合工具接受的行為級(jí)和數(shù)據(jù)流級(jí)的混合描述。

例化

端口是模塊與外部環(huán)境交互的通道,只有在模塊有端口的情況下才需要有端口列表和端口聲明。模塊內(nèi)部的5個(gè)組成部分是:變量聲明、數(shù)據(jù)流語句、低層模塊實(shí)例、行為語句塊以及任務(wù)與函數(shù)。這些部分可以在模塊中的任意位置,以任意順序出現(xiàn)。在模塊的所有組成部分中,只有module、模塊名和endmodule必須出現(xiàn),其他部分都是可選的,用戶可以根據(jù)設(shè)計(jì)的需要隨意選用。在一個(gè)Verilog源文件中可以定義多個(gè)模塊,Verilog對(duì)模塊的排列順序沒有要求。

為了理解模塊的各個(gè)組成部分,我們以SR鎖存器為例進(jìn)行詳細(xì)說明,如下。

SR鎖存器構(gòu)成如下:

  // 本例說明模塊的構(gòu)成部件   
 
  // 模塊名和端口列表
 // SR鎖存器模塊   
 
 module SR_latch(Q, Qbar, Sbar, Rbar);   
 
 // 端口聲明
 output Q, Qbar;
 input Sbar, Rbar;   
 
 // 調(diào)用(實(shí)例引用)較低層次的模塊
 // 本例中調(diào)用(實(shí)例引用)的是Verilog原語部件nand,即與非門
 // 注意它們之間互相交叉連接的情況
 nand n1(Q, Sbar, Qbar);
 nand n2(Qbar, Rbar, Q);
 // 模塊語句結(jié)束
 endmodule   
 
 // 模塊名和端口列表
 // 測試激勵(lì)信號(hào)模塊
 module Top;   
 
 // 聲明wire, reg和其他類型的變量
 wire q, qbar;
 reg set, reset;   

 // 調(diào)用(實(shí)例引用)較低層次的模塊
 // 本模塊中調(diào)用(實(shí)例引用)的是SR_latch
 SR_latch m1(q, qbar, ~set, ~reset);   
 
 // 行為模塊, 初始化
 initial
 begin
  $monitor($time, " set = %b, reset= %b, q= %bn",set,reset,q);
  set = 0; reset = 0;
  #5 reset = 1;
  #5 reset = 0;
  #5set = 1;
 end   
 
 // 模塊語句結(jié)束
 endmodule


關(guān)鍵詞: FPGA verilog HDL 模塊例化

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉