本(běn)文(wén)的(de)文(wén)檔編号(hào):001600000018
需要(yào)看(kàn)对(duì)應(yìng)的(de)視頻,請點(diǎn)擊視頻編号(hào):001600000100
1.至(zhì)簡原理與(yǔ)應(yìng)用(yòng)配套(tào)的(de)案(àn)例文(wén)檔
2.設計(jì)中(zhōng)只(zhī)需要(yào)使用(yòng)開(kāi)發(fà)板上(shàng)的(de)一(yī)个(gè)數碼管(guǎn)0来(lái)实現(xiàn)秒(miǎo)表(biǎo)功能(néng),具體(tǐ)为(wèi):複位後(hòu),數碼管(guǎn)0顯示數字(zì)0并持(chí)續1秒(miǎo);随後(hòu)顯示數字(zì)1并持(chí)續2秒(miǎo);然後(hòu)顯示數字(zì)2并持(chí)續3秒(miǎo);以(yǐ)此(cǐ)類(lèi)推,最(zuì)後(hòu)顯示數字(zì)9并持(chí)續10秒(miǎo)。之後(hòu)再次(cì)回(huí)到(dào)顯示數字(zì)0并持(chí)續1秒(miǎo)的(de)循环(huán)。
3. ALTERA入(rù)門(mén)学習案(àn)例文(wén)檔
第(dì)三(sān)篇(piān) FPGA至(zhì)簡設計(jì)項目实踐
第(dì)六(liù)章(zhāng) 秒(miǎo)表(biǎo)功能(néng)
第(dì)1节(jié) 項目背景
上(shàng)一(yī)章(zhāng)节(jié)中(zhōng)詳细(xì)的(de)講解(jiě)了(le)數碼管(guǎn)的(de)顯示原理和(hé)控制方(fāng)式,本(běn)章(zhāng)不(bù)再進(jìn)行贅述。通(tòng)过(guò)相關(guān)原理可(kě)知FPGA通(tòng)过(guò)控制數碼管(guǎn)的(de)对(duì)應(yìng)管(guǎn)脚,從而(ér)实現(xiàn)數碼管(guǎn)顯示的(de)控制。在(zài)这(zhè)一(yī)結論的(de)基礎上(shàng),本(běn)章(zhāng)将進(jìn)行更(gèng)深一(yī)步的(de)數碼管(guǎn)顯示設計(jì)。
在(zài)正(zhèng)式学習本(běn)設計(jì)之前(qián)先(xiān)来(lái)确定(dìng)一(yī)下(xià)設計(jì)的(de)功能(néng)目标(biāo)。在(zài)这(zhè)里(lǐ)再次(cì)強(qiáng)調明(míng)确設計(jì)目标(biāo)的(de)重(zhòng)要(yào)性(xìng),至(zhì)簡設計(jì)法旨在(zài)用(yòng)最(zuì)直(zhí)接簡潔的(de)方(fāng)法来(lái)進(jìn)行工程設計(jì),想(xiǎng)要(yào)达(dá)到(dào)这(zhè)一(yī)效果(guǒ),設計(jì)中(zhōng)的(de)每一(yī)个(gè)步驟和(hé)代(dài)碼都應(yìng)是(shì)有(yǒu)用(yòng)的(de)。只(zhī)有(yǒu)每一(yī)步操作都是(shì)为(wèi)了(le)最(zuì)終(zhōng)的(de)設計(jì)目标(biāo),才可(kě)以(yǐ)做到(dào)“最(zuì)直(zhí)接”,才能(néng)少(shǎo)走(zǒu)彎路(lù),而(ér)这(zhè)也(yě)是(shì)至(zhì)簡設計(jì)法的(de)特(tè)别之处。因(yīn)此(cǐ)在(zài)進(jìn)行設計(jì)前(qián)需要(yào)徹底理清(qīng)每一(yī)个(gè)設計(jì)目标(biāo),圍繞这(zhè)个(gè)設計(jì)目标(biāo)展(zhǎn)開(kāi)後(hòu)續的(de)每一(yī)个(gè)步驟設計(jì)。如(rú)果(guǒ)最(zuì)終(zhōng)想(xiǎng)要(yào)达(dá)到(dào)的(de)效果(guǒ)都无法确定(dìng),那(nà)麼(me)後(hòu)續的(de)讨論就(jiù)沒(méi)有(yǒu)任何的(de)意(yì)義。
開(kāi)發(fà)板上(shàng)有(yǒu) 8 位數碼管(guǎn),在(zài)本(běn)次(cì)設計(jì)中(zhōng)只(zhī)需要(yào)使用(yòng)1个(gè)數碼管(guǎn)(數碼管(guǎn)0)来(lái)实現(xiàn)秒(miǎo)表(biǎo)功能(néng),其具體(tǐ)設計(jì)效果(guǒ)为(wèi):複位後(hòu),數碼管(guǎn)0顯示數字(zì)0并持(chí)續1秒(miǎo);随後(hòu)顯示數字(zì)1并持(chí)續2秒(miǎo);然後(hòu)顯示數字(zì)2并持(chí)續3秒(miǎo);以(yǐ)此(cǐ)類(lèi)推,最(zuì)後(hòu)顯示數字(zì)9并持(chí)續10秒(miǎo)。之後(hòu)再次(cì)回(huí)到(dào)顯示數字(zì)0并持(chí)續1秒(miǎo)的(de)循环(huán)中(zhōng)。
秒(miǎo)表(biǎo)功能(néng)的(de)上(shàng)板效果(guǒ)如(rú)下(xià)图(tú)所(suǒ)示,想(xiǎng)要(yào)观看(kàn)上(shàng)板演示視頻效果(guǒ)可(kě)以(yǐ)登陸至(zhì)簡設計(jì)法官方(fāng)网(wǎng)站進(jìn)行学習:old.mdy-edu.com/xxxx。


