iT邦幫忙

2023 iThome 鐵人賽

DAY 6
0
Software Development

數位 IC 設計起手式系列 第 6

Day 06: Vector 的出現

  • 分享至 

  • xImage
  •  

上一篇提到一條 wire 最多表示兩種數值,那麼如果要表示更多數值,我們需要使用 vector 。

Vector 是什麼呢?中文翻譯叫向量,但是向量可能沒那麼好理解,他其實就是多條線路的綑綁。

MSB & LSB

既然 vector 是多條線的綑綁,那麼我們要怎麼知道各個線路代表的數值呢?
抑或是我們要怎麼賦值給其中的某一條線路?

我們先介紹 MSB 和 LSB 吧!

MSB 是 Most Significant Bit 的縮寫,而 LSB 是 Least Significant Bit 的縮寫。
以一個二進位的 39 來說好了。 39 以二進位表示是 100111 ,最左邊的位元稱之為 MSB ,因為 MSB 越大,整體數值會越來越大,代表著他的重要性 (Significant) ; 相反的,最右邊的位元稱之為 LSB ,因為他的改變對整體數值來說是最微乎其微的。

為什麼我們需要知道 MSB 和 LSB 呢?因為定義了這兩個數值後,我們可以在一組線路中知道方向性。

宣告與賦值

Vector 其實就是很多個 wire 的綑綁,因此宣告與賦值的過程其實大致相同。

我們以 39 作為 vector 中存入的數值,因為進制的選用不同,相同的數字可以用不同的方式表示。

wire [5:0] a, b, c, d;
assign a = 6'b100111;
assign b = 6'o47;
assign c = 6'd39;
assign d = 6'h27;

說明一下上方的程式碼:

  • 第一行的 [5:0] 代表共宣告 6 條線路,代號分別是 0, 1, 2, 3, 4, 5,且 a, b, c, d 皆為 6 條線路的 vector 。其中, 5 代表的是 MSB,而 0 代表的是 LSB。因此我們可以大致統整出語法: wire [ MSB : LSB ]
  • 接下來的四行分別以不同的進制表示 39 ,其中 ' 前的數字代表的是該數字所需的位元,而不是在該進制下需要幾個數字來表示。因此 b, c, d 的第一個數字為 6 ,而非 2 。

為什麼是宣告 6 條線路?多或少可以嗎?
少自然是不行,因為你無法在少於 6 位元的情況下完整表達 39。多是可以的喔!因為多餘的位元可以用 0 來表示,同時也可以完整表達這個數字。但是要特別注意,如果我們想使用 8 位元來表達該數,型別應宣告為 wire [7:0] 或是等價的表示,如 wire [8:1] 等。

wire [ LSB : MSB ] 這樣宣告可以嗎?
其實也沒有不行,但是我們必須確保整份程式碼都用相同的規範,即 wire [ LSB : MSB ]wire [ MSB : LSB ] 。不過,按照常理,我們會以 wire [ MSB : LSB ] 為宣告的依據,因為在位元表示上 MSB 是最左邊的位元,而 LSB 是最右邊的位元。


上一篇
Day 05: 線路三兩事
下一篇
Day 07: 線路的拆與合
系列文
數位 IC 設計起手式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言