Chisel 笔记
Chisel本身具有面向对象的特性,基于Scala:一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言、并集成面向对象编程和函数式编程的各种特性。简言之,在Chisel的实现中,所有单元(电路、模块、端口等等)都是对象。
Note:关于 operand = 和 operand :=
- = 告诉chisel给对象分配一个值。
- := 表示的是Reassignment。比如某个对象被 operand = 分配了值,那么在后续的“电路综合/连接”过程中必须使用 :=
这可能很让人困惑,因为综合电路过程中,节点只有可能被连接一次,为什么还有reassignment呢?(本人就百思不得其解)其实原因在于,在Verilog中,通常都是先声明变量是wire型 or reg型 or others,在后续语句中才会通过assign xxx = xxx或者 xxx = xxx或 xxx <= xxx来赋值。那么再看看Scala的变量语法:
- Scala变量是一种使用方便的占位符,用于引用计算机内存地址,变量创建后会占用一定的内存空间。
- 在 Scala 中,使用关键词 "var" 声明变量,使用关键词 "val" 声明常量。如
var myVar : String = "Foo" 和 val myVal : String = "Foo"
-
变量的类型在变量名之后等号之前声明。定义变量的类型的语法格式如下:
var VariableName : DataType [= Initial Value] 或 val VariableName : DataType [= Initial Value]
变量声明一定需要初始值,否则会报错。
回到chisel中,由于在定义I/O时采用的Bundle里就已经对一些对象赋予了初始值(as default),所以在后续操作中必定是reassignment。Puzzle solved !
补充:
Chisel | Generic form | Compile-time | Hardware / Run-time | Verilog |
= | var foo = [...] | Yes | [indirectly] | (aliasing operation, analogous to wire assignment in Verilog)
|
:= | foo := [...] | Yes | assign myWire = [...]; |
的的的的