图(tú)3.6-1秒(miǎo)表(biǎo)实現(xiàn)效果(guǒ)图(tú)
第(dì)3节(jié) 設計(jì)实現(xiàn)
本(běn)节(jié)会(huì)分(fēn)享詳细(xì)的(de)步驟與(yǔ)解(jiě)析,以(yǐ)便初学者(zhě)可(kě)以(yǐ)在(zài)学会(huì)原理的(de)情(qíng)況下(xià)掌握設計(jì)方(fāng)法。在(zài)学会(huì)每一(yī)个(gè)案(àn)例的(de)基礎上(shàng)希望同(tóng)学们(men)将設計(jì)思(sī)想(xiǎng)融会(huì)貫通(tòng),最(zuì)終(zhōng)可(kě)以(yǐ)掌握完成(chéng)独立完成(chéng)工程設計(jì)的(de)能(néng)力,可(kě)以(yǐ)将至(zhì)簡設計(jì)法運用(yòng)到(dào)今後(hòu)的(de)工作中(zhōng)去(qù)。如(rú)果(guǒ)已經(jīng)掌握了(le)原理、只(zhī)想(xiǎng)複習回(huí)顧設計(jì)步驟,也(yě)可(kě)以(yǐ)選擇直(zhí)接閱读(dú)第(dì)五(wǔ)节(jié)簡化(huà)版步驟進(jìn)行实操練習。請各(gè)位根(gēn)據(jù)个(gè)人(rén)的(de)实際情(qíng)況進(jìn)行選擇。
3.1 頂层信(xìn)号(hào)
新建目录(lù):D:mdy_bookmy_time,并在(zài)此(cǐ)目录(lù)中(zhōng),新建一(yī)个(gè)名为(wèi)my_time.v的(de)文(wén)件(jiàn)。用(yòng)GVIM打(dǎ)開(kāi)後(hòu)開(kāi)始編写代(dài)碼。在(zài)这(zhè)里(lǐ)建議初学者(zhě)按照本(běn)書(shū)提(tí)供的(de)路(lù)徑名以(yǐ)及(jí)文(wén)件(jiàn)名進(jìn)行設置,不(bù)要(yào)自(zì)行進(jìn)行修改。因(yīn)为(wèi)在(zài)更(gèng)改後(hòu)可(kě)能(néng)会(huì)出(chū)現(xiàn)中(zhōng)文(wén)路(lù)徑、空格路(lù)徑等非(fēi)法路(lù)徑的(de)問(wèn)題(tí),也(yě)可(kě)能(néng)会(huì)出(chū)現(xiàn)文(wén)件(jiàn)名更(gèng)改後(hòu)報錯的(de)現(xiàn)象(xiàng)。而(ér)对(duì)于(yú)初学者(zhě)来(lái)说(shuō),并不(bù)能(néng)很好(hǎo)的(de)發(fà)現(xiàn)并解(jiě)決問(wèn)題(tí)。因(yīn)此(cǐ)建議初学者(zhě)先(xiān)按照要(yào)求更(gèng)名保存,在(zài)進(jìn)行多(duō)个(gè)工程設計(jì),熟悉了(le)各(gè)个(gè)步驟後(hòu)再進(jìn)行更(gèng)名的(de)操作。在(zài)此(cǐ)不(bù)要(yào)想(xiǎng)當然,一(yī)时(shí)的(de)细(xì)心(xīn)可(kě)以(yǐ)避免後(hòu)續問(wèn)題(tí)的(de)出(chū)現(xiàn)。
分(fēn)析設計(jì)目标(biāo)可(kě)知,本(běn)次(cì)設計(jì)要(yào)实現(xiàn)的(de)功能(néng)是(shì)控制數碼管(guǎn)0根(gēn)據(jù)不(bù)同(tóng)时(shí)間(jiān)顯示不(bù)同(tóng)的(de)數字(zì)并持(chí)續一(yī)定(dìng)的(de)时(shí)間(jiān)。在(zài)这(zhè)个(gè)过(guò)程中(zhōng),8个(gè)數碼管(guǎn)中(zhōng)只(zhī)有(yǒu)數碼管(guǎn)0進(jìn)行顯示變(biàn)換,其他(tā)數碼管(guǎn)不(bù)亮(liàng)。上(shàng)一(yī)章(zhāng)中(zhōng)对(duì)數碼管(guǎn)的(de)控制方(fāng)法進(jìn)行了(le)講解(jiě),如(rú)果(guǒ)有(yǒu)需要(yào)可(kě)以(yǐ)回(huí)到(dào)上(shàng)一(yī)章(zhāng)複習。FPGA通(tòng)过(guò)控制位選信(xìn)号(hào)来(lái)控制8个(gè)數碼管(guǎn),即應(yìng)輸出(chū)一(yī)个(gè)8位的(de)位選信(xìn)号(hào),将其設定(dìng)为(wèi)seg_sel。其中(zhōng)seg_sel[0]对(duì)應(yìng)數碼管(guǎn)0,seg_sel[1]对(duì)應(yìng)數碼管(guǎn)1,以(yǐ)此(cǐ)類(lèi)推,seg_sel[7]对(duì)應(yìng)數碼管(guǎn)7。而(ér)实現(xiàn)數碼管(guǎn)上(shàng)的(de)不(bù)同(tóng)數字(zì)顯示則需控制每个(gè)數碼管(guǎn)上(shàng)的(de)7个(gè)子段(duàn),即控制段(duàn)選信(xìn)号(hào)使數碼管(guǎn)上(shàng)顯示相應(yìng)的(de)數字(zì)。本(běn)設計(jì)中(zhōng)不(bù)需要(yào)用(yòng)到(dào)h子段(duàn),共(gòng)需要(yào)7个(gè)子段(duàn),因(yīn)此(cǐ)FPGA要(yào)輸出(chū)一(yī)个(gè)7位的(de)段(duàn)選信(xìn)号(hào)来(lái)控制數碼管(guǎn)顯示,将段(duàn)選信(xìn)号(hào)設为(wèi)seg_ment。其中(zhōng)seg_ment[6]~segm_ment[0]分(fēn)别对(duì)應(yìng)數碼管(guǎn)的(de)abcdefg(注意(yì)对(duì)應(yìng)順序)。當然,除位選信(xìn)号(hào)和(hé)段(duàn)選信(xìn)号(hào)外(wài),設計(jì)中(zhōng)進(jìn)行工程控制的(de)时(shí)鐘(zhōng)信(xìn)号(hào)和(hé)複位信(xìn)号(hào)也(yě)同(tóng)樣(yàng)必不(bù)可(kě)少(shǎo)。
綜上(shàng)所(suǒ)述,本(běn)設計(jì)一(yī)共(gòng)需要(yào)4个(gè)信(xìn)号(hào):时(shí)鐘(zhōng)信(xìn)号(hào)clk,複位信(xìn)号(hào)rst_n,輸出(chū)的(de)位選信(xìn)号(hào)seg_sel和(hé)輸出(chū)的(de)段(duàn)選信(xìn)号(hào)seg_ment。信(xìn)号(hào)和(hé)硬(yìng)件(jiàn)的(de)对(duì)應(yìng)關(guān)系(xì)如(rú)下(xià)表(biǎo)所(suǒ)示。
表(biǎo)3.6 - 1信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)
将module的(de)名稱定(dìng)義为(wèi)my_time,已知該模块(kuài)有(yǒu)4个(gè)信(xìn)号(hào):clk、rst_n、seg_sel和(hé)seg_ment。在(zài)頂层信(xìn)号(hào)代(dài)碼中(zhōng)需要(yào)将與(yǔ)外(wài)部(bù)相連(lián)接的(de)輸入(rù)/輸出(chū)信(xìn)号(hào)列出(chū),從而(ér)实現(xiàn)信(xìn)号(hào)與(yǔ)管(guǎn)脚的(de)連(lián)接,其具體(tǐ)代(dài)碼如(rú)下(xià):
随後(hòu)对(duì)信(xìn)号(hào)輸入(rù)輸出(chū)屬性(xìng)進(jìn)行聲明(míng),指出(chū)这(zhè)一(yī)信(xìn)号(hào)对(duì)于(yú)FPGA来(lái)说(shuō)屬于(yú)輸入(rù)信(xìn)号(hào)還(huán)是(shì)輸出(chū)信(xìn)号(hào),若为(wèi)輸入(rù)信(xìn)号(hào)則聲明(míng)其为(wèi)input,若为(wèi)輸出(chū)信(xìn)号(hào)則聲明(míng)其为(wèi)output。在(zài)本(běn)設計(jì)中(zhōng),由(yóu)于(yú)clk是(shì)外(wài)部(bù)的(de)晶振輸送給(gěi)FPGA,因(yīn)此(cǐ)在(zài)FPGA中(zhōng)clk为(wèi)1位的(de)輸入(rù)信(xìn)号(hào)input;同(tóng)樣(yàng)地(dì),rst_n是(shì)外(wài)部(bù)按鍵給(gěi)FPGA的(de),因(yīn)此(cǐ)在(zài)FPGA中(zhōng)rst_n也(yě)是(shì)1位的(de)輸入(rù)信(xìn)号(hào)input;seg_sel是(shì)FPGA控制數碼管(guǎn)亮(liàng)滅情(qíng)況的(de)信(xìn)号(hào),因(yīn)此(cǐ)seg_sel是(shì)8位的(de)輸出(chū)信(xìn)号(hào)output,seg_ment是(shì)FPGA控制數碼管(guǎn)顯示數字(zì)內(nèi)容的(de)信(xìn)号(hào),因(yīn)此(cǐ)seg_ment是(shì)7位的(de)輸出(chū)信(xìn)号(hào)output。綜上(shàng)所(suǒ)述,完成(chéng)輸入(rù)輸出(chū)端口(kǒu)定(dìng)義,其具體(tǐ)代(dài)碼如(rú)下(xià):
3.2 信(xìn)号(hào)設計(jì)
在(zài)設計(jì)信(xìn)号(hào)之前(qián),先(xiān)按照至(zhì)簡設計(jì)法的(de)思(sī)路(lù)来(lái)進(jìn)行架構設計(jì)。根(gēn)據(jù)設計(jì)目标(biāo)先(xiān)来(lái)分(fēn)析要(yào)实現(xiàn)的(de)功能(néng),8个(gè)數碼管(guǎn)中(zhōng)數碼管(guǎn)0顯示數字(zì),其餘數碼管(guǎn)不(bù)顯示。數碼管(guǎn)0的(de)具體(tǐ)顯示順序为(wèi):顯示數字(zì)“0”持(chí)續1秒(miǎo);顯示數字(zì)“1”持(chí)續2秒(miǎo);顯示數字(zì)“2”持(chí)續3秒(miǎo);顯示數字(zì)“3”持(chí)續4秒(miǎo);顯示數字(zì)“4”持(chí)續5秒(miǎo);顯示數字(zì)“5”持(chí)續6秒(miǎo);顯示數字(zì)“6”持(chí)續7秒(miǎo);顯示數字(zì)“7”持(chí)續8秒(miǎo)顯示數字(zì)“8”持(chí)續9秒(miǎo);顯示數字(zì)“9”持(chí)續10秒(miǎo)。至(zhì)此(cǐ)一(yī)个(gè)循环(huán)結束(shù),再從顯示數字(zì)“0”開(kāi)始進(jìn)入(rù)下(xià)一(yī)个(gè)循环(huán)。
将現(xiàn)象(xiàng)翻譯成(chéng)信(xìn)号(hào)表(biǎo)示如(rú)下(xià):
數碼管(guǎn)0顯示數字(zì)“0”,即seg_sel的(de)值为(wèi)8’b1111_1110,seg_ment的(de)值为(wèi)7’b000_0001,持(chí)續1秒(miǎo);
數碼管(guǎn)0顯示數字(zì)“1”,即seg_sel的(de)值为(wèi)8’b1111_1110,seg_ment的(de)值为(wèi)7’b100_1111,持(chí)續2秒(miǎo);
數碼管(guǎn)0顯示數字(zì)“2”,即seg_sel的(de)值为(wèi)8’b1111_1110,seg_ment的(de)值为(wèi)7’b001_0010,持(chí)續3秒(miǎo);
數碼管(guǎn)0顯示數字(zì)“3”,即seg_sel的(de)值为(wèi)8’b1111_1110,seg_ment的(de)值为(wèi)7’b000_0110,持(chí)續4秒(miǎo);
數碼管(guǎn)0顯示數字(zì)“4”,即seg_sel的(de)值为(wèi)8’b1111_1110,seg_ment的(de)值为(wèi)7’b100_1100,持(chí)續5秒(miǎo);
數碼管(guǎn)0顯示數字(zì)“5”,即seg_sel的(de)值为(wèi)8’b1111_1110,seg_ment的(de)值为(wèi)7’b010_0100,持(chí)續6秒(miǎo);
數碼管(guǎn)0顯示數字(zì)“6”,即seg_sel的(de)值为(wèi)8’b1111_1110,seg_ment的(de)值为(wèi)7’b010_0000,持(chí)續7秒(miǎo);
數碼管(guǎn)0顯示數字(zì)“7”,即seg_sel的(de)值为(wèi)8’b1111_1110,seg_ment的(de)值为(wèi)7’b000_1111,持(chí)續8秒(miǎo);
數碼管(guǎn)0顯示數字(zì)“8”,即seg_sel的(de)值为(wèi)8’b1111_1110,seg_ment的(de)值为(wèi)7’b 0000000,持(chí)續9秒(miǎo);
數碼管(guǎn)0顯示數字(zì)“9”,即seg_sel的(de)值为(wèi)8’b1111_1110,seg_ment的(de)值为(wèi)7’b000_0100,持(chí)續10秒(miǎo)。
随後(hòu)從顯示數字(zì)“0”開(kāi)始循环(huán)往複。
總(zǒng)結規律可(kě)以(yǐ)發(fà)現(xiàn)seg_sel信(xìn)号(hào)的(de)值不(bù)發(fà)生(shēng)變(biàn)化(huà),始終(zhōng)为(wèi)8’hfe;seg_ment隔一(yī)段(duàn)时(shí)間(jiān)後(hòu)会(huì)變(biàn)化(huà),其波(bō)形示意(yì)图(tú)如(rú)下(xià)图(tú)所(suǒ)示:

图(tú)3.6-2秒(miǎo)表(biǎo)的(de)波(bō)形图(tú)
根(gēn)據(jù)設計(jì)目标(biāo)可(kě)以(yǐ)發(fà)現(xiàn)數碼管(guǎn)0每隔一(yī)段(duàn)时(shí)間(jiān)發(fà)生(shēng)變(biàn)化(huà),即seg_ment信(xìn)号(hào)每隔一(yī)段(duàn)时(shí)間(jiān)後(hòu)会(huì)變(biàn)化(huà),且變(biàn)化(huà)的(de)間(jiān)隔时(shí)間(jiān)不(bù)同(tóng)。第(dì)一(yī)次(cì)顯示时(shí),信(xìn)号(hào)seg_sel=8’hfe,seg_ment=7’h01,持(chí)續1秒(miǎo);在(zài)第(dì)二(èr)次(cì)顯示时(shí),seg_sel=8’hfe,seg_ment=7’h4f,持(chí)續2秒(miǎo);以(yǐ)此(cǐ)類(lèi)推,第(dì)十(shí)次(cì)顯示,seg_sel=8’hfe,seg_ment=7’h04,持(chí)續10秒(miǎo)。以(yǐ)此(cǐ)为(wèi)規律在(zài)波(bō)形图(tú)上(shàng)補充时(shí)間(jiān)信(xìn)息,補充後(hòu)的(de)波(bō)形图(tú)如(rú)下(xià)图(tú)所(suǒ)示:

图(tú)3.6-3秒(miǎo)表(biǎo)的(de)实現(xiàn)架構图(tú)
根(gēn)據(jù)波(bō)形图(tú)的(de)分(fēn)析可(kě)以(yǐ)得到(dào)本(běn)設計(jì)的(de)計(jì)數器架構:本(běn)設計(jì)一(yī)共(gòng)需要(yào)两(liǎng)个(gè)計(jì)數器,一(yī)个(gè)計(jì)數器用(yòng)来(lái)計(jì)算时(shí)間(jiān),如(rú)1秒(miǎo)、2秒(miǎo)等;另(lìng)一(yī)个(gè)計(jì)數器用(yòng)来(lái)計(jì)算在(zài)目前(qián)处在(zài)第(dì)幾(jǐ)次(cì)的(de)顯示階(jiē)段(duàn)。
来(lái)思(sī)考一(yī)下(xià):为(wèi)什麼(me)不(bù)能(néng)只(zhī)采用(yòng)一(yī)个(gè)时(shí)間(jiān)計(jì)數器,按照1秒(miǎo)、3秒(miǎo)、6秒(miǎo)、10秒(miǎo)……这(zhè)樣(yàng)增加秒(miǎo)數的(de)方(fāng)法来(lái)計(jì)數呢?实際上(shàng)增加計(jì)數器的(de)操作正(zhèng)是(shì)運用(yòng)了(le)至(zhì)簡設計(jì)法的(de)道(dào)理,讓信(xìn)号(hào)代(dài)碼更(gèng)加有(yǒu)条(tiáo)理并便于(yú)設計(jì)师(shī)确定(dìng)位置。如(rú)果(guǒ)采用(yòng)一(yī)个(gè)計(jì)數器的(de)計(jì)數方(fāng)法,虽然減少(shǎo)了(le)一(yī)个(gè)計(jì)數器,但在(zài)实際的(de)代(dài)碼操作中(zhōng)卻非(fēi)常麻(má)煩。
舉个(gè)生(shēng)活中(zhōng)常見(jiàn)的(de)例子,如(rú)下(xià)图(tú)所(suǒ)示,将每一(yī)次(cì)的(de)循环(huán)看(kàn)做樓层,每一(yī)次(cì)的(de)數碼管(guǎn)顯示數字(zì)的(de)持(chí)續时(shí)間(jiān)記(jì)作門(mén)牌(pái)号(hào),即1秒(miǎo)、2秒(miǎo)、3秒(miǎo)在(zài)一(yī)樓中(zhōng)对(duì)應(yìng)1号(hào)2号(hào)3号(hào),以(yǐ)此(cǐ)類(lèi)推。如(rú)果(guǒ)只(zhī)用(yòng)一(yī)个(gè)計(jì)數器的(de)話(huà),那(nà)麼(me)一(yī)樓的(de)門(mén)牌(pái)号(hào)为(wèi)1、2、3、4、5、6、7、8,二(èr)樓的(de)則为(wèi)9、10、11、12、13、14、15、16、17、18,三(sān)樓以(yǐ)此(cǐ)類(lèi)推。这(zhè)種(zhǒng)只(zhī)有(yǒu)用(yòng)一(yī)種(zhǒng)計(jì)數單位的(de)方(fāng)法,開(kāi)始确实沒(méi)有(yǒu)太大問(wèn)題(tí),但是(shì)随着樓层的(de)變(biàn)高(gāo),这(zhè)種(zhǒng)計(jì)數方(fāng)式的(de)弊端就(jiù)会(huì)顯露(lù)出(chū)来(lái)。比如(rú)在(zài)这(zhè)種(zhǒng)情(qíng)況下(xià),如(rú)果(guǒ)想(xiǎng)要(yào)找(zhǎo)76号(hào),就(jiù)可(kě)能(néng)需要(yào)很久才能(néng)找(zhǎo)到(dào)。

图(tú)3.6-4單一(yī)門(mén)牌(pái)号(hào)計(jì)數模式
如(rú)果(guǒ)在(zài)一(yī)个(gè)計(jì)數單位的(de)基礎上(shàng)再加一(yī)个(gè)計(jì)數單位,即采用(yòng)两(liǎng)種(zhǒng)技術(shù)模式,一(yī)个(gè)記(jì)樓层,一(yī)个(gè)記(jì)門(mén)牌(pái)号(hào),如(rú)下(xià)图(tú)所(suǒ)示。在(zài)同(tóng)樣(yàng)的(de)門(mén)牌(pái)号(hào)計(jì)數中(zhōng),可(kě)以(yǐ)記(jì)为(wèi)一(yī)樓的(de)1、2、3、4、5、6、7、8号(hào),二(èr)樓的(de)1、2、3、4、5、6、7、8、9、10号(hào),以(yǐ)此(cǐ)類(lèi)推,每一(yī)层都有(yǒu)对(duì)應(yìng)的(de)房(fáng)間(jiān)号(hào)。在(zài)这(zhè)種(zhǒng)計(jì)數模式下(xià),如(rú)果(guǒ)想(xiǎng)要(yào)找(zhǎo)到(dào)七(qī)层6号(hào)房(fáng)間(jiān),不(bù)需要(yào)多(duō)做思(sī)考就(jiù)可(kě)以(yǐ)一(yī)下(xià)定(dìng)位到(dào)正(zhèng)确位置。

