summaryrefslogtreecommitdiff
path: root/src/main/scala/chisel3/experimental/conversions/package.scala
blob: 574f9f96ad4c0fb7e46f602b75e495d640cb6603 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package chisel3.experimental

import chisel3._
import chisel3.experimental.dataview._
import scala.language.implicitConversions

/** Implicit conversions from some Scala standard library types and [[Data]]
  *
  * @note As this leans heavily on the experimental [[DataView]] feature, these APIs are experimental and subject to change
  */
package object conversions {

  /** Implicit conversion between `Seq` and `Vec` */
  implicit def seq2vec[A : DataProduct, B <: Data](xs: Seq[A])(implicit dv: DataView[A, B]): Vec[B] =
    xs.viewAs[Vec[B]]

  /** Implicit conversion between [[Tuple2]] and [[HWTuple2]] */
  implicit def tuple2hwtuple[T1 : DataProduct, T2 : DataProduct, V1 <: Data, V2 <: Data](
    tup: (T1, T2)
  )(
    implicit v1: DataView[T1, V1], v2: DataView[T2, V2]
  ): HWTuple2[V1, V2] = {
    tup.viewAs[HWTuple2[V1, V2]]
  }

  /** Implicit conversion between [[Tuple3]] and [[HWTuple3]] */
  implicit def tuple3hwtuple[T1 : DataProduct, T2 : DataProduct, T3 : DataProduct, V1 <: Data, V2 <: Data, V3 <: Data](
    tup: (T1, T2, T3)
  )(
    implicit v1: DataView[T1, V1], v2: DataView[T2, V2], v3: DataView[T3, V3]
  ): HWTuple3[V1, V2, V3] = {
    tup.viewAs[HWTuple3[V1, V2, V3]]
  }

  /** Implicit conversion between [[Tuple4]] and [[HWTuple4]] */
  implicit def tuple4hwtuple[
    T1 : DataProduct, T2 : DataProduct, T3 : DataProduct, T4 : DataProduct,
    V1 <: Data, V2 <: Data, V3 <: Data, V4 <: Data
  ](
    tup: (T1, T2, T3, T4)
  )(
    implicit v1: DataView[T1, V1], v2: DataView[T2, V2], v3: DataView[T3, V3], v4: DataView[T4, V4]
  ): HWTuple4[V1, V2, V3, V4] = {
    tup.viewAs[HWTuple4[V1, V2, V3, V4]]
  }

  /** Implicit conversion between [[Tuple5]] and [[HWTuple5]] */
  implicit def tuple5hwtuple[
    T1 : DataProduct, T2 : DataProduct, T3 : DataProduct, T4 : DataProduct, T5 : DataProduct,
    V1 <: Data, V2 <: Data, V3 <: Data, V4 <: Data, V5 <: Data
  ](
    tup: (T1, T2, T3, T4, T5)
  )(
    implicit v1: DataView[T1, V1], v2: DataView[T2, V2], v3: DataView[T3, V3], v4: DataView[T4, V4], v5: DataView[T5, V5]
  ): HWTuple5[V1, V2, V3, V4, V5] = {
    tup.viewAs[HWTuple5[V1, V2, V3, V4, V5]]
  }

  /** Implicit conversion between [[Tuple6]] and [[HWTuple6]] */
  implicit def tuple6hwtuple[
    T1 : DataProduct, T2 : DataProduct, T3 : DataProduct, T4 : DataProduct, T5 : DataProduct, T6 : DataProduct,
    V1 <: Data, V2 <: Data, V3 <: Data, V4 <: Data, V5 <: Data, V6 <: Data
  ](
    tup: (T1, T2, T3, T4, T5, T6)
  )(
    implicit v1: DataView[T1, V1], v2: DataView[T2, V2], v3: DataView[T3, V3], v4: DataView[T4, V4], v5: DataView[T5, V5],
             v6: DataView[T6, V6]
  ): HWTuple6[V1, V2, V3, V4, V5, V6] = {
    tup.viewAs[HWTuple6[V1, V2, V3, V4, V5, V6]]
  }

  /** Implicit conversion between [[Tuple7]] and [[HWTuple7]] */
  implicit def tuple7hwtuple[
    T1 : DataProduct, T2 : DataProduct, T3 : DataProduct, T4 : DataProduct, T5 : DataProduct,
    T6 : DataProduct, T7 : DataProduct,
    V1 <: Data, V2 <: Data, V3 <: Data, V4 <: Data, V5 <: Data, V6 <: Data, V7 <: Data
  ](
    tup: (T1, T2, T3, T4, T5, T6, T7)
  )(
    implicit v1: DataView[T1, V1], v2: DataView[T2, V2], v3: DataView[T3, V3], v4: DataView[T4, V4], v5: DataView[T5, V5],
             v6: DataView[T6, V6], v7: DataView[T7, V7]
  ): HWTuple7[V1, V2, V3, V4, V5, V6, V7] = {
    tup.viewAs[HWTuple7[V1, V2, V3, V4, V5, V6, V7]]
  }

  /** Implicit conversion between [[Tuple8]] and [[HWTuple8]] */
  implicit def tuple8hwtuple[
    T1 : DataProduct, T2 : DataProduct, T3 : DataProduct, T4 : DataProduct, T5 : DataProduct,
    T6 : DataProduct, T7 : DataProduct, T8 : DataProduct,
    V1 <: Data, V2 <: Data, V3 <: Data, V4 <: Data, V5 <: Data, V6 <: Data, V7 <: Data, V8 <: Data
  ](
    tup: (T1, T2, T3, T4, T5, T6, T7, T8)
  )(
    implicit v1: DataView[T1, V1], v2: DataView[T2, V2], v3: DataView[T3, V3], v4: DataView[T4, V4], v5: DataView[T5, V5],
    v6: DataView[T6, V6], v7: DataView[T7, V7], v8: DataView[T8, V8]
  ): HWTuple8[V1, V2, V3, V4, V5, V6, V7, V8] = {
    tup.viewAs[HWTuple8[V1, V2, V3, V4, V5, V6, V7, V8]]
  }

  /** Implicit conversion between [[Tuple9]] and [[HWTuple9]] */
  implicit def tuple9hwtuple[
    T1 : DataProduct, T2 : DataProduct, T3 : DataProduct, T4 : DataProduct, T5 : DataProduct,
    T6 : DataProduct, T7 : DataProduct, T8 : DataProduct, T9 : DataProduct,
    V1 <: Data, V2 <: Data, V3 <: Data, V4 <: Data, V5 <: Data, V6 <: Data, V7 <: Data, V8 <: Data, V9 <: Data
  ](
    tup: (T1, T2, T3, T4, T5, T6, T7, T8, T9)
  )(
    implicit v1: DataView[T1, V1], v2: DataView[T2, V2], v3: DataView[T3, V3], v4: DataView[T4, V4], v5: DataView[T5, V5],
    v6: DataView[T6, V6], v7: DataView[T7, V7], v8: DataView[T8, V8], v9: DataView[T9, V9]
  ): HWTuple9[V1, V2, V3, V4, V5, V6, V7, V8, V9] = {
    tup.viewAs[HWTuple9[V1, V2, V3, V4, V5, V6, V7, V8, V9]]
  }

  /** Implicit conversion between [[Tuple10]] and [[HWTuple10]] */
  implicit def tuple10hwtuple[
    T1 : DataProduct, T2 : DataProduct, T3 : DataProduct, T4 : DataProduct, T5 : DataProduct,
    T6 : DataProduct, T7 : DataProduct, T8 : DataProduct, T9 : DataProduct, T10 : DataProduct,
    V1 <: Data, V2 <: Data, V3 <: Data, V4 <: Data, V5 <: Data, V6 <: Data, V7 <: Data, V8 <: Data, V9 <: Data, V10 <: Data
  ](
    tup: (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)
  )(
    implicit v1: DataView[T1, V1], v2: DataView[T2, V2], v3: DataView[T3, V3], v4: DataView[T4, V4], v5: DataView[T5, V5],
    v6: DataView[T6, V6], v7: DataView[T7, V7], v8: DataView[T8, V8], v9: DataView[T9, V9], v10: DataView[T10, V10]
  ): HWTuple10[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10] = {
    tup.viewAs[HWTuple10[V1, V2, V3, V4, V5, V6, V7, V8, V9, V10]]
  }
}