Add exercises

This commit is contained in:
Job Noorman 2022-10-13 11:52:00 +02:00
commit ac3cf23632
19 changed files with 21160 additions and 0 deletions

42
SpinalTest/README.md Normal file
View file

@ -0,0 +1,42 @@
# Prerequisites
- [sbt](https://www.scala-sbt.org/download.html)
- [Verilator](https://verilator.org/guide/latest/install.html)
- A Java JDK
More info can be found in the SpinalHDL
[documentation](https://spinalhdl.github.io/SpinalDoc-RTD/master/SpinalHDL/Getting%20Started/getting_started.html).
On Arch Linux, everything can be installed from the package repositories:
```
sudo pacman -S sbt verilator jdk-openjdk
```
The PCs in the CS department have everything installed.
# Test installation
To test code generation (this should create a file called `Counter.v`):
```
sbt 'runMain spinaltest.Gen'
```
To test simulation:
```
sbt 'runMain spinaltest.Sim'
```
This should print something like the following at the end:
```
[info] [Progress] Simulation workspace in /.../SpinalTest/./simWorkspace/Counter
[info] [Progress] Verilator compilation started
[info] [Progress] Verilator compilation done in 2986.102 ms
[info] [Progress] Start Counter test simulation with seed 267472656
[info] counter: 9
[info] [Done] Simulation done in 23.684 ms
[success] Total time: 4 s, completed Oct 13, 2022, 11:00:52 AM
```

13
SpinalTest/build.sbt Normal file
View file

@ -0,0 +1,13 @@
name := "SpinalTest"
version := "0.1"
scalaVersion := "2.11.12"
val spinalVersion = "1.7.3"
fork := true
libraryDependencies ++= Seq(
"com.github.spinalhdl" % "spinalhdl-core_2.11" % spinalVersion,
"com.github.spinalhdl" % "spinalhdl-lib_2.11" % spinalVersion,
compilerPlugin("com.github.spinalhdl" % "spinalhdl-idsl-plugin_2.11" % spinalVersion)
)

View file

@ -0,0 +1,31 @@
package spinaltest
import spinal.core._
import spinal.core.sim._
class Counter extends Component {
val count = out(Reg(UInt(8 bits)).init(0))
count := count + 1
}
object Gen {
def main(args: Array[String]) {
SpinalVerilog(new Counter)
}
}
object Sim {
def main(args: Array[String]) {
SimConfig.withWave.compile(new Counter).doSim {dut =>
dut.clockDomain.forkStimulus(10)
var tick = 0
while (tick < 10) {
dut.clockDomain.waitSampling()
tick += 1
}
println(s"counter: ${dut.count.toBigInt}")
}
}
}