双控开关接入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文件内容:
- 生成可执行文件
--trace:允许记录波形,不开启此选项在记录波形时会报错--cc:语言是C++--exe --build:生成可执行文件
- 执行可执行文件
- 查看波形

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个开关,期望需求是:
- 开关拨上去的时候,上方的灯是亮的
- 开关拨下去的时候,上方的灯是灭的

顶层模块是top,led 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)
左侧是ledr和sw的顶层模块的输入输出引脚
- 命名由开发者自定义
右侧的(LD15, ..., LD0)是将引脚绑定到NVboard的对应位置
- 命名在
NVboard中写死
运行效果:

相关文章:
双控开关接入NVBoard
导入NVBoard git仓库:https://github.com/NJU-ProjectN/nvboard 按照ysyx手册的要求,初始化NVBoard项目。 由于GitHub在国外,可能会超时无响应: 解决方案是修改代理。 当前的运行环境是VM VirtualBox虚拟机,网卡是…...
聊一聊软件系统性能测试的重要性
目录 性能测试的分类 为什么要进行性能测试呢? 性能测试曲线对比参数 虚拟用户数 vs 时间: 响应时间 vs 虚拟用户数: 吞吐量 vs 虚拟用户数: 错误率 vs 虚拟用户数: 资源使用情况 vs 时间: 组合视图 上图曲线图关键点介绍 性能测试的重要性主要体现在以下…...
双十一有哪些好物值得入手?五款超值数码好物分享!
在如今这个科技飞速发展的时代,数码产品已经成为我们生活中不可或缺的一部分。双十一作为一年一度的购物狂欢节,为我们提供了一个绝佳的机会,可以以更优惠的价格入手心仪的数码好物。下面就为大家分享五款超值数码好物,让你的生活…...
uniapp监听滚动实现顶部透明度变化
效果如图: 实现思路: 1、使用onPageScroll监听页面滚动,改变导航条的透明度; 2、关于顶部图片的高度: 如果是小程序:使用getMenuButtonBoundingClientRect获取胶囊顶部距离和胶囊高度; 如果…...
Humanoid 3D Charactor_P08_Federica
3D模型(人形装备)女孩 “P08_联邦” 内容仅为3D人物模型。 图片中的背景和家具不包括在内。 由Blender制作 包括: 1. 人形机器人3D模型和材质。 2. “Unity-chan!”着色器。 性别:女 装备:人形 皮肤网格:4个骨骼权重 多边形: 20000~40000 纹理分辨率:2K纹理 混合形状:…...
TikTok直播推流不精准该怎么办?跟IP有关系吗?
TikTok,这款风靡全球的短视频社交平台,其直播功能已成为众多创作者与品牌宣传的利器。然而,不少用户却遭遇了直播推流不精准的难题,这直接影响到直播的曝光和互动效果。那么,面对这一问题,我们该如何应对&a…...
Docker Registry API best practice 【Docker Registry API 最佳实践】
文章目录 1. 安装 docker2. 配置 docker4. 配置域名解析5. 部署 registry6. Registry API 管理7. 批量清理镜像8. 其他 👋 这篇文章内容:实现shell 脚本批量清理docker registry的镜像。 🔔:你可以在这里阅读:https:/…...
便捷点餐:Spring Boot 点餐系统
第三章 系统分析 3.1 系统设计目标 网上点餐系统主要是为了用户方便对美食信息、美食评价、美食资讯等信息进行查询,也是为了更好的让管理员进行更好存储所有数据信息及快速方便的检索功能,对系统的各个模块是通过许多今天的发达系统做出合理的分析来确定…...
研一上课计划2024/9/23有感
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、学位课1.应用数理统计(学3 开卷考试)2.最优化方法(学3 开卷考试)3.新中特(学2 三千五百字的品读…...
【H2O2|全栈】关于CSS(6)CSS基础(五)
目录 CSS基础知识 前言 准备工作 网页项目规范 创建项目 布局 补充一部分属性 outline border-radius 预告和回顾 后话 CSS基础知识 前言 本系列博客将分享层叠样式表(CSS)有关的知识点。 本期博客主要分享的是网页项目规范,ou…...
网页护眼宝——全方位解析 Chrome Dark Reader 插件
网页护眼宝——全方位解析 Chrome Dark Reader 插件 1. 基本介绍:Chrome 插件的力量与 Dark Reader 的独特之处 随着现代浏览器的功能越来越强大,Chrome 插件为用户提供了极大的定制化能力。从广告屏蔽、性能优化到页面翻译,Chrome 插件几乎…...
C++ 构造函数和析构函数抛出异常的详细说明
1. 构造函数 功能:用于初始化对象的成员变量和分配资源。抛出异常: 当构造函数抛出异常时,构造的对象不会被创建,分配的资源会被释放。这意味着在构造函数抛出异常后,对象的状态是未定义的,调用者需要处理…...
Unity开发绘画板——01.前言
在做这个之前其实是想研究一下在Unity中交互雪的实现,交互雪顾名思义就是可以进行交互的雪,玩家角色从雪上走过时雪被踩凹陷的效果;交互雪的一种实现方案就是将地面看做一个画板,将玩家角色的躯体看做笔刷,将角色经过的…...
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编写设计模式接口隔离原则实例(七)
云风网 云风笔记 云风知识库 一、设计模式接口隔离原则定义 客户端不应该被迫依赖于它不使用的方法,一个类对另一个类的依赖应该建立在最小的接口上。要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。 接口…...
解决在Nignx下Thinkphp路由不生效问题
Nignx下Tp框架路由不生效 问题的原因在于ThinkPHP通过URL后缀匹配方法,默认没有后缀会尝试访问默认的index方法。 解决方案:在URL末尾添加/后缀或者修改路由配置文件route.php中的规则。 如果还是没解决建议换apache...
『功能项目』QFrameWork框架重构OnGUI【63】
我们打开上一篇62QFrameWork背包框架的项目, 上文将功能实现在一个脚本中 本章要做的事情让脚本实现背包框架思想 首先按照图示创建脚本: 创建脚本:Item.cs namespace QFramework {public class Item{//道具public string Key;public string …...
4款AI生成PPT工具推荐,提升工作效率
在如今的工作环境中,PPT制作是许多技术人员不可避免的任务,尤其是在汇报、展示技术方案、以及项目进展时。随着AI技术的快速发展,使用AI生成PPT成为了提高效率的一种新趋势。本文将介绍几款适合程序员、技术人员的AI生成PPT工具,帮…...
3.postman脚本语言、接口关联(json引用(变量)、脚本用正则表达式)、断言封装、自动化构造接口请求(Postman工具)
一、Postman的脚本语言 1.使用js语言 2.pm变量 pm.sendRequest():发送HTTP请求 二、自动化实现接口关联 1.JSON引用 2.正则表达式(在test下编写如下脚本) //获取响应 console.log(responseBody) //re的方式获取token let token responseBody.match(&quo…...
基于SpringBoot框架的订餐系统设计与实现
文未可获取一份本项目的java源码和数据库参考。 选题的背景 伴随着当今计算机技术的日益发展,各种网络软件以及应用也是层出不穷,日新月异,大家都争先恐后的推出自己的产品来占领这一个广阔的市场。现在网上购物的软件系统种类繁多…...
微信小程序结合HTTP接口打造智能门锁远程控制系统
1. 为什么选择微信小程序控制智能门锁? 每次出门都要检查钥匙带没带的日子该结束了!用微信小程序控制智能门锁,就像把门禁系统装进了每天必用的微信里。我去年给公司办公室装了这个系统,现在同事们刷脸进门、手机远程开门两不误&a…...
工业通信系统安装:从网络架构到现场落地的完整技术指南
一、什么是工业通信系统安装?为什么它比普通弱电施工要求更高?工业通信系统安装,指的是围绕工业生产场景,对控制层、监控层、管理层之间的数据传输链路进行规划、布线、接线、组网、调试、联动和验收的全过程。它不是单纯的网络工…...
墙面涂料里的有害物质到底有哪些?
痛点深度剖析我们团队在实践中发现,当前室内墙面涂料市场存在诸多技术困境。很多消费者在使用传统墙面涂料后,会面临健康隐患。比如,涂料初期异味大,后期还会持续释放低剂量的 VOCs,像甲醛、苯系物等。家人长期处于这样…...
xhs:突破小红书数据采集壁垒的5个实战方法
xhs:突破小红书数据采集壁垒的5个实战方法 【免费下载链接】xhs 基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/ 项目地址: https://gitcode.com/gh_mirrors/xh/xhs 从反爬困境到合规采集的完整解决方案 在数字化营销与市场研究领域&am…...
家庭实验室方案:树莓派控制OpenClaw调用远程Qwen3-32B服务
家庭实验室方案:树莓派控制OpenClaw调用远程Qwen3-32B服务 1. 为什么选择树莓派OpenClaw组合 去年冬天,当我试图用语音控制家里的智能设备时,发现市面上的解决方案要么需要持续联网(隐私堪忧),要么响应延…...
MAI-UI-8B部署全攻略:开箱即用,快速体验GUI智能体强大功能
MAI-UI-8B部署全攻略:开箱即用,快速体验GUI智能体强大功能 1. 认识MAI-UI-8B:能"动手"的AI智能体 大多数AI助手只能回答问题或生成内容,而MAI-UI-8B却能做到真正意义上的"动手操作"。这是一个能够理解图形用…...
告别吃灰!用Kindle打造唐诗宋词字帖屏保的完整避坑指南(含繁简转换技巧)
用Kindle打造唐诗宋词字帖屏保的完整指南 作为一个长期关注数字阅读与传统文化的深度用户,我发现Kindle的墨水屏特性非常适合展示书法字帖。这种将现代科技与传统艺术结合的方式,不仅能提升设备使用率,还能在日常碎片时间中培养书写习惯。本文…...
CSS图片轮播进阶:5种实现无限循环滚动的实战技巧(附完整代码)
CSS图片轮播进阶:5种实现无限循环滚动的实战技巧(附完整代码) 在电商网站的首页或个人作品集的展示页面中,图片轮播(Carousel)始终是吸引用户注意力的利器。而无限循环滚动效果,则能让有限的展示…...
dynamic-datasource JVM调优:提升多数据源性能的7个实用技巧
dynamic-datasource JVM调优:提升多数据源性能的7个实用技巧 【免费下载链接】dynamic-datasource dynamic datasource for springboot 多数据源 动态数据源 主从分离 读写分离 分布式事务 项目地址: https://gitcode.com/gh_mirrors/dy/dynamic-datasource …...
Ubuntu服务器中文乱码终极解决方案:从locale配置到阿里云重启避坑指南
Ubuntu服务器中文乱码终极解决方案:从locale配置到阿里云重启避坑指南 当你第一次在Ubuntu服务器上看到中文字符变成一堆问号或方框时,那种困惑和挫败感我深有体会。特别是在云服务器环境下,问题往往比本地环境更复杂——即使按照常规教程操作…...