图(tú)3.6-5两(liǎng)種(zhǒng)門(mén)牌(pái)号(hào)複合計(jì)數模式
通(tòng)过(guò)案(àn)例可(kě)以(yǐ)确定(dìng)两(liǎng)種(zhǒng)計(jì)數器複合計(jì)數才是(shì)最(zuì)簡單的(de)計(jì)數模式,因(yīn)此(cǐ)本(běn)設計(jì)中(zhōng)使用(yòng)一(yī)个(gè)計(jì)算时(shí)間(jiān)的(de)計(jì)數器,一(yī)个(gè)表(biǎo)示當前(qián)顯示次(cì)數(1到(dào)10)的(de)計(jì)數器。这(zhè)樣(yàng)如(rú)果(guǒ)後(hòu)續遇到(dào)問(wèn)題(tí),也(yě)可(kě)以(yǐ)快(kuài)速的(de)定(dìng)位到(dào)相應(yìng)位置,避免了(le)很多(duō)麻(má)煩。
此(cǐ)外(wài),在(zài)以(yǐ)上(shàng)門(mén)牌(pái)号(hào)計(jì)數案(àn)例中(zhōng),如(rú)果(guǒ)想(xiǎng)要(yào)尋找(zhǎo)每一(yī)层的(de)固定(dìng)位置房(fáng)間(jiān),按照两(liǎng)種(zhǒng)計(jì)數單位複合的(de)模式,用(yòng)cnt0来(lái)表(biǎo)示房(fáng)間(jiān)号(hào),其範圍是(shì)0-9,用(yòng)cnt1来(lái)表(biǎo)示樓层号(hào),其範圍是(shì)0-1。通(tòng)过(guò)这(zhè)種(zhǒng)方(fāng)法,可(kě)以(yǐ)利用(yòng)cnt0和(hé)cnt1来(lái)找(zhǎo)到(dào)任何一(yī)个(gè)房(fáng)間(jiān)。當然,如(rú)果(guǒ)想(xiǎng)找(zhǎo)同(tóng)一(yī)个(gè)位置的(de)房(fáng)間(jiān),也(yě)可(kě)以(yǐ)直(zhí)接用(yòng)cnt0来(lái)表(biǎo)示。例如(rú)cnt0==4可(kě)以(yǐ)統一(yī)表(biǎo)示每层樓的(de)四(sì)号(hào)房(fáng)間(jiān)。但如(rú)果(guǒ)只(zhī)有(yǒu)房(fáng)間(jiān)号(hào)这(zhè)一(yī)計(jì)數模式而(ér)沒(méi)有(yǒu)樓层的(de)話(huà),想(xiǎng)表(biǎo)示每层樓的(de)四(sì)号(hào)房(fáng)間(jiān),則表(biǎo)示方(fāng)式为(wèi)“cnt0==4”、“cnt0=12”,更(gèng)高(gāo)樓层以(yǐ)此(cǐ)類(lèi)推。两(liǎng)種(zhǒng)表(biǎo)現(xiàn)形式的(de)難易程度(dù)顯而(ér)易見(jiàn)。
可(kě)見(jiàn)两(liǎng)个(gè)計(jì)數器複合計(jì)數的(de)方(fāng)式并不(bù)是(shì)多(duō)此(cǐ)一(yī)舉,反(fǎn)而(ér)是(shì)最(zuì)适合本(běn)設計(jì)的(de)計(jì)數器方(fāng)案(àn)。不(bù)論是(shì)簡單的(de)還(huán)是(shì)複雜的(de)設計(jì),至(zhì)簡設計(jì)法都会(huì)全(quán)面(miàn)的(de)考慮設計(jì)需求,在(zài)每一(yī)个(gè)环(huán)节(jié)都会(huì)采用(yòng)最(zuì)适合的(de)設計(jì)方(fāng)案(àn),盡量(liàng)为(wèi)後(hòu)續的(de)步驟減少(shǎo)不(bù)必要(yào)的(de)麻(má)煩。
因(yīn)此(cǐ),在(zài)本(běn)設計(jì)中(zhōng)選用(yòng)了(le)两(liǎng)个(gè)計(jì)數器:一(yī)个(gè)記(jì)录(lù)时(shí)間(jiān),一(yī)个(gè)記(jì)录(lù)循环(huán)次(cì)數,下(xià)面(miàn)就(jiù)分(fēn)别讨論两(liǎng)个(gè)計(jì)數器的(de)实現(xiàn)。首先(xiān)讨論表(biǎo)示时(shí)間(jiān)的(de)計(jì)數器,其用(yòng)cnt0表(biǎo)示。至(zhì)簡設計(jì)法的(de)設計(jì)規則中(zhōng)有(yǒu)講过(guò),計(jì)數器的(de)設計(jì)只(zhī)考慮两(liǎng)个(gè)因(yīn)素:加1条(tiáo)件(jiàn)和(hé)計(jì)數數量(liàng)。只(zhī)要(yào)确定(dìng)相應(yìng)邏輯,就(jiù)能(néng)完成(chéng)計(jì)數器代(dài)碼設計(jì)。
首先(xiān)讨論計(jì)數器cnt0的(de)加1条(tiáo)件(jiàn):由(yóu)于(yú)該計(jì)數器在(zài)不(bù)停地(dì)計(jì)數,永不(bù)停止,因(yīn)此(cǐ)可(kě)以(yǐ)認为(wèi)其加1条(tiáo)件(jiàn)是(shì)一(yī)直(zhí)有(yǒu)效的(de),可(kě)以(yǐ)写为(wèi):assign add_cnt0==1。
此(cǐ)处可(kě)能(néng)有(yǒu)同(tóng)学存在(zài)疑惑加1条(tiáo)件(jiàn)的(de)概念是(shì)什麼(me)?这(zhè)里(lǐ)以(yǐ)停車位来(lái)進(jìn)行比喻,一(yī)般情(qíng)況下(xià)对(duì)每个(gè)停車位置会(huì)進(jìn)行对(duì)應(yìng)編号(hào),但是(shì)如(rú)果(guǒ)某个(gè)位置上(shàng)放(fàng)置了(le)一(yī)块(kuài)石(dàn)头(tóu)无法作为(wèi)停車位时(shí),該位置就(jiù)不(bù)能(néng)獲得对(duì)應(yìng)的(de)編号(hào)。反(fǎn)之則可(kě)以(yǐ)認为(wèi)停車位編号(hào)的(de)加1条(tiáo)件(jiàn)就(jiù)是(shì):对(duì)應(yìng)位置上(shàng)沒(méi)有(yǒu)石(dàn)头(tóu),其可(kě)以(yǐ)繼續的(de)進(jìn)行編号(hào),即assign add_cnt0 = “沒(méi)有(yǒu)石(dàn)头(tóu)”。因(yīn)此(cǐ)如(rú)果(guǒ)在(zài)設計(jì)中(zhōng)計(jì)數器一(yī)直(zhí)沒(méi)有(yǒu)阻礙地(dì)進(jìn)行計(jì)數工作,就(jiù)可(kě)以(yǐ)認为(wèi)加1条(tiáo)件(jiàn)是(shì)一(yī)直(zhí)有(yǒu)效的(de)。
确定(dìng)加1条(tiáo)件(jiàn)後(hòu)来(lái)讨論計(jì)數器cnt0的(de)計(jì)數數量(liàng)。本(běn)設計(jì)的(de)工作时(shí)鐘(zhōng)是(shì)50MHz,即周期(qī)为(wèi)20ns,當計(jì)數器數到(dào)第(dì)1_000_000_000/20=50_000_000个(gè)时(shí),就(jiù)代(dài)表(biǎo)1秒(miǎo)計(jì)时(shí)結束(shù);當計(jì)數器計(jì)數到(dào)第(dì)2_000_000_000/20=100_000_000个(gè)时(shí),就(jiù)代(dài)表(biǎo)2秒(miǎo)計(jì)时(shí)結束(shù);當計(jì)數器數到(dào)第(dì)150_000_000个(gè)时(shí),就(jiù)代(dài)表(biǎo)3秒(miǎo)計(jì)时(shí)結束(shù);以(yǐ)此(cǐ)類(lèi)推,當計(jì)數器數到(dào)第(dì)500_000_000个(gè)时(shí),就(jiù)代(dài)表(biǎo)10秒(miǎo)計(jì)时(shí)結束(shù)。由(yóu)于(yú)每次(cì)計(jì)算的(de)时(shí)間(jiān)不(bù)同(tóng),因(yīn)此(cǐ)可(kě)以(yǐ)考慮使用(yòng)變(biàn)量(liàng)法。至(zhì)簡設計(jì)法中(zhōng)選用(yòng)變(biàn)量(liàng)法的(de)邏輯思(sī)維非(fēi)常簡單,只(zhī)要(yào)循环(huán)的(de)周期(qī)个(gè)數不(bù)同(tóng),就(jiù)可(kě)以(yǐ)選擇變(biàn)量(liàng)法。設定(dìng)x表(biǎo)示計(jì)數器cnt0的(de)計(jì)數數量(liàng),後(hòu)文(wén)中(zhōng)会(huì)对(duì)x的(de)值進(jìn)行詳细(xì)展(zhǎn)開(kāi)。
确定(dìng)好(hǎo)加1条(tiáo)件(jiàn)和(hé)計(jì)數數量(liàng)後(hòu)開(kāi)始進(jìn)行代(dài)碼編写。相信(xìn)各(gè)位往常都是(shì)一(yī)行行輸入(rù)代(dài)碼,但是(shì)至(zhì)簡設計(jì)法有(yǒu)一(yī)个(gè)小技巧,可(kě)以(yǐ)为(wèi)大家(jiā)編写代(dài)碼省(shěng)去(qù)不(bù)少(shǎo)时(shí)間(jiān),并且一(yī)定(dìng)程度(dù)上(shàng)降低了(le)代(dài)碼的(de)出(chū)錯率。至(zhì)簡設計(jì)法将日(rì)常代(dài)碼中(zhōng)常用(yòng)到(dào)的(de)固定(dìng)部(bù)分(fēn)做成(chéng)了(le)模板,進(jìn)行代(dài)碼編程时(shí)可(kě)以(yǐ)調用(yòng)相應(yìng)模板後(hòu)根(gēn)據(jù)邏輯輸入(rù)对(duì)應(yìng)設計(jì)的(de)變(biàn)量(liàng)将代(dài)碼補充完整。这(zhè)里(lǐ)就(jiù)可(kě)以(yǐ)用(yòng)模板編写計(jì)數器代(dài)碼,感(gǎn)受一(yī)下(xià)这(zhè)个(gè)炫酷的(de)功能(néng)。
打(dǎ)開(kāi)GVIM工具,在(zài)命令模式下(xià)輸入(rù)“:Mdyjsq”後(hòu)點(diǎn)擊回(huí)車,就(jiù)調出(chū)了(le)对(duì)應(yìng)模板,如(rú)下(xià)图(tú)所(suǒ)示。之後(hòu)再将本(běn)案(àn)例中(zhōng)的(de)變(biàn)量(liàng)填到(dào)模板里(lǐ)面(miàn),就(jiù)可(kě)以(yǐ)得到(dào)完整正(zhèng)确的(de)計(jì)數器代(dài)碼。

