⁩⁣⁩⁨ ⁩⁤⁢⁢⁢⁥⁩ ⁥⁣⁦⁡ ⁣⁤⁨ ⁡⁨⁠⁤⁠ ⁦⁧⁡⁤⁣⁡⁡⁨⁤ 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ī)

【案(àn)例】PWM流水(shuǐ)燈(dēng)設計(jì)

發(fà)布(bù)时(shí)間(jiān):2021-06-16   作者(zhě):admin 浏覽量(liàng):
PWM流水(shuǐ)燈(dēng)設計(jì)

--作者(zhě):小黑(hēi)同(tóng)学
【上(shàng)板現(xiàn)象(xiàng)】

PWM流水(shuǐ)燈(dēng)在(zài)MP801的(de)上(shàng)板現(xiàn)象(xiàng)(點(diǎn)擊跳轉(zhuǎn)明(míng)德揚論壇观看(kàn))



PWM流水(shuǐ)燈(dēng)在(zài)點(diǎn)撥開(kāi)發(fà)板的(de)上(shàng)板現(xiàn)象(xiàng)
(點(diǎn)擊跳轉(zhuǎn)明(míng)德揚論壇观看(kàn))



PWM流水(shuǐ)燈(dēng)在(zài)实验(yàn)箱的(de)上(shàng)板現(xiàn)象(xiàng)(點(diǎn)擊跳轉(zhuǎn)明(míng)德揚論壇观看(kàn))



【設計(jì)教程】

1.1 總(zǒng)體(tǐ)設計(jì)

1.1.1 概述

脈沖宽(kuān)度(dù)調制技術(shù)(Pulse WidthModelationPWM)是(shì)利用(yòng)微处理器/FPGA的(de)數字(zì)輸出(chū)对(duì)模拟電(diàn)路(lù)進(jìn)行控制的(de)一(yī)種(zhǒng)有(yǒu)效技術(shù),其廣泛應(yìng)用(yòng)于(yú)测量(liàng)、通(tòng)信(xìn)、功率控制與(yǔ)變(biàn)換等衆多(duō)領域。PWM數字(zì)信(xìn)号(hào)從处理器到(dào)被(bèi)控系(xì)統都采用(yòng)數字(zì)形式,无需進(jìn)行數模轉(zhuǎn)換。航模中(zhōng)的(de)控制信(xìn)号(hào)大多(duō)是(shì)PWM信(xìn)号(hào),比如(rú)FUTABAJR等舵機(jī)的(de)控制都采用(yòng)PWM方(fāng)式,發(fà)射機(jī)給(gěi)接收(shōu)機(jī)輸送脈沖後(hòu)接收(shōu)機(jī)就(jiù)会(huì)控制舵機(jī)進(jìn)行旋轉(zhuǎn)。舉个(gè)例子,假定(dìng)基礎脈宽(kuān)是(shì)100ms,當發(fà)射機(jī)的(de)脈宽(kuān)增大(如(rú)增加到(dào)150ms)时(shí)接收(shōu)機(jī)就(jiù)控制舵機(jī)正(zhèng)向(xiàng)旋轉(zhuǎn);反(fǎn)之發(fà)射機(jī)的(de)脈宽(kuān)減小(如(rú)減小到(dào)50ms)时(shí),接收(shōu)機(jī)就(jiù)控制舵機(jī)逆向(xiàng)旋轉(zhuǎn)。

