2017-02-01 9 views
0

パックされた配列をアンパックされた配列にキャストし、モジュールのインスタンス化でアンパックされた配列をパラメータとして使用できますか?パックされた配列はローカルパラメータとして定義されます。ここでパラメータとして使用される配列のパックド配列をアンパックされた配列にキャストする

私は

localparam [7:0] packed   = '0; 
localparam  unpacked [3:0] = packed[3:0]; <-- Needs to be casted to an unpacked array 

module1 #(unpacked) myModule1(...); <--- The parameter here needs to be of unpacked type 
+0

はあなたが_packed_と_unpacked_配列混同があります? 'localparam packed [7:0]'はアンパックされた配列です。 'localparam [3:0] unpacked'はパックされた配列です。 –

+0

そして、BTW: 'packed'はSystem-Verilogの予約語なので、自分で使うことはできません。 –

+0

この例では間違いがありました。配列の型は名前と一致する必要があります。これを反映するようにコードを修正しました。 – Eivind

答えて

0

を行うにしようとしています何のイラストは、あなたが割り当てパターンを使用してアンパック配列にパックされた配列を変換することができますが、それは非常に柔軟性/拡張性はありませんです。

unpacked_array = '{ packed_array[0], packed_array[1], ... , packed_array[...]}; 

例えば

localparam [7:0] packed_array = '{default: 0}; 
localparam unpacked_array [3:0] = '{ packed_array[0], packed_array[1], packed_array[2], packed_array[3]}; 

module1 #(unpacked_array) myModule1(); 

あなたはストリーミング演算子使用してパックされた配列にアンパック配列を変換することができます

packed_array = { << { unpacked_array }}; 

例えば

localparam  unpacked_array[7:0] = '{default: 0}; 
localparam [3:0] packed_array  = { << { unpacked_array[3:0] }}; 

module1 #(packed_array) myModule1(); 

https://www.edaplayground.com/x/5Q5b

+1

固定サイズの配列を使用する場合のストリーミング演算子のより良い解決策は、ビットストリームのキャストです。キャストのtypedefを作成する必要があるため、ビット数が一致しない場合はパッドに埋め込まれないので安全です。 –

+0

私はこの例を書いたときに間違いを犯しました。私はパックされた配列からアンパックされた配列に変換することを意味しました、私はちょうどパラメータ名の間違った側に括弧を配置しました。だから問題は、あなたが私に示したものとは逆の方向に変換することが可能なのか?パックからアンパックまで。 – Eivind

+0

@Eivindこれを反映させるためにあなたの質問を編集してください。私は考えるでしょう... –

関連する問題