chisel学习笔记1

chisel是在scala的基础上建立起来的,初学chisel可能有点摸不着头脑,建议去菜鸟学学scala先。码一下scala的笔记,贼适合入门。

Scala是一个面向对象的编程语言,了解这一点很重要,这也是Scala和Chisel的一个很大的优势。

  1. 变量是对象。
  2. 运用val声明的常量也是对象。
  3. 甚至literal也是对象(例如,1,2,3,字符串等)。
  4. 函数本身也是对象。这之后会详细说明。
  5. 对象(Object)是类(class)的实例。
    1. 事实上,面向对象中的对象(object) 在Scala中被称为实例。
    2. 在定义一个类的时候,需要指定:
      1. 类中的数据(valvar
      2. 类的操作,称为方法(method)或者函数(function)。这些方法可以通过该类的实例来调用。
  6. 类可以从其他类继承。
    1. 被继承的类叫做父类,继承的类叫做子类。
    2. 在这种情况下,子类继承父类的所有数据成员和方法。
    3. 子类也可以扩展或重载从父类继承的这些方法。
  7. 类也可以继承自特征(traits)。Traits可以被看作是轻量级的类,它可以允许多继承。
  8. (Singleton)Object对象在Scala中是一个特殊的类。
    1. 它们不是上面所说的对象,上面那些我们称之为实例。

下面是一个创建Scala类的例子:

// WrapCounter从0开始计数,一直到最大值然后归零
class WrapCounter(counterBits: Int) {

  val max: Long = (1 << counterBits) - 1
  var counter = 0L
    
  def inc(): Long = {
    counter = counter + 1
    if (counter > max) {
        counter = 0
    }
    counter
  }
  println(s"counter created with max value $max")
}

在上面的代码中:

  • class WrapCounter --这是类WrapCounter的定义.
  • (counterBits: Int) -- 创建一个WrapCounter实例需要一个整数类型的参数,名称为counterBits
  • 大括号 ({}) 里面是这个类的代码块。大部分的类在这里面定义变量,常量和方法。
  • val max: Long = -- 这个类包含一个叫max的成员常量, 类型是Long,并且在创建类的实例时被初始化。
  • (1 << counterBits) - 1 计算counterBits这么多比特所能表示的最大值。max在这里由val创建,所以它是常量,之后不能被改变。
  • 变量 counter 在这里被创建出来,并且赋初值为 0L , “L” 在这里表示0是一个长整型,所以编译器也会推定 counter 为长整型。
  • max 和 counter通常被称为该类的 成员变量(或常量)
  • 该类定义了一个叫inc的方法,该方法不需要参数并且返回一个长整型 Long 的值。
  • 方法 inc 包含如下代码:
    • counter = counter + 1 递增 counter.
    • if (counter > max) { counter = 0 } 检查counter是否大于最大值max,如果大于的话,重置成0。
    • counter -- 最后这一行很重要
      • 一个代码块的最后一行被认为是该代码块的返回值,调用者可以使用或忽略该返回值。
      • 这是一个通用的办法;例如,在ifelse语句中,真假分支都可以是代码块,所以if...else语句也可以返回值:例如val result = if (10 * 10 > 90) 'greater' else 'lesser'的返回值就是'greater'。
    • 所以在这里,方法inc的返回值就是counter
  • println(s'counter created with max value $max') 在标准输出stdout中打印出一个字符串。由于println直接位于定义类的代码块中,所以它会在每一次创建该类的实例时都会被运行。
  • 这里打印的字符串是一个被解析(interpolated)的 字符串。
    • 在引号前面的 s 表示这是一个被解析的字符串。
    • 被解析的字符串会在运行的时候才被处理。
    • 字符串中的 $max 会被变量max的值所替换。
    • 如果$ 后面跟的是任意Scala代码块的话,这个代码块可以包含任何Scala语句。
      • 例如,println(s'doubled max is ${max + max}').
      • 这个代码块的返回值将会替换掉字符串中的 ${...}
      • 如果返回值不是字符串,则会被转换为1;理论上scala中几乎每个类型都可以隐式地转换为字符串)。
    • 除非您正在调试,否则应该避免类似这样每次创建类的实例时都要打印的内容,以避免标准输出显示了太多东西。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值