2019年4月10日 星期三

Verilog 入門 (二)

今天來說明一些verilog宣告一的些資料型態以及運算子說明以及描述電路的方式


數字表示法
在verilog中主要都是二進位的世界,不像C語言有浮點數、正負數、字元等等
主要只有 2進位 8進位 10進位 16進位  但在儲存方式上都是使用二進位儲存

宣告數字型態主要有分成幾個部分
Ex:

8'b0000_1111

這裡宣告了一個二進位的數字,首先" 8 "代表著幾個位元
" 'b "則是宣告了為2進位表示法
後面的0000_1111則是數值 = 十進位的15
"_"則是方便使用者分辨位元的符號 也可以不寫 像是 8'b00000000

8進位則是使用" o "來表示如 :  9'o175     //8進位最高數字到7
10進位則是使用" d " 如 : 10'd1024           //高位元如果是0可以省略
16進位則是使用" h " 如 : 16'hffff             // 16進位最高數字到 f

另外在verilog中有著4種型態的數值  0  1  X  Z

0在電路中代表著 LOW 低電位

1在電路中代表著HIGH 高電位

X則是在模擬時使用的資料型態表示 unknown 未知訊號
表示這時不知道是高電位還是低電位
例如 : 同時給予1以及0的訊號就會產生出 X

Z則是代表著高阻抗 也就是浮接的訊號 多在雙向的IO會出現




運算子介紹
在verilog中也有許多運算子可以使用


運算元優先表
----------------------------------
!   ~   +  - (unary) (highest)    1位元運算  反向   多位元反向    加  減
----------------------------------
**                                           次方運算  如 2**5  =  32
----------------------------------
*   /   %                                   承 除  取餘數
----------------------------------
+   -   (binary)                         多位元  加  減
----------------------------------
<<   >>   <<<     >>>              位元左移  右移  算數左移 算數右移
----------------------------------
<    <=    >    >=                       比較運算  小於  小於等於 大於  大於等於
----------------------------------
==    !=    ===     !==               比較運算   等於  不等於  算數等於  算術不等於 (算數包含x , z)
----------------------------------
&    ^    |                                    位元運算  等同於邏輯的 and   xor or
----------------------------------
&&                                            邏輯運算  用在條件與條件之間的關係
----------------------------------
||                                                 邏輯運算  用在條件與條件之間的關係
----------------------------------
?:    (lowest)                               if else的符號 使用在data flow宣告
----------------------------------


Data Type

在介紹後種方式之前,先來介紹2種data type : reg , wire

wire 顧名思義,主要就是宣告一條線,需要不斷驅動這條線才會有數值,簡單說就是一條電線沒有給電就不會有電

reg 則是宣告一個暫存器,可以儲存數值沒有給值的時候,數值並不會消失
要注意的是,雖說是暫存器,但在不同的地方是會有不同的效果的,後面begavior描述會在解釋

再來宣告的方式主要可以分成 1 位元以及多位元宣告 如

Ex :

wire a;  宣告一個1位元的訊號 a

reg [15:0] b; 宣告一個 16 位元的 b



沒有留言:

張貼留言