当前位置: 首页 > news >正文

双控开关接入NVBoard

导入NVBoard

git仓库:https://github.com/NJU-ProjectN/nvboard

按照ysyx手册的要求,初始化NVBoard项目。

由于GitHub在国外,可能会超时无响应:

解决方案是修改代理。

当前的运行环境是VM VirtualBox虚拟机,网卡是:网络地址转换NAT

主机有科学上网,可以让虚拟机连接主机的代理接口。

修改或新建~/.ssh/config

Host github.comHostName github.comUser gitProxyCommand nc -X connect -x 10.161.53.236:7897 %h %p       

修改上面的ip地址端口为主机实际地址即可。

现在可以成功下载:

安装官方仓库readme的要求,需要添加环境变量NVBOARD_HOME指向所在的文件目录。

亲测通过ysyx导入会自动配置。

如果没有配置,可以参照下图,在~/.bashrc后手动追加。

进入/ysyx-workbench/nvboard/example目录下运行make run,而不是直接在/ysyx-workbench下运行。

如果报错找不到/scripts/nvboard.mk

那可能是环境变量没有生效,需要source ~/.bashrc

运行结果:

创建verilator项目

  • https://veripool.org/guide/latest/example_binary.html#example-create-binary-execution

双控开关

样例给的一般是.v作为verilator格式后缀。

文件名必须与类名相同,否则会报错:

编译语句较长,编写Makefile文件简化操作。

本人也是初学,目前是能成功编译。

肯定会存在一些规范问题,之后边学边解决。

VSRC_DIR=./vsrc
BUILD_DIR=./build
VERILATOR_FLAGS = --binary -j 0 -Wall -I$(VSRC_DIR) --Mdir ${BUILD_DIR}all:@echo "Write this Makefile by your self."sim:$(call git_commit, "sim RTL") # DO NOT REMOVE THIS LINE!!!#@echo "Write this Makefile by your self."
Vtop:${VSRC_DIR}/top.vverilator ${VERILATOR_FLAGS}  ./top.v
include ../Makefile

修改top.v内容为双控开关代码:

  • 搭建verilator仿真环境 | 官方文档 (oscc.cc)

补充说一下,Ctrl b z可以全屏显示,当前分屏方案下的,活跃窗口

再按一次可以恢复分屏方案。

编译命令为:verilator -Wall --cc --exe --build main.cpp top.v

显示波形

  • Verilator Pt.2: Basics of SystemVerilog verification using C++ :: It’s Embedded! (itsembedded.com)

Makefile文件内容:

  1. 生成可执行文件
    1. --trace:允许记录波形,不开启此选项在记录波形时会报错
    2. --cc:语言是C++
    3. --exe --build:生成可执行文件
  2. 执行可执行文件
  3. 查看波形

main.cpp内容:

