zoukankan      html  css  js  c++  java
  • Chisel3

     
    介绍UserModule类中,如何管理构建硬件模型所需的命令。
     
     
    1. _commands
     
    private val _commands = ArrayBuffer[Command]()
     
    _commands中存放了构建模块所需的全部命令。
     
     
    1) 添加命令:addCommand
     
    a. 需要没有close:_closed意为模块构建所需已经齐备,不能再向其中添加内部数据和逻辑定义;
    b. 把c添加到_commands中;
     
    2) 获取所有命令:getCommands
     
     
    a. 需要已经close,意为模块构建所需已经齐备;
    b. 返回全部命令:_commands.toSeq
     
    2. Builder.pushCommand()
     
     
    addCommand()通过pushCommand()调用,将命令c添加到正在构建的模块(forcedUserModule)之中。
     
    3. _closed
     
     
    _closed定义与BaseModule类中,为该类数据成员,protected表明子类可以直接读写访问。
     
    _closed是一个标志:标志着模块定义是否已经完成,即所需的各个内部数据变量、内部逻辑是否已经全部添加到模块中。亦即构建模块的硬件模型所需的所有命令已经齐备,可以开始构建了。
     
    总结并简而言之,即过程分为两个阶段:定义、构建。而_closed标志着模块定义阶段的结束。也可以用来表明可以开始构建阶段了。
     
     
    4. forcedUserModule
     
    pushCommand()调用forcedUserModule.addCommand(c)把命令c加入到forcedUserModule中。
     
    forcedUserModule定义如下:
    可知,其为Option包裹着的UserModule,即currentModule拆包而来;
     
    currentModule定义如下:
    currentModule基于动态上下文(dynamicContext)中定义的变量currentModule。其赋值可以直接使用“currentModule = xxx”的形式。
     
    currentModule定义与Builder类中,其赋值的地方为:
     
    直接定义在BaseModule的类体中,每一个BaseModule类的子类实例化时,都要执行这个代码。所以Builder.currentModule的值即为当前实例化的模块。
     
    如下代码中FullAdder即为Module的子类,亦即BaseModule的子类:
     
    所以new FullAdder()时,会执行到Builder.currentModule = Some(this)这行代码,而把currentModule设置为正在创建(new)的这个FullAdder模块。
     
    所以后续pushCommand()时,都是添加到这个FullAdder模块中。
     
     
     
  • 相关阅读:
    个人主页
    本周个人总结
    周个人总结
    排球比赛计分程序的典型用户和场景
    排球比赛计分规则功能说明书
    [黑马程序员]入学面试题!
    [黑马论坛]24期技术活动题目及答案!
    [黑马论坛]23期技术活动题目及答案!
    [黑马程序员]训练营入学考试题!
    [黑马程序员]基础测试题目!
  • 原文地址:https://www.cnblogs.com/wjcdx/p/10207636.html
Copyright © 2011-2022 走看看