6 / 37 · 概念
向量索引、位元順序與符號
分開位元編號、序列傳輸順序與算術解讀,閱讀資料路徑。
單元可免費閱讀,註冊課程即可儲存學習進度。
索引是名稱,宣告方向決定意義
logic [7:0] a; 中,a[7] 是最左側;logic [0:7] b; 中,b[0] 才是最左側。兩向量都指定 8'h96 時,從左讀的位元序列同為 10010110,但各位元索引不同。只有確認宣告方向後,才能假設「bit 0 一定是 LSBLSB是位權最低的位元。須同時確認表示方向與索引規則。」。
實務上讓整個介面的方向一致,更有利於審查。也須明定波形工具的顯示順序與檔案的位元陣列順序。本課程輸入 JSON 陣列從 LSB 記錄,RTL 向量則通常從 MSBMSB是位權最高的位元。索引編號會隨向量的宣告方向而異,因此不能一律假設它的編號最大。 閱讀。
用實際連接確認移動方向
q <= {q[1:0], din}; 中,下一個 q[2] 為舊 q[1],下一個 q[1] 為舊 q[0],下一個 q[0] 為 din。
哪個索引接收哪個訊號,才是精確規格,比圖畫朝左或朝右更重要。
箭頭表示一個位元經過的儲存位置。所有暫存器暫存器儲存多個位元的狀態。本課程中的同步暫存器會在時脈邊緣儲存指定的輸入。 詳細內容都在同一邊緣讀取舊值,不表示 din 會在一個邊緣就穿過到 q2。
- din: 本次邊緣接受的位元
- q0: 擷取 din
- q1: 擷取先前的 q0
- q2: 擷取先前的 q1
算術移位與邏輯移位
>> 是邏輯右移,把空出的左側、最高有效位元位置補為 0。左運算元為 signed 時,>>> 可作為符號擴展的算術移位。即使位元相同,運算元的 signed 宣告不同,結果也可能不同。
logic signed [7:0] x;
logic [7:0] logical_right, arithmetic_right;
assign logical_right = x >> 1;
assign arithmetic_right = x >>> 1;x=8'b11111000(−8)時,結果分別為 01111100 與 11111100。負數的算術右移不一定等同整數除法對負數的取整規則,數值演算法需另外確認。
自己試試看
3 位元 q=101、din=0,分別求 q<={q[1:0],din} 與 q<={din,q[2:1]} 的下一值。
查看解說
兩式都是 010,這組輸入下兩方向恰巧相同。改用 q=001、din=0,分別得到 010 與 000,即可區分方向錯誤。