01 2019 档案

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