close

數字, 簡單來說就是 1,2,3,4,5,6....
在verilog數字系統裡, 分為 10 進制(d or D), 16 進制(h or H), 8 進制(o or O), 以及 2 進制(b or B)
以一個4位元, 數字 12 的表示法如下:
10 進制 : 4'd12 或者 12
16 進制 : 4'hc
8 進制 : 4'o14
2 進制 : 4'b1100
在 verilog 裡沒有特別指定進制別的數字, 都是 10 進制

有一個很好用的符號可以幫助輔助閱讀程式裡數字, 就是 "_" (underline)
以一個32位元, 數字 2147483648 的表示法如下:
10 進制 : 32'd2147483648 或者 2147483648
16 進制 : 32'h8000_0000
8 進制 : 32'o2_00000_00000
2 進制 : 32'b10000000_00000000_00000000_00000000

在 HDL 的程式裡, 所有的帶符號數字是需要有額外一個位元(bit)來表示正負值
而, 所有的負值存在皆以 2's 補數型式存在
以一個4位元的, 數字 -3 的表示法如下:
位元3 (bit3) 為符號位元
10 進制 : 4'dd 或者 12
16 進制 : 4'hd
2 進制 : 4'b1101

在 HDL 的程式裡, 亦不存在小數, 所以, 所有的小數, 皆須整數化後, 再進行計算
在整數化的過程中, 必須考量的範圍包括, 需要的精密度多高, 需要做到多小
這兩個點是互相拉扯的, 因為若想要精密度高的話, 則必需要較多的位元來存取
位元數若過高, 則表示, 將會做出較大的硬體.
如果, 想要做較小的硬體的話, 則勢必要做某種精密度的取捨.

以 0.734 為例
小數第  1 位的值為 2^(- 1) = 0.5
小數第  2 位的值為 2^(- 2) = 0.25
小數第  3 位的值為 2^(- 3) = 0.125
小數第  4 位的值為 2^(- 4) = 0.0625
小數第  5 位的值為 2^(- 5) = 0.03125
小數第  6 位的值為 2^(- 6) = 0.015625
小數第  7 位的值為 2^(- 7) = 0.0078125
小數第  8 位的值為 2^(- 8) = 0.00390625
小數第  9 位的值為 2^(- 9) = 0.001953125
小數第 10 位的值為 2^(-10) = 0.0009765625
小數第 11 位的值為 2^(-11) = 0.0004882813
小數第 12 位的值為 2^(-12) = 0.0002441406
小數第 13 位的值為 2^(-13) = 0.0001220703
小數第 14 位的值為 2^(-14) = 6.103515625E-005
小數第 15 位的值為 2^(-15) = 3.0517578125E-005
小數第 16 位的值為 2^(-16) = 1.52587890625E-005
小數第 17 位的值為 2^(-17) = 7.62939453125E-006
小數第 18 位的值為 2^(-18) = 3.814697265625E-006

若取小數 10 位為有效範圍來表示的話, 則取到的值會是 0.733398438
若取小數 18 位為有效範圍來表示的話, 則取到的值會是 0.733997345
從這個結果可知, 有效位 18 位元, 比有效位元 10 位還更接近實際要表逹的數字 0.734
但是從硬體看來, 則必須付出 8 個位元的硬體大小來逹到這個結果.
所以, 在做小數的整數化過程, 必須是從專案的需求做為考量點. 才能在硬體成本與逹成效果做衡量.


 

arrow
arrow
    全站熱搜

    淹死的魚 發表在 痞客邦 留言(0) 人氣()