图(tú)3.6-6至(zhì)簡設計(jì)法調用(yòng)計(jì)數器代(dài)碼模板
補充完整後(hòu)得到(dào)計(jì)數器cnt0的(de)代(dài)碼如(rú)下(xià)。
下(xià)面(miàn)来(lái)設計(jì)表(biǎo)示第(dì)幾(jǐ)次(cì)顯示的(de)計(jì)數器,将該計(jì)數器命名为(wèi)cnt1。分(fēn)析波(bō)形图(tú)可(kě)以(yǐ)看(kàn)出(chū),每个(gè)階(jiē)段(duàn)完成(chéng)後(hòu),該計(jì)數器的(de)值加1。因(yīn)此(cǐ)加1条(tiáo)件(jiàn)是(shì)cnt0結束(shù),代(dài)碼表(biǎo)示为(wèi)end_cnt0。該計(jì)數器一(yī)共(gòng)要(yào)數10次(cì),即計(jì)數數量(liàng)为(wèi)10。这(zhè)里(lǐ)繼續選擇調用(yòng)至(zhì)簡設計(jì)法代(dài)碼模板,在(zài)命令模式下(xià)輸入(rù)“:Mdyjsq”,點(diǎn)擊回(huí)車,調出(chū)了(le)計(jì)數器模板後(hòu)将“add_cnt1”和(hé)“end_cnt1”補充完整,得到(dào)該計(jì)數器的(de)代(dài)碼如(rú)下(xià):
确定(dìng)完两(liǎng)个(gè)計(jì)數器後(hòu)来(lái)思(sī)考輸出(chū)信(xìn)号(hào)seg_sel的(de)值。通(tòng)过(guò)波(bō)形图(tú)可(kě)以(yǐ)看(kàn)出(chū):在(zài)整个(gè)設計(jì)中(zhōng),該信(xìn)号(hào)始終(zhōng)不(bù)變(biàn)一(yī)直(zhí)是(shì)8’hfe,所(suǒ)以(yǐ)代(dài)碼直(zhí)接写成(chéng):
再来(lái)思(sī)考輸出(chū)信(xìn)号(hào)seg_ment的(de)變(biàn)化(huà)。分(fēn)析設計(jì)目标(biāo)可(kě)知在(zài)第(dì)一(yī)次(cì)顯示时(shí),seg_ment輸出(chū)值为(wèi)7’h01;在(zài)第(dì)二(èr)次(cì)顯示时(shí),輸出(chū)值为(wèi)7’h4f;以(yǐ)此(cǐ)類(lèi)推,在(zài)第(dì)十(shí)次(cì)顯示时(shí),輸出(chū)值为(wèi)7’h0f。計(jì)时(shí)器cnt1来(lái)表(biǎo)示第(dì)幾(jǐ)次(cì)顯示,即cnt1==0时(shí),輸出(chū)值为(wèi)7’h01;cnt1==1的(de)时(shí)輸出(chū)值为(wèi)7’h4f;以(yǐ)此(cǐ)類(lèi)推,在(zài)cnt1==9时(shí),輸出(chū)值为(wèi)7’h04。再進(jìn)一(yī)步翻譯成(chéng)代(dài)碼,打(dǎ)開(kāi)GVIM,在(zài)編輯模式下(xià)輸入(rù)“Shixu2”,調出(chū)至(zhì)簡設計(jì)法模板,補充完整後(hòu)的(de)代(dài)碼如(rú)下(xià)所(suǒ)示:
最(zuì)後(hòu)再来(lái)思(sī)考一(yī)下(xià)變(biàn)量(liàng)x。
正(zhèng)如(rú)前(qián)文(wén)中(zhōng)樓房(fáng)門(mén)牌(pái)号(hào)的(de)例子,假定(dìng)第(dì)一(yī)层为(wèi)8个(gè)房(fáng)間(jiān),第(dì)二(èr)层为(wèi)10个(gè)房(fáng)間(jiān),第(dì)三(sān)层为(wèi)15个(gè)房(fáng)間(jiān),第(dì)四(sì)层为(wèi)20个(gè)房(fáng)間(jiān)。若用(yòng)代(dài)碼将这(zhè)種(zhǒng)情(qíng)況表(biǎo)示出(chū)来(lái),即在(zài)編輯模式下(xià)輸入(rù)“Zuhe”後(hòu)回(huí)車,可(kě)以(yǐ)得到(dào)至(zhì)簡設計(jì)法模板,填写相應(yìng)条(tiáo)件(jiàn)後(hòu)得到(dào)最(zuì)終(zhōng)代(dài)碼如(rú)下(xià):
同(tóng)樣(yàng)的(de)道(dào)理,在(zài)讨論計(jì)數器cnt0的(de)时(shí)候曾經(jīng)得出(chū)結論:“當計(jì)數器數到(dào)第(dì)1_000_000_000/20=50_000_000个(gè)时(shí),就(jiù)代(dài)表(biǎo)1秒(miǎo)計(jì)时(shí)結束(shù);當計(jì)數器計(jì)數到(dào)第(dì)2_000_000_000/20=100_000_000个(gè)时(shí),就(jiù)代(dài)表(biǎo)2秒(miǎo)計(jì)时(shí)結束(shù);當計(jì)數器數到(dào)第(dì)150_000_000个(gè)时(shí),就(jiù)代(dài)表(biǎo)3秒(miǎo)計(jì)时(shí)結束(shù);以(yǐ)此(cǐ)類(lèi)推,當計(jì)數器數到(dào)第(dì)500_000_000个(gè)时(shí),就(jiù)代(dài)表(biǎo)10秒(miǎo)計(jì)时(shí)結束(shù)。”可(kě)以(yǐ)看(kàn)出(chū),cnt0的(de)計(jì)數數量(liàng)與(yǔ)cnt1有(yǒu)關(guān)。即第(dì)1次(cì)顯示數50_000_000个(gè),第(dì)2次(cì)數100_000_000个(gè)……,按照这(zhè)樣(yàng)的(de)規律可(kě)以(yǐ)将10次(cì)对(duì)應(yìng)的(de)x表(biǎo)示出(chū)来(lái)。
在(zài)編輯模式下(xià)輸入(rù)“Zuhe”後(hòu)回(huí)車,調出(chū)至(zhì)簡設計(jì)法模板,填写对(duì)應(yìng)条(tiáo)件(jiàn)後(hòu)得到(dào)表(biǎo)示x的(de)代(dài)碼如(rú)下(xià)所(suǒ)示。这(zhè)里(lǐ)是(shì)使用(yòng)至(zhì)簡設計(jì)法写出(chū)来(lái)的(de)代(dài)碼,需要(yào)着重(zhòng)学習一(yī)下(xià),可(kě)以(yǐ)看(kàn)到(dào)該代(dài)碼非(fēi)常整潔,邏輯思(sī)維一(yī)目了(le)然。这(zhè)種(zhǒng)写法不(bù)会(huì)出(chū)現(xiàn)BUG,并且可(kě)以(yǐ)做到(dào)資源最(zuì)优,在(zài)進(jìn)行实操时(shí)可(kě)以(yǐ)使用(yòng)这(zhè)種(zhǒng)写法。
至(zhì)此(cǐ),主(zhǔ)體(tǐ)程序已經(jīng)完成(chéng)。回(huí)顧一(yī)下(xià)設計(jì)过(guò)程会(huì)發(fà)現(xiàn):每一(yī)步設計(jì)都圍繞設計(jì)目标(biāo)逐步展(zhǎn)開(kāi),看(kàn)似在(zài)讨論一(yī)个(gè)个(gè)小問(wèn)題(tí),但都是(shì)始終(zhōng)圍繞設計(jì)目标(biāo)来(lái)進(jìn)行讨論,这(zhè)也(yě)正(zhèng)是(shì)最(zuì)開(kāi)始提(tí)到(dào)的(de)制定(dìng)和(hé)理解(jiě)設計(jì)目标(biāo)的(de)重(zhòng)要(yào)性(xìng)。
3.3 信(xìn)号(hào)定(dìng)義
接下(xià)来(lái)需要(yào)将module補充完整,首先(xiān)来(lái)定(dìng)義信(xìn)号(hào)類(lèi)型。reg和(hé)wire的(de)判斷很容易搞不(bù)清(qīng)楚總(zǒng)会(huì)有(yǒu)多(duō)餘的(de)聯想(xiǎng),比如(rú)認为(wèi)reg就(jiù)是(shì)寄存器,wire是(shì)線(xiàn);或(huò)者(zhě)認为(wèi)reg会(huì)綜合成(chéng)寄存器,wire不(bù)会(huì)綜合成(chéng)寄存器。但是(shì)这(zhè)些其实和(hé)reg型還(huán)是(shì)wire型都并无關(guān)系(xì),在(zài)信(xìn)号(hào)類(lèi)型的(de)判斷时(shí)不(bù)需要(yào)做任何的(de)聯想(xiǎng),只(zhī)要(yào)記(jì)住一(yī)个(gè)規則“用(yòng)always实現(xiàn)的(de)是(shì)reg型,其他(tā)都是(shì)wire型”就(jiù)可(kě)以(yǐ)了(le)。
cnt0是(shì)用(yòng)always産生(shēng)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)reg。cnt0計(jì)數的(de)最(zuì)大值为(wèi)500_000_000,需要(yào)用(yòng)29根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)29位。
至(zhì)簡設計(jì)法在(zài)这(zhè)里(lǐ)们(men)分(fēn)享一(yī)个(gè)非(fēi)常实用(yòng)的(de)位宽(kuān)獲取(qǔ)技巧:打(dǎ)開(kāi)計(jì)算器,點(diǎn)擊“查看(kàn)”,選擇“程序員”模式,在(zài)“十(shí)進(jìn)制”下(xià)将信(xìn)号(hào)值輸入(rù)進(jìn)去(qù),就(jiù)会(huì)獲得对(duì)應(yìng)的(de)信(xìn)号(hào)位宽(kuān)。以(yǐ)cnt0信(xìn)号(hào)为(wèi)例,在(zài)計(jì)算器中(zhōng)輸入(rù)500_000_000,即可(kě)得到(dào)对(duì)應(yìng)的(de)位宽(kuān)29,如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.6-7通(tòng)过(guò)計(jì)算器獲取(qǔ)信(xìn)号(hào)位宽(kuān)
因(yīn)此(cǐ)cnt0的(de)定(dìng)義代(dài)碼如(rú)下(xià):
add_cnt0和(hé)end_cnt0都是(shì)用(yòng)assign方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire。其值是(shì)0或(huò)者(zhě)1,用(yòng)1根(gēn)線(xiàn)表(biǎo)示即可(kě)。編輯模式下(xià)輸入(rù)“Wire1”調用(yòng)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(dài)碼表(biǎo)示如(rú)下(xià):
cnt1是(shì)用(yòng)always産生(shēng)的(de)信(xìn)号(hào),因(yīn)此(cǐ)類(lèi)型为(wèi)reg。cnt1計(jì)數的(de)最(zuì)大值为(wèi)9,需要(yào)用(yòng)4根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)是(shì)4位。編輯模式下(xià)輸入(rù)“Reg4”調用(yòng)至(zhì)簡設計(jì)法模板并補充完整;
add_cnt1和(hé)end_cnt1都是(shì)用(yòng)assign方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire。其值是(shì)0或(huò)者(zhě)1,用(yòng)1根(gēn)線(xiàn)表(biǎo)示即可(kě)。編輯模式下(xià)輸入(rù)“Wire1”調用(yòng)至(zhì)簡設計(jì)法模板并補充完整。
補充後(hòu)的(de)cnt1、add_cnt1和(hé)end_cnt1的(de)定(dìng)義代(dài)碼如(rú)下(xià)所(suǒ)示:
seg_sel是(shì)用(yòng)assign方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)wire,其共(gòng)有(yǒu)8根(gēn)線(xiàn),即位宽(kuān)为(wèi)8。編輯模式下(xià)輸入(rù)“Reg8”調用(yòng)至(zhì)簡設計(jì)法模板,補充完整後(hòu)得到(dào)代(dài)碼表(biǎo)示如(rú)下(xià):
seg_ment是(shì)用(yòng)always方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)reg,其用(yòng)7根(gēn)線(xiàn)表(biǎo)示,即位宽(kuān)为(wèi)7。代(dài)碼表(biǎo)示如(rú)下(xià):
x是(shì)用(yòng)always方(fāng)式設計(jì)的(de),因(yīn)此(cǐ)類(lèi)型为(wèi)reg,其位數與(yǔ)cnt0一(yī)致(zhì),都是(shì)20位位宽(kuān)。x的(de)定(dìng)義代(dài)碼表(biǎo)示如(rú)下(xià):
至(zhì)此(cǐ),整个(gè)代(dài)碼的(de)設計(jì)工作已經(jīng)完成(chéng)。整體(tǐ)代(dài)碼如(rú)下(xià):
整个(gè)代(dài)碼的(de)設計(jì)工作已經(jīng)完成(chéng),接下(xià)来(lái)将新建工程并上(shàng)板查看(kàn)現(xiàn)象(xiàng)。在(zài)上(shàng)板之前(qián),建議再檢查一(yī)遍(biàn)有(yǒu)沒(méi)有(yǒu)遺漏或(huò)者(zhě)不(bù)懂的(de)地(dì)方(fāng)。授人(rén)以(yǐ)魚不(bù)如(rú)授人(rén)以(yǐ)漁,本(běn)書(shū)希望在(zài)此(cǐ)分(fēn)享朋友的(de)不(bù)止是(shì)一(yī)个(gè)設計(jì),更(gèng)想(xiǎng)讓各(gè)位学会(huì)至(zhì)簡設計(jì)法的(de)設計(jì)方(fāng)法與(yǔ)思(sī)路(lù),逐漸掌握独立思(sī)考和(hé)設計(jì)工程的(de)技能(néng)。掌握了(le)一(yī)个(gè)設計(jì)会(huì)带(dài)来(lái)階(jiē)段(duàn)性(xìng)的(de)便捷,但是(shì)学会(huì)了(le)这(zhè)項技能(néng)可(kě)以(yǐ)終(zhōng)身(shēn)受益。所(suǒ)以(yǐ)希望读(dú)者(zhě)遇到(dào)不(bù)理解(jiě)的(de)地(dì)方(fāng)时(shí)一(yī)定(dìng)多(duō)多(duō)鑽(zuàn)研,直(zhí)到(dào)真(zhēn)正(zhèng)弄懂弄通(tòng)为(wèi)止。
第(dì)4节(jié) 綜合與(yǔ)上(shàng)板
4.1 新建工程
打(dǎ)開(kāi)软(ruǎn)件(jiàn)Quartus Ⅱ,點(diǎn)擊“File”下(xià)拉列表(biǎo)中(zhōng)的(de)New Project Wzard...新建工程選項,如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.6-8Quartus新建工程
随後(hòu)会(huì)出(chū)現(xiàn)Quartus新建工程介紹,如(rú)下(xià)图(tú)所(suǒ)示,直(zhí)接點(diǎn)擊“Next”。

