您的位置:首页 > 其它

Chisel实验笔记(一)

2015-05-29 10:21 344 查看
最近在学习Risc-v,其中伯克利大学开源了一款兼容Risc-v指令集的处理器Rocket,而Rocket处理器是采用Chisel编写的,所以要学习Chisel,Chisel的简单介绍如下:

Chisel (Constructing Hardware In a Scala Embedded Language).

Chisel is a hardware construction language embedded in the high-level programming language Scala

可以认为与VHDL、Verilog HDL功能相同,都是用来编写实现硬件电路的,但是Chisel由于基于Scala,所以具有Scale的一些特性,可能便于开发。采用Chisel编写的代码,会被编译为verilog文件,还有C++文件,其中后者可以直接进行模拟。

本文主要以一个实验说明Chisel的使用步骤,实验平台是Ubuntu14.04(64位)。

(1)安装sbt

在http://www.scala-sbt.org/下载sbt0.13.8,解压到一个路径下,比如/home/riscv/riscv/sbt,将其中的bin路径添加到环境变量PATH中,如下:
gedit ~/.bashrc
在最后一行添加如下:
exportPATH=/home/riscv/riscv/sbt/bin/:$PATH
保存,然后记得source,如下:
source ~/.bashrc

(2)建立Chisel工程

新建一个文件夹chisel_max,在其中新建文件max2.scala、build.sbt,其中build.sbt的内容如下(注意两行之间空一行):
resolvers ++= Seq("scct-github-repository" at "http://mtkopone.github.com/scct/maven-repo" )

libraryDependencies += "edu.berkeley.cs" %% "chisel" % "latest.release"


max2.scala的内容如下,这是一个比较器,从两个8位的输入中,选择一个较大的数,作为输出:

import Chisel._

class Max2 extends Module {
val io = new Bundle {
val in0 = UInt(INPUT,  8)
val in1 = UInt(INPUT,  8)
val out = UInt(OUTPUT, 8)
}
io.out := Mux(io.in0 > io.in1, io.in0, io.in1)

}

object Hellp {
def main(args: Array[String]) : Unit={
val margs=Array("--backend","v","--compile")
chiselMain(margs, () => Module(new Max2()))
}
}


(3)编译得到verilog文件

在终端下进入上面的chisel_max目录,输入sbt,会下载相关的依赖包,等待较长的时间,如果期间长时间没有反应,那么可以按Ctrl+C,然后重新输入sbt,最后会给出>符号,表示可以进行下一步了,此时输入run,即可得到对应的verilog文件。



得到的verilog代码位于文件Max2.v中,内容如下:
module Max2(
input [7:0] io_in0,
input [7:0] io_in1,
output[7:0] io_out
);

wire[7:0] T0;
wire T1;

assign io_out = T0;
assign T0 = T1 ? io_in0 : io_in1;
assign T1 = io_in1 < io_in0;
endmodule
上面的verilog代码实现的正是比较器的功能。
接下来可以仿真,下一篇将讲解如何使用Icrus verilog、Gtkwave进行仿真及波形查看
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: