摘要:
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 阅读全文