图(tú)3.6-9Quartus新建工程介紹
此(cǐ)时(shí)会(huì)出(chū)現(xiàn)工程文(wén)件(jiàn)夾、工程名、頂层模块(kuài)名設置界面(miàn),如(rú)图(tú)3.6- 10所(suǒ)示。設置目录(lù)为(wèi):D:/mdy_book/miaobiao,工程名和(hé)頂层名为(wèi)miaobiao。再次(cì)強(qiáng)調,为(wèi)了(le)避免初学者(zhě)在(zài)後(hòu)續操作中(zhōng)出(chū)現(xiàn)報錯情(qíng)況,強(qiáng)烈建議設置的(de)文(wén)件(jiàn)目录(lù)和(hé)工程名稱與(yǔ)本(běn)書(shū)保持(chí)一(yī)致(zhì)。設置完成(chéng)後(hòu)點(diǎn)擊“Next”。

图(tú)3.6-10QUARTUS新建工程設置名稱
新建工程類(lèi)型設置選擇“Empty project”,如(rú)下(xià)图(tú)所(suǒ)示,然後(hòu)點(diǎn)擊“Next”。

图(tú)3.6-11QUARTUS新建工程類(lèi)型
文(wén)件(jiàn)添加界面(miàn)如(rú)图(tú)3.6- 12所(suǒ)示,點(diǎn)擊右(yòu)側的(de)“Add”按鈕,添加已經(jīng)写好(hǎo)的(de)“miaobian.v”文(wén)件(jiàn),可(kě)以(yǐ)看(kàn)到(dào)界面(miàn)下(xià)方(fāng)会(huì)顯示出(chū)文(wén)件(jiàn),随後(hòu)點(diǎn)擊“Next”。

