Skip to content

Commit fb78918

Browse files
Mark1626Quasorglow
andauthored
Update to Chisel 3.6 and migrate to chiseltest (#6)
* updates to chisel 3.6 * [Nimalan/Swethaa] Refactor. chisel test * [Nimalan/Swethaa] Refactor. Migrate the test cases * [Nimalan/Swethaa] Fix. posit compare test * [Nimalan/Swethaa] Fix. division squareroot test * Add CARRV20 links in the README --------- Co-authored-by: swethaa.a <[email protected]>
1 parent 6e1d581 commit fb78918

28 files changed

+487
-581
lines changed

Diff for: README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ $ git submodule update --init --recursive
4040
$ make
4141
```
4242

43-
To test the units using Chisel IO testers:
43+
To test the units using chiseltest:
4444

4545
```sh
4646
$ sbt test

Diff for: build.sbt

+28-22
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,35 @@
1-
organization := "com.thoughtworks"
2-
3-
version := "1.0.0"
4-
5-
name := "hardposit"
6-
7-
scalaVersion := "2.12.11"
8-
9-
scalacOptions ++= Seq("-deprecation", "-feature", "-unchecked", "-language:reflectiveCalls", "-Xsource:2.11")
10-
11-
// Provide a managed dependency on X if -DXVersion="" is supplied on the command line.
12-
// The following are the current "release" versions.
13-
val defaultVersions = Map(
14-
"chisel3" -> "3.2.+",
15-
"chisel-iotesters" -> "1.3.+"
16-
)
17-
18-
libraryDependencies ++= (Seq("chisel3", "chisel-iotesters").map {
19-
dep: String => "edu.berkeley.cs" %% dep % sys.props.getOrElse(dep + "Version", defaultVersions(dep))
20-
})
1+
// See LICENSE for license details.
2+
3+
4+
ThisBuild / organization := "com.thoughtworks"
5+
ThisBuild / version := "1.1.0"
6+
ThisBuild / scalaVersion := "2.13.10"
7+
8+
val chiselVersion = "3.6.0"
9+
val chiselTestVersion = "0.6.0"
10+
11+
lazy val root = (project in file("."))
12+
.settings(
13+
name := "hardposit",
14+
libraryDependencies ++= Seq(
15+
"edu.berkeley.cs" %% "chisel3" % chiselVersion,
16+
"edu.berkeley.cs" %% "chiseltest" % chiselTestVersion,
17+
),
18+
scalacOptions ++= Seq(
19+
"-language:reflectiveCalls",
20+
"-deprecation",
21+
"-feature",
22+
"-Xcheckinit",
23+
"-P:chiselplugin:genBundleElements",
24+
),
25+
addCompilerPlugin("edu.berkeley.cs" % "chisel3-plugin" % chiselVersion cross CrossVersion.full),
26+
)
2127

2228

2329
// Recommendations from http://www.scalatest.org/user_guide/using_scalatest_with_sbt
24-
logBuffered in Test := false
30+
Test / logBuffered := false
2531

2632
// Disable parallel execution when running tests.
2733
// Running tests in parallel on Jenkins currently fails.
28-
parallelExecution in Test := false
34+
Test / parallelExecution := false
2935

Diff for: src/main/scala/EvalTests.scala

+71-163
Original file line numberDiff line numberDiff line change
@@ -4,169 +4,77 @@ object EvalTests {
44

55
def main(args: Array[String]): Unit = {
66
val testArgs = args.slice(1, args.length).toArray
7-
args(0) match {
8-
case "FMAP16_add" =>
9-
chisel3.Driver.execute(
10-
testArgs, () => new Eval_PositFMAP16_add)
11-
case "FMAP16_mul" =>
12-
chisel3.Driver.execute(
13-
testArgs, () => new Eval_PositFMAP16_mul)
14-
case "FMAP16" =>
15-
chisel3.Driver.execute(
16-
testArgs, () => new Eval_PositFMAP16)
17-
case "FMAP32_add" =>
18-
chisel3.Driver.execute(
19-
testArgs, () => new Eval_PositFMAP32_add)
20-
case "FMAP32_mul" =>
21-
chisel3.Driver.execute(
22-
testArgs, () => new Eval_PositFMAP32_mul)
23-
case "FMAP32" =>
24-
chisel3.Driver.execute(
25-
testArgs, () => new Eval_PositFMAP32)
26-
case "FMAP64_add" =>
27-
chisel3.Driver.execute(
28-
testArgs, () => new Eval_PositFMAP64_add)
29-
case "FMAP64_mul" =>
30-
chisel3.Driver.execute(
31-
testArgs, () => new Eval_PositFMAP64_mul)
32-
case "FMAP64" =>
33-
chisel3.Driver.execute(
34-
testArgs, () => new Eval_PositFMAP64)
35-
case "DivSqrtP16_div" =>
36-
chisel3.Driver.execute(
37-
testArgs, () => new Eval_PositDivSqrtP16_div)
38-
case "DivSqrtP32_div" =>
39-
chisel3.Driver.execute(
40-
testArgs, () => new Eval_PositDivSqrtP32_div)
41-
case "DivSqrtP64_div" =>
42-
chisel3.Driver.execute(
43-
testArgs, () => new Eval_PositDivSqrtP64_div)
44-
case "DivSqrtP16_sqrt" =>
45-
chisel3.Driver.execute(
46-
testArgs, () => new Eval_PositDivSqrtP16_sqrt)
47-
case "DivSqrtP32_sqrt" =>
48-
chisel3.Driver.execute(
49-
testArgs, () => new Eval_PositDivSqrtP32_sqrt)
50-
case "DivSqrtP64_sqrt" =>
51-
chisel3.Driver.execute(
52-
testArgs, () => new Eval_PositDivSqrtP64_sqrt)
53-
case "CompareP16_lt" =>
54-
chisel3.Driver.execute(
55-
testArgs, () => new Eval_PositCompareP16_lt)
56-
case "CompareP32_lt" =>
57-
chisel3.Driver.execute(
58-
testArgs, () => new Eval_PositCompareP32_lt)
59-
case "CompareP64_lt" =>
60-
chisel3.Driver.execute(
61-
testArgs, () => new Eval_PositCompareP64_lt)
62-
case "CompareP16_eq" =>
63-
chisel3.Driver.execute(
64-
testArgs, () => new Eval_PositCompareP16_eq)
65-
case "CompareP32_eq" =>
66-
chisel3.Driver.execute(
67-
testArgs, () => new Eval_PositCompareP32_eq)
68-
case "CompareP64_eq" =>
69-
chisel3.Driver.execute(
70-
testArgs, () => new Eval_PositCompareP64_eq)
71-
case "CompareP16_gt" =>
72-
chisel3.Driver.execute(
73-
testArgs, () => new Eval_PositCompareP16_gt)
74-
case "CompareP32_gt" =>
75-
chisel3.Driver.execute(
76-
testArgs, () => new Eval_PositCompareP32_gt)
77-
case "CompareP64_gt" =>
78-
chisel3.Driver.execute(
79-
testArgs, () => new Eval_PositCompareP64_gt)
80-
case "P16toI32" =>
81-
chisel3.Driver.execute(
82-
testArgs, () => new Eval_PositP16toI32)
83-
case "P16toI64" =>
84-
chisel3.Driver.execute(
85-
testArgs, () => new Eval_PositP16toI64)
86-
case "P32toI32" =>
87-
chisel3.Driver.execute(
88-
testArgs, () => new Eval_PositP32toI32)
89-
case "P32toI64" =>
90-
chisel3.Driver.execute(
91-
testArgs, () => new Eval_PositP32toI64)
92-
case "P64toI32" =>
93-
chisel3.Driver.execute(
94-
testArgs, () => new Eval_PositP64toI32)
95-
case "P64toI64" =>
96-
chisel3.Driver.execute(
97-
testArgs, () => new Eval_PositP64toI64)
98-
case "P16toUI32" =>
99-
chisel3.Driver.execute(
100-
testArgs, () => new Eval_PositP16toUI32)
101-
case "P16toUI64" =>
102-
chisel3.Driver.execute(
103-
testArgs, () => new Eval_PositP16toUI64)
104-
case "P32toUI32" =>
105-
chisel3.Driver.execute(
106-
testArgs, () => new Eval_PositP32toUI32)
107-
case "P32toUI64" =>
108-
chisel3.Driver.execute(
109-
testArgs, () => new Eval_PositP32toUI64)
110-
case "P64toUI32" =>
111-
chisel3.Driver.execute(
112-
testArgs, () => new Eval_PositP64toUI32)
113-
case "P64toUI64" =>
114-
chisel3.Driver.execute(
115-
testArgs, () => new Eval_PositP64toUI64)
116-
case "I32toP16" =>
117-
chisel3.Driver.execute(
118-
testArgs, () => new Eval_PositI32toP16)
119-
case "I64toP16" =>
120-
chisel3.Driver.execute(
121-
testArgs, () => new Eval_PositI64toP16)
122-
case "I32toP32" =>
123-
chisel3.Driver.execute(
124-
testArgs, () => new Eval_PositI32toP32)
125-
case "I64toP32" =>
126-
chisel3.Driver.execute(
127-
testArgs, () => new Eval_PositI64toP32)
128-
case "I32toP64" =>
129-
chisel3.Driver.execute(
130-
testArgs, () => new Eval_PositI32toP64)
131-
case "I64toP64" =>
132-
chisel3.Driver.execute(
133-
testArgs, () => new Eval_PositI64toP64)
134-
case "UI32toP16" =>
135-
chisel3.Driver.execute(
136-
testArgs, () => new Eval_PositUI32toP16)
137-
case "UI64toP16" =>
138-
chisel3.Driver.execute(
139-
testArgs, () => new Eval_PositUI64toP16)
140-
case "UI32toP32" =>
141-
chisel3.Driver.execute(
142-
testArgs, () => new Eval_PositUI32toP32)
143-
case "UI64toP32" =>
144-
chisel3.Driver.execute(
145-
testArgs, () => new Eval_PositUI64toP32)
146-
case "UI32toP64" =>
147-
chisel3.Driver.execute(
148-
testArgs, () => new Eval_PositUI32toP64)
149-
case "UI64toP64" =>
150-
chisel3.Driver.execute(
151-
testArgs, () => new Eval_PositUI64toP64)
152-
case "P16toP32" =>
153-
chisel3.Driver.execute(
154-
testArgs, () => new Eval_PositP16toP32)
155-
case "P16toP64" =>
156-
chisel3.Driver.execute(
157-
testArgs, () => new Eval_PositP16toP64)
158-
case "P32toP16" =>
159-
chisel3.Driver.execute(
160-
testArgs, () => new Eval_PositP32toP16)
161-
case "P32toP64" =>
162-
chisel3.Driver.execute(
163-
testArgs, () => new Eval_PositP32toP64)
164-
case "P64toP16" =>
165-
chisel3.Driver.execute(
166-
testArgs, () => new Eval_PositP64toP16)
167-
case "P64toP32" =>
168-
chisel3.Driver.execute(
169-
testArgs, () => new Eval_PositP64toP32)
7+
8+
val testDirAbsolutePath = "./td"
9+
10+
val module = args(0) match {
11+
case "FMAP16_add" => new Eval_PositFMAP16_add
12+
case "FMAP16_mul" => new Eval_PositFMAP16_mul
13+
case "FMAP16" => new Eval_PositFMAP16
14+
case "FMAP32_add" => new Eval_PositFMAP32_add
15+
case "FMAP32_mul" => new Eval_PositFMAP32_mul
16+
case "FMAP32" => new Eval_PositFMAP32
17+
case "FMAP64_add" => new Eval_PositFMAP64_add
18+
case "FMAP64_mul" => new Eval_PositFMAP64_mul
19+
case "FMAP64" => new Eval_PositFMAP64
20+
case "DivSqrtP16_div" => new Eval_PositDivSqrtP16_div
21+
case "DivSqrtP32_div" => new Eval_PositDivSqrtP32_div
22+
case "DivSqrtP64_div" => new Eval_PositDivSqrtP64_div
23+
case "DivSqrtP16_sqrt" => new Eval_PositDivSqrtP16_sqrt
24+
case "DivSqrtP32_sqrt" => new Eval_PositDivSqrtP32_sqrt
25+
case "DivSqrtP64_sqrt" => new Eval_PositDivSqrtP64_sqrt
26+
case "CompareP16_lt" => new Eval_PositCompareP16_lt
27+
case "CompareP32_lt" => new Eval_PositCompareP32_lt
28+
case "CompareP64_lt" => new Eval_PositCompareP64_lt
29+
case "CompareP16_eq" => new Eval_PositCompareP16_eq
30+
case "CompareP32_eq" => new Eval_PositCompareP32_eq
31+
case "CompareP64_eq" => new Eval_PositCompareP64_eq
32+
case "CompareP16_gt" => new Eval_PositCompareP16_gt
33+
case "CompareP32_gt" => new Eval_PositCompareP32_gt
34+
case "CompareP64_gt" => new Eval_PositCompareP64_gt
35+
case "P16toI32" => new Eval_PositP16toI32
36+
case "P16toI64" => new Eval_PositP16toI64
37+
case "P32toI32" => new Eval_PositP32toI32
38+
case "P32toI64" => new Eval_PositP32toI64
39+
case "P64toI32" => new Eval_PositP64toI32
40+
case "P64toI64" => new Eval_PositP64toI64
41+
case "P16toUI32" => new Eval_PositP16toUI32
42+
case "P16toUI64" => new Eval_PositP16toUI64
43+
case "P32toUI32" => new Eval_PositP32toUI32
44+
case "P32toUI64" => new Eval_PositP32toUI64
45+
case "P64toUI32" => new Eval_PositP64toUI32
46+
case "P64toUI64" => new Eval_PositP64toUI64
47+
case "I32toP16" => new Eval_PositI32toP16
48+
case "I64toP16" => new Eval_PositI64toP16
49+
case "I32toP32" => new Eval_PositI32toP32
50+
case "I64toP32" => new Eval_PositI64toP32
51+
case "I32toP64" => new Eval_PositI32toP64
52+
case "I64toP64" => new Eval_PositI64toP64
53+
case "UI32toP16" => new Eval_PositUI32toP16
54+
case "UI64toP16" => new Eval_PositUI64toP16
55+
case "UI32toP32" => new Eval_PositUI32toP32
56+
case "UI64toP32" => new Eval_PositUI64toP32
57+
case "UI32toP64" => new Eval_PositUI32toP64
58+
case "UI64toP64" => new Eval_PositUI64toP64
59+
case "P16toP32" => new Eval_PositP16toP32
60+
case "P16toP64" => new Eval_PositP16toP64
61+
case "P32toP16" => new Eval_PositP32toP16
62+
case "P32toP64" => new Eval_PositP32toP64
63+
case "P64toP16" => new Eval_PositP64toP16
64+
case "P64toP32" => new Eval_PositP64toP32
17065
}
66+
67+
(new chisel3.stage.ChiselStage).emitVerilog(
68+
module,
69+
Array.concat(args, Array("-td=./generated"))
70+
)
71+
72+
// (new chisel3.stage.ChiselStage).execute(
73+
// Array("-X", "verilog"),
74+
// Seq(
75+
// TargetDirAnnotation(testDirAbsolutePath),
76+
// ChiselGeneratorAnnotation(module)
77+
// )
78+
// )
17179
}
17280
}

Diff for: src/main/scala/Eval_PositCompare.scala

+6-6
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ class Eval_PositCompare_lt(nbits: Int, es: Int) extends Module {
1616
})
1717

1818
val positCompare = Module(new PositCompare(nbits, es))
19-
positCompare.io.num1 := io.num1.asSInt()
20-
positCompare.io.num2 := io.num2.asSInt()
19+
positCompare.io.num1 := io.num1.asSInt
20+
positCompare.io.num2 := io.num2.asSInt
2121

2222
io.actual := positCompare.io.lt
2323

@@ -45,8 +45,8 @@ class Eval_PositCompare_eq(nbits: Int, es: Int) extends Module {
4545
})
4646

