npm 包 yosysjs 使用教程

前言

yosysjs 是一款基于 JavaScript 的处理 RTL(Register Transfer Level)数字电路的开源工具包。它的核心代码是 yosys,一个在本地机器上运行的基于命令行的开源 RTL 合成器。yosysjs 借助了 yosys 的能力,使得在前端浏览器中对 RTL 代码进行语法分析、转换、优化和仿真变得更加容易和高效。

本文将介绍 yosysjs 的基本用法、常见 API 和示例,帮助你了解如何使用 yosysjs 来处理 RTL 数字电路。

安装

yosysjs 可以通过 npm 安装。在终端输入以下命令即可:

- --- ------- -------

核心 API

yosysjs 的 API 包含 yosysjs(RTL 电路实例)、addLibrary(向实例中添加库文件)、runPass(运行 pass 转换) 和 exportVerilog(导出 Verilog) 等方法。

yosysjs(RTL 电路实例)

用于初始化一个 RTL 电路实例,例子:

----- ------- - -------------------

----- --- - -
------ ------------- ---- ----- --- ------ -----
    --- ------ -----
    ------ --------- ---- -----
        ---- -- ---
    ---
    ------ --- - ---- - --
---------
--

----- ---- - -------------

addLibrary(向实例中添加库文件)

用于向 RTL 电路实例中添加库文件,例子:

----- ------- - -------------------

----- --- - -
------ ------------- ---- ----- --- ------ -----
    ------------------------------  -- -------
---------
--

----- ---- - ----------------------------------------------

runPass(运行 pass 转换)

yosysjs 可以通过运行各种 pass 来对 RTL 代码进行转换和优化。runPass() 方法用于运行指定的 pass 转换。例如,下面的例子中,我们使用 "synth_ice40" pass 将 RTL 代码转换为 ice40 FPGA 上的 Verilog 代码:

----- ------- - -------------------

----- --- - -
------ ------------- ---- ----- --- ------ -----
    --- ------ -----
    ------ --------- ---- -----
        ---- -- ---
    ---
    ------ --- - ---- - --
---------
--

----- ---- - ----------------------------------------------------

exportVerilog(导出 Verilog)

将处理后的 RTL 代码导出成 Verilog 代码。例子:

----- ------- - -------------------

----- --- - -
------ ------------- ---- ----- --- ------ -----
    --- ------ -----
    ------ --------- ---- -----
        ---- -- ---
    ---
    ------ --- - ---- - --
---------
--

----- ---- - ------------- ----------------

示例

下面给出一个包含多个模块互相调用的 RTL 代码示例,以测试 yosysjs 的 API。

-----------------
--    ---    ----
-----------------
------ --- -                ------ ---
    ----- ----
    ----- ------
    ----- ----- --------
    ------ ----- --------
--
    ---- ----- ----- ------- ------- -------

    --- ----- ---------           -- ---- ---
    --- ------- ---------         -- ---- ---
    --- --------- -------- ---------  ------ ---
    -- --------- -------- ---------  -- ---- --

    ------- --------- -----------      -- ---- -------
    ------- --------- -----------      -- ---- -------
    ------- --------- -----------      -- ---- -------

    -------- ----------- ---- ------ -----------  -- ---- --------
    -------- ----------- ---- ------ -----------  -- ---- --------
    -------- ----------- ---- ------ -----------  -- ---- --------

    -- ----------- ---------- ---------- ----------  -- ---- --
---------

------ --- ------ -- ------ ---  -- ---
    ------ - - - --
---------

------ --- ------ -- ------ ---  -- ---
    ------ - - --
---------

------ --- ------ -- ----- -- ------ ---  -- --
    ------ - - - - --
---------

------ -- ------ ----- -- ------ ---  -- --
    ------ - - - --
---------

------ ------- ------ -- ------ ---  -- ---
    -- --- ----- ---
---------

------ ------- ------ -- ------ ---  -- ---
    --- - - --
    ------ --------- -- - -- - --
    ------ - - --
---------

------ ------- ------ -- ------ ---  -- ---
    ------ - - - --- - ------  -- ----
---------

------ -------------- -- ----- ---- ----- ------ ------ ---  -- ---------
    ------ --------- ---- ------- ------ -----
        -- -------
            - -- -----
        ----
            - -- --
    ---
---------

用 yosysjs 对 RTL 代码进行 Verilog 文件的生成:

----- ------- - -------------------

----- --- - -
-------------------------
 - --- ---- ---- -----
 -------------------------
--- ------------ --- ------- ---- ----- ---

------ --- -                ------ ---
    ----- ----
    ----- ------
    ----- ----- --------
    ------ ----- --------
