[计算机硬件] Chisel 笔记/待更新

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的变量语法:

  1. Scala变量是一种使用方便的占位符,用于引用计算机内存地址,变量创建后会占用一定的内存空间。
  2. 在 Scala 中,使用关键词 "var" 声明变量,使用关键词 "val" 声明常量。如 
    var myVar : String = "Foo" val myVal : String = "Foo"
  3. 变量的类型在变量名之后等号之前声明。定义变量的类型的语法格式如下:

    var VariableName : DataType [= Initial Value]  val VariableName : DataType [= Initial Value]

    变量声明一定需要初始值,否则会报错。

    扫描二维码关注公众号,回复: 3899912 查看本文章

  回到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) 

wire foo = [...];

:= foo := [...]   Yes assign myWire = [...];

的的的的 

猜你喜欢

转载自www.cnblogs.com/George-Okelly1995/p/9897539.html