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

算術(shù)運算符包括加法“+”、減法“-”、乘法“*”、除法“/”和求余“%”,
其中常用的算術(shù)運算符主要有:加法“+”,減法“-”和乘法“*”。
注意,常用的運算中不包括除法和求余運算符,這是由于除法和求余不是簡單的門邏輯搭建起來的,
其所對應的硬件電路比較大。
加減是最簡單的運算,而乘法可以拆解成多個加法運算,因此加減法、乘法所對應的電路都比較小。
而除法就不同了,同學們可以回想一下除法的步驟,其涉及到多次乘法、移位、加減法,
所以除法對應的電路是復雜的,
這也同時要求設(shè)計師在進行Verilog設(shè)計時要慎用除法。
5.3.1加法運算符
首先學習加法運算符,在Verilog代碼中可以直接使用符號“+”:

其電路示意圖如下所示:

綜合器可以識別加法運算符并將其轉(zhuǎn)成如上圖所示的電路。二進制的加法運算和十進制的加法相似,
十進制是逢十進一,而二進制是逢二進一。
二進制加法的基本運算如下:
0 + 0 = 0;
0 + 1 = 1;
1 + 0 = 1;
1 + 1 = 10;
兩位的二進制加法
11 + 1 = 100;
11 + 11 = 110;
…
5.3.2減法運算符
減法運算符,在Verilog代碼中可以直接使用符號“-”:

其電路示意圖如下所示:

綜合器可以識別減法運算符并將其直接轉(zhuǎn)成上圖所示的電路。
二進制的減法運算和十進制的減法運算是相似的,也有借位的概念。十進制是借一當十,二進制則是借一當二。
1位減法基本運算如下:
0 - 0 = 0;
0 - 1 = 1,同時需要借位;
1 - 0 = 1;
1 - 1 = 0?;
5.3.3乘法運算符
乘法運算符,在Verilog代碼中可以直接使用符號“*”:

其電路示意圖如下所示:

綜合器可以識別乘法運算符,將其直接轉(zhuǎn)成上圖所示的電路。二進制的乘法運算和十進制的乘法運算是相似的,
其計算過程是相同的。
1位乘法基本運算如下:
0 * 0 = 0;
0 * 1 = 0;
1 * 0 = 0;
1 * 1 = 1;
多位數(shù)之間相乘,與十進制計算過程也是相同的。
例如2’b11* 3’b101的計算過程如下:

5.3.4除法和求余運算符
除法運算符,可以在Verilog代碼中直接使用符號“/”,而求余運算符是“%”:


? ?
求余的電路示意圖如下所示:

綜合器可以識別除法運算符和求余運算符,但是這兩種運算符包括大量的乘法、加法和減法操作,
所以在FPGA里除法器的電路是非常大的,
綜合器可能無法直接轉(zhuǎn)成上圖所示的電路。
有讀者可能會有疑問:為什么除法和求余會占用大量的資源呢?
可以來分析一下十進制除法和求余的過程,以122除以11為例。

在做上面運算的過程中涉及到多次的移位、乘法、減法等運算。
也就是說進行一次除法運算使用到了多個乘法器、減法器,需要比較大的硬件資源,
二進制運算也是同樣的道理。
所以,在設(shè)計代碼中,一般不使用除法和求余。在算法中會想各種辦法來避免除法和求余操作。
因此在數(shù)字信號處理、通信、圖像處理中會發(fā)現(xiàn)有大量的乘法、加減法等,卻很少看到除法和求余運算。
但在仿真測試中是可以使用除法和求余的,
因為其只是用于仿真測試而不用綜合成電路,自然也就不需要關(guān)心占用多少資源了。
相關(guān)視頻:https://www.bilibili.com/video/BV1yf4y1R7gH?p=12