2017-08-28 4 views
0

En Scala d'une façon que nous pourrions déclarer une ArrayBuffer de tableau de double, Long et Boolean est en tant que tel:incompatibilité de type Chisel3 avec tableau de FixedPoint

val A = new ArrayBuffer[Array[(Long, Array[Double], Array[Double], Double, Boolean)]] 

Je voudrais faire même en ciseau.
En ciseau je sais d'une façon de déclarer un vecteur de longueur n en entrée est la suivante:

val X = Input(Vec(n,FixedPoint(16.W, 8.BP))) 

où n est Int, et cela fonctionne.
Maintenant, j'ai essayé d'initialiser un tableau de n FixedPoint aussi, et a fait ce qui suit:

val C = Array(Array.ofDim(FixedPoint(16.W, 8.BP)))(n,0) 

Inspirée de initialisation of an array

Mais cela ne fonctionne pas. je reçois l'erreur

type mismatch; 
[error] found : chisel3.core.FixedPoint 
[error] required: Int 
[error] val tabHash1 = Array(Array.ofDim(FixedPoint(16.W, 8.BP)))(n,0) 

S'il vous plaît, quelqu'un peut-il donner la bonne façon de déclarer A ci-dessus FixedPoint et un tableau de nombres FixedPoint en ciseau? Merci! pour votre attention et vos réponses.

Répondre

0

Chisel suivra les règles ordinaires des déclarations de collection Scala. Je ne suis pas sûr de ce que vous essayez de créer ici, mais les paramètres ne sont pas tout à fait raison Array.ofDim est pour créer des tableaux multidimensionnels, donc si vous essayez de créer un tableau à deux dimensions de FixedPoint que vous voulez.

val C = Array.ofDim[FixedPoint](m, n) 

Où n et m sont les tailles dans les deux dimensions. Vous avez enveloppé le Array.ofDim dans un autre tableau, alors peut-être que vous voulez en fait un 3 dimensions de tableau FixedPoint, qui serait

val C = Array.ofDim[FixedPoint](k, m, n) 

Ces deux techniques donneront des tableaux qui ont tous les emplacements pour FixePoint mais ils ne sera pas rempli, donc probablement ce que vous voulez vraiment est

val C = Array.fill(k, m, n)(FixedPoint(16.W, 8.BP) 

vous pouvez câbler ces points fixes ainsi que la façon dont vous voulez.

C(0, 0,0) := C(1, 1, 1) + C(2, 2, 2) 

peut être un exemple.

Si vous avez besoin d'accéder à vos éléments FixedPoint à l'aide de l'indexation matérielle, vous aurez besoin d'un Vec au lieu d'un Array. La façon la plus simple d'initialiser Vec est d'utiliser un Seq of Elements. A 2 dimensions Vec de FixedPoint pourrait être créé avec

val c = Vec(Seq.fill(n)(Vec(Seq.fill(m)(FixedPoint(16.W, 8.BP))))) 

Je suggère à la recherche à Scala Land vs Chisel Land pour quelques informations sur l'utilisation de Chisel à Scala.