chisel学习

前言

在学一生一芯项目,7月8号是第一天开始学习chisel的内容。我将把英文的翻译成中文过来。由于只是学习,所以基本上只是搬运这个学习内容没有修改东西。

提示:以下是本篇文章正文内容,下面案例可供参考

一、第 1 单元:Scala 简介

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、理解 Scala

Scala 是另一种支持通用编程范式的编程语言。我们选择使用它有几个原因:

  • 它是一种用于托管嵌入式 DSL 的好语言。
  • 它有一个强大而优雅的库,用于处理各种数据集合。
  • 它有一个严格的类型系统,可以帮助在开发周期的早期即编译时捕获一大类错误。
  • 它具有强大的表达和传递函数的方式。
  • Chi p el、Chi j el 和 Chi c el 不像 Chisel 那样从舌头上滚下来。(个人观点应该是发音上解释)

1.变量和常量 - var 和 val

创建(可变)变量和常量值(不可变变量)的语句分别以关键字var和val 开头。通常的做法是尽可能使用val。为什么?主要是为了减少以容易出错或使代码难以阅读的方式重用变量的机会。Scala 的结构使这种实践比您想象的要容易。

var numberOfKittens = 6
val kittensPerHouse = 101
val alphabet = "abcdefghijklmnopqrstuvwxyz"
var done = false

首先要注意的一点是,与 Java 和 C 不同,Scala 通常不需要在语句末尾使用分号。当有换行符时,Scala 会推断出分号。例如,当一行中的最后一个是需要额外代码的操作符时,它通常可以判断单个语句是否分布在多行中。唯一需要分号的时候是当您想将多个语句放在一行中时。

注意:您以明显的方式使用变量。这两个var可以重新分配,而这两个val 在创建后是不可变的
在这里插入图片描述

Conditionals(条件语句)

Scala 像其他编程语言一样实现条件。

// A simple conditional; by the way, this is a comment
if (numberOfKittens > kittensPerHouse) { 
    println("Too many kittens!!!") 
}
// The braces are not required when all branches are one liners. However, the 
// Scala Style Guide prefers brace omission only if an "else" clause is included.
// (Preferably not this, even though it compiles...)
if (numberOfKittens > kittensPerHouse) 
    println("Too many kittens!!!")

// ifs have else clauses, of course
// This is where you can omit braces!
if (done) 
    println("we are done")
else 
    numberOfKittens += 1

// And else ifs
// For style, keep braces because not all branches are one liners. 
if (done) {
    println("we are done")
}
else if (numberOfKittens < kittensPerHouse) {
    println("more kittens!")
    numberOfKittens += 1
}
else {
    done = true
}

但在 Scala 中,“ if” 条件返回一个值。那是什么价值?它由所选分支的最后一行给出。它非常强大,尤其是在用于初始化函数和类中的值时。看起来像:

val likelyCharactersSet = if (alphabet.length == 26)
    "english"
else 
    "not english"

println(likelyCharactersSet)

val是一个常量,一旦赋值就不会改变,如下图第二次复制会出现编译错误。
在这里插入图片描述

Methods (方法函数)

方法是用关键字 定义的def。在这里,我们将大量使用符号并将它们称为函数。函数参数(或参数)在逗号分隔的列表中指定,该列表指定参数的名称、类型和可选的默认值。为清楚起见,应指定返回类型。

没有任何参数的 Scala 函数不需要空括号。在类的成员成为函数的情况下,这通常使开发人员的生活更轻松,因为有一些与引用相关的计算。按照惯例,没有副作用的无参数函数(即调用它们不会改变任何东西,它们只是返回一个值)不使用括号,而有副作用的函数(也许它们会改变类变量或打印出来) ) 应该需要括号。

// Simple scaling function with an input argument, e.g., times2(3) returns 6
// Curly braces can be omitted for short one-line functions.
def times2(x: Int): Int = 2 * x

// More complicated function
def distance(x: Int, y: Int, returnPositive: Boolean): Int = {
    val xy = x * y
    if (returnPositive) xy.abs else -xy.abs
}

Overloading Functions(重载函数)

可以以多种方式使用相同的函数名称。参数及其类型决定了一个签名,允许编译器确定应该调用哪个版本的函数。但是,应该避免重载函数

// Overloaded function
def times2(x: Int): Int = 2 * x
def times2(x: String): Int = 2 * x.toInt

times2(5)
times2("7")

在这里插入图片描述

Recursive and Nested Functions(递归和嵌套函数)

花括号定义代码范围。在一个函数的作用域内可能存在更多的函数或递归函数调用。在特定范围内定义的函数只能在该范围内访问。

/** Prints a triangle made of "X"s
  * This is another style of comment
  */
def asciiTriangle(rows: Int) {
    
    // This is cute: multiplying "X" makes a string with many copies of "X"
    def printRow(columns: Int): Unit = println("X" * columns)
    
    if(rows > 0) {
        printRow(rows)
        asciiTriangle(rows - 1) // Here is the recursive call
    }
}

// printRow(1) // This would not work, since we're calling printRow outside its scope
asciiTriangle(6)

Lists(数组)

Scala 实现了各种聚合或序列对象。列表很像数组,但支持附加和提取的附加操作。

val x = 7
val y = 14
val list1 = List(1, 2, 3)
val list2 = x :: y :: y ::x :: Nil       // An alternate notation for assembling a list

val list3 = list1 ++ list2           // Appends the second list to the first list
val m = list2.length
val s = list2.size

val headOfList = list1.head          // Gets the first element of the list
val restOfList = list1.tail          // Get a new list with first element removed

val third = list1(2)                 // Gets the third element of a list (0-indexed)

在这里插入图片描述
添加一个by以增加一些固定数量。下面打印出 0 到 10 之间的偶数

for Statement

Scala 有一个for语句,它像传统的 for 语句一样工作。您可以迭代一系列值。

for (i <- 0 to 7) { print(i + " ") }
println()

在这里插入图片描述

使用until,而不是to从0迭代到6(7不包括在内)。

for (i <- 0 until 7) { print(i + " ") }
println()

在这里插入图片描述
如果您有某种类型的集合并希望访问所有元素,则可以将其for 用作迭代器,就像在 Java 和 Python 中一样。这里我们列出了 4 个随机整数,然后将它们相加。

val randomList = List(scala.util.Random.nextInt(), scala.util.Random.nextInt(), scala.util.Random.nextInt(), scala.util.Random.nextInt())
var listSum = 0
for (value <- randomList) {
  listSum += value
}
println("sum is " + listSum)

在这里插入图片描述
Scalafor有很多它可以做的技巧。它将直观地满足广泛的传统迭代需求,但它可能是也可能不是最方便使用的东西。使用称为推导式的丰富函数系列通常可以更轻松地完成诸如对数组元素求和之类的操作,这些函数可用于许多不同的元素集合。以后的模块将提供更多关于for及其盟友的信息。

Reading Scala

能够阅读 Scala 代码并理解常见的命名约定、设计模式和最佳实践是成为一名有效的 Chisel 设计师的重要一步。代码重用的潜力是 Chisel 的优势之一,但如果你看不懂别人的代码,重用就很困难。有效解析其他人的代码还可以更轻松地寻求帮助,尤其是从 StackOverflow 等资源中寻求帮助。

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

注:scala.util.Random.nextInt (n: Int): Int返回一个伪随机,均匀分配的int值在0 (含)和指定值(不含)之间,从此 随机数生成器的序列中抽取。cala.util.Random.nextInt(): Int 返回下一个伪随机,均匀分布的int值。

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

果粒橙_LGC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值