双控开关接入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源码和数据库参考。 选题的背景 伴随着当今计算机技术的日益发展,各种网络软件以及应用也是层出不穷,日新月异,大家都争先恐后的推出自己的产品来占领这一个广阔的市场。现在网上购物的软件系统种类繁多…...

基于JAVA+SpringBoot+Vue的医院后台管理系统
基于JAVASpringBootVue的医院后台管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接🍅 哈…...

基于SSM+Vue+MySQL的农家乐预约管理系统
系统展示 用户前台界面 管理员后台界面 农家乐后台界面 系统背景 随着乡村旅游的兴起,农家乐作为一种结合农业体验与休闲度假的新型旅游模式,受到了广大游客的青睐。然而,传统农家乐在预约管理方面存在效率低下、信息不透明等问题,…...

全新热门电商API接口,实现闲鱼商品详细搜索功能
近年来,电商行业蓬勃发展,API(Application Programming Interface)接口已经成为电商平台的重要组成部分。API接口不仅可以实现平台间的数据交互,还可以为开发者提供丰富的功能,满足用户多样化的需求。在这个…...

求10 个整数中最大值
我们需要10个整数之中求出10个整数之中的最大值所以我们先要将10个整数先放置到一个容器之中,我们初期就使用数组的形式存放10个数组即设置数组arr[10],我们要将10个数组之中的数字输出出来,我们这里使用的是遍历循环输出数组。我们这里是使用…...

数据结构不再难懂:带你轻松搞定排序算法
数据结构入门学习(全是干货)——排序算法(下) 1 快速排序 1.1 算法概述 快速排序采用分而治之的策略,与归并排序相似。其核心在于选择一个主元(pivot)作为分割点。 分而治之 主元(pivot)>…...

YOLOv8 OBB win10+ visual 2022移植部署
前言 想做一个目标旋转角度检测的工程,但是网上多少python的,或者linux的。在win10 visual 2022移植部署,记录一下。 参考 这篇文章没有C win10 环境下的部署教程,我相对于是对此做了补充。 1、下载工程 https://github.com/sh…...

E+H超声波物位仪FMU42-ATB2A22A
EH超声波物位仪FMU42-ATB2A22A是一款由德国EH(恩德斯豪斯)公司生产的超声波物位计,具有高精度、非接触式测量等特点,广泛应用于液体、浆料和粗料的物位测量。以下是对该产品的详细介绍: 一、产品特点 高精度测量&…...

Linux风险应对策略:保障系统安全的有效措施
Linux作为一种开源操作系统,因其稳定性和安全性被广泛应用于服务器、嵌入式系统和个人电脑等多个领域。然而,随着网络攻击手段的不断演变,Linux系统也面临着各种安全风险。本文将探讨Linux系统的主要风险及其应对策略,帮助用户提升…...

芝法酱学习笔记(0.3)——SpringBoot下使用mybatis做增删改查和报表
零、前言 书接上回,我们搭建了windows下的开发环境,并给出了一个hello world级别的多模块SpringBoot项目。 毕竟java后端开发,离不开数据库的操作,为方便后面内容的讲解,这里再做一期铺垫,core模块下新增一…...

windows msys2 编译x264 32位动态库
一、打开mingw32 查看gcc版本 gcc --version 提示找不到gcc,可以安装gcc pacman -S gcc 二、进入x264-master目录 cd /d/x264-master 执行 ./configure --prefix/d/x264-master/Bin --disable-asm --enable-static --enable-shared --disable-thread其中--disa…...