双控开关接入NVBoard

news2024/11/16 19:31:20

导入NVBoard

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

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

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

解决方案是修改代理。

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

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

修改或新建~/.ssh/config

Host github.com
    HostName github.com
    User git
    ProxyCommand 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.v
        verilator ${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=top

ledr (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中写死

运行效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2165239.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL高阶1949-坚定地友谊

目录 题目 准备数据 分析数据 实现 题目 如果 x 和 y 为 朋友 且他们 至少 有三个共同的朋友 &#xff0c;那么 x 和 y 之间的友谊就是 坚定的。 写一个解决方案来找到所有的 坚定的友谊。 注意&#xff0c;结果表不应该包含重复的行&#xff0c;并且 user1_id < us…

一些Spring面试题

Spring boot可以同时处理多少个请求? 用户进来先看目前数量是否小于最大连接数&#xff0c;多于【最大连接数最大队列数】的线程会等待&#xff0c;超过最大等待时间会TIME_OUT 81921008292

软件测试找工作|20道银行项目高频面试题

小编给大家上面试干货啦&#xff01;把前两天整理的银行项目面试题系列汇总给你们复习吼&#xff01; 先来看下面试题的目录叭...... 1、介绍一下贷款的项目&#xff1f; 贷款项目是银行业务中的重要组成部分&#xff0c;它是指银行向客户提供资金&#xff0c;让客户在约定的…

kubectl linux 安裝

添加 Kubernetes 的yum仓库&#xff0c;会覆盖 /etc/yum.repos.d/kubernetes.repo 中现存的所有配置 cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] nameKubernetes baseurlhttps://pkgs.k8s.io/core:/stable:/v1.28/rpm/ enabled1 gpgcheck1 gpg…

Docker从入门到精通_01 Docker:引领云计算的新浪潮

Docker从入门到精通_01 Docker&#xff1a;引领云计算的新浪潮 云计算作为信息技术领域的重要支柱&#xff0c;正以前所未有的速度发展。然而&#xff0c;传统的虚拟化架构在资源利用、部署效率、应用扩展等方面已逐渐显露出其局限性。在这样的背景下&#xff0c;容器云技术应…

如何使用 python 调用 llama3 进行对话?

Meta 已将最新的 LLaMa3 进行了开源&#xff0c;因此&#xff0c;我们也可以方便的使用 Python 进行 LLaMa3 模型的调用和开发。 接下来&#xff0c;简单介绍如何通过 transformers 库来使用 LLaMa3。 1、导入库 首先&#xff0c;导入必要的库&#xff1a; pip3 install tra…

【2024】前端学习笔记10-基本选择器-组合选择器

学习笔记 基本选择器ID选择器 组合选择器后代选择器子选择器兄弟选择器 基本选择器 之前文章使用的分别为元素选择器和类选择器&#xff0c;这里不再过多记录。 元素选择器 p {color: blue;font-size: 14px; }在这个例子中&#xff0c;所有的<p>元素的文本颜色将被设置…

常见区块链数据模型介绍

除了加密技术和共识算法&#xff0c;区块链技术还依赖于一种数据模型&#xff0c;它决定了信息如何被结构化、验证和存储。数据模型定义了账户如何管理&#xff0c;状态转换如何发生&#xff0c;以及用户和开发者如何与系统交互。 在区块链技术的短暂历史中&#xff0c;数据…

如何开发数字药店与医保购药APP:技术架构与实现细节

本文将深入探讨数字药店与医保购药APP的技术架构及其实现细节&#xff0c;帮助开发者更好地理解该领域的技术需求。 一、技术架构概述 数字药店与医保购药APP的技术架构通常可以分为以下几个层次&#xff1a; 1.前端层&#xff1a; -用户界面 -用户体验 2.中间层&#xff…

c++初级——多态

多态的概念 多态的概念&#xff1a;通俗来讲&#xff0c;就是多种形态。 多态也有类别&#xff08;我们把编译时⼀般归为静态&#xff0c;运⾏时归为动态&#xff09; 运行时多态&#xff08;静态多态&#xff09;其中包括函数重载和函数模板&#xff0c;它们通过传不同类型…

RS FSW43 信号与频谱分析仪

FSW43 信号与频谱分析仪 苏州新利通仪器仪表有限公司 Rohde & Schwarz FSW43 信号与频谱分析仪具有较高内部分析带宽&#xff0c;可对宽带组件和通信系统进行特征校准。同时具备出色的相位噪声和灵敏度&#xff0c;有助于开发高性能振荡器。 R&SFSW 信号与频谱分析…

③无需编程 独立通道 Modbus主站EtherNet/IP转ModbusRTU/ASCII工业EIP网关串口服务器

Modbus主站EtherNet/IP转ModbusRTU/ASCII工业EIP网关串口服务器https://item.taobao.com/item.htm?ftt&id743840591638 接上一章 EtherNet/IP 串口网关 EtherNet/IP 转 RS485 EtherNet/IP 通信功能 EtherNet/IP 概述 EtherNet/IP 是通过“ODVA(Open DeviceNet Vendor…

Chrome Cookie最大有效期

Chrome Cookie最大有效期 代码设置了cookie有效期是10年&#xff0c;但在浏览器上实际上发现只有一年多一点&#xff0c;查证后发现chrome对cookie的最大有效期做了限制&#xff08;400&#xff09;天&#xff0c;实际上99.9999%的场景也是可以满足的 官方表述 测试 理论设置 …

[RabbitMQ] RabbitMQ介绍,安装与快速上手

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

设计师一定要收藏好这6个网站,设计必备

新手设计师找免费素材&#xff0c;找灵感就上这6个网站&#xff0c;赶紧收藏好&#xff01; 1、设计素材——菜鸟图库 菜鸟图库-免费设计素材下载 菜鸟图库是一个非常大的素材库&#xff0c;站内包含设计、办公、自媒体、图片、电商等各行业素材。网站还为新手设计师提供免费的…

注册安全分析报告:人民卫生音像

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

MySQL高阶1951-查询具有最多共同关注者的所有两两结成对

目录 题目 准备数据 分析数据 实现 题目 写出一个查询语句&#xff0c;找到具有最多共同关注者的所有两两结对组。换句话说&#xff0c;如果有两个用户的共同关注者是最大的&#xff0c;我们应该返回所有具有此最大值的两两结对组 结果返回表&#xff0c;每一行应该包含u…

1.1.4 计算机网络的分类

按分布范围分类&#xff1a; 广域网&#xff08;wan&#xff09; 城域网&#xff08;man&#xff09; 局域网&#xff08;lan&#xff09; 个域网&#xff08;pan&#xff09; 注意&#xff1a;如今局域网几乎采用“以太网技术实现”&#xff0c;因此“以太网”几乎成了“局域…

WebGL入门(一)绘制一个点

源码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><scr…

硬件设计-噪声的学习

目录 LDO 噪声和 PSRR ​编辑 噪声类型 数据表中的噪声规格 哪种规格适合您的应用 如何降低 LDO 噪声&#xff1f; LDO 噪声的影响 LDO 噪声和 PSRR 低压差线性稳压器 (LDO) 为调节由较高电压输入产生的输出电压提供了一种简单方法。虽然操作简单&#xff0c;但其自生噪…