Chisel手册之Types

来源:互联网 发布:经典文案 知乎 编辑:程序博客网 时间:2024/05/22 06:31
本文是Chisel手册第二篇Types。

Types
表示硬件设计的Chisel图包含原始节点和类型节点。Chisel类型系统与底层Scala类型系统分开维护,因此类型节点散布在原始节点之间,以允许Chisel检查并响应Chisel类型。Chisel类型节点在硬件设计转换为C ++或Verilog之前被擦除。getRawNode运算符定义在基本Node类中,跳过类型节点并返回找到的第一个原始节点。下图显示了内置的Chisel类型层次结构,其中Data为最顶层节点。



 (1) 内置标量类型包括Bool,SInt和UInt和内置聚合类型Bundle和Vec允许用户使用其他类型的集合扩展Chisel数据类型集。
 (2) Data自身就是一个节点。
abstract class Data extends Node ; 
 (3) Data类具有用于在类型之间转换和将端口方法委托给其单个输入的方法。我们将在Port一节讨论端口。最后,用户可以在其自己的类型节点(例如bundle)中覆盖cloneType方法,以便反映克隆所需的构造参数。
 (4) Data节点可以用于四种目的:
types: UInt(width = 8), 在指定最小位宽的图中记录中间类型(在本节中描述)
wires: UInt(width = 8), 作为数据的前向声明,允许将来的条件更新(在Updateable一节中描述)
ports: UInt(dir = OUTPUT, width = 8), 定义模块接口的专用线,还能指定方向(在Ports一节中描述)
literals: UInt(1) 或 UInt(1, 8), 可以使类型对象构造函数来构造其值和可选宽度。

Bits
object Bits ;
class Bits extends Data with Updateable ;
 (1) Bits具有用于简单位操作的方法。注意,##是二进制连接,而Cat是一个正则拼接。为了避免与Scala的内置==冲突,Chisel的按位比较命名为===。
 (2) 使用Fill可以创建n位宽的域:
def Fill(n: Int, field: Bits): Bits
 (3) 一个两输入的选择器可以使用Mux:
def Mux[T <: Data](sel: Bits, cons: T, alt: T): T
 (4) 常量或字面值使用Scala整数或传递给构造函数的字符串表示:
UInt(1)
UInt("ha")
UInt("o12")
UInt("b1010") // binary 4-bit lit from string.

Bools
object Bool ; 
class Bool extends UInt ;
 (1) 布尔值用Bools表示。
 (2) Bool与UInt(width = 1)相等。

Nums
 (1) Num是一个类型节点,定义了算术运算
class Num extends Bits ;
 (2) 有符号和无符号整数被认为是定点数的子集,并且分别由类型SInt和UInt表示。
object SInt ;
class SInt extends Num ;
object UInt ;
class UInt extends Num ;

Bundles
 (1) Bundle将几种不同类型的命名字段组合成一个连续单元,非常像C中的struct。
class Bundle extends Data ;

Vecs
 (1)Vecs可以创建可索引元素向量。
object Vec ; 
class Vec[T <: Data](n: Int, val gen: () => T) extends Data ;


0 0
原创粉丝点击