双控开关接入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源码和数据库参考。 选题的背景 伴随着当今计算机技术的日益发展,各种网络软件以及应用也是层出不穷,日新月异,大家都争先恐后的推出自己的产品来占领这一个广阔的市场。现在网上购物的软件系统种类繁多…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
SQL Server 触发器调用存储过程实现发送 HTTP 请求
文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...
TCP/IP 网络编程 | 服务端 客户端的封装
设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...
门静脉高压——表现
一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构:由肠系膜上静脉和脾静脉汇合构成,是肝脏血液供应的主要来源。淤血后果:门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血,引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...
深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀”
深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀” 在JavaScript中,我们经常需要处理文本、数组、对象等数据类型。但当我们需要处理文件上传、图像处理、网络通信等场景时,单纯依赖字符串或数组就显得力不从心了。这时ÿ…...
Spring Boot 中实现 HTTPS 加密通信及常见问题排查指南
Spring Boot 中实现 HTTPS 加密通信及常见问题排查指南 在金融行业安全审计中,未启用HTTPS的Web应用被列为高危漏洞。通过正确配置HTTPS,可将中间人攻击风险降低98%——本文将全面解析Spring Boot中HTTPS的实现方案与实战避坑指南。 一、HTTPS 核心原理与…...
