|
本(běn)节(jié)的(de)文(wén)檔編号(hào):001100000036 需要(yào)看(kàn)对(duì)應(yìng)的(de)視頻,請點(diǎn)擊視頻編号(hào): 001100000051
1、本(běn)节(jié)主(zhǔ)要(yào)介紹模块(kuài)結構,模块(kuài)(module)是(shì)verilog的(de)基本(běn)描述單位,是(shì)用(yòng)于(yú)描述某个(gè)設計(jì)功能(néng)或(huò)結構及(jí)與(yǔ)其他(tā)模块(kuài)通(tòng)信(xìn)的(de)外(wài)部(bù)端口(kǒu),有(yǒu)5个(gè)主(zhǔ)要(yào)部(bù)分(fēn):端口(kǒu)定(dìng)義、參數定(dìng)義(可(kě)選)、I/O说(shuō)明(míng)、內(nèi)部(bù)信(xìn)号(hào)聲明(míng)、功能(néng)定(dìng)義。 第(dì)3节(jié) 模块(kuài)結構 3.1 模块(kuài)介紹
模块(kuài)(module)是(shì)Verilog 的(de)基本(běn)描述單位,是(shì)用(yòng)于(yú)描述某个(gè)設計(jì)的(de)功能(néng)或(huò)結構及(jí)與(yǔ)其他(tā)模块(kuài)通(tòng)信(xìn)的(de)外(wài)部(bù)端口(kǒu)。
模块(kuài)在(zài)概念上(shàng)可(kě)等同(tóng)一(yī)个(gè)器件(jiàn),就(jiù)如(rú)調用(yòng)通(tòng)用(yòng)器件(jiàn)(與(yǔ)門(mén)、三(sān)态門(mén)等)或(huò)通(tòng)用(yòng)宏單元(yuán)(計(jì)數器、ALU、CPU)等。 因(yīn)此(cǐ),一(yī)个(gè)模块(kuài)可(kě)在(zài)另(lìng)一(yī)个(gè)模块(kuài)中(zhōng)調用(yòng),一(yī)个(gè)電(diàn)路(lù)設計(jì)可(kě)由(yóu)多(duō)个(gè)模块(kuài)組合而(ér)成(chéng)。 一(yī)个(gè)模块(kuài)的(de)設計(jì)只(zhī)是(shì)一(yī)个(gè)系(xì)統設計(jì)中(zhōng)的(de)某个(gè)层次(cì)設計(jì),模块(kuài)設計(jì)可(kě)采用(yòng)多(duō)種(zhǒng)建模方(fāng)式。 Verilog 的(de)基本(běn)設計(jì)單元(yuán)是(shì)“模块(kuài)”。采用(yòng)模块(kuài)化(huà)的(de)設計(jì)使系(xì)統看(kàn)起来(lái)更(gèng)有(yǒu)条(tiáo)理也(yě)便于(yú)仿真(zhēn)和(hé)测試, 因(yīn)此(cǐ)整个(gè)項目的(de)設計(jì)思(sī)想(xiǎng)就(jiù)是(shì)模块(kuài)套(tào)模块(kuài),自(zì)頂向(xiàng)下(xià)依次(cì)展(zhǎn)開(kāi)。在(zài)一(yī)个(gè)工程的(de)設計(jì)里(lǐ),每个(gè)模块(kuài)实現(xiàn)特(tè)定(dìng)的(de)功能(néng), 模块(kuài)間(jiān)可(kě)進(jìn)行层次(cì)的(de)嵌套(tào)。对(duì)大型的(de)數字(zì)電(diàn)路(lù)進(jìn)行設計(jì)时(shí),可(kě)以(yǐ)将其分(fēn)割成(chéng)大小不(bù)一(yī)的(de)小模块(kuài), 每个(gè)小模块(kuài)实現(xiàn)特(tè)定(dìng)的(de)功能(néng),最(zuì)後(hòu)通(tòng)过(guò)由(yóu)頂层模块(kuài)調用(yòng)子模块(kuài)的(de)方(fāng)式来(lái)实現(xiàn)整體(tǐ)功能(néng),这(zhè)就(jiù)是(shì)Top-Down的(de)設計(jì)思(sī)想(xiǎng)。 本(běn)書(shū)主(zhǔ)要(yào)以(yǐ)Verilog硬(yìng)件(jiàn)描述語(yǔ)言为(wèi)主(zhǔ),模块(kuài)是(shì)Verilog的(de)基本(běn)描述單位,用(yòng)于(yú)描述每个(gè)設計(jì)的(de)功能(néng)和(hé)結構, 以(yǐ)及(jí)其他(tā)模块(kuài)通(tòng)信(xìn)的(de)外(wài)部(bù)接口(kǒu)。 模块(kuài)有(yǒu)五(wǔ)个(gè)主(zhǔ)要(yào)部(bù)分(fēn):端口(kǒu)定(dìng)義、參數定(dìng)義(可(kě)選)、 I/O说(shuō)明(míng)、內(nèi)部(bù)信(xìn)号(hào)聲明(míng)、功能(néng)定(dìng)義。 模块(kuài)總(zǒng)是(shì)以(yǐ)關(guān)鍵词module開(kāi)始,以(yǐ)關(guān)鍵词endmodule結尾。它(tā)的(de)一(yī)般語(yǔ)法結構如(rú)下(xià)所(suǒ)示:
下(xià)面(miàn)笔(bǐ)者(zhě)詳细(xì)分(fēn)析一(yī)下(xià)这(zhè)段(duàn)代(dài)碼:
3.2 模块(kuài)名和(hé)端口(kǒu)定(dìng)義
第(dì)1至(zhì)5行聲明(míng)了(le)模块(kuài)的(de)名字(zì)和(hé)輸入(rù)輸出(chū)口(kǒu)。其格式如(rú)下(xià):
module 模块(kuài)名(端口(kǒu) 1,端口(kǒu) 2,端口(kǒu) 3,……);
其中(zhōng)模块(kuài)是(shì)以(yǐ)module開(kāi)始,以(yǐ)endmodule結束(shù)。模块(kuài)名是(shì)模块(kuài)唯一(yī)的(de)标(biāo)識符, 一(yī)般建議模块(kuài)名盡量(liàng)用(yòng)能(néng)够描述其功能(néng)的(de)名字(zì)来(lái)命名,并且模块(kuài)名和(hé)文(wén)件(jiàn)名相同(tóng)。
模块(kuài)的(de)端口(kǒu)表(biǎo)示的(de)是(shì)模块(kuài)的(de)輸入(rù)和(hé)輸出(chū)口(kǒu)名,也(yě)是(shì)其與(yǔ)其他(tā)模块(kuài)聯系(xì)端口(kǒu)的(de)标(biāo)識。
3.3 參數定(dìng)義 第(dì)8行參數定(dìng)義是(shì)将常量(liàng)用(yòng)符号(hào)代(dài)替以(yǐ)增加代(dài)碼可(kě)读(dú)性(xìng)和(hé)可(kě)修改性(xìng)。这(zhè)是(shì)一(yī)个(gè)可(kě)選擇的(de)語(yǔ)句(jù), 用(yòng)不(bù)到(dào)的(de)情(qíng)況下(xià)可(kě)以(yǐ)省(shěng)略,參數定(dìng)義一(yī)般格式如(rú)下(xià):
parameter DATA_W = x;
3.4 接口(kǒu)定(dìng)義 第(dì)9至(zhì)12行是(shì)I/O(輸入(rù)/輸出(chū))说(shuō)明(míng),模块(kuài)的(de)端口(kǒu)可(kě)以(yǐ)是(shì)輸入(rù)端口(kǒu)、輸出(chū)端口(kǒu)或(huò)双(shuāng)向(xiàng)端口(kǒu)。 其说(shuō)明(míng)格式如(rú)下(xià)。
輸入(rù)端口(kǒu): input [信(xìn)号(hào)位宽(kuān)-1 : 0] 端口(kǒu)名 1;
input [信(xìn)号(hào)位宽(kuān)-1 : 0] 端口(kǒu)名 2;
……;
輸出(chū)端口(kǒu): output [信(xìn)号(hào)位宽(kuān)-1 : 0] 端口(kǒu)名 1;
output [信(xìn)号(hào)位宽(kuān)-1 : 0] 端口(kǒu)名 2;
……;
双(shuāng)向(xiàng)端口(kǒu):inout [信(xìn)号(hào)位宽(kuān)-1 : 0] 端口(kǒu)名 1;
inout [信(xìn)号(hào)位宽(kuān)-1 : 0] 端口(kǒu)名 2;
……;
3.5 信(xìn)号(hào)類(lèi)型
第(dì)14至(zhì)17行定(dìng)義了(le)信(xìn)号(hào)的(de)類(lèi)型。这(zhè)些信(xìn)号(hào)是(shì)在(zài)模块(kuài)內(nèi)使用(yòng)到(dào)的(de)信(xìn)号(hào), 并且與(yǔ)端口(kǒu)有(yǒu)關(guān)的(de) wire 和(hé) reg 類(lèi)型變(biàn)量(liàng)。其聲明(míng)方(fāng)式如(rú)下(xià): reg [width-1 : 0] R 變(biàn)量(liàng) 1, R 變(biàn)量(liàng) 2 ……;
wire [width-1 : 0] W 變(biàn)量(liàng) 1,W 變(biàn)量(liàng) 2……;
如(rú)果(guǒ)沒(méi)有(yǒu)定(dìng)義信(xìn)号(hào)類(lèi)型,默認是(shì)wire型,并且信(xìn)号(hào)位宽(kuān)为(wèi)1。
3.6 功能(néng)描述
第(dì)21至(zhì)31行是(shì)功能(néng)描述部(bù)分(fēn)。模块(kuài)中(zhōng)最(zuì)重(zhòng)要(yào)的(de)部(bù)分(fēn)是(shì)邏輯功能(néng)定(dìng)義部(bù)分(fēn),有(yǒu)三(sān)種(zhǒng)方(fāng)法可(kě)在(zài)模块(kuài)中(zhōng)産生(shēng)邏輯。
1. 用(yòng)“assign”聲明(míng)語(yǔ)句(jù),如(rú)描述一(yī)个(gè)两(liǎng)輸入(rù)與(yǔ)門(mén):assign a = b & c。詳细(xì)功能(néng)見(jiàn)“功能(néng)描述-組合邏輯”一(yī)节(jié)。
2. 用(yòng)“always”块(kuài)。即前(qián)面(miàn)介紹的(de)时(shí)序邏輯和(hé)組合邏輯。
3. 模块(kuài)例化(huà)。詳细(xì)功能(néng)見(jiàn)“模块(kuài)例化(huà)”一(yī)节(jié)。
3.7 模块(kuài)例化(huà) 对(duì)數字(zì)系(xì)統的(de)設計(jì)一(yī)般采用(yòng)的(de)是(shì)自(zì)頂向(xiàng)下(xià)的(de)設計(jì)方(fāng)式,可(kě)将系(xì)統劃(huà)分(fēn)成(chéng)幾(jǐ)个(gè)功能(néng)模块(kuài), 每个(gè)功能(néng)模块(kuài)再劃(huà)分(fēn)成(chéng)下(xià)一(yī)层的(de)子模块(kuài)。每个(gè)模块(kuài)的(de)設計(jì)对(duì)應(yìng)一(yī)个(gè)module ,每个(gè)module 設計(jì)成(chéng)一(yī)个(gè)Verilog HDL 程序文(wén)件(jiàn)。 因(yīn)此(cǐ),对(duì)一(yī)个(gè)系(xì)統的(de)頂层模块(kuài)采用(yòng)結構化(huà)設計(jì),即頂层模块(kuài)分(fēn)别調用(yòng)了(le)各(gè)个(gè)功能(néng)模块(kuài)。
一(yī)个(gè)模块(kuài)能(néng)够在(zài)另(lìng)外(wài)一(yī)个(gè)模块(kuài)中(zhōng)被(bèi)引用(yòng),这(zhè)樣(yàng)就(jiù)建立了(le)描述的(de)层次(cì)。
模块(kuài)实例化(huà)語(yǔ)句(jù)形式如(rú)下(xià):
module_name instance_name(port_associations) ;
信(xìn)号(hào)端口(kǒu)可(kě)以(yǐ)通(tòng)过(guò)位置或(huò)名稱關(guān)聯,但是(shì)關(guān)聯方(fāng)式不(bù)能(néng)够混合使用(yòng)。
端口(kǒu)關(guān)聯形式如(rú)下(xià):
port_expr / /通(tòng)过(guò)位置。
.PortName (port_expr) / /通(tòng)过(guò)名稱。
建議:在(zài)例化(huà)的(de)端口(kǒu)映射中(zhōng)請采用(yòng)名字(zì)關(guān)聯,这(zhè)樣(yàng),當被(bèi)調用(yòng)的(de)模块(kuài)管(guǎn)脚改變(biàn)时(shí)不(bù)易出(chū)錯。
在(zài)实例化(huà)中(zhōng),可(kě)能(néng)有(yǒu)些管(guǎn)脚沒(méi)用(yòng)到(dào),可(kě)在(zài)映射中(zhōng)采用(yòng)空白处理,如(rú):
輸入(rù)管(guǎn)脚懸空端口(kǒu)的(de)輸入(rù)为(wèi)高(gāo)阻 Z,由(yóu)于(yú)輸出(chū)管(guǎn)脚是(shì)被(bèi)懸空的(de),該輸出(chū)管(guǎn)脚廢棄不(bù)用(yòng)。
相關(guān)視頻:https://www.bilibili.com/video/BV1yf4y1R7gH?p=5 |