图(tú)3.6-12QUARTUS添加文(wén)件(jiàn)
芯片(piàn)型号(hào)選擇界面(miàn)如(rú)图(tú)3.6- 13所(suǒ)示,選擇“Cyclone ⅣE”,在(zài)芯片(piàn)型号(hào)選擇处選擇“EP4CE15F23C8”後(hòu)點(diǎn)擊“Next”。

图(tú)3.6-13QUARTUS選擇芯片(piàn)型号(hào)
图(tú)3.6- 14为(wèi)QUARTUS設置工具界面(miàn),不(bù)必做任何修改,直(zhí)接點(diǎn)擊“Next”。

图(tú)3.6-14QUARTUS設置工具界面(miàn)
新建工程彙總(zǒng)情(qíng)況如(rú)下(xià)图(tú)所(suǒ)示,點(diǎn)擊“Finish”後(hòu)完成(chéng)新建工程。

图(tú)3.6-15QUARTUS新建工程彙總(zǒng)界面(miàn)
4.2 綜合
新建工程步驟完成(chéng)後(hòu)会(huì)出(chū)現(xiàn)如(rú)下(xià)所(suǒ)示的(de)QUARTUS界面(miàn)。

图(tú)3.6-16QUARTUS新建工程後(hòu)界面(miàn)
點(diǎn)擊編譯按鈕,可(kě)以(yǐ)对(duì)整个(gè)工程進(jìn)行編譯。編譯成(chéng)功的(de)界面(miàn)如(rú)图(tú)3.6- 17所(suǒ)示。

图(tú)3.6-17QUARTUS編譯後(hòu)界面(miàn)
4.3 配置管(guǎn)脚
下(xià)面(miàn)需要(yào)对(duì)相應(yìng)管(guǎn)脚進(jìn)行配置。如(rú)下(xià)图(tú)所(suǒ)示,在(zài)菜單欄中(zhōng)選中(zhōng)“Assignments”,然後(hòu)選擇“Pin Planner”,随後(hòu)会(huì)弹出(chū)配置管(guǎn)脚的(de)窗(chuāng)口(kǒu)。

图(tú)3.6-18QUARTUS配置管(guǎn)脚選項
在(zài)配置窗(chuāng)口(kǒu)最(zuì)下(xià)方(fāng)中(zhōng)的(de)“location”一(yī)列,參考信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì),按照表(biǎo)3.6- 1中(zhōng)最(zuì)右(yòu)两(liǎng)列配置好(hǎo)FPGA管(guǎn)脚。配置管(guǎn)理来(lái)源參見(jiàn)管(guǎn)脚配置环(huán)节(jié),最(zuì)終(zhōng)配置的(de)結果(guǒ)如(rú)图(tú)3.6- 19。配置完成(chéng)後(hòu),關(guān)閉“Pin Planner”,软(ruǎn)件(jiàn)自(zì)動(dòng)会(huì)保存管(guǎn)脚配置信(xìn)息。
表(biǎo)3.6 - 1信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)

图(tú)3.6-19 QUARTUS配置管(guǎn)脚
4.4 再次(cì)綜合
再次(cì)打(dǎ)開(kāi)“QUARTUS”软(ruǎn)件(jiàn),在(zài)菜單欄中(zhōng)選中(zhōng)“Processing”,然後(hòu)選擇“Start Compilation”,再次(cì)对(duì)整个(gè)工程進(jìn)行編譯和(hé)綜合,如(rú)下(xià)图(tú)所(suǒ)示。

图(tú)3.6-20QUARTUS編譯選項
當出(chū)現(xiàn)如(rú)下(xià)所(suǒ)示的(de)編譯成(chéng)功标(biāo)志时(shí)則说(shuō)明(míng)編譯綜合成(chéng)功。

图(tú)3.6-21QUARTUS編譯成(chéng)功标(biāo)志
4.5 連(lián)接開(kāi)發(fà)板
完成(chéng)編譯後(hòu)開(kāi)始進(jìn)行上(shàng)板調試操作,按照下(xià)图(tú)的(de)方(fāng)式,将下(xià)载器接入(rù)電(diàn)腦USB接口(kǒu),接上(shàng)開(kāi)發(fà)板電(diàn)源後(hòu)按下(xià)開(kāi)發(fà)板下(xià)方(fāng)藍(lán)色(sè)開(kāi)關(guān),硬(yìng)件(jiàn)連(lián)接完畢。

图(tú)3.6-22開(kāi)發(fà)板連(lián)接图(tú)
4.6 上(shàng)板
打(dǎ)開(kāi)QUARTUS界面(miàn),單擊界面(miàn)中(zhōng)的(de)“ ”,会(huì)弹出(chū)配置界面(miàn)。在(zài)界面(miàn)中(zhōng)點(diǎn)擊“add file”添加“.sof”文(wén)件(jiàn)後(hòu)點(diǎn)擊“Start”,会(huì)在(zài)“Progress”出(chū)現(xiàn)顯示進(jìn)度(dù)。

图(tú)3.6-23QUARTUS界面(miàn)
當進(jìn)度(dù)条(tiáo)到(dào)100%时(shí)提(tí)示成(chéng)功,如(rú)下(xià)图(tú)所(suǒ)示,此(cǐ)时(shí)即可(kě)在(zài)開(kāi)發(fà)板上(shàng)观察到(dào)相應(yìng)的(de)現(xiàn)象(xiàng)。

图(tú)3.6-24QUARTUS下(xià)载程序界面(miàn)
如(rú)果(guǒ)操作沒(méi)有(yǒu)錯誤,此(cǐ)时(shí)可(kě)以(yǐ)观察到(dào)數碼管(guǎn)像秒(miǎo)表(biǎo)計(jì)时(shí)一(yī)樣(yàng)顯示數字(zì),如(rú)果(guǒ)顯示的(de)时(shí)間(jiān)間(jiān)隔或(huò)者(zhě)數字(zì)發(fà)生(shēng)錯誤,則需要(yào)從头(tóu)開(kāi)始進(jìn)行錯誤排查。如(rú)果(guǒ)无法自(zì)己完成(chéng)錯誤排查的(de)話(huà),可(kě)以(yǐ)重(zhòng)新按照步驟操作一(yī)遍(biàn),相信(xìn)一(yī)定(dìng)会(huì)有(yǒu)更(gèng)多(duō)的(de)收(shōu)獲。
第(dì)5节(jié) 簡化(huà)版步驟分(fēn)享
这(zhè)里(lǐ)依旧(jiù)会(huì)分(fēn)享簡化(huà)版的(de)步驟,方(fāng)便掌握基礎原理後(hòu)進(jìn)行反(fǎn)複操作複習。
5.1 設計(jì)实現(xiàn)
5.1.1 頂层信(xìn)号(hào)
新建目录(lù):D:mdy_bookmy_time。在(zài)該目录(lù)中(zhōng),新建一(yī)个(gè)名为(wèi)my_time.v的(de)文(wén)件(jiàn),用(yòng)GVIM打(dǎ)開(kāi)後(hòu)開(kāi)始編写代(dài)碼。
确定(dìng)頂层信(xìn)号(hào)。工程信(xìn)号(hào)和(hé)硬(yìng)件(jiàn)的(de)对(duì)應(yìng)關(guān)系(xì)如(rú)下(xià)表(biǎo)所(suǒ)示:
表(biǎo)3.6 - 1信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)
写出(chū)頂层信(xìn)号(hào)代(dài)碼:
聲明(míng)輸入(rù)輸出(chū)屬性(xìng):
5.1.2 信(xìn)号(hào)設計(jì)
進(jìn)行架構設計(jì)。根(gēn)據(jù)設計(jì)目标(biāo),得出(chū)波(bō)形图(tú)示意(yì)如(rú)下(xià):