4747
val positCompare = Module(new PositCompare(nbits, es))
48-
positCompare.io.num1 := io.num1.asSInt()
49-
positCompare.io.num2 := io.num2.asSInt()
48+
positCompare.io.num1 := io.num1.asSInt
49+
positCompare.io.num2 := io.num2.asSInt
5050

5151
io.actual := positCompare.io.eq
5252

@@ -74,8 +74,8 @@ class Eval_PositCompare_gt(nbits: Int, es: Int) extends Module {
7474
})
7575

7676
val positCompare = Module(new PositCompare(nbits, es))
77-
positCompare.io.num1 := io.num1.asSInt()
78-
positCompare.io.num2 := io.num2.asSInt()
77+
positCompare.io.num1 := io.num1.asSInt
78+
positCompare.io.num2 := io.num2.asSInt
7979

8080
io.actual := positCompare.io.gt
8181

Diff for: src/main/scala/Eval_PositDivSqrt.scala

+4-4
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ class DivIO(nbits: Int, es: Int) extends Bundle {
88
val num2 = UInt(nbits.W)
99
val expected = UInt(nbits.W)
1010

11-
override def cloneType =
12-
new DivIO(nbits, es).asInstanceOf[this.type]
11+
// override def cloneType =
12+
// new DivIO(nbits, es).asInstanceOf[this.type]
1313
}
1414