--
    ---- ----- ----- ------- ------- -------

    --- ----- ---------           -- ---- ---
    --- ------- ---------         -- ---- ---
    --- --------- -------- ---------  ------ ---
    -- --------- -------- ---------  -- ---- --

    ------- --------- -----------      -- ---- -------
    ------- --------- -----------      -- ---- -------
    ------- --------- -----------      -- ---- -------

    -------- ----------- ---- ------ -----------  -- ---- --------
    -------- ----------- ---- ------ -----------  -- ---- --------
    -------- ----------- ---- ------ -----------  -- ---- --------

    -- ----------- ---------- ---------- ----------  -- ---- --
---------

------ --- ------ -- ------ ---  -- ---
    ------ - - - --
---------

------ --- ------ -- ------ ---  -- ---
    ------ - - --
---------

------ --- ------ -- ----- -- ------ ---  -- --
    ------ - - - - --
---------

------ -- ------ ----- -- ------ ---  -- --
    ------ - - - --
---------

------ ------- ------ -- ------ ---  -- ---
    -- --- ----- ---
---------

------ ------- ------ -- ------ ---  -- ---
    --- - - --
    ------ --------- -- - -- - --
    ------ - - --
---------

------ ------- ------ -- ------ ---  -- ---
    ------ - - - --- - ------  -- ----
---------

------ -------------- -- ----- ---- ----- ------ ------ ---  -- ---------
    ------ --------- ---- ------- ------ -----
        -- -------
            - -- -----
        ----
            - -- --
    ---
---------
--

----- ---- - -----------------------------

------------------

输出的 Verilog 文件如下:

--------------------------
-- ------------- -- -----
-- ----- -- ------------- ------ -- ------- ----- -- ------ -- -----
--------------------------
------ --- -
  ----- ----
  ----- ------
  ----- ----- --------
  ------ ----- --------
--
  ---- ----- -----
  ---- -------
  ---- -------
  ---- -------
  ---- ----- -------
  ---- ----- -------
  ---- ----- -------
  ---- ----- --------
  ---- ----- --------
  ---- ----- --------
  ---- ----- --------
  ---- --------
  ---- --------

  ----- --
    --------------------
    ----------
  - ------ -
    --------
    -----------
  --

  ------- --
    ------------------------
    ----------
  - ------ -
    ----------
    -----------
    -----------
  --

  ---- ------ -
    -------------
    -------------
    -----------
  --

  ---- --
    ----------------
  - ------ -
    ----------------
    ----------------
    ----------------
    ----------------
    -----------
  --

  ---- --
    ----------------
  - ------- -
    -------------
    ----------
    ----------
  --

  ------- ------- -
    --------------
    ----------
    ---- -----------
    -------------
  --

  ---- --
    ----------------
  - ------- -
    -------------
    ----------
    ----------
    ----------
  --

  ---- --
    ----------------
  - ------- -
    -------------
    ----------
  --

  ---- --
    ----------------
  - ------- -
    -------------
    ----------
    ----------
    -----------
  --

  ----- --
    --------------------
    ----------
  - ------- -
    ------------
    -----------
  --

  ---- --
    ----------------
  - ------- -
    ---------------
    ---------------
    ---------------
    ----------
    -----------
  --

  ---- --
    ----------------
  - ------- -
    ---------------
    ---------------
    -----------
  --

  ------ ------- -
    --------
    -----------
    -----------
    -------------
  --

  ------ ------- -
    --------
    -----------
    -----------
    -------------
  --

  ------ ------- -
    --------
    -----------
    -----------
    -------------
  --

  ---- --
    ----------------
  - ------- -
    ---------------
    ---------------
    ---------------
    -----------
  --

  ------ ------- -
    --------
    -----------
    ------------
    -----------
  --

  ------ ------------- - - -------- -------- -------- ------- --

---------

结论

yosysjs 是一款强大且易于使用的前端工具,它能够让开发者更加轻松地处理和优化 RTL 代码。你可以使用本文中提到的 API 和示例来开始使用 yosysjs,并根据自己的需求扩展更多的功能。

有了 yosysjs,前端开发者可以在本地机器上进行 RTL 电路的语法分析、转换和仿真,这将极大地提高开发效率和代码质量,同时让开发者们更加专注于其他方面的工作。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/60057c4681e8991b448ebcaa


