最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

邏輯運算符

2022-12-19 08:35 作者:明德?lián)P易老師  | 我要投稿

本節(jié)的文檔編號:001100000061

需要看對應(yīng)的視頻,請點擊視頻編號:001100000061

1、本節(jié)主要進行組合邏輯的介紹,包括:程序語句(assign語句、always語句),數(shù)字進制(二進制、不定態(tài)、高阻態(tài)),算數(shù)運算符(加、減、乘、除運算符),邏輯運算符(邏輯與、或、非運算符),按位邏輯運算符(單目按位與、或、非運算符,雙目按位與、或、異或運算符),關(guān)系運算符,移位運算符(左移、右移運算符),條件運算符(三目運算符、if語句、case語句、選擇語句等),拼接運算符;
2、這是ALTERA和VIVADO文檔


5.4?邏輯運算符



在Verilog HDL語言中存在3種邏輯運算符,它們分別是:

(1)&&:邏輯與;

(2)?| |??:邏輯或;

(3)!:邏輯非。


5.4.1邏輯與

“&&”是雙目運算符,其要求有兩個操作數(shù),如a && b。


(1)1位邏輯與

A和B都為1時,C為1,否則C為0。

對應(yīng)硬件電路圖如下所示:

(2)多位邏輯與


對應(yīng)硬件電路圖如下所示:

5.4.2邏輯或

“||”是雙目運算符,其要求有兩個操作數(shù),如?a||b。

(1)1位邏輯或


A和B其中1個為1,C為1,否則C為0。

對應(yīng)硬件電路圖如下圖所示:

(2)多位邏輯或


A和B其中1個非0,C為1,否則C為0。

對應(yīng)硬件電路圖如下圖所示:

5.4.3邏輯非

“!”是單目運算符,只要求有一個操作數(shù),如!(a>b)。

對操作數(shù)a需要先判斷非a是否為真,為真就執(zhí)行{}內(nèi)的操作,為假的話就結(jié)束操作。

下表為邏輯運算的真值表,其表示當(dāng)a和b的值為不同的組合時各種邏輯運算所得到的值。


表1.3- 10邏輯運算的真值表



邏輯運算符最后的結(jié)果只有邏輯真或邏輯假兩種,即1或0。

一般情況下用邏輯運算符作判斷條件時邏輯與操作只能是兩個1位寬的數(shù),

只有兩個表達式同時為真才為真,有一個為假則為假。

如果操作數(shù)是多位的,則可以將操作數(shù)看做整體,

若操作數(shù)中每一位都是0值則為邏輯0值;若操作數(shù)中有1則為邏輯1值。

由于4’b0111和4’b1000都不是0,不為0則被認(rèn)為是邏輯真,所以上面的代碼等效于如下代碼。

也就是結(jié)果為a為邏輯真,b為邏輯真,c為邏輯假。


5.4.4經(jīng)驗總結(jié)

  • 邏輯運算符的優(yōu)先級

邏輯運算符中“&&”和“||”的優(yōu)先級低于算數(shù)運算符;“!”的優(yōu)先級高于雙目邏輯運算符。

舉例如下:

  • 邏輯運算符兩邊對應(yīng)的是1比特信號


筆者使用心得:邏輯運算符兩邊對應(yīng)的是1比特信號


請讀者注意上文代碼,其中a和b都是多比特信號,表示兩個多比特信號進行邏輯與。

這句代碼的正確理解是:當(dāng)a不等于0?并且?b不等于0時,d的值為1。

然而即使是有過多年工作經(jīng)驗的工程師也很難從直觀上直接理解上文代碼所隱含的意思。

不等于0就是表示邏輯真,等于0就表示邏輯假的這一概念很容易被忽略。


因此上文代碼,雖然從功能上沒有錯誤,但設(shè)計師在設(shè)計中不應(yīng)該以炫耀技術(shù)為目的進行代碼編寫,

而且這種寫法很容易出現(xiàn)誤設(shè)計的情況,例如可能原本要表達?assign d =a & b,

但最后由于設(shè)計不夠直觀而寫成了上面的代碼,導(dǎo)致設(shè)計出現(xiàn)問題。因此在設(shè)計中寫出直觀能理解,

讓自己與他者看到代碼時可以立刻明白代碼的意思非常重要,所以筆者建議上面代碼寫成如下形式。


  • 多用括號區(qū)分優(yōu)先級

筆者使用心得2:不要試圖記住優(yōu)先級,而是要多用括號


實際上,工程師們在工作中并不會記住所有優(yōu)先級排序,

記住所有的優(yōu)先級的這一工作也并不會大幅度的提升工程師的工作效率。在設(shè)計中可能會遇到如下所示代碼:

(1)a < b && c > d?;

(2)a = = b | | c = = d?;

(3)!a | | a > b?。

假如沒有記住運算符的優(yōu)先級,遇到類似這三個例子的情況時勢必會花一定的時間來理清思路,

思考究竟先判斷哪部分。假如工程師能夠記住優(yōu)先級,也需要就這些代碼進行溝通和檢查的工作,

而且人是容易犯錯的,而這些錯誤經(jīng)常會被忽略,很難被檢查出來。

因此,為了提高程序的可讀性,明確表達各運算符間的優(yōu)先關(guān)系,筆者建議讀者在設(shè)計時多使用括號。

上面的三個例子就可分別寫成:

1)(a < b)&&(c > d);

2)(a = = b)| |(c = = d);

3)(!a)| |(a > b)。


  • 少用邏輯非

筆者使用心得3:多用“邏輯與”和“邏輯或”,少用邏輯非

“邏輯與”翻譯成中文就是“并且”,“邏輯或”翻譯成中文就是“或者”。

假設(shè)有一個信號flag,0表示空閑,1表示忙?!?!(flag==0)&& a==4’b1000)”,

讀起來就是“在空閑的時候取其反狀態(tài),并且當(dāng)a等于4’b1000時條件成立”。

這樣讀起來非常拗口,并且在閱讀這一代碼時還需要腦袋還要多轉(zhuǎn)一下彎,多進行一層思考。

為了讓代碼更加直觀,筆者建議上面的例子寫成“flag==1 && a==4’b1000”,

讀起來就是“在忙并且?a等于4’b1000的時候”條件成立。


相關(guān)視頻:https://www.bilibili.com/video/BV1yf4y1R7gH?p=15



邏輯運算符的評論 (共 條)

分享到微博請遵守國家法律
吉安县| 保康县| 沭阳县| 鸡东县| 台东县| 闸北区| 锦屏县| 察隅县| 班玛县| 沧源| 博湖县| 车致| 永和县| 明光市| 仁寿县| 张家界市| 肇庆市| 英德市| 津市市| 田东县| 青川县| 鹤壁市| 乐清市| 西华县| 大田县| 英山县| 张家港市| 布拖县| 石首市| 阜南县| 大冶市| 双辽市| 镇坪县| 登封市| 太原市| 天柱县| 张家川| 湘潭市| 宁城县| 隆昌县| 若尔盖县|