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的内容如下(注意两行之间空一行):
max2.scala的内容如下,这是一个比较器,从两个8位的输入中,选择一个较大的数,作为输出:
(3)编译得到verilog文件
在终端下进入上面的chisel_max目录,输入sbt,会下载相关的依赖包,等待较长的时间,如果期间长时间没有反应,那么可以按Ctrl+C,然后重新输入sbt,最后会给出>符号,表示可以进行下一步了,此时输入run,即可得到对应的verilog文件。
![](http://img.blog.csdn.net/20150529103746496?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGVpc2hhbmd3ZW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
得到的verilog代码位于文件Max2.v中,内容如下:
接下来可以仿真,下一篇将讲解如何使用Icrus verilog、Gtkwave进行仿真及波形查看
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进行仿真及波形查看
相关文章推荐
- js 闭包【转】
- Oracle11g R2: Node Connectivity check failed解决办法
- jsp转html,工具类,网站静态化的一种简单实现方法!
- Libvirt学习笔记(一)
- spark学习2 编译的
- CocoaPods中的头文件import导入时不能自动补齐的解决方法
- 122 6
- /storage/sdcard, /sdcard, /mnt/sdcard 三者的区别
- 会爆栈,dfs传参,只能传1个~~RMQLCA在线
- 五子棋程序设计测试计划
- android 获取网络类型名称2G 3G 4G wifi
- 一般人还是愿意在别人制定的框架下做事
- 变量的定义与使用
- 自己动手写一个 iOS 网络请求库(二)——封装接口
- Linux NFS服务器的安装与配置
- matlab 如何在GUI 上 暂停和暂停后连续播放视频
- 项目题目
- tomcat版本号修改已dwr配置错误安全漏洞整改
- jquery读取xml文件实现省市县三级联动的方法
- viewpager与fragment 左右滑动效果 ---换fragment