很多(duō)同(tóng)学提(tí)問(wèn)到(dào)鎖存器的(de)相關(guān)問(wèn)題(tí),说(shuō)明(míng)大家(jiā)对(duì)这(zhè)方(fāng)面(miàn)知識還(huán)不(bù)是(shì)很了(le)解(jiě),今天(tiān)我(wǒ)们(men)就(jiù)来(lái)探讨一(yī)下(xià)。

上(shàng)面(miàn)是(shì)两(liǎng)个(gè)沒(méi)有(yǒu)else的(de)代(dài)碼,其等效于(yú)下(xià)面(miàn)的(de)代(dài)碼。

也(yě)就(jiù)是(shì)说(shuō),當if条(tiáo)件(jiàn)里(lǐ)面(miàn)沒(méi)有(yǒu)写else时(shí),默認是(shì)表(biǎo)示“保持(chí)不(bù)變(biàn)”的(de)意(yì)思(sī)。
接下(xià)来(lái),我(wǒ)们(men)来(lái)讨論一(yī)下(xià),硬(yìng)件(jiàn)中(zhōng)是(shì)如(rú)何实現(xiàn)“保持(chí)不(bù)變(biàn)”的(de)。

左(zuǒ)邊(biān)是(shì)时(shí)序时(shí)序邏輯的(de)代(dài)碼,右(yòu)邊(biān)是(shì)該代(dài)碼所(suǒ)对(duì)應(yìng)的(de)硬(yìng)件(jiàn)電(diàn)路(lù)。特(tè)别注意(yì)图(tú)中(zhōng)紅(hóng)色(sè)的(de)那(nà)个(gè)線(xiàn),那(nà)个(gè)就(jiù)是(shì)保持(chí)不(bù)變(biàn)的(de)“反(fǎn)饋”。由(yóu)图(tú)中(zhōng)可(kě)以(yǐ)看(kàn)出(chū),當时(shí)鐘(zhōng)上(shàng)升(shēng)沿的(de)时(shí)候,當選擇器的(de)結果(guǒ)賦值給(gěi)信(xìn)号(hào)b;非(fēi)上(shàng)升(shēng)沿的(de)时(shí)候,b一(yī)直(zhí)保持(chí)不(bù)變(biàn),因(yīn)此(cǐ)紅(hóng)色(sè)線(xiàn)在(zài)此(cǐ)期(qī)間(jiān)也(yě)是(shì)保持(chí)不(bù)變(biàn)的(de)。當a为(wèi)0的(de)时(shí)候,選擇器選擇當前(qián)b的(de)結果(guǒ),然後(hòu)在(zài)下(xià)一(yī)个(gè)时(shí)鐘(zhōng)上(shàng)升(shēng)沿賦給(gěi)信(xìn)号(hào)b。
由(yóu)引可(kě)見(jiàn),实現(xiàn)“保持(chí)不(bù)變(biàn)”的(de)關(guān)鍵在(zài)于(yú)D寄存器。
衆所(suǒ)周知,組合邏輯代(dài)碼是(shì)沒(méi)有(yǒu)D寄存器的(de),那(nà)麼(me)它(tā)又是(shì)如(rú)何实現(xiàn)保持(chí)不(bù)變(biàn)呢?这(zhè)个(gè)就(jiù)会(huì)用(yòng)到(dào)鎖存器了(le)。

