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

0 简介

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

在这里插入图片描述

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

初级参数化有两种手段:采用类构造函数的参数化,以及采用类模板的参数化。为什么叫初级参数化?因为其背后的思想和Verilog 使用 parameter传递参数无区别,都是给每个module传入参数,再例化module即可。

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

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

在这里插入图片描述

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

在这里插入图片描述

二、基于类模板的参数化

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

在这里插入图片描述

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

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

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

在这里插入图片描述

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

在这里插入图片描述

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

三、初级参数化总结

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值