SysArch

本文最后更新于 2026年4月27日 晚上

布尔代数

各种 Normal Form

分为 CNF,DNF,CCNF,CDNF。

CNF 和 CCNF 选的是 truth table 为 0 的行。全 OR 了再 AND.
DNF 和 CDNF 选的是 truth table 为 1 的行,全 AND 了再 OR.

Chisel

Chisel 和 Verilog 区别还是挺大的,写点东西记录一下。

Scala 语言相关

首先,Chisel 是 脱胎于 Scala 的 DSL (Domain Specific Language), 因此也会有 Scala 的一些特性。

现在遇到的有:

  • 强类型语言,所有的类型转换都需要 Explicitly 定义。
  • Chisel 内部电路有自己的 Bool 和 S/UInt 类型, Scala 自己也有数据类型。二者不能混用
  • 类似上一条。 = 是赋值,一般用在 Scala相关类型上。 := 是连线。一般在 Chisel 类型上
  • match expr {case expr=>} 在 Chisel 里是 switch expr{is expr=>}
  • JVM 运行时会 Erase 类型。所以对于 Polymorphic types, pattern matching 只会 match 第一个选项

元件定义

所有的 io 都要通过 extend Bundle 的形式定义。
所有的 module 都要通过 extend Module 定义。

数字定义

位宽通过 .W 指定,类比 reg 的有 Bool,SInt,UInt,分别是字面意思。

一个很神经的写法:29.U(6.W),数值为 29, 位宽为 6 的 无符号整数。

自动机相关

好像 Chisel 对自动机的实现有一些糖:

Reg

首先,在 Chisel 里面,2.U 被认为是一个物理节点,无法直接放到 Reg 定义里面。但是 UInt(2.W) 可以放进去,因为这是一个 model。

  • Reg:创建指定位宽的寄存器
  • RegNext(expr):🍬,相当于创建一个 Reg 并自动赋值 expr,位宽自动推导。
  • RegInit(expr)/RegInit(expr,bit wide): 创建一个寄存器, sync reset 时的值为 expr.
  • RegEnable(expr,(init expr),enabled):创建一个能被 enabled 控制的寄存器。 可选择是否有 reset 信号代表的初始值。

Enum(n)

类似 Verilog 里的 parameter, 这里用 A::B::C::Nil = Enum(3) 这样的语法来定义。可用于 FSM 的状态表示


SysArch
https://chenxizhou233.github.io/posts/646ab82a.html
作者
Xizhou Chen
发布于
2026年4月24日
许可协议