本(běn)文(wén)为(wèi)明(míng)德揚原創及(jí)录(lù)用(yòng)文(wén)章(zhāng),轉(zhuǎn)载請注明(míng)出(chū)处!
本(běn)文(wén)的(de)文(wén)檔編号(hào):000800000013
本(běn)文(wén)檔沒(méi)有(yǒu)对(duì)應(yìng)的(de)視頻
1、本(běn)文(wén)是(shì)講解(jiě)了(le)如(rú)何使用(yòng)至(zhì)簡設計(jì)法来(lái)时(shí)序1位LED燈(dēng)間(jiān)隔1秒(miǎo),亮(liàng)N秒(miǎo)(其中(zhōng)N=1 .2. …. 9)的(de)功能(néng)
个(gè)人(rén)總(zǒng)結及(jí)感(gǎn)悟:
对(duì)于(yú)学習本(běn)案(àn)例,首先(xiān)要(yào)理解(jiě)案(àn)例的(de)頂层框架,再是(shì)理解(jiě)框架下(xià)面(miàn)的(de)邏輯,最(zuì)後(hòu)才是(shì)理解(jiě)代(dài)碼。这(zhè)一(yī)點(diǎn)对(duì)于(yú)自(zì)己動(dòng)手(shǒu)写代(dài)碼也(yě)很有(yǒu)幫助,畢竟写代(dài)碼就(jiù)是(shì)为(wèi)了(le)实現(xiàn)框架。再来(lái)说(shuō)说(shuō)本(běn)案(àn)例中(zhōng)的(de)代(dài)碼吧,本(běn)案(àn)例給(gěi)出(chū)的(de)代(dài)碼对(duì)于(yú)刚接觸FPGA的(de)人(rén)也(yě)许会(huì)有(yǒu)“这(zhè)代(dài)碼写的(de)太麻(má)煩了(le)吧!”“明(míng)明(míng)可(kě)以(yǐ)写成(chéng)49_999_999的(de)为(wèi)啥要(yào)写成(chéng)50_000_000-1呢?”之類(lèi)的(de)想(xiǎng)法,这(zhè)也(yě)是(shì)我(wǒ)刚接觸明(míng)德揚的(de)代(dài)碼时(shí)的(de)想(xiǎng)法。
後(hòu)来(lái)接觸多(duō)了(le),自(zì)己也(yě)開(kāi)始用(yòng)明(míng)得揚的(de)代(dài)碼規範写了(le)一(yī)些代(dài)碼,才慢(màn)慢(màn)覺得明(míng)德揚的(de)代(dài)碼規範挺好(hǎo)用(yòng)的(de),写出(chū)来(lái)的(de)代(dài)碼也(yě)通(tòng)俗易懂。而(ér)且这(zhè)些代(dài)碼也(yě)很方(fāng)便移植與(yǔ)修改,对(duì)于(yú)实現(xiàn)某些相似的(de)功能(néng)时(shí)也(yě)不(bù)用(yòng)自(zì)己再重(zhòng)新写代(dài)碼,可(kě)以(yǐ)直(zhí)接拿过(guò)来(lái)再修改一(yī)下(xià)就(jiù)行了(le)。
總(zǒng)的(de)来(lái)说(shuō),要(yào)想(xiǎng)学好(hǎo)FPGA需要(yào)從三(sān)个(gè)方(fāng)面(miàn)着手(shǒu):1、框架;2、規範;3、動(dòng)手(shǒu)做。这(zhè)三(sān)个(gè)方(fāng)面(miàn)做好(hǎo)了(le),那(nà)以(yǐ)後(hòu)自(zì)己做工程就(jiù)成(chéng)功一(yī)半了(le)。
設計(jì)目标(biāo):
使用(yòng)一(yī)个(gè)LED燈(dēng),实現(xiàn)閃爍燈(dēng)的(de)功能(néng)。工作时(shí)鐘(zhōng)50M,也(yě)就(jiù)是(shì)时(shí)鐘(zhōng)周期(qī)为(wèi)20ns。輸出(chū)低電(diàn)平时(shí),燈(dēng)亮(liàng);輸出(chū)高(gāo)電(diàn)平时(shí),燈(dēng)滅。
功能(néng)要(yào)求:
隔1秒(miǎo),亮(liàng)N秒(miǎo)。N的(de)變(biàn)化(huà)是(shì)1,2,3,……,9秒(miǎo)。然後(hòu)再次(cì)循环(huán)。
波(bō)形示意(yì)图(tú):

