zoukankan      html  css  js  c++  java
  • Chisel3

    https://mp.weixin.qq.com/s/-AVJD1IfvNIJhmZM40DemA

     
    实现后入先出(last in, first out)的栈。
     
    参考链接:
    https://github.com/ucb-bar/chisel-tutorial/blob/release/src/main/scala/examples/Stack.scala
     
    1. 引入Chisel3
     
     
    2. 继承自Module类
     
    栈的深度作为参数传入。
     
    3. 定义输入输出接口
     
    创建各项输入输出接口。
     
    val dataIn = Input(UInt(32.W))
    a. 使用32.W表示位宽为32位;
    b. 使用UInt创建无符号整型数;
    c. 使用Input/Output表示接口方向;
    d. val 关键字表明定义的变量是所属匿名Bundle子类的数据成员;
     
    4. 内部连接
     
    如果push置位,则把输入写入栈内存,并增加栈指针;
    如果pop置位,则把栈内存写入输出,并减小栈指针;
     
    1) 创建栈空间:val stack_mem = Mem(depth, UInt(32.W))
    空间大小为depth。Mem创建一块可读写内存。
     
    2) 创建栈指针寄存器:val sp = RegInit(0.U(log2Ceil(depth+1).W))
    栈指针根据栈的深度来决定宽度,初始化值为0.
     
    3) 创建输出寄存器:val out = RegInit(0.U(32.W))
    该寄存器直接输出到io.dataOut输出端口。
     
    5. 生成Verilog
     
     
    可以直接点运行符号运行。
     
    也可以使用sbt shell执行:
     
    生成Verilog如下:
     
    6. 测试
     
     
     
    7. 附录
     
    Stack.scala:
     
    import chisel3._
    import chisel3.util.log2Ceil
     
    class Stack(val depth: Int) extends Module {
    val io = IO(new Bundle {
    val push = Input(Bool())
    val pop = Input(Bool())
    val en = Input(Bool())
    val dataIn = Input(UInt(32.W))
    val dataOut = Output(UInt(32.W))
    })
     
    val stack_mem = Mem(depth, UInt(32.W))
    val sp = RegInit(0.U(log2Ceil(depth+1).W))
    val out = RegInit(0.U(32.W))
     
    when (io.en) {
    when(io.push && (sp < depth.asUInt)) {
    stack_mem(sp) := io.dataIn
    sp := sp + 1.U
    } .elsewhen(io.pop && (sp > 0.U)) {
    sp := sp - 1.U
    }
    when (sp > 0.U) {
    out := stack_mem(sp - 1.U)
    }
    }
     
    io.dataOut := out
    }
     
    object StackMain {
    def main(args: Array[String]): Unit = {
    chisel3.Driver.execute(Array("--target-dir", "generated/Stack"), () => new Stack(8))
    }
    }
  • 相关阅读:
    jQuery上传插件Uploadify使用详解
    SQL之case when then用法
    myeclipse 上安装 Maven
    ps 简介
    Linux 查看进程和删除进程
    EL表达<%@page isELIgnored="false"%>问题
    刷新本地的DNS缓存
    IDEA中 @override报错的处理步骤
    Caused by: org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file
    jsp中${param.user}不解析,原样输出。
  • 原文地址:https://www.cnblogs.com/wjcdx/p/10093520.html
Copyright © 2011-2022 走看看