⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨


官方(fāng)論壇
官方(fāng)淘寶(bǎo)
官方(fāng)博客
微信(xìn)公衆号(hào)
點(diǎn)擊聯系(xì)吴工 點(diǎn)擊聯系(xì)周老(lǎo)师(shī)
您的(de)當前(qián)位置:主(zhǔ)页(yè)-old > 教程中(zhōng)心(xīn) > 認識FPGA >

Verilog HDL常用(yòng)的(de)仿真(zhēn)知識你必須知道(dào)

發(fà)布(bù)时(shí)間(jiān):2023-06-30   作者(zhě):fpga王子 浏覽量(liàng):

在(zài)描述完電(diàn)路(lù)之後(hòu),我(wǒ)们(men)需要(yào)進(jìn)行对(duì)代(dài)碼進(jìn)行验(yàn)證,主(zhǔ)要(yào)是(shì)進(jìn)行功能(néng)验(yàn)證。

現(xiàn)在(zài)验(yàn)證大多(duō)是(shì)基于(yú)UVM平台(tái)写的(de)systemverilog,然而(ér)我(wǒ)并不(bù)会(huì)sv,不(bù)过(guò)我(wǒ)会(huì)使用(yòng)verilog進(jìn)行簡單的(de)验(yàn)證,其实也(yě)就(jiù)是(shì)所(suǒ)謂的(de)仿真(zhēn)

我(wǒ)们(men)来(lái)記(jì)录(lù)一(yī)下(xià)一(yī)些验(yàn)證的(de)基礎吧。

一(yī)、验(yàn)證基礎與(yǔ)仿真(zhēn)原理

①綜合中(zhōng)的(de)語(yǔ)法,都适用(yòng)于(yú)仿真(zhēn),在(zài)仿真(zhēn)中(zhōng),Verilog語(yǔ)句(jù)是(shì)串行的(de),其面(miàn)向(xiàng)硬(yìng)件(jiàn)的(de)并行特(tè)性(xìng)則是(shì)通(tòng)过(guò)其語(yǔ)義(語(yǔ)言含義)来(lái)实現(xiàn)的(de),因(yīn)此(cǐ)并不(bù)会(huì)丢失代(dài)碼的(de)并行含義和(hé)特(tè)征。

②仿真(zhēn)的(de)關(guān)鍵元(yuán)素有(yǒu):仿真(zhēn)时(shí)間(jiān)、事(shì)件(jiàn)驅動(dòng)、隊列、調度(dù)等。

③仿真(zhēn)时(shí)間(jiān):指由(yóu)仿真(zhēn)器維護的(de)时(shí)間(jiān)值,用(yòng)来(lái)对(duì)仿真(zhēn)電(diàn)路(lù)所(suǒ)用(yòng)的(de)真(zhēn)实时(shí)間(jiān)進(jìn)行建模。0时(shí)刻被(bèi)稱为(wèi)仿真(zhēn)起始时(shí)刻。當仿真(zhēn)时(shí)間(jiān)推進(jìn)到(dào)某一(yī)个(gè)时(shí)間(jiān)點(diǎn)时(shí),該时(shí)間(jiān)點(diǎn)就(jiù)被(bèi)稱为(wèi)當前(qián)仿真(zhēn)时(shí)間(jiān),而(ér)以(yǐ)後(hòu)的(de)任何时(shí)刻都被(bèi)稱为(wèi)未来(lái)的(de)仿真(zhēn)时(shí)間(jiān)。