PWM是(shì)一(yī)種(zhǒng)对(duì)模拟信(xìn)号(hào)電(diàn)平進(jìn)行數字(zì)編碼的(de)方(fāng)法。通(tòng)过(guò)使用(yòng)高(gāo)分(fēn)辨率計(jì)數器,对(duì)方(fāng)波(bō)的(de)占空比進(jìn)行調制,從而(ér)对(duì)一(yī)个(gè)具體(tǐ)模拟信(xìn)号(hào)的(de)電(diàn)平進(jìn)行編碼。由(yóu)于(yú)在(zài)給(gěi)定(dìng)的(de)任何时(shí)刻,滿幅值的(de)直(zhí)流供電(diàn)只(zhī)存在(zài)有(yǒu)(ON)和(hé)无(OFF)两(liǎng)種(zhǒng)狀态,因(yīn)此(cǐ)PWM信(xìn)号(hào)仍然是(shì)數字(zì)信(xìn)号(hào)。電(diàn)壓或(huò)電(diàn)流源是(shì)以(yǐ)一(yī)種(zhǒng)通(tòng)(ON)或(huò)斷(OFF)的(de)重(zhòng)複脈沖序列被(bèi)加到(dào)模拟負载上(shàng)去(qù)的(de)。直(zhí)流供電(diàn)被(bèi)加到(dào)負载上(shàng)的(de)时(shí)候为(wèi)“通(tòng)”,負载供電(diàn)被(bèi)斷開(kāi)的(de)时(shí)候为(wèi)“斷”。只(zhī)要(yào)有(yǒu)足够的(de)带(dài)宽(kuān),任何模拟值都可(kě)以(yǐ)使用(yòng)PWM進(jìn)行編碼。

通(tòng)俗来(lái)说(shuō),PWM是(shì)連(lián)續的(de)、具有(yǒu)一(yī)定(dìng)比例占空比的(de)脈沖信(xìn)号(hào),可(kě)以(yǐ)通(tòng)过(guò)控制占空比来(lái)对(duì)其進(jìn)行改變(biàn)。簡單来(lái)说(shuō),可(kě)以(yǐ)認为(wèi)PWM就(jiù)是(shì)一(yī)種(zhǒng)方(fāng)波(bō),如(rú)图(tú)所(suǒ)示是(shì)一(yī)个(gè)周期(qī)为(wèi)10ms,高(gāo)電(diàn)平为(wèi)6ms,低電(diàn)平时(shí)間(jiān)为(wèi)4ms的(de)PWM,其占空比(高(gāo)電(diàn)平时(shí)間(jiān)占整个(gè)周期(qī)的(de)比例)为(wèi)60%

PWM波(bō)形图(tú)


發(fà)光(guāng)二(èr)极(jí)管(guǎn)簡稱为(wèi)LED,是(shì)一(yī)種(zhǒng)常用(yòng)的(de)發(fà)光(guāng)器件(jiàn),通(tòng)过(guò)電(diàn)子與(yǔ)空穴複合釋放(fàng)能(néng)量(liàng)發(fà)光(guāng),它(tā)在(zài)照明(míng)領域應(yìng)用(yòng)廣泛。發(fà)光(guāng)二(èr)极(jí)管(guǎn)可(kě)高(gāo)效的(de)将電(diàn)能(néng)轉(zhuǎn)化(huà)为(wèi)光(guāng)能(néng),在(zài)現(xiàn)代(dài)社会(huì)具有(yǒu)廣泛的(de)用(yòng)途,如(rú)照明(míng)、平板顯示、醫療器件(jiàn)等。可(kě)通(tòng)过(guò)高(gāo)低電(diàn)平的(de)變(biàn)化(huà)来(lái)控制LED燈(dēng)的(de)明(míng)滅狀态,當輸出(chū)信(xìn)号(hào)为(wèi)低電(diàn)平时(shí),LED燈(dēng)亮(liàng),反(fǎn)之,當輸出(chū)信(xìn)号(hào)为(wèi)高(gāo)電(diàn)平时(shí),LED燈(dēng)滅。因(yīn)此(cǐ)可(kě)通(tòng)过(guò)改變(biàn)PWM波(bō)形的(de)占空比,来(lái)控制LED燈(dēng)亮(liàng)滅的(de)时(shí)間(jiān),當有(yǒu)多(duō)个(gè)LED燈(dēng)的(de)时(shí)候,通(tòng)过(guò)不(bù)同(tóng)的(de)PWM波(bō)形来(lái)控制不(bù)同(tóng)的(de)LED燈(dēng),就(jiù)可(kě)以(yǐ)産生(shēng)各(gè)種(zhǒng)各(gè)樣(yàng)不(bù)同(tóng)的(de)效果(guǒ)。