頂层信(xìn)号(hào)設計(jì):
工程共(gòng)需要(yào)三(sān)个(gè)信(xìn)号(hào),时(shí)鐘(zhōng)clk,複位rst_n和(hé)輸出(chū)信(xìn)号(hào)led。其中(zhōng)clk、rst_n是(shì)輸入(rù)信(xìn)号(hào),led是(shì)輸出(chū)信(xìn)号(hào),并且三(sān)个(gè)信(xìn)号(hào)都是(shì)1比特(tè)的(de)。
工程实現(xiàn)思(sī)路(lù):
從功能(néng)要(yào)求及(jí)波(bō)形图(tú)可(kě)知,需要(yào)一(yī)个(gè)計(jì)數器計(jì)數第(dì)N次(cì),需要(yào)一(yī)个(gè)計(jì)數器計(jì)數第(dì)N次(cì)需要(yào)持(chí)續的(de)时(shí)間(jiān)。本(běn)工程設計(jì)两(liǎng)个(gè)計(jì)數器cnt0,cnt1。cnt0用(yòng)于(yú)計(jì)數第(dì)N次(cì)需要(yào)持(chí)續的(de)时(shí)間(jiān),cnt1計(jì)數第(dì)N次(cì)。第(dì)1次(cì)时(shí),持(chí)續2秒(miǎo);第(dì)2次(cì)时(shí),持(chí)續3秒(miǎo);第(dì)N次(cì)时(shí),持(chí)續N+1秒(miǎo)。直(zhí)至(zhì)第(dì)9次(cì)結束(shù),又從第(dì)1次(cì)開(kāi)始循环(huán)。輸出(chū)信(xìn)号(hào)led同(tóng)时(shí)滿足cnt0計(jì)數器的(de)計(jì)數開(kāi)始信(xìn)号(hào)add_cnt0的(de)出(chū)現(xiàn)與(yǔ)cnt0計(jì)數到(dào)50_000_000-1这(zhè)两(liǎng)个(gè)条(tiáo)件(jiàn)时(shí)變(biàn)为(wèi)低電(diàn)平;在(zài)end_cnt0信(xìn)号(hào)出(chū)現(xiàn)时(shí)變(biàn)为(wèi)高(gāo)電(diàn)平,意(yì)味着在(zài)第(dì)N次(cì)計(jì)數中(zhōng)第(dì)1秒(miǎo)內(nèi)燈(dēng)滅,其餘时(shí)間(jiān)燈(dēng)亮(liàng)。
代(dài)碼实現(xiàn):
計(jì)數器cnt0
always@(posedgeclkor negedgerst_n)begin
if(rst_n)begin
cnt0<=0;
end
else if(add_cnt0)begin
if(end_cnt0)
cnt0<=0;
else
cnt0<=cnt0+1;
end
end
assign add_cnt0 = 1;
assign end_cnt0 = add_cnt0&&cnt0==x-1;
因(yīn)为(wèi)cnt0需要(yào)不(bù)停的(de)計(jì)數,永不(bù)停止,故計(jì)數開(kāi)始信(xìn)号(hào)add_cnt0一(yī)直(zhí)为(wèi)1。引入(rù)了(le)變(biàn)量(liàng)x,x为(wèi)要(yào)計(jì)數的(de)个(gè)數。比較計(jì)數器cnt1的(de)不(bù)同(tóng),從而(ér)賦予變(biàn)量(liàng)x不(bù)同(tóng)的(de)值。
cnt1計(jì)數器
always@(posedgeclkor negedgerst_n)begin
if(rst_n)begin
cnt1<=0;
end
elseif(add_cnt1)begin
if(end_cnt1)
cnt1<=0;
else
cnt1<=cnt1+1;
end
end
assignadd_cnt1 = end_cnt0;
assignend_cnt1 = add_cnt1&&cnt1==9-1;
當計(jì)數器cnt0計(jì)數結束(shù)时(shí)的(de)下(xià)一(yī)个(gè)时(shí)鐘(zhōng)节(jié)拍里(lǐ),使得cnt1計(jì)數加1。
led輸出(chū)信(xìn)号(hào)
always@(posedgeclkor negedgerst_n)begin
if(rst_n)begin
led<= 1;
end
elseif(add_cnt0 && cnt0 ==50_000_000-1)begin
led <= 0;
elseif(end_cnt0)begin
led <= 1;
end
end
led信(xìn)号(hào)在(zài)第(dì)N次(cì)計(jì)數时(shí),計(jì)數1秒(miǎo)後(hòu)燈(dēng)亮(liàng)。
信(xìn)号(hào)定(dìng)義:
always里(lǐ)面(miàn)的(de)信(xìn)号(hào)需要(yào)定(dìng)義为(wèi)reg型;assign的(de)信(xìn)号(hào)需要(yào)定(dìng)義为(wèi)wire型。另(lìng)外(wài)需要(yào)重(zhòng)點(diǎn)注意(yì)每个(gè)信(xìn)号(hào)的(de)位宽(kuān)。
注意(yì)事(shì)項:
具體(tǐ)編写代(dài)碼过(guò)程中(zhōng),需要(yào)注意(yì)以(yǐ)下(xià)三(sān)點(diǎn)。
1、要(yào)注意(yì)計(jì)數器的(de)計(jì)數結束(shù)条(tiáo)件(jiàn),例如(rú)工作时(shí)鐘(zhōng)是(shì)50M,計(jì)數1秒(miǎo)鐘(zhōng),那(nà)麼(me)計(jì)數範圍就(jiù)是(shì)0~49_999_999,千(qiān)万(wàn)要(yào)注意(yì)不(bù)能(néng)超出(chū)。
2、代(dài)碼一(yī)定(dìng)要(yào)規範,不(bù)然过(guò)段(duàn)时(shí)間(jiān)可(kě)能(néng)連(lián)自(zì)己都看(kàn)不(bù)懂。
3、要(yào)注意(yì)各(gè)个(gè)信(xìn)号(hào)的(de)位宽(kuān)。








