天天看点

chisel的初级参数化(verilog也可以)

0 简介

这篇文章讲chisel的参数化。chisel的参数化东西是比较多的,打算分两次讲,将其分为初级参数化手段以及高级参数化手段,一次初级参数化,然后两篇高级参数化。

chisel的初级参数化(verilog也可以)

初级参数化比较简单,但是作为后续内容的理解,还是需要讲一下。其中部分内容直接引用自《Digital Design With Chisel》。

初级参数化有两种手段:采用类构造函数的参数化,以及采用类模板的参数化。为什么叫初级参数化?因为其背后的思想和

Verilog 使用 parameter传递参数

无区别,都是给每个module传入参数,再例化module即可。

一、基于类构造函数的参数化

原理是采用scala的构造函数。如下面的代码。scala的构造函数和类声明是一体的。比如声明一个参数n。

chisel的初级参数化(verilog也可以)

在例化的时候直接代入参数即可。

chisel的初级参数化(verilog也可以)

二、基于类模板的参数化

scala作为面向对象的语言,和c++一样有类模板。一些复杂的参数,比如类型都不确定可以直接使用类模板。

chisel的初级参数化(verilog也可以)

如上面所示采用类模板的参数化。模块存在两个参数,dt和n。其中n确定是int, 但是dt的类型需要参数化。这时候就需要用到类模板。

NocRouter是一个类模板,存在一个模板参数T。T可以是任意的data类型比如int, double什么的。[T<:Data]是限定T的范围。T只能是Data的派生类。

此处我们给T代入一个自定义的类型Payload,如下:

chisel的初级参数化(verilog也可以)

在例化的时候T的类型其实是可以被自动推断的,所以不需要显示的写入。例如:

chisel的初级参数化(verilog也可以)

其中NocRouter的dt参数是new Payload, n参数是2。

三、初级参数化总结

chisel的初级参数化还是非常简单的。其思路和verilog没有区别。还是以module级别参数化,这种思维方式是一种自底向下的思维,效率并不能和verilog拉开差距。下一篇开始讲讲chisel真正的利器高级参数化,如何采用架构级思维将参数效率提升n倍!

继续阅读