1.1.2 設計(jì)目标(biāo)

本(běn)模块(kuài)産生(shēng)8个(gè)不(bù)同(tóng)的(de)PWM脈沖,控制8个(gè)LED燈(dēng)點(diǎn)亮(liàng)不(bù)同(tóng)的(de)时(shí)間(jiān),從而(ér)达(dá)到(dào)流水(shuǐ)燈(dēng)的(de)效果(guǒ)。每个(gè)脈沖周期(qī)为(wèi)10s,占空比從10%~80%。上(shàng)電(diàn)後(hòu),led0點(diǎn)亮(liàng)1s,熄滅9s;再點(diǎn)亮(liàng)1s,熄滅9s,……,依次(cì)不(bù)斷循环(huán)。led1~led7與(yǔ)led0類(lèi)似,分(fēn)别點(diǎn)亮(liàng)2s~8s,其他(tā)时(shí)候都是(shì)熄滅的(de)。



1.1.3信(xìn)号(hào)列表(biǎo)
  
信(xìn)号(hào)名
  
接口(kǒu)方(fāng)向(xiàng)
定(dìng)義
clk
輸入(rù)
系(xì)統时(shí)鐘(zhōng),50Mhz
rst_n
輸入(rù)
低電(diàn)平複位信(xìn)号(hào)
led
輸出(chū)
8位led燈(dēng)輸出(chū)信(xìn)号(hào)


1.1.4 設計(jì)思(sī)路(lù)

根(gēn)據(jù)題(tí)目功能(néng)要(yào)求可(kě)知,産生(shēng)的(de)8个(gè)不(bù)同(tóng)的(de)PWM脈沖的(de)周期(qī)都是(shì)10秒(miǎo)(s),由(yóu)此(cǐ)我(wǒ)们(men)可(kě)以(yǐ)提(tí)出(chū)两(liǎng)个(gè)計(jì)數器的(de)架構,如(rú)下(xià)图(tú)所(suǒ)示。



該架構由(yóu)两(liǎng)个(gè)計(jì)數器組成(chéng):时(shí)鐘(zhōng)計(jì)數器cnt_1s和(hé)周期(qī)計(jì)數器cnt_10s

时(shí)鐘(zhōng)計(jì)數器cnt_1s:用(yòng)于(yú)計(jì)算1秒(miǎo)的(de)时(shí)鐘(zhōng)个(gè)數,加一(yī)条(tiáo)件(jiàn)为(wèi)1,表(biǎo)示一(yī)直(zhí)計(jì)數;結束(shù)条(tiáo)件(jiàn)为(wèi)50000000,表(biǎo)示數到(dào)1秒(miǎo)就(jiù)清(qīng)零(líng)。

周期(qī)計(jì)數器cnt_10s:用(yòng)于(yú)对(duì)1秒(miǎo)進(jìn)行計(jì)數,加一(yī)条(tiáo)件(jiàn)为(wèi)end_cnt_1s,表(biǎo)示數到(dào)1秒(miǎo)就(jiù)加1;結束(shù)条(tiáo)件(jiàn)为(wèi)10,表(biǎo)示數完10秒(miǎo)就(jiù)清(qīng)零(líng)。

至(zhì)此(cǐ),我(wǒ)们(men)就(jiù)将这(zhè)个(gè)練習的(de)計(jì)數器架構設計(jì)出(chū)来(lái)了(le)。

下(xià)面(miàn)是(shì)計(jì)數器的(de)代(dài)碼。

  
always @(posedge clk or negedgerst_n)begin
  
     if(!rst_n)begin
  
         cnt_1s <= 0;
  
     end
  
     else if(add_cnt_1s)begin
  
         if(end_cnt_1s)
  
             cnt_1s <= 0;
  
         else
  
             cnt_1s <= cnt_1s + 1;
  
     end
  
end
  
  
assign add_cnt_1s = 1;
  
assign end_cnt_1s = add_cnt_1s &&  cnt_1s==50_000_000 -1 ;
  
  
  
  
  