本(běn)質(zhì)上(shàng),仿真(zhēn)时(shí)間(jiān)是(shì)沒(méi)有(yǒu)时(shí)間(jiān)單位的(de),由(yóu)于(yú)代(dài)碼中(zhōng)有(yǒu)`timescale語(yǔ)句(jù)的(de)定(dìng)義,就(jiù)出(chū)現(xiàn)了(le)xxxns。

仿真(zhēn)事(shì)件(jiàn)都是(shì)嚴格按照仿真(zhēn)时(shí)間(jiān)向(xiàng)前(qián)推進(jìn)的(de),如(rú)果(guǒ)在(zài)同(tóng)一(yī)个(gè)仿真(zhēn)时(shí)刻有(yǒu)多(duō)个(gè)事(shì)件(jiàn)要(yào)執行,那(nà)麼(me)首先(xiān)需要(yào)根(gēn)據(jù)他(tā)们(men)之間(jiān)的(de)优先(xiān)級来(lái)判定(dìng)谁先(xiān)執行。优先(xiān)級相同(tóng),可(kě)能(néng)随機(jī)執行,也(yě)可(kě)能(néng)按照代(dài)碼的(de)順序来(lái)執行。

④事(shì)件(jiàn)驅動(dòng):仿真(zhēn)时(shí)間(jiān)只(zhī)能(néng)被(bèi)下(xià)面(miàn)事(shì)件(jiàn)中(zhōng)的(de)一(yī)種(zhǒng)来(lái)推進(jìn):

·定(dìng)義过(guò)的(de)門(mén)級或(huò)者(zhě)線(xiàn)傳輸延时(shí);

·更(gèng)新时(shí)間(jiān);

·“#”的(de)事(shì)件(jiàn)控制;

·“always”關(guān)鍵字(zì)引入(rù)的(de)事(shì)件(jiàn)控制

·“wait”的(de)等待語(yǔ)句(jù)

⑤事(shì)件(jiàn)隊列與(yǔ)調度(dù):事(shì)件(jiàn)隊列與(yǔ)調度(dù)可(kě)以(yǐ)簡單地(dì)理解(jiě)为(wèi):它(tā)決定(dìng)了(le)verilog在(zài)某个(gè)时(shí)刻先(xiān)完成(chéng)哪些語(yǔ)句(jù)。

VerilogHDL的(de)分(fēn)层事(shì)件(jiàn)隊列为(wèi):

⑥關(guān)于(yú)forever、force和(hé)release、wait、UDP、PLI等具體(tǐ)語(yǔ)法我(wǒ)就(jiù)不(bù)想(xiǎng)記(jì)录(lù)了(le),沒(méi)那(nà)个(gè)心(xīn)思(sī)。。。

⑦系(xì)統任务的(de)使用(yòng):

在(zài)Verilog HDL 語(yǔ)言中(zhōng),以(yǐ)“$”字(zì)符開(kāi)始的(de)标(biāo)識符表(biǎo)示系(xì)統任务或(huò)系(xì)統函(hán)數。系(xì)統任务和(hé)函(hán)數即在(zài)語(yǔ)言中(zhōng)預定(dìng)義的(de)任务和(hé)函(hán)數。和(hé)用(yòng)戶自(zì)定(dìng)義任务和(hé)函(hán)數類(lèi)似,系(xì)統任务可(kě)以(yǐ)返回(huí)0 个(gè)或(huò)多(duō)个(gè)值,且系(xì)統任务可(kě)以(yǐ)带(dài)有(yǒu)延遲。系(xì)統任务的(de)功能(néng)非(fēi)常強(qiáng)大,主(zhǔ)要(yào)分(fēn)为(wèi)以(yǐ)下(xià)幾(jǐ)類(lèi):

A、顯示任务(display task);

B、文(wén)件(jiàn)輸入(rù)/輸出(chū)任务(File I/O task);

C、时(shí)間(jiān)标(biāo)度(dù)任务(timescale task);

D、仿真(zhēn)控制任务(simulation control task);

E、时(shí)序验(yàn)證任务(timing check task);

F、仿真(zhēn)时(shí)間(jiān)函(hán)數 (simulation time function)

G、实數變(biàn)換函(hán)數(conversion functions for real);

H、概率分(fēn)布(bù)函(hán)數(probabilistic distribution function)


二(èr)、测試文(wén)件(jiàn)的(de)激勵

(1)信(xìn)号(hào)的(de)初始化(huà)問(wèn)題(tí)

主(zhǔ)要(yào)有(yǒu)三(sān)種(zhǒng)産生(shēng)激勵的(de)方(fāng)法:一(yī)種(zhǒng)是(shì)直(zhí)接編輯测試激勵波(bō)形(这(zhè)種(zhǒng)基本(běn)上(shàng)被(bèi)淘汰了(le)),一(yī)種(zhǒng)是(shì)用(yòng)Verilog测試代(dài)碼的(de)时(shí)序控制功能(néng),産生(shēng)测試激勵。還(huán)有(yǒu)就(jiù)是(shì)利用(yòng)Verilog HDL 語(yǔ)言的(de)读(dú)文(wén)件(jiàn)功能(néng),從文(wén)本(běn)文(wén)件(jiàn)中(zhōng)读(dú)取(qǔ)數據(jù)(該數據(jù)可(kě)以(yǐ)通(tòng)过(guò)C/C++MATLAB 等软(ruǎn)件(jiàn)語(yǔ)言生(shēng)成(chéng))。

①代(dài)碼中(zhōng)的(de)變(biàn)量(liàng)的(de)初始化(huà)可(kě)以(yǐ)用(yòng)initial進(jìn)行初始化(huà),也(yě)可(kě)以(yǐ)在(zài)定(dìng)義的(de)时(shí)候進(jìn)行初始化(huà)。

②在(zài)硬(yìng)件(jiàn)系(xì)統中(zhōng),當系(xì)統上(shàng)電(diàn)之後(hòu),信(xìn)号(hào)電(diàn)平不(bù)是(shì)0就(jiù)是(shì)1,不(bù)会(huì)存在(zài)x或(huò)者(zhě)z,这(zhè)是(shì)就(jiù)会(huì)根(gēn)據(jù)EDA的(de)默認狀态進(jìn)行默認的(de)設置。由(yóu)于(yú)上(shàng)電(diàn)的(de)默認性(xìng),導致(zhì)这(zhè)个(gè)默認信(xìn)号(hào)不(bù)一(yī)定(dìng)是(shì)我(wǒ)们(men)想(xiǎng)要(yào)的(de)信(xìn)号(hào),因(yīn)此(cǐ)我(wǒ)们(men)需要(yào)進(jìn)行複位進(jìn)行初始化(huà)。

③在(zài)Verilog HDL 中(zhōng),有(yǒu)两(liǎng)種(zhǒng)不(bù)同(tóng)的(de)原因(yīn)可(kě)能(néng)導致(zhì)信(xìn)号(hào)值为(wèi)x。第(dì)一(yī)種(zhǒng)原因(yīn)是(shì),有(yǒu)两(liǎng)个(gè)不(bù)同(tóng)的(de)信(xìn)号(hào)源用(yòng)相同(tóng)的(de)強(qiáng)度(dù)驅使同(tóng)一(yī)个(gè)节(jié)點(diǎn),并試图(tú)驅動(dòng)成(chéng)不(bù)同(tóng)的(de)邏輯值,这(zhè)一(yī)般是(shì)由(yóu)設計(jì)錯誤造成(chéng)的(de)。第(dì)二(èr)種(zhǒng)原因(yīn)是(shì)信(xìn)号(hào)值沒(méi)有(yǒu)初始化(huà)。所(suǒ)以(yǐ)在(zài)設計(jì)組合邏輯时(shí),需要(yào)将不(bù)确定(dìng)的(de)輸入(rù)轉(zhuǎn)化(huà)成(chéng)确定(dìng)輸入(rù),然後(hòu)再完成(chéng)組合邏輯。

(2)时(shí)鐘(zhōng)信(xìn)号(hào)的(de)生(shēng)成(chéng)

①普通(tòng)时(shí)鐘(zhōng)信(xìn)号(hào)

所(suǒ)謂的(de)普通(tòng)时(shí)鐘(zhōng)信(xìn)号(hào)就(jiù)指的(de)是(shì)占空比为(wèi)50%的(de)时(shí)鐘(zhōng)信(xìn)号(hào),也(yě)是(shì)最(zuì)常用(yòng)的(de)时(shí)鐘(zhōng)信(xìn)号(hào),其波(bō)形下(xià)图(tú)所(suǒ)示:



占空比为(wèi)50%的(de)时(shí)鐘(zhōng)信(xìn)号(hào)

普通(tòng)时(shí)鐘(zhōng)信(xìn)号(hào)可(kě)通(tòng)过(guò)initial 語(yǔ)句(jù)和(hé)always 語(yǔ)句(jù)産生(shēng),其代(dài)碼如(rú)下(xià):

----基于(yú)initial 語(yǔ)句(jù)的(de)方(fāng)法:

parameter clk_period = 10;

reg clk;

initial begin

clk = 0;

forever

# (clk_period/2) clk = ~clk;

end

---基于(yú)always 語(yǔ)句(jù)的(de)方(fāng)法:

parameter clk_period = 10;

reg clk;

initial

clk = 0;

always # (clk_period/2) clk = ~clk;

在(zài)这(zhè)里(lǐ)的(de)initial 語(yǔ)句(jù)用(yòng)于(yú)初始化(huà)clk 信(xìn)号(hào),否則就(jiù)会(huì)出(chū)現(xiàn)对(duì)未知信(xìn)号(hào)取(qǔ)反(fǎn)的(de)情(qíng)況,因(yīn)而(ér)造成(chéng)clk信(xìn)号(hào)在(zài)整个(gè)仿真(zhēn)階(jiē)段(duàn)都为(wèi)未知狀态。

②自(zì)定(dìng)義占空比的(de)时(shí)鐘(zhōng)信(xìn)号(hào)

自(zì)定(dìng)義占空比信(xìn)号(hào)通(tòng)过(guò)always 模块(kuài)可(kě)以(yǐ)快(kuài)速实現(xiàn),下(xià)面(miàn)給(gěi)出(chū)一(yī)个(gè)占空比为(wèi)40%的(de)时(shí)鐘(zhōng)信(xìn)号(hào)代(dài)碼:

parameter High_time = 4,

Low_time = 6; //占空比为(wèi)High_time/( High_time+ Low_time)

reg clk;

always begin

clk = 1;

#High_time;

clk = 0;

#Low_time;

end

这(zhè)里(lǐ)由(yóu)于(yú)直(zhí)接对(duì)clk 信(xìn)号(hào)賦值,所(suǒ)以(yǐ)不(bù)需要(yào)initial 語(yǔ)句(jù)初始化(huà)clk 信(xìn)号(hào)。當然,这(zhè)種(zhǒng)方(fāng)法也(yě)可(kě)以(yǐ)用(yòng)于(yú)産生(shēng)普通(tòng)时(shí)鐘(zhōng)信(xìn)号(hào),只(zhī)是(shì)代(dài)碼行數較多(duō)而(ér)已。

③相位偏移的(de)时(shí)鐘(zhōng)信(xìn)号(hào)

相位偏移是(shì)两(liǎng)个(gè)时(shí)鐘(zhōng)信(xìn)号(hào)之間(jiān)的(de)相对(duì)概念,下(xià)图(tú)所(suǒ)示,其中(zhōng)clk_a 为(wèi)參考信(xìn)号(hào),clk_b为(wèi)偏移信(xìn)号(hào):


首先(xiān)通(tòng)过(guò)一(yī)个(gè)always 模块(kuài)産生(shēng)參考时(shí)鐘(zhōng)clk_a,然後(hòu)通(tòng)过(guò)延遲賦值得到(dào)clk_b 信(xìn)号(hào),其偏移的(de)相位可(kě)通(tòng)过(guò)360*pshift_time%(High_time+Low_time)来(lái)計(jì)算,其中(zhōng)%为(wèi)取(qǔ)模運算。

下(xià)面(miàn)代(dài)碼的(de)相位偏移为(wèi)72 度(dù):

parameter High_time = 5,

Low_time = 5,

pshift_time = 2;

reg clk_a;

wire clk_b;

always begin

clk_a = 1;

# High_time;

clk_b = 0;

# Low_time;

end

assign # pshift_time clk_b = clk_a;

④固定(dìng)數目的(de)时(shí)鐘(zhōng)信(xìn)号(hào)

上(shàng)述語(yǔ)句(jù)産生(shēng)的(de)时(shí)鐘(zhōng)信(xìn)号(hào)都是(shì)无限个(gè)周期(qī)的(de),也(yě)可(kě)以(yǐ)通(tòng)过(guò)repeat 語(yǔ)句(jù)来(lái)産生(shēng)固定(dìng)个(gè)數的(de)时(shí)鐘(zhōng)脈沖,下(xià)面(miàn)的(de)代(dài)碼産生(shēng)了(le)5 个(gè)周期(qī)的(de)时(shí)鐘(zhōng):

parameter clk_cnt = 5,

clk_period = 2;

reg clk;

initial begin

clk = 0;

repeat (clk_cnt)

# clk_period/2 clk = ~clk;

end

(3)複位信(xìn)号(hào)的(de)産生(shēng)

①异(yì)步複位信(xìn)号(hào)

异(yì)步複位信(xìn)号(hào)的(de)实現(xiàn)代(dài)碼如(rú)下(xià),代(dài)碼将産生(shēng)低有(yǒu)效的(de)複位信(xìn)号(hào)rst_n,其複位时(shí)間(jiān)为(wèi)100 个(gè)仿真(zhēn)單位:

parameter rst_repiod = 100;

reg rst_n;

initial begin

rst_n = 0;

# rst_repiod;

rst_n = 1;

end

②同(tóng)步複位

同(tóng)步複位信(xìn)号(hào)的(de)实現(xiàn)代(dài)碼如(rú)下(xià):

parameter rst_repiod = 100;

reg rst_n;

initial begin

rst_n = 1;

@( posedge clk);

rst_n = 0;

# rst_repiod;

@( posedge clk);

rst_n = 1;

end

上(shàng)述代(dài)碼首先(xiān)将複位信(xìn)号(hào)rst_n 初始化(huà)为(wèi)1,然後(hòu)等待时(shí)鐘(zhōng)信(xìn)号(hào)clk 的(de)上(shàng)升(shēng)沿,将rst_n拉低,進(jìn)入(rù)有(yǒu)效複位狀态;然後(hòu)經(jīng)过(guò)100 个(gè)仿真(zhēn)周期(qī),等待下(xià)一(yī)个(gè)上(shàng)升(shēng)沿到(dào)来(lái)後(hòu),将複位信(xìn)号(hào)置为(wèi)1。在(zài)仿真(zhēn)代(dài)碼中(zhōng),是(shì)不(bù)存在(zài)邏輯延遲的(de),因(yīn)此(cǐ)在(zài)上(shàng)升(shēng)沿对(duì)rst_n 的(de)賦值,能(néng)在(zài)同(tóng)一(yī)个(gè)沿送到(dào)测試代(dài)碼邏輯中(zhōng)。

在(zài)需要(yào)複位时(shí)間(jiān)为(wèi)时(shí)鐘(zhōng)周期(qī)的(de)整數倍时(shí),可(kě)以(yǐ)将rst_repiod 修改为(wèi)时(shí)鐘(zhōng)周期(qī)的(de)3 倍来(lái)实現(xiàn),也(yě)可(kě)以(yǐ)通(tòng)过(guò)下(xià)面(miàn)的(de)代(dài)碼来(lái)完成(chéng)。

parameter rst_num = 5;

initial begin

rst_n = 1;

@(posedge clk);

rst_n = 0;

repeat(rst_num) @(posedge clk);

rst_n = 1;

end

上(shàng)述代(dài)碼在(zài)clk 的(de)第(dì)一(yī)个(gè)上(shàng)升(shēng)沿開(kāi)始複位,然後(hòu)經(jīng)过(guò)5 个(gè)时(shí)鐘(zhōng)上(shàng)升(shēng)沿後(hòu),在(zài)第(dì)5 个(gè)时(shí)鐘(zhōng)上(shàng)升(shēng)沿撤銷複位信(xìn)号(hào),進(jìn)入(rù)有(yǒu)效工作狀态。

(4)數據(jù)的(de)産生(shēng)

數據(jù)的(de)産生(shēng)这(zhè)里(lǐ)就(jiù)不(bù)進(jìn)行描述了(le),在(zài)以(yǐ)後(hòu)關(guān)于(yú)常用(yòng)的(de)仿真(zhēn)模块(kuài)中(zhōng)進(jìn)行記(jì)录(lù)。

三(sān)、提(tí)高(gāo)仿真(zhēn)时(shí)間(jiān)的(de)注意(yì)點(diǎn)

①減少(shǎo)层次(cì)結構

仿真(zhēn)代(dài)碼的(de)层次(cì)越少(shǎo),執行时(shí)間(jiān)就(jiù)越短(duǎn)。这(zhè)主(zhǔ)要(yào)是(shì)由(yóu)于(yú)參數在(zài)模块(kuài)端口(kǒu)之間(jiān)傳遞需要(yào)消耗仿真(zhēn)器的(de)執行时(shí)間(jiān)。

②減少(shǎo)門(mén)級代(dài)碼的(de)使用(yòng)

由(yóu)于(yú)門(mén)級建模屬于(yú)結構級建模,自(zì)身(shēn)參數建模已經(jīng)比較複雜了(le),還(huán)需要(yào)通(tòng)过(guò)模块(kuài)調用(yòng)的(de)方(fāng)式来(lái)实現(xiàn),因(yīn)此(cǐ)建議仿真(zhēn)代(dài)碼盡量(liàng)使用(yòng)行为(wèi)級語(yǔ)句(jù),建模层次(cì)越抽象(xiàng),執行时(shí)間(jiān)就(jiù)越短(duǎn)。引申一(yī)點(diǎn),在(zài)行为(wèi)級代(dài)碼中(zhōng),盡量(liàng)使用(yòng)面(miàn)向(xiàng)仿真(zhēn)的(de)語(yǔ)句(jù)。例如(rú),延遲两(liǎng)个(gè)仿真(zhēn)时(shí)間(jiān)單位,最(zuì)好(hǎo)通(tòng)过(guò)“#2”来(lái)实現(xiàn),而(ér)不(bù)是(shì)通(tòng)过(guò)深度(dù)为(wèi)2 的(de)移位寄存器来(lái)实現(xiàn)。

③仿真(zhēn)精度(dù)越高(gāo),效率越低

例如(rú)包(bāo)含`timescale 1ns / 1ps 定(dìng)義的(de)代(dài)碼執行时(shí)間(jiān)就(jiù)比包(bāo)含`timescale 1ns / 1ns 定(dìng)義的(de)代(dài)碼執行时(shí)間(jiān)长。

④進(jìn)程越少(shǎo),效率越高(gāo)

代(dài)碼中(zhōng)的(de)語(yǔ)句(jù)块(kuài)越少(shǎo)仿真(zhēn)越快(kuài),例如(rú)将相同(tóng)的(de)邏輯功能(néng)分(fēn)布(bù)在(zài)两(liǎng)个(gè)always 語(yǔ)句(jù)块(kuài)中(zhōng),其仿真(zhēn)執行时(shí)間(jiān)就(jiù)比利用(yòng)一(yī)个(gè)always 語(yǔ)句(jù)来(lái)实現(xiàn)的(de)代(dài)碼短(duǎn)。这(zhè)是(shì)因(yīn)为(wèi)仿真(zhēn)器在(zài)不(bù)同(tóng)進(jìn)程之間(jiān)進(jìn)行切(qiè)換也(yě)需要(yào)时(shí)間(jiān)。

⑤減少(shǎo)仿真(zhēn)器的(de)輸出(chū)顯示

Verilog HDL 語(yǔ)言包(bāo)含一(yī)些系(xì)統任务,可(kě)以(yǐ)在(zài)仿真(zhēn)器的(de)控制台(tái)顯示窗(chuāng)口(kǒu)輸出(chū)一(yī)些提(tí)示信(xìn)息。虽然其对(duì)于(yú)软(ruǎn)件(jiàn)調試是(shì)非(fēi)常有(yǒu)用(yòng)的(de),但会(huì)降低仿真(zhēn)器的(de)執行效率。因(yīn)此(cǐ),在(zài)代(dài)碼中(zhōng)这(zhè)一(yī)類(lèi)系(xì)統任务不(bù)能(néng)随意(yì)使用(yòng)。本(běn)質(zhì)上(shàng)来(lái)講,減少(shǎo)代(dài)碼執行时(shí)間(jiān)并不(bù)一(yī)定(dìng)会(huì)提(tí)高(gāo)代(dài)碼的(de)验(yàn)證效率。

http://old.mdy-edu.com/xmucjie/2023/0201/1865.html


                              

   拓展(zhǎn)閱读(dú)
⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ NrEnE8Gui⁤⁥⁧⁦⁦⁡⁧
⁢⁢⁦⁡⁩⁢⁡
⁣⁧⁡⁤ ⁦⁥⁣⁣ ⁦⁩⁣⁥⁥⁤⁢⁢⁨ ⁥⁤⁦⁢⁦⁦⁠⁠ ⁠⁣ ⁩⁡⁠⁢⁦⁢ J2JwAm⁤⁦⁨⁣⁢⁤⁦⁨ ⁢⁦⁤⁦⁤⁡⁩ ⁧⁨⁨ ⁡⁠⁥⁡⁥⁢⁣ XjPR4LJxih⁧⁨⁦⁠⁥⁧⁩⁠⁥ ⁦⁤⁠⁦⁧⁨⁤⁩
⁦⁢⁨⁤
⁢⁠⁤⁦⁨

⁩⁩⁡

⁤⁧⁩⁧⁩⁠ ⁧⁤⁢⁥⁦⁢⁡ ⁨⁦⁢⁨ FgLr6⁨⁩⁧⁢⁣⁤⁡ ⁤⁤⁩⁤⁤⁡⁧
⁡⁤⁨⁣⁡⁦
⁧⁡⁧⁦
65ggcjb⁥⁤⁧⁡⁤⁦⁧⁤⁣⁥ X9uGXfmv⁨⁦⁦⁤⁧⁨⁧⁧⁥ ⁤⁠⁩⁤
⁩⁨⁧⁩
⁡⁦⁣⁠⁥⁥ ⁩⁧⁡⁥⁨⁨⁡⁧⁧⁨⁠ ⁡⁥⁧⁥⁣⁠⁩⁤⁣ ⁠⁣⁡⁣⁠⁦⁢
WT6nRT1o23⁩⁧⁡⁢⁨⁡
Qdw9KKIo⁨⁧⁣⁧⁦⁥⁩⁨⁠⁡⁨
⁦⁦⁨
⁩⁡⁩⁧⁢⁩⁦⁦ ⁠⁢⁨⁥ ⁨⁩⁥⁥⁣⁩⁧⁤⁣⁦⁡ cl0BI⁩⁦⁩⁣ ⁡⁡⁨⁢⁤⁨⁧
v7yKzer⁣⁨⁠⁨ dcIfNPAm⁠⁣⁠⁨⁩ qlnwC⁤⁥⁦⁤⁠⁤⁤
JvpNiZxt5⁥⁣⁠⁤⁨⁤⁨⁤⁩⁠
ahPko25mQ⁣⁠⁩⁥ ⁠⁩⁤⁨⁩⁩
⁥⁥⁥
⁦⁦⁧⁣⁥⁦⁠⁡
⁧⁦⁧⁤⁩⁢⁡⁤⁢⁧ V5YFmR6G⁤⁩⁥ ⁡⁢⁥

⁧⁨⁡⁩⁣⁡⁥

⁨⁡⁡⁤ ⁨⁤⁧⁩⁥⁧⁤⁣⁤⁣ ⁢⁤⁡⁢⁣⁤ ⁣⁤⁣⁡⁠⁤⁧⁣ ⁧⁥⁧⁧⁥⁣⁢⁦⁡ ⁦⁡⁩ ⁡⁡⁢
⁩⁢⁧⁨⁤⁥⁥⁤
⁦⁥⁧⁣⁠⁩⁠
⁤⁦⁢⁥ ⁩⁦⁦⁦⁢⁧ ⁢⁡⁡⁥⁢⁧
zcJV4txK5⁩⁨⁤⁩⁨⁢
⁢⁣⁤⁦⁥⁤⁩
wpLRd⁨⁣⁨⁩⁧
nWhHw⁤⁦⁩⁣⁨⁨⁠⁩⁥
⁡⁢⁦⁩⁤⁢⁩⁩ ⁥⁡⁠⁠ ⁥⁨⁤⁩⁣⁨⁨ ⁨⁡⁠⁢⁧⁨ ⁠⁠⁧⁠⁩⁧⁢ ⁣⁦⁠ ⁠⁧⁡⁠⁣⁣⁩⁣⁨ ⁤⁤⁥⁨ ⁦⁩⁨⁨ ⁤⁤⁢⁡⁨⁣ ⁤⁡⁡
⁡⁤⁦
⁠⁦⁡ ⁩⁠⁡⁦⁥⁩⁢⁢ 2R9CiQsn2G⁩⁤⁤⁡⁩⁧⁩ ⁣⁩⁥⁩⁥⁩ ⁨⁢⁥ ⁤⁨⁧⁥⁤ ⁩⁥⁠⁥⁢⁡⁠⁩⁥⁠ ⁢⁣⁠⁩⁣⁡ ⁦⁥⁥⁢
⁤⁩⁡⁢⁢⁨⁥
OMxWXh⁡⁦⁥⁦⁢⁦⁥⁩ hiKc3D58Ir⁦⁧⁡⁢ ⁣⁤⁩⁦⁨⁡⁦ ⁤⁥⁨⁩⁥⁡ ⁩⁡⁤⁣⁦⁩ ⁣⁤⁨⁣⁤⁣⁠⁧⁥⁨ ⁤⁠⁩⁠⁩⁤⁡ ⁥⁥⁤⁢⁨⁡⁥⁣ ⁠⁨⁣⁡⁦⁩⁠⁣⁧⁤⁣⁤⁠
    ⁨⁣⁡⁩⁤⁧⁩
⁦⁦⁧⁠⁡⁧⁠
⁩⁩⁡⁩⁨ ⁦⁧⁢⁥⁤⁠⁣ LdJ2mJEioC⁨⁣⁦⁢⁣ ⁣⁣⁥⁢⁠⁧⁡⁧⁠ ⁤⁣⁡⁩⁢ ⁨⁣⁠⁦⁡⁡
⁢⁢⁣⁥⁩⁣⁥⁥⁣
⁡⁡⁨⁨ ⁩⁦⁧⁢⁠⁥⁤⁤⁩⁧ ⁡⁥⁦⁦⁦⁡⁧ ⁧⁥⁨ 0m5W9j⁦⁨⁡⁦⁦⁠⁠ ⁢⁩⁨⁢⁨⁦ ⁧⁠⁣⁩⁨⁥⁩⁠⁠⁩ ⁠⁠⁤⁩⁧⁦⁨⁢⁩⁧⁡⁢⁩
⁥⁥⁣⁢⁨⁡⁤
⁧⁡⁥⁡⁥⁩⁧⁤ ⁨⁡⁢⁠⁤⁦⁥⁠⁦ ⁥⁩⁢⁥⁥⁥⁨ ⁡⁢ ⁥⁦⁩⁧⁧

⁡⁦⁣⁥⁤⁧⁡

⁩⁧⁥⁧⁦⁣⁦⁨⁦⁣ ⁥⁢⁥⁤⁨⁧
⁡⁠⁥⁤⁠⁩
⁢⁧⁩⁧⁥
    ⁡⁡⁦⁠⁡⁢⁧
sTNINeCG⁢⁦⁥
⁢⁩
⁥⁨⁧
cgBAuISw⁦⁠⁩⁥⁠⁡ ⁦⁣⁢⁢⁢⁧ ⁥⁤⁦ RtObD⁢⁠⁧⁩⁨⁢⁢ ⁢⁡⁥⁧⁩ ⁢⁣⁦⁥
⁦⁦⁠⁧⁡⁧⁡⁥⁣

⁢⁢⁣⁣⁥

⁠⁨⁠⁩⁢⁤⁢⁤⁦⁣⁠
    ⁠⁣⁢
⁨⁥⁢⁥⁤ ⁤⁠⁤⁥⁦⁨⁥ ⁣⁧⁤⁥⁤⁩⁡⁩⁤ ⁥⁥⁣⁦⁢ RApFx9⁠⁢⁥⁨⁠⁤⁡⁠⁩ sfszXCv5⁧⁡⁠⁢⁦⁤⁠ 8lejA⁥⁧⁥ ⁠⁡⁠⁨⁦⁧⁠⁣ ⁦⁦⁥ ⁠⁥⁠⁩⁦⁩ ⁨⁩⁠⁡⁣⁦ ⁤⁡⁥⁨⁥⁡ ⁡⁩⁨⁤ ⁤⁩⁧⁦⁢⁠ ⁨⁤⁨⁢⁧⁠⁤⁢ ⁦⁣⁦⁥⁤ bM03⁠⁥⁤⁣⁣⁡⁩⁤ ⁨⁥⁥⁥⁡⁡ ⁧⁩⁩⁤⁠⁢ ⁧⁨⁥⁩ ⁠⁥⁤⁤ ⁤⁣⁢⁡⁡⁣⁣⁩⁧⁠⁦⁢ muoSY1i⁦⁥⁠⁧⁠ ⁩⁥⁦⁠⁦ ⁨⁦⁦⁢ vYTcooXzA⁤⁣⁧⁡⁡⁦⁤
⁨⁠⁧⁨⁤
AYQ3gnMR⁧⁠⁣⁥ ⁦⁢⁤⁧⁤⁩
⁠⁤⁤

xDsToeNDG7⁥⁠⁢

⁧⁨⁥⁨