前言:
作者对chisel刚开始入手学习,今天看完chisel-book第五章,想跑一些实验加深学习。。。。但过程有点艰辛。
1、环境
1.Ubuntu20.04:第三期一生一芯中选择使用这个版本,可以使用大佬们已搭建好的工具;
2.IDEA工具:对java工具挺友好的;
3.chisel-tutorial:找了好几个版本chisel相关,这个挺适合新生;
2、准备阶段
打开chisel-tutorial后,系统会运行build.sbtli里的内容,时间会长一些(这里我选择去吃饭,23333)。
这里build.sbt里的内容感觉挺全面的,要是下载chisel模板,build.sbt里面scala版本要注意,2.12.**里有一个版本不支持chisel,编译会出问题,显示main函数出错。(此处欠一张截图,后面碰到补上)
推荐阅读chisel-tutorials中的readme,会有检查工具是否完好。
3、编译hello
1.在终端直接运行
sbt run
2.这里会直接编辑src/main/scala/hello/Hello,其中Hello是完整的代码,并包含测试。
3.编译成功会在终端显示:
4.运行完成后会在test_run_dir生成三个文件。
5、编译main/scala/problem/Max2
由于Max2中没有加入object,直接编译会出错误。
这里我还对如何导入包疑惑,一直出问题,故直接像Hello文件一样,将所需要的文件都放在一个文件中。
// See LICENSE.txt for license details.
package problems
import chisel3._
import chisel3.iotesters.{Driver, PeekPokeTester}
import solutions.Mux2
//import solutions
// Problem:
//
// Implement a test for this module. Please edit:
// .../chisel_tutorial/src/test/scala/problems/Max2Tests.scala
//
class Max2 extends Module {
val io = IO(new Bundle {
val in0 = Input(UInt(8.W))
val in1 = Input(UInt(8.W))
val out = Output(UInt(8.W))
})
io.out := Mux(io.in0 > io.in1, io.in0, io.in1)
}
class Max2Tests(c: Max2) extends PeekPokeTester(c) {
//for (i <- 0 until 10) {
// Implement below ----------
poke(c.io.in0, 1)
poke(c.io.in1, 0)
step(1)
expect(c.io.out, 1)
// Implement above ----------
//}
}
object Max2 {
def main(args: Array[String]): Unit = {
if (!Driver(() => new Max2())(c => new Max2Tests(c))) System.exit(1)
// (new chisel3.stage.ChiselStage).emitVerilog(new Hello())
}
}
6.(1)我在这里直接编译Max2这个文件
runMain problem.Max2
(2)因为我已经试过,这里已经生成main class(个人理解好像生成相应模型模型导入JVM进行编译)
(3)根据提示运行
show discoveredMainClasses
这里会显示当前生产的MainClass。
(4)运行
run last Compile or run Main
会让你选择加载的模型,这里输入数字(不会显示)即可。
我也是第一次正式实验,其中对chisel只了解皮毛,欢迎大家指点。