always @(posedge clk or negedgerst_n)begin  
  
     if(!rst_n)begin
  
         cnt_10s <= 0;
  
     end
  
     else if(add_cnt_10s)begin
  
         if(end_cnt_10s)
  
             cnt_10s <= 0;
  
         else
  
             cnt_10s <= cnt_10s + 1;
  
     end
  
end
  
  
assign add_cnt_10s = end_cnt_1s;
  
assign end_cnt_10s = add_cnt_10s  && cnt_10s==10-1 ;
  


下(xià)面(miàn)我(wǒ)们(men)開(kāi)始設計(jì)輸出(chū)信(xìn)号(hào)led,在(zài)設計(jì)这(zhè)些信(xìn)号(hào)的(de)时(shí)候,我(wǒ)们(men)只(zhī)需要(yào)關(guān)注他(tā)的(de)變(biàn)化(huà)點(diǎn),也(yě)就(jiù)是(shì)0變(biàn)11變(biàn)0的(de)點(diǎn)。



以(yǐ)led0的(de)變(biàn)化(huà)为(wèi)例,上(shàng)電(diàn)後(hòu),led[0]點(diǎn)亮(liàng)1s,熄滅9s,再點(diǎn)亮(liàng)1s,熄滅9s。也(yě)就(jiù)是(shì)數到(dào)1秒(miǎo)时(shí),即add_cnt_10s && cnt_10s==1-1时(shí),led0由(yóu)0變(biàn)1。當數到(dào)10秒(miǎo)时(shí),即end_cnt_10s时(shí),led[0]由(yóu)1變(biàn)0


Led[1]~led[7]也(yě)是(shì)同(tóng)樣(yàng),即:

上(shàng)電(diàn)後(hòu),led[1]點(diǎn)亮(liàng)2s,熄滅8s,再點(diǎn)亮(liàng)2s,熄滅8s。也(yě)就(jiù)是(shì)數到(dào)2秒(miǎo)时(shí),即add_cnt_10s &&cnt_10s==2-1时(shí),led[1]由(yóu)0變(biàn)1。當數到(dào)10秒(miǎo)时(shí),即end_cnt_10s时(shí),led[1]由(yóu)1變(biàn)0

上(shàng)電(diàn)後(hòu),led[2]點(diǎn)亮(liàng)3s,熄滅7s,再點(diǎn)亮(liàng)3s,熄滅7s。也(yě)就(jiù)是(shì)數到(dào)3秒(miǎo)时(shí),即add_cnt_10s &&cnt_10s==3-1时(shí),led[2]由(yóu)0變(biàn)1。當數到(dào)10秒(miǎo)时(shí),即end_cnt_10s时(shí),led[2]由(yóu)1變(biàn)0

上(shàng)電(diàn)後(hòu),led[3]點(diǎn)亮(liàng)4s,熄滅6s,再點(diǎn)亮(liàng)4s,熄滅6s。也(yě)就(jiù)是(shì)數到(dào)4秒(miǎo)时(shí),即add_cnt_10s &&cnt_10s==4-1时(shí),led[3]由(yóu)0變(biàn)1。當數到(dào)10秒(miǎo)时(shí),即end_cnt_10s时(shí),led[3]由(yóu)1變(biàn)0

上(shàng)電(diàn)後(hòu),led[4]點(diǎn)亮(liàng)5s,熄滅5s,再點(diǎn)亮(liàng)5s,熄滅5s。也(yě)就(jiù)是(shì)數到(dào)5秒(miǎo)时(shí),即add_cnt_10s &&cnt_10s==5-1时(shí),led[4]由(yóu)0變(biàn)1。當數到(dào)10秒(miǎo)时(shí),即end_cnt_10s时(shí),led[4]由(yóu)1變(biàn)0

