1.模块与端口操作
Chisel语言概述
Chisel 是一门敏捷型的硬件描述语言,在近些年越来越火,网络上的学习资源也较为丰富。最近由于项目需求,需要入门Chisel,同时在CSDN记录自己的心得。
敏捷型开发语言
何为敏捷型开发语言呢?换言之可以提升效率的语言。Chisel可以认为是为了提高Verilog这一传统硬件描述语言而设计开发的,最早诞生于伯克利的一个实验室,并且接受了流片的检验,在企业界包括华为海思在内的公司都开始使用这一语言来进行开发,学术界中科院的包云岗教授团队已经在“一人一芯”计划中使用Chisel来开发,并设计了一套验证评估工具,用来开发,据报道15万行得的Verilog语句,只需要大概3万行Chisel语言句即可实现。据笔者了解,Chisel语言可以用更高级的语法结构来生成Veilog代码,相当于是比Verilog高一个层次的代码,但是控制的粒度相对于HLS(高层次综合语言)来说又要更细化一些,因此生成的中间代码具有更好的可读性,硬件资源的控制更好一些。
即控制粒度:
HLS>Chisel>Verilog
目前学术界十分关注这一语言,相信未来这一语言将会获得更大的关注度。
学习资料以及链接
1.官方文档Chisel_Book.pdf(英文版),博客的主要依据
2.官方文档Chisel_Book.pdf(中文版)
3.一个学习资源总结
端口及模块连接
入门介绍的坑后面来补,今天先直接开始上手模块,端口声明的例子如下
端口声明
使用下面代码声明如下模块,按照自底向上的层次实现封装;
class CompA extends Module {
val io = IO(new Bundle {
//每一个Module都需要含有IO()用于定义端口,
//IO可以使用 new Bundle()初始化
val a = Input(UInt (8.W))//Bundle可以理解为一个逻辑约束,其中可以用Input与Output来
//说明是输入或是输出
val b = Input(UInt (8.W))
val x = Output(UInt (8.W))
val y = Output(UInt (8.W))
})
// function of A
}
class CompB extends Module {
val io = IO(new Bundle {
val in1 = Input(UInt (8.W))
val in2 = Input(UInt (8.W))
val out = Output(UInt (8.W))
})
// function of B
}
class CompC extends Module {
val io = IO(new Bundle {
val in_a = Input(UInt (8.