亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用+索引向量和數組:

用+索引向量和數組:

用+索引向量和數組:我在SystemVerilog中看到了這樣的代碼:if(address[2*pointer+:2])   do_something;我該如何理解+:當索引這個向量的時候?我發現它被稱為比特切片,但我找不到任何解釋。
查看完整描述

3 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

描述和示例可在IEEE STD 1800-2012§11.5.1“矢量位-選擇和部分選擇尋址”。第一個IEEE外觀是IEEE 1364-2001(Verilog)§4.2.1“向量位選擇和部分選擇尋址”。以下是來自LRM的一個直接示例:

logic [31: 0] a_vect;
logic [0 :31] b_vect;
logic [63: 0] dword;
integer sel;
a_vect[ 0 +: 8] // == a_vect[ 7 : 0]
a_vect[15 -: 8] // == a_vect[15 : 8]
b_vect[ 0 +: 8] // == b_vect[0 : 7]
b_vect[15 -: 8] // == b_vect[8 :15]
dword[8*sel +: 8] // variable part-select with fixed width

如果sel是0dword[8*(0) +: 8] == dword[7:0]
如果sel是7dword[8*(7) +: 8] == dword[63:56]

左邊的值總是起始索引。右邊的數字是寬度,必須是正數。這個+-指示要選擇較高或較低索引值的位數,然后選擇起始索引。

假設address是以小Endian([msb:lsb])格式,然后if(address[2*pointer+:2])等于if({address[2*pointer+1],address[2*pointer]})


查看完整回答
反對 回復 2019-07-12
?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

這是另一種指定位向量范圍的方法。

x+:n,向量的起始位置由x給出,然后計數。向上從x乘N.

也有

x-:n,在這種情況下,起始位置是x,然后計數。向下從x乘N.

n是常數,x是可以包含迭代器的表達式。

它有幾個好處-

  1. 它使代碼更具可讀性。

  2. 您可以在引用位片時指定迭代器,而不會得到“不能有非常量值”錯誤。


查看完整回答
反對 回復 2019-07-12
?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

我忍不住說a_vect[ 0 +: 8]b_vect[ 0 +: 8]雙方決心a_vect[7:0]b_vect[7:0]取決于定義a_Vect和b_Vect的方式。那就是令人困惑如果你問我

查看完整回答
反對 回復 2019-07-12
  • 3 回答
  • 0 關注
  • 912 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號