上(shàng)電(diàn)後(hòu),led[5]點(diǎn)亮(liàng)6s,熄滅4s,再點(diǎn)亮(liàng)6s,熄滅4s。也(yě)就(jiù)是(shì)數到(dào)6秒(miǎo)时(shí),即add_cnt_10s &&cnt_10s==6-1时(shí),led[5]由(yóu)0變(biàn)1。當數到(dào)10秒(miǎo)时(shí),即end_cnt_10s时(shí),led[5]由(yóu)1變(biàn)0

上(shàng)電(diàn)後(hòu),led[6]點(diǎn)亮(liàng)7s,熄滅3s,再點(diǎn)亮(liàng)7s,熄滅3s。也(yě)就(jiù)是(shì)數到(dào)7秒(miǎo)时(shí),即add_cnt_10s &&cnt_10s==7-1时(shí),led[6]由(yóu)0變(biàn)1。當數到(dào)10秒(miǎo)时(shí),即end_cnt_10s时(shí),led[6]由(yóu)1變(biàn)0

上(shàng)電(diàn)後(hòu),led[7]點(diǎn)亮(liàng)8s,熄滅2s,再點(diǎn)亮(liàng)8s,熄滅2s。也(yě)就(jiù)是(shì)數到(dào)8秒(miǎo)时(shí),即add_cnt_10s &&cnt_10s==8-1时(shí),led[7]由(yóu)0變(biàn)1。當數到(dào)10秒(miǎo)时(shí),即end_cnt_10s时(shí),led[7]由(yóu)1變(biàn)0

由(yóu)此(cǐ)便可(kě)以(yǐ)将所(suǒ)有(yǒu)的(de)led信(xìn)号(hào)設計(jì)出(chū)来(lái)。

