【问题标题】:Is there any way to get default parameter value for verilog module with Yosys有什么方法可以使用 Yosys 获取 verilog 模块的默认参数值
【发布时间】:2019-08-16 04:10:33
【问题描述】:

我正在尝试使用 Yosys 命令 shell 获取 verilog 模块的默认参数值。 有什么办法吗? 此外,解析 `write_ilang' 命令输出文件是个好主意吗?或者它的格式在不久的将来会发生巨大变化?

尝试在 ilang、json、表转储甚至使用 chparam -list 命令中查找默认值,但没有带来任何结果。

考虑这个例子(文件 param_test.v):

module stub();
  parameter PUBLIC_PARAM = 1;
  parameter HIDDEN_PARAM = 2;
endmodule

module testbench();
  stub no_param_stub ();
  stub #(.PUBLIC_PARAM(1)) one_param_stub ();
endmodule

我遵循以下步骤:

  1. 加载源代码read -sv param_test.v
  2. 精心设计hierarchy -top testbench
  3. 尝试获取参数值。

write_ilang 命令的输出:

# Generated by Yosys 0.8+634 (git sha1 ac2fc3a, clang 3.8.0-2ubuntu4 -fPIC -Os)
autoidx 1
attribute \blackbox 1
attribute \src "param_test.v:1"
module $paramod\stub\PUBLIC_PARAM=1
  parameter \HIDDEN_PARAM
  parameter \PUBLIC_PARAM
end
attribute \blackbox 1
attribute \src "param_test.v:1"
module \stub
  parameter \HIDDEN_PARAM
  parameter \PUBLIC_PARAM
end
attribute \top 1
attribute \src "param_test.v:6"
module \testbench
  attribute \module_not_derived 1
  attribute \src "param_test.v:8"
  cell \stub \no_param_stub
  end
  attribute \module_not_derived 1
  attribute \src "param_test.v:10"
  cell $paramod\stub\PUBLIC_PARAM=1 \one_param_stub
  end
end

write_json 命令的输出甚至不包含有关HIDDEN_PARAM 参数的信息:

{
  "creator": "Yosys 0.8+634 (git sha1 ac2fc3a, clang 3.8.0-2ubuntu4 -fPIC -Os)",
  "modules": {
    "$paramod\\stub\\PUBLIC_PARAM=1": {
      "attributes": {
        "blackbox": 1,
        "src": "param_test.v:1"
      },
      "ports": {
      },
      "cells": {
      },
      "netnames": {
      }
    },
    "stub": {
      "attributes": {
        "blackbox": 1,
        "src": "param_test.v:1"
      },
      "ports": {
      },
      "cells": {
      },
      "netnames": {
      }
    },
    "testbench": {
      "attributes": {
        "top": 1,
        "src": "param_test.v:6"
      },
      "ports": {
      },
      "cells": {
        "no_param_stub": {
          "hide_name": 0,
          "type": "stub",
          "parameters": {
          },
          "attributes": {
            "module_not_derived": 1,
            "src": "param_test.v:8"
          },
          "port_directions": {
          },
          "connections": {
          }
        },
        "one_param_stub": {
          "hide_name": 0,
          "type": "$paramod\\stub\\PUBLIC_PARAM=1",
          "parameters": {
          },
          "attributes": {
            "module_not_derived": 1,
            "src": "param_test.v:10"
          },
          "port_directions": {
          },
          "connections": {
          }
        }
      },
      "netnames": {
      }
    }
  }
}

【问题讨论】:

    标签: verilog yosys


    【解决方案1】:

    Yosys 最近获得了通过精化保留参数的功能(而它们通常被丢弃)。将-pwires添加到read_verilog,参数将转换为由参数默认值驱动的线,parameter属性设置为1。

    在稳定性方面,还有其他几个工具(例如 nMigen)可以创建或读取 RTLIL ilang,因此现在不太可能有重大的重大变化。

    【讨论】:

    • 感谢您的回答,很遗憾-pwires 标志没有在文档中描述。我还找到了另一种通过 C++ API 获取参数初始值的方法。可以dynamic_cast Yosys::RTLIL::Module 到Yosys::AST::AstModule 精化后访问它的参数值。但是,我想这是一个糟糕的长期解决方案。
    • 仅供参考,如果您运行 help read_verilog,则会记录-pwires(一旦发布 0.9,就会出现在在线文档中。9)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多