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 包 seo-detect-test 使用教程

    前言 在当前互联网时代,网站优化是非常重要的一个环节。而评估一个网站的 SEO 优化效果,最基础也最有效的方法便是通过对其各项指标的检测。而对于前端来说,常常需要编写一些程序来对网站进行 SEO 评测...

    3 年前
  • wdio-mocha-bamboo-reporter 使用教程

    如果你在前端的自动化测试中使用 WebdriverIO 和 Mocha,那么 wdio-mocha-bamboo-reporter 这个 npm 包可以帮助你生成漂亮并且易于理解的测试报告。

    3 年前
  • npm 包 studiowaaz-localization 使用教程

    简介 studiowaaz-localization 是一个用于前端本地化的 npm 包。它为开发者提供了一种简单而强大的方式去创建多语言的应用。studiowaaz-localization 实现了...

    3 年前
  • npm 包 15v-pm2 使用教程

    什么是 15v-pm2? 15v-pm2 是一个基于 npm 包 pm2 的轻量级进程管理工具,专为前端开发人员设计。它能够帮助你在开发中快速、轻松地管理多个进程,极大地提高了你的开发效率。

    3 年前
  • npm 包 15v-pmx 使用教程

    简介 npm 是一个包管理工具,npm 包 15v-pmx 是一款通用的性能监控工具,可以监控进程的 CPU、内存、网络流量等性能指标,并可以记录这些指标,以便分析和优化性能。

    3 年前
  • npm 包 my-react-boilerplate 使用教程

    my-react-boilerplate 是一个基于 React 的脚手架,它可以帮助前端开发者快速搭建出一套 React 开发环境,并根据自己的需求进行定制,提高开发效率。

    3 年前
  • npm 包 remove-strict-webpack-plugin 使用教程

    当使用 webpack 编译开发时,有时会遇到 strict mode 导致的一些错误,这时候我们可以使用 remove-strict-webpack-plugin 这个 npm 包来解决这个问题。

    3 年前
  • npm 包 slush-spa-lite 使用教程

    npm 是一个全球最大的软件包管理器,通过 npm 可以查找、安装和管理公共和私有代码包,极大地简化了代码的开发和维护。 slush-spa-lite 是一个 npm 包,它是一个快速创建单页应用程序...

    3 年前
  • npm 包 @hoangdv/number-formatter 使用教程

    背景 在前端开发中,我们经常需要对数值进行格式化处理,例如将数字按照货币格式进行展示等。在过去,我们可能需要手动编写一些函数来完成这个任务。而现在,有了 @hoangdv/number-formatt...

    3 年前
  • npm 包 kbk-ng-select 使用教程

    简介 kbk-ng-select 是一个基于 Angular 框架的选择器组件,可以用于单选、多选等场景。该组件提供了一些新颖的特性,包括快速的搜索功能、支持自定义模板、多选的可取消等等。

    3 年前
  • npm 包 moleculer-ejson-serializer 使用教程

    Moleculer-ejson-serializer 是一个基于 EJSON (Extended JSON) 格式的序列化和反序列化工具,用于 Moleculer 服务框架。

    3 年前
  • npm 包 storybook-react-tongchuan 使用教程

    简介 storybook-react-tongchuan 是一个 npm 包,旨在帮助前端开发者更加轻松地开发交互丰富的 React 组件。它基于 storybook 和 react-testing-...

    3 年前
  • npm 包 @huizhanren/organizer-sdk 使用教程

    前言 随着时代的发展和技术的不断进步,前端技术也在不断地发展和演进。现如今,前端正在成为应用程序开发的一个重要组成部分。为了更好地满足前端开发中对组织架构、角色权限等需求,@huizhanren/or...

    3 年前
  • npm 包 ppw-camera 使用教程

    ppw-camera 是一个可以在 Web 前端使用的摄像头 API 包,便于开发者在 Web 应用中使用设备上的摄像头。本文将详细介绍该 npm 包的安装和使用方法,并提供一些实用的示例代码。

    3 年前
  • npm 包 @liupeinye/homebridge-miio 使用教程

    在进行智能家居相关的开发中,常常需要借助于第三方的库来协助完成。其中,@liupeinye/homebridge-miio 是一个能够帮助控制小米智能设备的 npm 包。

    3 年前
  • npm 包 @tesq0/react-custom-scrollbars 使用教程

    前言 前端开发日益发展,需要我们借助更多的工具和组件来提升开发效率和用户体验。其中自定义滚动条是一个经典的需求,在一些需要滚动的页面中,这种自定义滚动条可以使页面更清晰、更美观、更易用。

    3 年前
  • npm 包 etsc-net-intelligence-api 使用教程

    简介 etsc-net-intelligence-api 是基于 Node.js 的 npm 包,用于与 Ethereum Swarm 相关的节点进行通信,可以方便的获取节点信息和状态数据。

    3 年前
  • NPM 包 React-highlight-contextual-words 使用教程

    在前端开发过程中,文本搜索和高亮显示是非常常见和核心的功能。而 react-highlight-contextual-words 就是为了解决这个问题而诞生的。它是一个 npm 包,可以方便地在 Re...

    3 年前
  • npm 包 @blueshit/aliyun-sts 使用教程

    前言 现如今,随着互联网的快速发展,云计算也逐渐成为业界的主流。阿里云作为国内云计算的领先者,拥有丰富的云产品和服务。本篇文章将会介绍如何使用 @blueshit/aliyun-sts 这个 npm ...

    3 年前
  • npm 包 `docxtemplater-cli-open-image-module` 使用教程

    docxtemplater-cli-open-image-module 是一款用于处理 Word 文档中图片替换的 npm 包,它可以方便地将指定文件夹下的图片批量替换到 Word 文档中。

    3 年前

相关推荐

    暂无文章