#include <bits/stdc++.h>
#include "Vtop.h"
#include "verilated_vcd_c.h"
signed main(){VerilatedContext* contextp = new VerilatedContext;Vtop* top=new Vtop(contextp);VerilatedVcdC* tfp = new VerilatedVcdC;contextp->traceEverOn(true);top->trace(tfp,0);tfp->open("wave.vcd");while(contextp->time()<100){int a=rand()&1;int b=rand()&1;top->a=a;top->b=b;top->eval();tfp->dump(contextp->time());contextp->timeInc(1);//std::cout<<t<<" "<<(int)top->a<<" "<<(int)top->b<<" "<<(int)ctop->c<<std::endl;assert(top->c == (a ^ b));}tfp->close();return 0;
}

最后必须写tfp->close();,亲测否则不会生成波形文件。

还需要再gtkware左侧双击才能显示波形。

接入NVBoard

刚才的文件目录结构有很多不规范之处

参照NVBoard官方仓库的样例:

  • csrc:存放.cpp文件
  • vsrc:存放.v文件
  • constr:存放.nxdc文件

其中constr文件夹默认npc下没有给出。用于绑定nvboard引脚。

如果你创建一个不绑定任何引脚的.nxdc文件,比如:

top=top

并仿照官方样例的main.cpp结构,修改之前的main.cpp

#include <bits/stdc++.h>
#include "Vtop.h"
#include "verilated_vcd_c.h"
#include <nvboard.h>
static TOP_NAME dut;
void nvboard_bind_all_pins(TOP_NAME* top);
static void single_cycle() {dut.clk = 0; dut.eval();dut.clk = 1; dut.eval();
}
signed main(){nvboard_bind_all_pins(&dut);nvboard_init();VerilatedContext* contextp = new VerilatedContext;Vtop* top=new Vtop(contextp);VerilatedVcdC* tfp = new VerilatedVcdC;contextp->traceEverOn(true);top->trace(tfp,0);tfp->open("wave.vcd");while(contextp->time()<100){nvboard_update();single_cycle();}tfp->close();return 0;
}

Makefile文件抄过来,界面大概是这个样子的:

经过stfsc,没发现官方仓库example目录下没有办卡前端的配置项。

也就是说,这个办卡的前端是固定的,通过.nxdc文件绑定引脚,控制显示内容。

接入双控开关

对于板载的16个开关,期望需求是:

  • 开关拨上去的时候,上方的灯是亮的
  • 开关拨下去的时候,上方的灯是灭的

顶层模块是topled myLed用于创建一个led模块,并将引脚绑定。

模块间绑定之后,还需要将顶层模块与NVboard绑定,这一部分资料较少,可以选择STFRC阅读源码。

编辑top.nxdc

top=topledr (LD15, LD14, LD13, LD12, LD11, LD10, LD9, LD8, LD7, LD6, LD5, LD4, LD3, LD2, LD1, LD0)
sw (SW15, SW14, SW13, SW12, SW11, SW10, SW9, SW8, SW7, SW6, SW5, SW4, SW3, SW2, SW1, SW0)

左侧是ledrsw的顶层模块的输入输出引脚

  • 命名由开发者自定义

右侧的(LD15, ..., LD0)是将引脚绑定到NVboard的对应位置

  • 命名在NVboard中写死

运行效果:

相关文章:

双控开关接入NVBoard

导入NVBoard git仓库&#xff1a;https://github.com/NJU-ProjectN/nvboard 按照ysyx手册的要求&#xff0c;初始化NVBoard项目。 由于GitHub在国外&#xff0c;可能会超时无响应&#xff1a; 解决方案是修改代理。 当前的运行环境是VM VirtualBox虚拟机&#xff0c;网卡是…...

聊一聊软件系统性能测试的重要性

目录 性能测试的分类 为什么要进行性能测试呢&#xff1f; 性能测试曲线对比参数 虚拟用户数 vs 时间: 响应时间 vs 虚拟用户数: 吞吐量 vs 虚拟用户数: 错误率 vs 虚拟用户数: 资源使用情况 vs 时间: 组合视图 上图曲线图关键点介绍 性能测试的重要性主要体现在以下…...

双十一有哪些好物值得入手?五款超值数码好物分享!

在如今这个科技飞速发展的时代&#xff0c;数码产品已经成为我们生活中不可或缺的一部分。双十一作为一年一度的购物狂欢节&#xff0c;为我们提供了一个绝佳的机会&#xff0c;可以以更优惠的价格入手心仪的数码好物。下面就为大家分享五款超值数码好物&#xff0c;让你的生活…...

uniapp监听滚动实现顶部透明度变化

效果如图&#xff1a; 实现思路&#xff1a; 1、使用onPageScroll监听页面滚动&#xff0c;改变导航条的透明度&#xff1b; 2、关于顶部图片的高度&#xff1a; 如果是小程序&#xff1a;使用getMenuButtonBoundingClientRect获取胶囊顶部距离和胶囊高度&#xff1b; 如果…...

Humanoid 3D Charactor_P08_Federica

3D模型(人形装备)女孩 “P08_联邦” 内容仅为3D人物模型。 图片中的背景和家具不包括在内。 由Blender制作 包括: 1. 人形机器人3D模型和材质。 2. “Unity-chan!”着色器。 性别:女 装备:人形 皮肤网格:4个骨骼权重 多边形: 20000~40000 纹理分辨率:2K纹理 混合形状:…...

TikTok直播推流不精准该怎么办?跟IP有关系吗?

TikTok&#xff0c;这款风靡全球的短视频社交平台&#xff0c;其直播功能已成为众多创作者与品牌宣传的利器。然而&#xff0c;不少用户却遭遇了直播推流不精准的难题&#xff0c;这直接影响到直播的曝光和互动效果。那么&#xff0c;面对这一问题&#xff0c;我们该如何应对&a…...

Docker Registry API best practice 【Docker Registry API 最佳实践】

文章目录 1. 安装 docker2. 配置 docker4. 配置域名解析5. 部署 registry6. Registry API 管理7. 批量清理镜像8. 其他 &#x1f44b; 这篇文章内容&#xff1a;实现shell 脚本批量清理docker registry的镜像。 &#x1f514;&#xff1a;你可以在这里阅读&#xff1a;https:/…...

便捷点餐:Spring Boot 点餐系统

第三章 系统分析 3.1 系统设计目标 网上点餐系统主要是为了用户方便对美食信息、美食评价、美食资讯等信息进行查询&#xff0c;也是为了更好的让管理员进行更好存储所有数据信息及快速方便的检索功能&#xff0c;对系统的各个模块是通过许多今天的发达系统做出合理的分析来确定…...

研一上课计划2024/9/23有感

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、学位课1.应用数理统计&#xff08;学3 开卷考试&#xff09;2.最优化方法&#xff08;学3 开卷考试&#xff09;3.新中特&#xff08;学2 三千五百字的品读…...

【H2O2|全栈】关于CSS(6)CSS基础(五)

目录 CSS基础知识 前言 准备工作 网页项目规范 创建项目 布局 补充一部分属性 outline border-radius 预告和回顾 后话 CSS基础知识 前言 本系列博客将分享层叠样式表&#xff08;CSS&#xff09;有关的知识点。 本期博客主要分享的是网页项目规范&#xff0c;ou…...

网页护眼宝——全方位解析 Chrome Dark Reader 插件

网页护眼宝——全方位解析 Chrome Dark Reader 插件 1. 基本介绍&#xff1a;Chrome 插件的力量与 Dark Reader 的独特之处 随着现代浏览器的功能越来越强大&#xff0c;Chrome 插件为用户提供了极大的定制化能力。从广告屏蔽、性能优化到页面翻译&#xff0c;Chrome 插件几乎…...

C++ 构造函数和析构函数抛出异常的详细说明

1. 构造函数 功能&#xff1a;用于初始化对象的成员变量和分配资源。抛出异常&#xff1a; 当构造函数抛出异常时&#xff0c;构造的对象不会被创建&#xff0c;分配的资源会被释放。这意味着在构造函数抛出异常后&#xff0c;对象的状态是未定义的&#xff0c;调用者需要处理…...

Unity开发绘画板——01.前言

在做这个之前其实是想研究一下在Unity中交互雪的实现&#xff0c;交互雪顾名思义就是可以进行交互的雪&#xff0c;玩家角色从雪上走过时雪被踩凹陷的效果&#xff1b;交互雪的一种实现方案就是将地面看做一个画板&#xff0c;将玩家角色的躯体看做笔刷&#xff0c;将角色经过的…...

Spring定时任务 - @Scheduled注解详解

文章目录 一、Scheduled注解二、参数详解2.1、CRON_DISABLED2.2、cron2.3、zone2.4、fixedDelay / fixedDelayString2.5、fixedRate / fixedRateString2.6、initialDelay / initialDelayString 三、总结3.1、fixedDelay、fixedRate 以下内容基于org.springframework:spring-con…...

超详细超实用!!!AI编程之cursor编写设计模式接口隔离原则实例(七)

云风网 云风笔记 云风知识库 一、设计模式接口隔离原则定义 客户端不应该被迫依赖于它不使用的方法&#xff0c;一个类对另一个类的依赖应该建立在最小的接口上。要为各个类建立它们需要的专用接口&#xff0c;而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。 接口…...

解决在Nignx下Thinkphp路由不生效问题

Nignx下Tp框架路由不生效 问题的原因在于ThinkPHP通过URL后缀匹配方法&#xff0c;默认没有后缀会尝试访问默认的index方法。 解决方案&#xff1a;在URL末尾添加/后缀或者修改路由配置文件route.php中的规则。 如果还是没解决建议换apache...

『功能项目』QFrameWork框架重构OnGUI【63】

我们打开上一篇62QFrameWork背包框架的项目&#xff0c; 上文将功能实现在一个脚本中 本章要做的事情让脚本实现背包框架思想 首先按照图示创建脚本&#xff1a; 创建脚本&#xff1a;Item.cs namespace QFramework {public class Item{//道具public string Key;public string …...

4款AI生成PPT工具推荐,提升工作效率

在如今的工作环境中&#xff0c;PPT制作是许多技术人员不可避免的任务&#xff0c;尤其是在汇报、展示技术方案、以及项目进展时。随着AI技术的快速发展&#xff0c;使用AI生成PPT成为了提高效率的一种新趋势。本文将介绍几款适合程序员、技术人员的AI生成PPT工具&#xff0c;帮…...

3.postman脚本语言、接口关联(json引用(变量)、脚本用正则表达式)、断言封装、自动化构造接口请求(Postman工具)

一、Postman的脚本语言 1.使用js语言 2.pm变量 pm.sendRequest():发送HTTP请求 二、自动化实现接口关联 1.JSON引用 2.正则表达式&#xff08;在test下编写如下脚本&#xff09; //获取响应 console.log(responseBody) //re的方式获取token let token responseBody.match(&quo…...

基于SpringBoot框架的订餐系统设计与实现

文未可获取一份本项目的java源码和数据库参考。 选题的背景 伴随着当今计算机技术的日益发展&#xff0c;各种网络软件以及应用也是层出不穷&#xff0c;日新月异&#xff0c;大家都争先恐后的推出自己的产品来占领这一个广阔的市场。现在网上购物的软件系统种类繁多&#xf…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

C++_哈希表

本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、基础概念 1. 哈希核心思想&#xff1a; 哈希函数的作用&#xff1a;通过此函数建立一个Key与存储位置之间的映射关系。理想目标&#xff1a;实现…...