猜你喜欢

  • npm 包 react-scrollback 使用教程

    前言 在前端开发中,我们经常需要实现页面滚动到顶部的功能。一种简单易用的实现方式就是使用 react-scrollback 这个 npm 包。本文将详细介绍该包的使用方法,帮助大家学习使用该包,实现滚...

    3 年前
  • npm 包 verx 使用教程

    简介 npm 是前端开发中常用的包管理工具,它提供了方便快捷的安装和管理第三方包的方式。而 verx 则是一个 npm 包,通过它可以在项目中轻松地实现数据的验证和变换。

    3 年前
  • npm 包 light-countdown 使用教程

    随着现代 Web 应用的日益普及,倒计时功能在我们的产品中变得越来越重要。而 npm 包 light-countdown 可以为我们提供一个简单、灵活、高度可定制的倒计时组件。

    3 年前
  • npm 包 rary_utils 使用教程

    rary_utils 是一个前端常用的 JavaScript 工具类库,它包含了多个实用的函数和方法,可以帮助我们提高开发效率,减少重复代码的编写。在这篇文章中,我们将会介绍如何使用 rary_uti...

    3 年前
  • npm 包 @mrayanne113/tdd 使用教程

    在前端开发中,自动化测试是一个重要的流程,可以大大提高我们的代码质量和效率。@mrayanne113/tdd 是一个专为前端自动化测试而设计的 npm 包,本文将介绍如何使用它来进行测试,以及其它相关...

    3 年前
  • npm 包 bryanmedinagarcia 使用教程

    前言 bryanmedinagarcia 是一款非常好用的 npm 包,尤其适合前端开发。该 npm 包提供了很多有用的功能和组件,可以让我们更加轻松和高效地开发 Web 应用程序。

    3 年前
  • npm 包 perfmor 使用教程

    perfmor 是一个优化 Web 性能的工具集合,可以帮助前端工程师分析页面性能并提供相应的优化建议。它集成了 Lighthouse、PageSpeed Insights 和 Chrome 开发者工...

    3 年前
  • npm 包 minimal-electron-react-app 使用教程

    前言:electron 可以让我们使用前端的技术栈来构建桌面应用程序,minimal-electron-react-app 是一个极简的 electron+react 模板项目,让我们可以快速的使用 ...

    3 年前
  • npm 包 @markusylisiurunen/md-table 使用教程

    在前端开发的过程中,我们经常需要展示数据表格。而使用 markdown 格式来写表格非常方便,尤其是在撰写技术文档时。@markusylisiurunen/md-table 就是一款很好的 npm 包...

    3 年前
  • npm 包 in1t-react-native-voice 使用教程

    介绍 in1t-react-native-voice 是一个用于 React Native 的语音识别组件,可以用于识别用户的语音并将其转换为文本,同时也支持多种语言。

    3 年前
  • npm 包 insight-tealcoin-api 使用教程

    简介 insight-tealcoin-api 是一个通过 Tealcoin 钱包接口获取区块链信息的 npm 包。它为开发人员提供了一种简单的方法来获取有关 Tealcoin 区块链的数据,包括块,...

    3 年前
  • npm 包 siwi-oauth 使用教程

    本教程将介绍如何使用 siwi-oauth npm 包,它是一个用于在 Node.js 应用程序中实现 OAuth2 授权的开源包。OAuth2 是一种用于安全地授权第三方应用程序访问用户数据的流行协...

    3 年前
  • npm 包 @kobi-kadosh/enzyme-adapter-react-16 使用教程

    简介 在开发前端应用的过程中,我们经常使用 React 框架。React 有很多测试工具,其中一个非常受欢迎的工具是 Enzyme。Enzyme 是一个 React 组件测试工具,具有易于使用、兼容性...

    3 年前
  • npm 包 egg-oauth2-plugin 使用教程

    在 Web 应用开发过程中,授权登录是一个很常见的需求。为了方便前端和后端开发者在实现授权登录时节省时间和精力,有很多前后端通用的授权登录库。其中,egg-oauth2-plugin 是基于 Egg ...

    3 年前
  • npm 包 get-npm-scripts 使用教程

    npm 是现代化的 JavaScript 包管理器,包含了 JavaScript 所需的各种开源库和框架。在开发过程中,经常需要运行一些提供的脚本,如编译、打包、测试等。

    3 年前
  • npm 包 moweex-image-cropperv1 使用教程

    前言 作为前端工程师,我们往往需要使用一些第三方库或者插件来方便我们开发及提高我们的工作效率。这篇文章将介绍一款可以方便地进行图片裁剪的 npm 包 moweex-image-cropperv1,并详...

    3 年前
  • npm 包 @emkuck/complete-me 使用教程

    @emkuck/complete-me 是一个前端开发中常用的自动补全工具,可以在输入框中快速输入并搜索内容,提高用户体验,节省时间。在本文中,我们将介绍该包的使用方法及应用示例。

    3 年前
  • npm 包 @bem/sdk 使用教程

    随着前端领域的不断发展,BEM(块、元素、修饰符)作为可重用组件的一种解决方案正在变得越来越流行。在 BEM 中,我们可以将页面拆分为多个块,每个块都有一个标识符,并且可以包含多个元素和修饰符。

    3 年前
  • npm 包 console-logos 使用教程

    在前端开发中,经常需要输出日志信息来帮助我们调试代码。通常,我们使用 console.log() 函数来输出信息。然而,console.log() 函数的输出结果很难让我们一眼看出信息所处的位置和类型...

    3 年前
  • npm包 n4v-privacy-sidebar 使用教程

    前言 在现代 web 应用程序中,保护用户隐私变得越来越重要。为了解决这个问题,n4v-privacy-sidebar 这个 npm 包应运而生,它是一个轻量级的侧边栏 UI 组件,它可以在您的 we...

    3 年前

相关推荐

    暂无文章