上(shàng)图(tú)左(zuǒ)邊(biān)是(shì)組合邏輯代(dài)碼,右(yòu)邊(biān)是(shì)其電(diàn)路(lù)。为(wèi)了(le)讓信(xìn)号(hào)b保持(chí)不(bù)變(biàn),就(jiù)要(yào)用(yòng)到(dào)一(yī)个(gè)叫“鎖存器”的(de)器件(jiàn)。當a为(wèi)1时(shí),b就(jiù)会(huì)等于(yú)1;當a为(wèi)0时(shí),b会(huì)保持(chí)不(bù)變(biàn)。
關(guān)于(yú)鎖存器的(de)危害,可(kě)以(yǐ)參考MDY的(de)“FPGA知識大串講”視頻,總(zǒng)之我(wǒ)们(men)知道(dào)鎖存器是(shì)不(bù)好(hǎo)東(dōng)西(xī)的(de),盡量(liàng)不(bù)要(yào)有(yǒu)鎖存器,也(yě)就(jiù)是(shì)说(shuō)組合邏輯里(lǐ),要(yào)讓“if else”条(tiáo)件(jiàn)補全(quán)。
常見(jiàn)問(wèn)題(tí)
問(wèn)1:是(shì)不(bù)是(shì)所(suǒ)有(yǒu)的(de)代(dài)碼,if else都需要(yào)補全(quán)呢?
答(dá):如(rú)前(qián)面(miàn)所(suǒ)讨論的(de),对(duì)于(yú)时(shí)序邏輯可(kě)以(yǐ)由(yóu)D寄存器实現(xiàn)“保持(chí)不(bù)變(biàn)”,所(suǒ)以(yǐ)时(shí)序邏輯是(shì)不(bù)需要(yào)補全(quán)的(de),只(zhī)有(yǒu)組合邏輯才需要(yào)。
問(wèn)2:是(shì)不(bù)是(shì)只(zhī)要(yào)組合邏輯的(de)if else補充了(le),就(jiù)不(bù)会(huì)生(shēng)成(chéng)鎖存器了(le)?
答(dá):不(bù)一(yī)定(dìng)。这(zhè)里(lǐ)的(de)關(guān)鍵在(zài)于(yú)“保持(chí)不(bù)變(biàn)”,千(qiān)万(wàn)不(bù)要(yào)從“代(dài)碼层次(cì)”来(lái)理解(jiě),而(ér)應(yìng)該從“功能(néng)的(de)层次(cì)”来(lái)理解(jiě),要(yào)找(zhǎo)準到(dào)底有(yǒu)沒(méi)有(yǒu)“保持(chí)不(bù)變(biàn)”。例如(rú),下(xià)面(miàn)的(de)代(dài)碼,虽然else写上(shàng)去(qù)了(le),但写不(bù)写else都是(shì)讓b保持(chí)不(bù)變(biàn)。所(suǒ)以(yǐ)这(zhè)仍然会(huì)綜合出(chū)鎖存器。
問(wèn)3:是(shì)不(bù)是(shì)組合邏輯不(bù)写else,就(jiù)一(yī)定(dìng)会(huì)生(shēng)成(chéng)鎖存器?
答(dá):不(bù)一(yī)定(dìng)。这(zhè)里(lǐ)仍然要(yào)從是(shì)否包(bāo)括“保持(chí)不(bù)變(biàn)”这(zhè)个(gè)功能(néng)来(lái)分(fēn)析。如(rú)下(xià)面(miàn)代(dài)碼,假設a是(shì)1比特(tè)信(xìn)号(hào),其值只(zhī)有(yǒu)0和(hé)1。那(nà)麼(me)已經(jīng)涵蓋了(le)所(suǒ)有(yǒu)情(qíng)況,再不(bù)会(huì)有(yǒu)其他(tā)情(qíng)況,所(suǒ)以(yǐ)不(bù)会(huì)出(chū)現(xiàn)保持(chí)不(bù)變(biàn)的(de)情(qíng)形,这(zhè)个(gè)时(shí)候也(yě)不(bù)会(huì)生(shēng)成(chéng)鎖存器。

問(wèn)4:case不(bù)写default,是(shì)否会(huì)生(shēng)成(chéng)鎖存器?
答(dá):case不(bù)写default,相當于(yú)if条(tiáo)件(jiàn)不(bù)写else,其情(qíng)況分(fēn)析跟前(qián)面(miàn)3个(gè)問(wèn)題(tí)一(yī)樣(yàng),關(guān)鍵在(zài)于(yú)有(yǒu)沒(méi)有(yǒu)“保持(chí)不(bù)變(biàn)”的(de)功能(néng)。
問(wèn)5:功能(néng)上(shàng),我(wǒ)一(yī)定(dìng)要(yào)实現(xiàn)“組合邏輯的(de)保持(chí)不(bù)變(biàn)”功能(néng),該如(rú)何做?
答(dá):通(tòng)常来(lái)说(shuō),所(suǒ)謂“組合邏輯的(de)保持(chí)不(bù)變(biàn)”,是(shì)指“該段(duàn)代(dài)碼”是(shì)組合邏輯写的(de),但需要(yào)與(yǔ)前(qián)一(yī)个(gè)时(shí)鐘(zhōng)的(de)值保持(chí)不(bù)變(biàn),如(rú)下(xià)代(dài)碼,这(zhè)種(zhǒng)需求是(shì)很正(zhèng)常的(de)。
解(jiě)決方(fāng)法,仍然是(shì)靠D觸發(fà)器来(lái)实現(xiàn)“保持(chí)不(bù)變(biàn)”的(de)功能(néng)。只(zhī)不(bù)过(guò)是(shì)把一(yī)个(gè)时(shí)序邏輯的(de)ALWAYS写法,換成(chéng)組合邏輯+时(shí)鐘(zhōng)邏輯的(de)写法而(ér)已,代(dài)碼如(rú)下(xià)。

問(wèn)6:問(wèn)題(tí)5的(de)擴展(zhǎn),我(wǒ)就(jiù)是(shì)要(yào)实現(xiàn)組合邏輯的(de)保持(chí),并且小于(yú)一(yī)个(gè)时(shí)鐘(zhōng)周期(qī)的(de)。
答(dá):不(bù)正(zhèng)常需求,FPGA不(bù)会(huì)这(zhè)麼(me)設計(jì)的(de)。








