本(běn)节(jié)的(de)文(wén)檔編号(hào):001100000061
需要(yào)看(kàn)对(duì)應(yìng)的(de)視頻,請點(diǎn)擊視頻編号(hào):001100000061
1、本(běn)节(jié)主(zhǔ)要(yào)進(jìn)行組合邏輯的(de)介紹,包(bāo)括:程序語(yǔ)句(jù)(assign語(yǔ)句(jù)、always語(yǔ)句(jù)),數字(zì)進(jìn)制(二(èr)進(jìn)制、不(bù)定(dìng)态、高(gāo)阻态),算數運算符(加、減、乘、除運算符),邏輯運算符(邏輯與(yǔ)、或(huò)、非(fēi)運算符),按位邏輯運算符(單目按位與(yǔ)、或(huò)、非(fēi)運算符,双(shuāng)目按位與(yǔ)、或(huò)、异(yì)或(huò)運算符),關(guān)系(xì)運算符,移位運算符(左(zuǒ)移、右(yòu)移運算符),条(tiáo)件(jiàn)運算符(三(sān)目運算符、if語(yǔ)句(jù)、case語(yǔ)句(jù)、選擇語(yǔ)句(jù)等),拼接運算符;
2、这(zhè)是(shì)ALTERA和(hé)VIVADO文(wén)檔
|
5.4 邏輯運算符
在(zài)Verilog HDL語(yǔ)言中(zhōng)存在(zài)3種(zhǒng)邏輯運算符,它(tā)们(men)分(fēn)别是(shì):
(1)&&:邏輯與(yǔ);
(2) | | :邏輯或(huò);
(3)!:邏輯非(fēi)。
“&&”是(shì)双(shuāng)目運算符,其要(yào)求有(yǒu)两(liǎng)个(gè)操作數,如(rú)a && b。
(1)1位邏輯與(yǔ)
A和(hé)B都为(wèi)1时(shí),C为(wèi)1,否則C为(wèi)0。
对(duì)應(yìng)硬(yìng)件(jiàn)電(diàn)路(lù)图(tú)如(rú)下(xià)所(suǒ)示:
(2)多(duō)位邏輯與(yǔ)
A或(huò)B都不(bù)为(wèi)0时(shí),C为(wèi)1,否則为(wèi)0。
对(duì)應(yìng)硬(yìng)件(jiàn)電(diàn)路(lù)图(tú)如(rú)下(xià)所(suǒ)示:
“||”是(shì)双(shuāng)目運算符,其要(yào)求有(yǒu)两(liǎng)个(gè)操作數,如(rú) a||b。
(1)1位邏輯或(huò)
A和(hé)B其中(zhōng)1个(gè)为(wèi)1,C为(wèi)1,否則C为(wèi)0。
对(duì)應(yìng)硬(yìng)件(jiàn)電(diàn)路(lù)图(tú)如(rú)下(xià)图(tú)所(suǒ)示:
(2)多(duō)位邏輯或(huò)
A和(hé)B其中(zhōng)1个(gè)非(fēi)0,C为(wèi)1,否則C为(wèi)0。
对(duì)應(yìng)硬(yìng)件(jiàn)電(diàn)路(lù)图(tú)如(rú)下(xià)图(tú)所(suǒ)示:
“!”是(shì)單目運算符,只(zhī)要(yào)求有(yǒu)一(yī)个(gè)操作數,如(rú)!(a>b)。
对(duì)操作數a需要(yào)先(xiān)判斷非(fēi)a是(shì)否为(wèi)真(zhēn),为(wèi)真(zhēn)就(jiù)執行{}內(nèi)的(de)操作,为(wèi)假的(de)話(huà)就(jiù)結束(shù)操作。
下(xià)表(biǎo)为(wèi)邏輯運算的(de)真(zhēn)值表(biǎo),其表(biǎo)示當a和(hé)b的(de)值为(wèi)不(bù)同(tóng)的(de)組合时(shí)各(gè)種(zhǒng)邏輯運算所(suǒ)得到(dào)的(de)值。
表(biǎo)1.3- 10邏輯運算的(de)真(zhēn)值表(biǎo) 邏輯運算符最(zuì)後(hòu)的(de)結果(guǒ)只(zhī)有(yǒu)邏輯真(zhēn)或(huò)邏輯假两(liǎng)種(zhǒng),即1或(huò)0。 一(yī)般情(qíng)況下(xià)用(yòng)邏輯運算符作判斷条(tiáo)件(jiàn)时(shí)邏輯與(yǔ)操作只(zhī)能(néng)是(shì)两(liǎng)个(gè)1位宽(kuān)的(de)數, 只(zhī)有(yǒu)两(liǎng)个(gè)表(biǎo)达(dá)式同(tóng)时(shí)为(wèi)真(zhēn)才为(wèi)真(zhēn),有(yǒu)一(yī)个(gè)为(wèi)假則为(wèi)假。 如(rú)果(guǒ)操作數是(shì)多(duō)位的(de),則可(kě)以(yǐ)将操作數看(kàn)做整體(tǐ), 若操作數中(zhōng)每一(yī)位都是(shì)0值則为(wèi)邏輯0值;若操作數中(zhōng)有(yǒu)1則为(wèi)邏輯1值。
由(yóu)于(yú)4’b0111和(hé)4’b1000都不(bù)是(shì)0,不(bù)为(wèi)0則被(bèi)認为(wèi)是(shì)邏輯真(zhēn),所(suǒ)以(yǐ)上(shàng)面(miàn)的(de)代(dài)碼等效于(yú)如(rú)下(xià)代(dài)碼。
也(yě)就(jiù)是(shì)結果(guǒ)为(wèi)a为(wèi)邏輯真(zhēn),b为(wèi)邏輯真(zhēn),c为(wèi)邏輯假。
邏輯運算符中(zhōng)“&&”和(hé)“||”的(de)优先(xiān)級低于(yú)算數運算符;“!”的(de)优先(xiān)級高(gāo)于(yú)双(shuāng)目邏輯運算符。
舉例如(rú)下(xià):
笔(bǐ)者(zhě)使用(yòng)心(xīn)得:邏輯運算符两(liǎng)邊(biān)对(duì)應(yìng)的(de)是(shì)1比特(tè)信(xìn)号(hào)
請读(dú)者(zhě)注意(yì)上(shàng)文(wén)代(dài)碼,其中(zhōng)a和(hé)b都是(shì)多(duō)比特(tè)信(xìn)号(hào),表(biǎo)示两(liǎng)个(gè)多(duō)比特(tè)信(xìn)号(hào)進(jìn)行邏輯與(yǔ)。 这(zhè)句(jù)代(dài)碼的(de)正(zhèng)确理解(jiě)是(shì):當a不(bù)等于(yú)0 并且 b不(bù)等于(yú)0时(shí),d的(de)值为(wèi)1。 然而(ér)即使是(shì)有(yǒu)过(guò)多(duō)年(nián)工作經(jīng)验(yàn)的(de)工程师(shī)也(yě)很難從直(zhí)观上(shàng)直(zhí)接理解(jiě)上(shàng)文(wén)代(dài)碼所(suǒ)隐含的(de)意(yì)思(sī)。 不(bù)等于(yú)0就(jiù)是(shì)表(biǎo)示邏輯真(zhēn),等于(yú)0就(jiù)表(biǎo)示邏輯假的(de)这(zhè)一(yī)概念很容易被(bèi)忽略。 因(yīn)此(cǐ)上(shàng)文(wén)代(dài)碼,虽然從功能(néng)上(shàng)沒(méi)有(yǒu)錯誤,但設計(jì)师(shī)在(zài)設計(jì)中(zhōng)不(bù)應(yìng)該以(yǐ)炫耀技術(shù)为(wèi)目的(de)進(jìn)行代(dài)碼編写, 而(ér)且这(zhè)種(zhǒng)写法很容易出(chū)現(xiàn)誤設計(jì)的(de)情(qíng)況,例如(rú)可(kě)能(néng)原本(běn)要(yào)表(biǎo)达(dá) assign d =a & b, 但最(zuì)後(hòu)由(yóu)于(yú)設計(jì)不(bù)够直(zhí)观而(ér)写成(chéng)了(le)上(shàng)面(miàn)的(de)代(dài)碼,導致(zhì)設計(jì)出(chū)現(xiàn)問(wèn)題(tí)。因(yīn)此(cǐ)在(zài)設計(jì)中(zhōng)写出(chū)直(zhí)观能(néng)理解(jiě), 讓自(zì)己與(yǔ)他(tā)者(zhě)看(kàn)到(dào)代(dài)碼时(shí)可(kě)以(yǐ)立刻明(míng)白代(dài)碼的(de)意(yì)思(sī)非(fēi)常重(zhòng)要(yào),所(suǒ)以(yǐ)笔(bǐ)者(zhě)建議上(shàng)面(miàn)代(dài)碼写成(chéng)如(rú)下(xià)形式。
笔(bǐ)者(zhě)使用(yòng)心(xīn)得2:不(bù)要(yào)試图(tú)記(jì)住优先(xiān)級,而(ér)是(shì)要(yào)多(duō)用(yòng)括号(hào)
实際上(shàng),工程师(shī)们(men)在(zài)工作中(zhōng)并不(bù)会(huì)記(jì)住所(suǒ)有(yǒu)优先(xiān)級排序, 記(jì)住所(suǒ)有(yǒu)的(de)优先(xiān)級的(de)这(zhè)一(yī)工作也(yě)并不(bù)会(huì)大幅度(dù)的(de)提(tí)升(shēng)工程师(shī)的(de)工作效率。在(zài)設計(jì)中(zhōng)可(kě)能(néng)会(huì)遇到(dào)如(rú)下(xià)所(suǒ)示代(dài)碼:
(1)a < b && c > d ;
(2)a = = b | | c = = d ;
(3)!a | | a > b 。
假如(rú)沒(méi)有(yǒu)記(jì)住運算符的(de)优先(xiān)級,遇到(dào)類(lèi)似这(zhè)三(sān)个(gè)例子的(de)情(qíng)況时(shí)勢必会(huì)花一(yī)定(dìng)的(de)时(shí)間(jiān)来(lái)理清(qīng)思(sī)路(lù), 思(sī)考究竟先(xiān)判斷哪部(bù)分(fēn)。假如(rú)工程师(shī)能(néng)够記(jì)住优先(xiān)級,也(yě)需要(yào)就(jiù)这(zhè)些代(dài)碼進(jìn)行沟(gōu)通(tòng)和(hé)檢查的(de)工作, 而(ér)且人(rén)是(shì)容易犯錯的(de),而(ér)这(zhè)些錯誤經(jīng)常会(huì)被(bèi)忽略,很難被(bèi)檢查出(chū)来(lái)。 因(yīn)此(cǐ),为(wèi)了(le)提(tí)高(gāo)程序的(de)可(kě)读(dú)性(xìng),明(míng)确表(biǎo)达(dá)各(gè)運算符間(jiān)的(de)优先(xiān)關(guān)系(xì),笔(bǐ)者(zhě)建議读(dú)者(zhě)在(zài)設計(jì)时(shí)多(duō)使用(yòng)括号(hào)。 上(shàng)面(miàn)的(de)三(sān)个(gè)例子就(jiù)可(kě)分(fēn)别写成(chéng):
1)(a < b)&&(c > d);
2)(a = = b)| |(c = = d);
3)(!a)| |(a > b)。
笔(bǐ)者(zhě)使用(yòng)心(xīn)得3:多(duō)用(yòng)“邏輯與(yǔ)”和(hé)“邏輯或(huò)”,少(shǎo)用(yòng)邏輯非(fēi)
“邏輯與(yǔ)”翻譯成(chéng)中(zhōng)文(wén)就(jiù)是(shì)“并且”,“邏輯或(huò)”翻譯成(chéng)中(zhōng)文(wén)就(jiù)是(shì)“或(huò)者(zhě)”。 假設有(yǒu)一(yī)个(gè)信(xìn)号(hào)flag,0表(biǎo)示空閑,1表(biǎo)示忙。“(!(flag==0)&& a==4’b1000)”, 读(dú)起来(lái)就(jiù)是(shì)“在(zài)空閑的(de)时(shí)候取(qǔ)其反(fǎn)狀态,并且當a等于(yú)4’b1000时(shí)条(tiáo)件(jiàn)成(chéng)立”。 这(zhè)樣(yàng)读(dú)起来(lái)非(fēi)常拗口(kǒu),并且在(zài)閱读(dú)这(zhè)一(yī)代(dài)碼时(shí)還(huán)需要(yào)腦袋(dài)還(huán)要(yào)多(duō)轉(zhuǎn)一(yī)下(xià)彎,多(duō)進(jìn)行一(yī)层思(sī)考。 为(wèi)了(le)讓代(dài)碼更(gèng)加直(zhí)观,笔(bǐ)者(zhě)建議上(shàng)面(miàn)的(de)例子写成(chéng)“flag==1 && a==4’b1000”, 读(dú)起来(lái)就(jiù)是(shì)“在(zài)忙并且 a等于(yú)4’b1000的(de)时(shí)候”条(tiáo)件(jiàn)成(chéng)立。 相關(guān)視頻:https://www.bilibili.com/video/BV1yf4y1R7gH?p=15
|








