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

 
奇偶发生器。统计输入中1的个数,如果为偶数则输出0,奇数则输出1。
 
参考链接:
https://github.com/ucb-bar/chisel-tutorial/blob/release/src/main/scala/examples/Parity.scala
 
1. 引入Chisel3
 
 
2. 继承自Module类
 
 
3. 定义输入输出接口
 
创建各项输入输出接口。
 
这些接口Bool型数:val in = Input(Bool())
a. 使用Bool()创建布尔型数,位宽为1位;
b. 使用Input/Output表示接口方向;
c. val 关键字表明定义的变量是所属匿名Bundle子类的数据成员;
 
4. 内部连接
 
使用state寄存器来存放状态,形成一个状态机。
 
1) 使用RegInit()创建一个初值为s_even的寄存器;
 
2) when()嵌套使用
 
3) 状态枚举的创建:val s_even :: s_odd :: Nil = Enum(2)
a. Enum(2)创建一个包含2个元素的枚举;
b. 把这两个枚举元素逐个赋值给s_even和s_odd;所以这里同时声明和赋值了两个变量;这是Scala支持的一种定义方法。
 
5. 生成Verilog
 
 
可以直接点运行符号运行。
 
也可以使用sbt shell执行:
 
生成Verilog如下:
 
6. 测试
 
 
 
7. 附录
 
Parity.scala:
import chisel3._
import chisel3.util.Enum class Parity extends Module {
val io = IO(new Bundle {
val in = Input(Bool())
val out = Output(Bool())
})
val s_even :: s_odd :: Nil = Enum(2)
val state = RegInit(s_even)
when (io.in) {
when (state === s_even) { state := s_odd }
.otherwise { state := s_even }
}
io.out := (state === s_odd)
} object ParityMain {
def main(args: Array[String]): Unit = {
chisel3.Driver.execute(Array("--target-dir", "generated/Parity"), () => new Parity)
}
}

最新文章

  1. osgi笔记
  2. various Sequence to Sequence Model
  3. 百度 WebUploader 简单入门示例
  4. Gradle用户指南
  5. Linux 查看端口占用并杀掉
  6. Oracle core02_数据块
  7. Ceph:一个开源的 Linux PB 级分布式文件系统
  8. selenium——find_element_by_xx 与 find_element(By.XX,'XXXX')
  9. c# 集合去重并筛选
  10. 使用Qemu运行Ubuntu文件系统(1)
  11. [leetcode]96. Unique Binary Search Trees给定节点形成不同BST的个数
  12. js中Math之random,round,ceil,floor的用法总结
  13. react性能检测与优化
  14. java的原子类 AtomicInteger 实现原理是什么?
  15. 关于Unity中鼠标选取物体的解决方案
  16. Linux命令行操作进程
  17. POJ 2390
  18. LeetCode - Department Highest Salary
  19. 回溯算法_01背包问题_Java实现
  20. oracle之 db file sequential read等待事件优化思想

热门文章

  1. 解决MySQL 8.0数据库出现乱码的问题
  2. Ubuntu 拦截并监听 power button 的关机消息
  3. RabbitMQ的发布订阅模式(Publish/Subscribe)
  4. [hdu4763]next数组的应用
  5. js判断数组(数组对象)中是否存在指定的值,如果存在就删除
  6. ReactNative报错:Can't find variable: __fbBatchedBridge
  7. Javascript中的apply与call
  8. 5-JVM常用的命令
  9. 14.5 Go 爬虫
  10. PG primary 和 slave 互换