下(xià)面(miàn)是(shì)led的(de)代(dài)碼。

  
always   @(posedge clk or negedgerst_n)begin
  
     if(rst_n==1'b0)begin
  
led[0] <= 0;
  
     end
  
     else if(end_cnt_10s)begin
  
led[0] <= 0;
  
     end
  
     else if(add_cnt_10s && cnt_10s==1-1)begin
  
led[0] <= 1;
  
     end
  
end
  
  
  
  
  
always   @(posedge clk or negedgerst_n)begin
  
     if(rst_n==1'b0)begin
  
led[1] <= 0;
  
     end
  
     else if(end_cnt_10s)begin
  
led[1] <= 0;
  
     end
  
     else if(add_cnt_10s && cnt_10s==2-1)begin
  
led[1] <= 1;
  
     end
  
end
  
  
  
  
  
always   @(posedge clk or negedgerst_n)begin
  
     if(rst_n==1'b0)begin
  
led[2] <= 0;
  
     end
  
     else if(end_cnt_10s)begin
  
led[2] <= 0;
  
     end
  
     else if(add_cnt_10s && cnt_10s==3-1)begin
  
led[2] <= 1;
  
     end
  
end
  
  
  
  
  
always   @(posedge clk or negedgerst_n)begin
  
     if(rst_n==1'b0)begin
  
led[3] <= 0;
  
     end
  
     else if(end_cnt_10s)begin
  
led[3] <= 0;
  
     end
  
     else if(add_cnt_10s && cnt_10s==4-1)begin
  
led[3] <= 1;
  
     end
  
end
  
  
  
  
  
always   @(posedge clk or negedgerst_n)begin
  
     if(rst_n==1'b0)begin
  
led[4] <= 0;
  
     end
  
     else if(end_cnt_10s)begin
  
led[4] <= 0;
  
     end
  
     else if(add_cnt_10s && cnt_10s==5-1)begin
  
led[4] <= 1;
  
     end
  
end
  
  
  
  
  
always   @(posedge clk or negedgerst_n)begin
  
     if(rst_n==1'b0)begin
  
led[5] <= 0;
  
     end
  
     else if(end_cnt_10s)begin
  
led[5] <= 0;
  
     end
  
     else if(add_cnt_10s && cnt_10s==6-1)begin
  
led[5] <= 1;
  
     end
  
end
  
  
  
  
  
always   @(posedge clk or negedgerst_n)begin
  
     if(rst_n==1'b0)begin
  
led[6] <= 0;
  
     end
  
     else if(end_cnt_10s)begin
  
led[6] <= 0;
  
     end
  
     else if(add_cnt_10s && cnt_10s==7-1)begin
  
led[6] <= 1;
  
     end
  
end
  
  
  
  
  
always   @(posedge clk or negedgerst_n)begin
  
     if(rst_n==1'b0)begin
  
led[7] <= 0;
  
     end
  
     else if(end_cnt_10s)begin
  
led[7] <= 0;
  
     end
  
     else if(add_cnt_10s && cnt_10s==8-1)begin
  
led[7] <= 1;
  
     end
  
end  
  


1.1.5參考設計(jì)代(dài)碼

  
module pwmled(
  
clk    ,
  
rst_n  ,
  
     led     
  
);
  
  
input             clk        ;
  
input             rst_n       ;
  
output   [ 7:0]    led        ;
  
reg       [25:0]   cnt_1s      ;
  
wire             add_cnt_1s ;
  
wire             end_cnt_1s ;
  
reg      [ 7:0]    cnt_10s     ;
  
wire             add_cnt_10s;
  
wire             end_cnt_10s;
  
reg      [ 7:0]    led          ;
  
  
  
  
  
always @(posedge clk or negedgerst_n)begin
  
     if(!rst_n)begin
  
         cnt_1s <= 0;
  
    end
  
     else if(add_cnt_1s)begin
  
         if(end_cnt_1s)
  
             cnt_1s <= 0;
  
         else
  
             cnt_1s <= cnt_1s + 1;
  
     end
  
end
  
  
assign add_cnt_1s = 1;
  
assign end_cnt_1s = add_cnt_1s &&  cnt_1s==50_000_000 -1 ;
  
  
  
  
  
always @(posedge clk or negedgerst_n)begin  
  
     if(!rst_n)begin
  
         cnt_10s <= 0;
  
     end
  
     else if(add_cnt_10s)begin
  
         if(end_cnt_10s)
  
             cnt_10s <= 0;
  
         else
  
             cnt_10s <= cnt_10s + 1;
  
     end
  
end
  
  
assign add_cnt_10s = end_cnt_1s;
  
assign end_cnt_10s = add_cnt_10s  && cnt_10s==10-1 ;
  
  
  
  
  
always   @(posedge clk or negedgerst_n)begin
  
     if(rst_n==1'b0)begin
  
led[0] <= 0;
  
     end
  
     else if(end_cnt_10s)begin
  
led[0] <= 0;
  
     end
  
     else if(add_cnt_10s && cnt_10s==1-1)begin
  
led[0] <= 1;
  
     end
  
end
  
  
  
  
  
always   @(posedge clk or negedgerst_n)begin
  
     if(rst_n==1'b0)begin
  
led[1] <= 0;
  
     end
  
     else if(end_cnt_10s)begin
  
led[1] <= 0;
  
     end
  
     else if(add_cnt_10s && cnt_10s==2-1)begin
  
led[1] <= 1;
  
     end
  
end
  
  
  
  
  
always   @(posedge clk or negedgerst_n)begin
  
     if(rst_n==1'b0)begin
  
led[2] <= 0;
  
     end
  
     else if(end_cnt_10s)begin
  
led[2] <= 0;
  
     end
  
     else if(add_cnt_10s && cnt_10s==3-1)begin
  
led[2] <= 1;
  
     end
  
end
  
  
  
  
  
always   @(posedge clk or negedgerst_n)begin
  
     if(rst_n==1'b0)begin
  
led[3] <= 0;
  
     end
  
     else if(end_cnt_10s)begin
  
led[3] <= 0;
  
     end
  
     else if(add_cnt_10s && cnt_10s==4-1)begin
  
led[3] <= 1;
  
     end
  
end
  
  
  
  
  
always   @(posedge clk or negedgerst_n)begin
  
     if(rst_n==1'b0)begin
  
led[4] <= 0;
  
    end
  
     else if(end_cnt_10s)begin
  
led[4] <= 0;
  
     end
  
     else if(add_cnt_10s && cnt_10s==5-1)begin
  
led[4] <= 1;
  
     end
  
end
  
  
  
  
  
always   @(posedge clk or negedgerst_n)begin
  
     if(rst_n==1'b0)begin
  
led[5] <= 0;
  
     end
  
     else if(end_cnt_10s)begin
  
led[5] <= 0;
  
     end
  
     else if(add_cnt_10s && cnt_10s==6-1)begin
  
led[5] <= 1;
  
     end
  
end
  
  
  
  
  
always   @(posedge clk or negedgerst_n)begin
  
     if(rst_n==1'b0)begin
  
led[6] <= 0;
  
     end
  
     else if(end_cnt_10s)begin
  
led[6] <= 0;
  
     end
  
     else if(add_cnt_10s && cnt_10s==7-1)begin
  
led[6] <= 1;
  
     end
  
end
  
  
  
  
  
always   @(posedge clk or negedgerst_n)begin
  
     if(rst_n==1'b0)begin
  
led[7] <= 0;
  
     end
  
     else if(end_cnt_10s)begin
  
led[7] <= 0;
  
     end
  
     else if(add_cnt_10s && cnt_10s==8-1)begin
  
led[7] <= 1;
  
     end
  
end  
  
endmodule
  



1.2 效果(guǒ)和(hé)總(zǒng)結

  • 时(shí)間(jiān)經(jīng)过(guò)1秒(miǎo)之後(hòu)




  • 时(shí)間(jiān)經(jīng)过(guò)4秒(miǎo)的(de)时(shí)候





  • 时(shí)間(jiān)經(jīng)过(guò)8秒(miǎo)的(de)时(shí)候



看(kàn)上(shàng)面(miàn)的(de)現(xiàn)象(xiàng),可(kě)以(yǐ)發(fà)現(xiàn),跟設計(jì)目标(biāo)要(yào)求的(de)都是(shì)一(yī)樣(yàng)的(de),成(chéng)功完成(chéng)設計(jì)目标(biāo)。


我(wǒ)们(men)的(de)至(zhì)簡設計(jì)法和(hé)計(jì)數器模板在(zài)以(yǐ)上(shàng)的(de)設計(jì)中(zhōng)發(fà)揮了(le)至(zhì)關(guān)重(zhòng)要(yào)的(de)作用(yòng),使設計(jì)能(néng)够快(kuài)速準确完成(chéng)。本(běn)設計(jì)中(zhōng)的(de)led信(xìn)号(hào)的(de)代(dài)碼为(wèi)了(le)方(fāng)便理解(jiě),把8个(gè)led燈(dēng)分(fēn)開(kāi)写了(le),希望有(yǒu)興趣的(de)同(tóng)学可(kě)以(yǐ)将led的(de)代(dài)碼進(jìn)行簡化(huà),合成(chéng)一(yī)个(gè)always,想(xiǎng)不(bù)到(dào)也(yě)沒(méi)關(guān)系(xì),在(zài)講解(jiě)視頻中(zhōng)也(yě)有(yǒu)講述如(rú)何实現(xiàn)。


感(gǎn)興趣的(de)朋友也(yě)可(kě)以(yǐ)訪問(wèn)明(míng)德揚論壇(http://www.fpgabbs.cn/)進(jìn)行FPGA相關(guān)工程設計(jì)学習,也(yě)欢迎大家(jiā)在(zài)評論與(yǔ)我(wǒ)進(jìn)行讨論!

【設計(jì)教程下(xià)载】

 PWM流水(shuǐ)燈(dēng)V2.0.pdf (696.4 KB, 下(xià)载次(cì)數: 0)


【設計(jì)視頻教程】


http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=1041&page=1&extra=#pid1805(點(diǎn)擊鍊(liàn)接跳轉(zhuǎn)明(míng)德揚論壇观看(kàn))



【工程源碼】    01_PWM_waterfall_light.rar (8.23 KB, 下(xià)载次(cì)數: 0)


   拓展(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⁥⁠⁢

⁧⁨⁥⁨