图(tú)3.6-3 秒(miǎo)表(biǎo)的(de)实現(xiàn)架構图(tú)
設計(jì)計(jì)數器架構,表(biǎo)示时(shí)間(jiān)的(de)計(jì)數器cnt0的(de)代(dài)碼如(rú)下(xià):
表(biǎo)示顯示次(cì)數的(de)計(jì)數器cnt1的(de)代(dài)碼如(rú)下(xià):
設計(jì)輸出(chū)信(xìn)号(hào)seg_sel,其代(dài)碼如(rú)下(xià):
設計(jì)輸出(chū)信(xìn)号(hào)seg_ment,其代(dài)碼如(rú)下(xià):
設計(jì)變(biàn)量(liàng)x,其代(dài)碼如(rú)下(xià):
至(zhì)此(cǐ),主(zhǔ)體(tǐ)程序已經(jīng)完成(chéng),下(xià)面(miàn)将module補充完整。
5.1.3 信(xìn)号(hào)定(dìng)義
首先(xiān)定(dìng)義信(xìn)号(hào)類(lèi)型,cnt0的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
add_cnt0和(hé)end_cnt0的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
cnt1、add_cnt1和(hé)end_cnt1的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
seg_sel的(de)信(xìn)号(hào)定(dìng)義如(rú)下(xià):
seg_ment的(de)信(xìn)号(hào)定(dìng)義表(biǎo)示如(rú)下(xià):
x的(de)信(xìn)号(hào)定(dìng)義表(biǎo)示如(rú)下(xià):
至(zhì)此(cǐ),整个(gè)代(dài)碼的(de)設計(jì)工作已經(jīng)完成(chéng)。整體(tǐ)代(dài)碼如(rú)下(xià):
5.2 綜合與(yǔ)上(shàng)板
5.2.1 新建工程
接下(xià)来(lái)新建工程并上(shàng)板查看(kàn)現(xiàn)象(xiàng)。首先(xiān)打(dǎ)開(kāi)软(ruǎn)件(jiàn)Quartus Ⅱ,點(diǎn)擊“File”下(xià)拉列表(biǎo)中(zhōng)的(de)New Project Wzard...新建工程選項。

图(tú)3.6-8Quartus新建工程
直(zhí)接點(diǎn)擊“Next”。

图(tú)3.6- 9 Quartus新建工程介紹
此(cǐ)时(shí)出(chū)現(xiàn)的(de)是(shì)工程文(wén)件(jiàn)夾、工程名、頂层模块(kuài)名設置界面(miàn),設置目录(lù)为(wèi):D:/mdy_book/miaobiao,工程名和(hé)頂层名为(wèi)miaobiao,完成(chéng)設置後(hòu)點(diǎn)擊“Next”。

图(tú)3.6- 10 QUARTUS新建工程設置名稱
選擇“Empty project”後(hòu)點(diǎn)擊“Next”。

图(tú)3.6- 11 QUARTUS新建工程類(lèi)型
點(diǎn)擊右(yòu)側的(de)“Add”按鈕,選擇“miaobian.v”文(wén)件(jiàn),添加文(wén)件(jiàn)後(hòu)點(diǎn)擊“Next”。

图(tú)3.6- 12 QUARTUS添加文(wén)件(jiàn)
对(duì)芯片(piàn)型号(hào)進(jìn)行選擇:“Device family”選項中(zhōng)選擇“Cyclone ⅣE”,“Available devices”選項下(xià)選擇“EP4CE15F23C8”,随後(hòu)點(diǎn)擊“Next”。

图(tú)3.6- 13 QUARTUS選擇芯片(piàn)型号(hào)
直(zhí)接點(diǎn)擊“Next”。

图(tú)3.6- 14 QUARTUS設置工具界面(miàn)
點(diǎn)擊“Finish”,完成(chéng)新建工程。

图(tú)3.6- 15 QUARTUS新建工程彙總(zǒng)界面(miàn)
5.2.2 綜合
新建工程後(hòu)界面(miàn)如(rú)下(xià)图(tú)所(suǒ)示,點(diǎn)擊“編譯”。

图(tú)3.6- 16 QUARTUS新建工程後(hòu)界面(miàn)
編譯成(chéng)功界面(miàn)如(rú)下(xià)图(tú)。

图(tú)3.6- 17QUARTUS編譯後(hòu)界面(miàn)
5.2.3 配置管(guǎn)脚
在(zài)菜單欄點(diǎn)擊“Assignments”後(hòu)點(diǎn)擊“Pin Planner”,此(cǐ)时(shí)会(huì)弹出(chū)配置管(guǎn)脚的(de)窗(chuāng)口(kǒu)。

图(tú)3.6- 18 QUARTUS配置管(guǎn)脚選項
在(zài)配置窗(chuāng)口(kǒu)“location”根(gēn)據(jù)信(xìn)号(hào)和(hé)管(guǎn)脚關(guān)系(xì)配置管(guǎn)脚,配置完成(chéng)關(guān)閉“Pin Planner”即可(kě)自(zì)動(dòng)保存配置信(xìn)息。

图(tú)3.6- 18 QUARTUS配置管(guǎn)脚
5.2.4 再次(cì)綜合
打(dǎ)開(kāi)“QUARTUS”软(ruǎn)件(jiàn),在(zài)菜單欄中(zhōng)選擇“Processing”,點(diǎn)擊“Start Compilation”。

图(tú)3.6- 19 QUARTUS編譯選項
出(chū)現(xiàn) QUARTUS 編譯成(chéng)功标(biāo)志則表(biǎo)示此(cǐ)次(cì)編譯成(chéng)功。

图(tú)3.6- 20 QUARTUS編譯成(chéng)功标(biāo)志
5.2.5 連(lián)接開(kāi)發(fà)板
下(xià)载器接入(rù)電(diàn)腦 USB 接口(kǒu),開(kāi)發(fà)板接上(shàng)電(diàn)源後(hòu)按下(xià)藍(lán)色(sè)開(kāi)關(guān)。

图(tú)3.6- 21 開(kāi)發(fà)板連(lián)接图(tú)
5.2.6 上(shàng)板
打(dǎ)開(kāi) QUARTUS 界面(miàn),單擊“
”图(tú)标(biāo)。

图(tú)3.6- 22 QUARTUS界面(miàn)
點(diǎn)擊“add file”,添加.sof文(wén)件(jiàn),随後(hòu)點(diǎn)擊“Start”。在(zài)“Progress”中(zhōng)会(huì)顯示進(jìn)度(dù),當進(jìn)度(dù)条(tiáo)顯示“100%”表(biǎo)示成(chéng)功,可(kě)在(zài)開(kāi)發(fà)板上(shàng)观察現(xiàn)象(xiàng)。

图(tú)3.6- 23 QUARTUS下(xià)载程序界面(miàn)
第(dì)6节(jié) 擴展(zhǎn)練習
至(zhì)此(cǐ),通(tòng)过(guò)數碼管(guǎn)实現(xiàn)秒(miǎo)表(biǎo)功能(néng)的(de)設計(jì)已經(jīng)分(fēn)享完畢,相信(xìn)读(dú)者(zhě)朋友已經(jīng)可(kě)以(yǐ)完全(quán)掌握这(zhè)一(yī)工程。在(zài)掌握工程的(de)基礎上(shàng)可(kě)以(yǐ)多(duō)做一(yī)些思(sī)考,在(zài)工程原理不(bù)變(biàn)的(de)基礎上(shàng)進(jìn)行一(yī)定(dìng)的(de)數據(jù)調整,比如(rú)对(duì)計(jì)數时(shí)間(jiān)進(jìn)行改變(biàn)或(huò)嘗試改變(biàn)顯示數碼管(guǎn)个(gè)數等,挑戰独立完成(chéng)多(duō)个(gè)設計(jì)。也(yě)欢迎有(yǒu)更(gèng)好(hǎo)思(sī)路(lù)和(hé)想(xiǎng)法的(de)同(tóng)学前(qián)往至(zhì)簡設計(jì)法論壇上(shàng)進(jìn)行讨論。