1515
class Eval_PositDivSqrt_div(nbits: Int, es: Int) extends Module {
@@ -62,8 +62,8 @@ class SqrtIO(nbits: Int, es: Int) extends Bundle {
6262
val num1 = UInt(nbits.W)
6363
val expected = UInt(nbits.W)
6464

65-
override def cloneType =
66-
new SqrtIO(nbits, es).asInstanceOf[this.type]
65+
// override def cloneType =
66+
// new SqrtIO(nbits, es).asInstanceOf[this.type]
6767
}
6868

6969
class Eval_PositDivSqrt_sqrt(nbits: Int, es: Int) extends Module {

Diff for: src/main/scala/ItoPConverter.scala

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,15 @@ class ItoPConverterCore(val nbits: Int, val es: Int, intWidth: Int) extends Modu
1818

1919
result.isNaR := isOnlyMSBSet(io.integer, intWidth)
2020
result.isZero := isZero(io.integer)
21-
result.sign := io.integer(intWidth - 1).asBool() && !io.unsignedIn
21+
result.sign := io.integer(intWidth - 1).asBool && !io.unsignedIn
2222

2323
val intVal = Mux(result.sign, ~io.integer + 1.U, io.integer)
2424

2525
val zeroCount = countLeadingZeros(intVal)
2626
val shiftedIntVal = intVal << zeroCount
2727

2828
result.exponent :=
29-
Cat(0.U, (intWidth - 1).U - zeroCount).asSInt()
29+
Cat(0.U, (intWidth - 1).U - zeroCount).asSInt
3030

3131
result.fraction := {
3232
if(narrowConv)
@@ -42,7 +42,7 @@ class ItoPConverterCore(val nbits: Int, val es: Int, intWidth: Int) extends Modu
4242

4343
io.stickyBit := {
4444
if(narrowConv)
45-
Cat(shiftedIntVal, 0.U(trailingBitCount.W))(intWidth - maxFractionBitsWithHiddenBit - 1, 0).orR()
45+
Cat(shiftedIntVal, 0.U(trailingBitCount.W))(intWidth - maxFractionBitsWithHiddenBit - 1, 0).orR
4646
else false.B }
4747

4848
io.posit := result

0 commit comments

Comments
 (0)