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