01 2019 档案
摘要:https://mp.weixin.qq.com/s/zWW00D0fb8h7_TotGD9YoQ 介绍DefaultConfig类的组成。 1. DefaultConfig DefaultConfig是Config的子类。其定义位于system/Config.scala: 他直接使用Conf
阅读全文
摘要:https://mp.weixin.qq.com/s/uLEr9gAFaMDIXa8S9xJVTw 介绍配置类Parameters及其伴生对象的实现。 参考链接: https://docs.qq.com/sheet/DUUVQdGp3RHlzVGZm 1. Parameters Paramet
阅读全文
摘要:https://mp.weixin.qq.com/s/b5o3s2DgqOz3-iK8FqPeLQ 介绍配置相关的基础类及其继承关系。 参考链接: https://github.com/freechipsproject/rocket-chip/blob/master/src/main/scala/c
阅读全文
摘要:https://mp.weixin.qq.com/s/pMsK_E4mQrm3QXdnp7nDPQ 讨论指令解码部分遗留的几个问题。 1. 最小项与蕴含项之间的关系 参考链接: https://en.wikipedia.org/wiki/Implicant 按其中的描述: An implica
阅读全文
摘要:https://mp.weixin.qq.com/s/4uWqBRrMVG6FlnBKmw8U-w 介绍SimplifyDC如何简化解码逻辑。 1. 使用 简化从mint和maxt中查找的逻辑。 其方法签名如下: 其中: a. minTerms: 使结果为1的蕴含项; b. maxTer
阅读全文
摘要:https://mp.weixin.qq.com/s/CbBWdTlc_DESlUzd8KFcSg 介绍Term类各方法的实现。 1. prime 表示一个项是否是质项,即这个项是否被其他项包含。如项AB包含项ABC。 2. covers this covers x,即项this包含项x
阅读全文
摘要:https://mp.weixin.qq.com/s/YWXYNaRU-DbLOMxpzF2bpQ 介绍Simplify如何简化解码逻辑。 1. 使用 Simplify在DecodeLogic中使用,如下: 简化从t和dc项中查找的逻辑。 其方法签名如下: 其中: a. minTerms
阅读全文
摘要:https://mp.weixin.qq.com/s/XrBh9Kapj01HdvBi5MkbgA 介绍布尔代数最小项与最大项相关概念,以及Term类的实现。 参考链接: https://baike.baidu.com/item/卡诺图 https://en.wikipedia.org/wiki/I
阅读全文
摘要:https://mp.weixin.qq.com/s/0D_NaeBEZX5LBQRdCz2seQ 介绍解码单个信号逻辑的实现。 1. 单个信号 每个指令对应了一组信号,每个信号对应了一个解码逻辑。 如BNE指令对应的信号如下: 各个信号的含义如下: 每个信号都是一个BitPat,位宽不
阅读全文
摘要:https://mp.weixin.qq.com/s/WvepB3yAzjMbQalO3Z82pQ 介绍RocketChip Instruction解码逻辑的实现。 1. RISC-V RocketChip实现了RISCV ISA: 作为RISC-V的官方实现,实现的规范版本比较新,使用的编码
阅读全文
摘要:https://mp.weixin.qq.com/s/j8mt_qvwliKIKtlN6JcyqQ 介绍Intellij IDEA安装Scala插件后,如何在阅读和编码两方面助益开发者。 1. 语言专家 Scala是一门多范式编程语言,在支持面向对象编程的同时,也支持函数式语法。再加上隐式规则和宏等
阅读全文
摘要:https://mp.weixin.qq.com/s/Y75I9e3s4fDPZuv-CyiNDA 介绍软件编程思维与硬件建模思维的不同与相似之处。 1. 软件编程思维 编程,意指编写程序; 程序,即过程的顺序; 软件程序具有天然的串行特性: a. 汇编级别需要等前一条指令执行完成,才能执行下
阅读全文
摘要:https://mp.weixin.qq.com/s/n_4RKlOddr_p2S_wODvFbw 介绍硬件建模的各个层次,以及基于RTL进一步提高层次的方法。 1. 物理版图 直接画出各个物理器件的物理连接图,这个应该是最低的硬件建模层次了。 MOS6502据说就是这么开发的:http://www
阅读全文
摘要:https://mp.weixin.qq.com/s/mTmXXBzSizgiigFYVQXKpw 介绍Chisel与Scala的不同与关联。 一. 层次高低 Chisel是使用Scala语言编写的具体代码。从抽象层次上看,Scala更高。 1. 语言与代码 Chisel是使用Scala语言编
阅读全文
摘要:https://mp.weixin.qq.com/s/3uUIHW8DmisYARYmNzUZeg 介绍如何构建由模块组成的硬件模型。 1. 子模块 一个模块可以有一个或多个子模块,创建子模块时,需要使用Module(...)包裹: Module()实现如下: bc是一个call-by-
阅读全文
摘要:https://mp.weixin.qq.com/s/THqyhoLbbuXXAtdQXRQDdA 介绍构建硬件模型的Builder。 1. DynamicContext 动态上下文,供构建硬件模型时,存放上下文状态信息。 2. Builder Builder使用DynamicConte
阅读全文
摘要:https://mp.weixin.qq.com/s/fgCvIFt0RdEajhJVSy125w 介绍模块的输入输出端口的定义与管理。 1. _ports 1) 模块的输入输出端口,在BaseModule中管理: 2) 添加输入输出端口 使用IO(...)添加: 3) 使用 所有
阅读全文
摘要:https://mp.weixin.qq.com/s/w8NqM3GVlF0NydpsB65KPg 介绍创建模块顺序逻辑的connect命令。 0. 这里先简单对 "=" 和 ":="做一个讨论。 假设 a & b 的结果输出到一个匿名变量,记为anonymousVariable。 a & b的用法
阅读全文
摘要:https://mp.weixin.qq.com/s/YGTXky4wff7LXUphUxISQg 介绍创建模块判断逻辑的when命令。 1. when/elsewhen/otherwise 伴生对象when中的工厂方法,会创建一个WhenContext: WhenContext含有方法els
阅读全文
摘要:https://mp.weixin.qq.com/s/KkkqvekWHG6yrqwHUECRIw 介绍如何定义Wire/Reg/Memory/Prim。 1. DefWire Wire()表明内括的Data的容器为线,用法为: Wire()定义如下: a. 获取一个t的克隆x; b.
阅读全文
摘要:https://mp.weixin.qq.com/s/0ECca6XyFyEri0B4ckOZ4A 介绍UserModule类中,如何管理构建硬件模型所需的命令。 1. _commands private val _commands = ArrayBuffer[Command]() _comm
阅读全文
摘要:https://mp.weixin.qq.com/s/x6j7LZg7i7i_KcNEA8YCQw Chisel作为领域专用语言(DSL),用于构建硬件模型。待硬件模型建立后,再基于模型进行仿真、验证,以及转换。硬件模型可以转换为firrtl,也可以转换为verilog。 接下来介绍Chisel如何
阅读全文
摘要:https://mp.weixin.qq.com/s/F_08jKFMoX9Gf_J_YpsDpg 两个数据变量进行某个操作(op),产生一个输出,这个输出存在一个匿名变量中。这个匿名变量就是以OpBinding的形式绑定到hardware graph中的。 0. 这里先简单对 "=" 和 ":="
阅读全文
摘要:https://mp.weixin.qq.com/s/AxYlRtAXjd55eoGX5l1W-A 模块(Module)从输入端口(input ports)接收输入,经过内部实现的转换逻辑,从输出端口(output ports)输出。 在Chisel3中,模块的输入输出端口,通过IO(new Bun
阅读全文
摘要:https://mp.weixin.qq.com/s/NaInHsJgOwG03BLNF-wlxQ 介绍Module输入输出端口如何进行绑定。 1. IO() 在定义一个模块时,使用Bundle的匿名子类型来定义模块的输入输出端口,然后将其传递给IO()方法。 IO()方法定义在BaseMod
阅读全文

浙公网安备 33010602011771号