https://mp.weixin.qq.com/s/e8vJ8claauBtiuedxYYaJw

 
实现可以动态索引的表。
 
参考链接:
https://github.com/ucb-bar/chisel-tutorial/blob/release/src/main/scala/examples/Tbl.scala
 
1. 引入Chisel3
 
 
2. 继承自Module类
 
 
3. 定义输入输出接口
 
创建各项输入输出接口。
 
val addr = Input(UInt(8.W))
a. 使用8.W表示位宽为8位;
b. 使用UInt创建无符号整型数;
c. 使用Input/Output表示接口方向;
d. val 关键字表明定义的变量是所属匿名Bundle子类的数据成员;
 
4. 内部连接
 
 
1) 创建一个向量,并赋予初值:
 
 
其中:Range(0, 256).map(_.asUInt(8.W))
a. 创建一个[0, 256)的Range,不包含256(exclusive)。
 
b. 调用Range的map方法,针对Range的每一个元素执行map的参数所指代的方法:
c. 转换函数f: A => B
 
定义为:
_.asUInt(8.W))
 
其中“_”指代传入的参数,更容易理解的写法为:
(a) => a.asUInt(8.W))
 
亦即,针对每一个传入的参数a(这里a是Range内的每一个值),调用a.asUInt(8.W),并将其返回值作为返回值。
 
2) 索引向量并输出对应值:io.out := r(io.addr)
 
 
5. 生成Verilog
 
 
可以直接点运行符号运行。
 
也可以使用sbt shell执行:
 
生成Verilog如下:
 
6. 测试
 
 
 
7. 附录
 
Tbl.scala:
import chisel3._

class Tbl extends Module {
val io = IO(new Bundle {
val addr = Input(UInt(8.W))
val out = Output(UInt(8.W))
})
// val r = VecInit(Range(0, 256).map(_.asUInt(8.W)))
val r = VecInit(Range(0, 8).map((a) => a.asUInt(8.W)))
io.out := r(io.addr)
} object TblMain {
def main(args: Array[String]): Unit = {
chisel3.Driver.execute(Array("--target-dir", "generated/Tbl"), () => new Tbl)
}
}
 
 

Chisel3 - Tutorial - Tbl的更多相关文章

  1. Chisel3 - Tutorial - VendingMachine

    https://mp.weixin.qq.com/s/tDpUe9yhwC-2c1VqisFzMw   演示如何使用状态机.   参考链接: https://github.com/ucb-bar/ch ...

  2. Chisel3 - Tutorial - VendingMachineSwitch

    https://mp.weixin.qq.com/s/5lcMkenM2zTy-pYOXfRjyA   演示如何使用switch/is来实现状态机.   参考链接: https://github.co ...

  3. Chisel3 - Tutorial - Stack

    https://mp.weixin.qq.com/s/-AVJD1IfvNIJhmZM40DemA   实现后入先出(last in, first out)的栈.   参考链接: https://gi ...

  4. Chisel3 - Tutorial - Functionality

    https://mp.weixin.qq.com/s/3hDzpJiANdwp07hO03psyA   演示使用函数进行代码复用的方法.   参考链接: https://github.com/ucb- ...

  5. Chisel3 - Tutorial - Parity

    https://mp.weixin.qq.com/s/OtiQnE52PwdCpvmzJ6VFnA   奇偶发生器.统计输入中1的个数,如果为偶数则输出0,奇数则输出1.   参考链接: https: ...

  6. Chisel3 - Tutorial - ByteSelector

    https://mp.weixin.qq.com/s/RQg2ca1rwfVHx_QG-IOV-w   字节选择器.   参考链接: https://github.com/ucb-bar/chisel ...

  7. Chisel3 - Tutorial - ShiftRegister

    https://mp.weixin.qq.com/s/LKiXUgSnt3DzgFLa9zLCmQ   简单的寄存器在时钟的驱动下,逐个往下传值.   参考链接: https://github.com ...

  8. Chisel3 - Tutorial - Adder

    https://mp.weixin.qq.com/s/SEcVjGRL1YloGlEPSoHr3A   位数为参数的加法器.通过FullAdder级联实现.   参考链接: https://githu ...

  9. Chisel3 - Tutorial - Adder4

    https://mp.weixin.qq.com/s/X5EStKor2DU0-vS_wIO-fg   四位加法器.通过FullAdder级联实现.   参考链接: https://github.co ...

随机推荐

  1. Web概念

    目录 Web概念概述 Web概念概述 JavaWeb 使用 Java 语言开发基于互联网的项目 软件架构 C / S:Client / Server 客户端 / 服务器端 在用户本地有一个客户端程序, ...

  2. k-modes聚类算法

    为什么要用k-modes算法 k-means算法是一种简单且实用的聚类算法,但是传统的k-means算法只适用于连续属性的数据集(数值型数据),而对于离散属性的数据集,计算簇的均值以及点之间的欧式距离 ...

  3. qt-n个数组实现排列组合

    例如:现在有一批鞋子,其中颜色有[‘白色’,‘黑色’,‘灰色’]:大小有[‘40’,‘41’,‘42’],样式有[‘板鞋’,‘运动’,‘休闲’],要求写一个算法,实现[[‘白色’,‘40’,‘板鞋’] ...

  4. properties文件导出

    功能要求根据数据库记录的key-value-remark 数据,导出保存properties文件 1. pro.load()  pro.list() 处理不能解决备注.排序问题 2. 最后考虑下什么是 ...

  5. html之常用input type

    单选框,用name区分是否为一组,value表示提交时的值,checked表示被勾选 <input type="radio" name="sex" val ...

  6. &#128075;嗨,你有一份微信好友报告待查收~

    全部代码都已上传至我的KLab-

  7. PHP带标签的字符串去除标签,计算字符串长度的两种格式,截取字符串

    $str = "<p>看地方撒地方<i>fdsafsdfsd</i><img src="/static/img/fdsf.jpg" ...

  8. wepy 小程序开发(Mixin混合)

    默认式混合 对于组件data数据,components组件,events事件以及其它自定义方法采用默认式混合,即如果组件未声明该数据,组件,事件,自定义方法等,那么将混合对象中的选项将注入组件之中.对 ...

  9. 数据结构----双端队列Dque

    双端队列的概念与数据结构 deque(也称为双端队列)是与队列类似的项的有序集合.它有两个端部,首部和尾部,并且项在集合中保持不变. deque 特殊之处在于添加和删除项是非限制性的.可以在前面或后面 ...

  10. intellij tomcat

    VMOption -server -XX:PermSize=128M -XX:MaxPermSize=256m