この演算子は、Verilogで「+:」と呼ばれます


14

私はVerilogテストケースを調べており、声明を見つけました

assign XYZ = PQR_AR[44*8 +: 64];

「+:」演算子とは何ですか?私はグーグルでこれを見つけようとしましたが、関連する答えは得られませんでした。

回答:


22

この構文は、インデックス付き部分選択と呼ばれます。最初の項はビットオフセットで、2番目の項は幅です。オフセットの変数を指定できますが、幅は一定でなければなりません。

SystemVerilog 2012 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

2

最後に、このためのソースページを取得しました。これは、インデックス付きベクトルパーツ選択( "+:")と呼ばれます。

もう少し説明するために

PQR_AR[44*8 +: 64];

Verilog 2000で追加されたインデックス付きベクトルパーツ選択を使用すると、バス全体を選択するのではなく、バスの一部を選択できます。

44 * 8パーツはパーツ選択変数の開始点であり、64はパーツ選択の幅であり、定数です。最初に初期化した場合

input [415:0] PQR;

を使用してPQRの特定の部分を選択しています

PQR_AR[44*8 +: 64];

つまり、PQR_AR [352+:64]であるか、0から415のうち352から415に参加していることを意味しています。


LRMから派生したdwikleの回答から、次のようにバスを初期化すると、入力[415:0] PQR; その場合、PQR_AR [44 * 8 +:64]はPQR_AR [415:352]ではなくPQR_AR [352:288]でなければなりません。間違った方向に進んでいる場合は修正してください。
ABX

PQR_AR [352:289]である必要があり除き、私は、方向性について合意@ABX 64ビット幅のバスであることを
peterbc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.