nvboard/README.md

3.5 KiB
Raw Blame History

nvboard

近期迭代较快readme的更新可能不够及时见谅

介绍

用SDL开发的虚拟FPGA开发板配合Verilator使用

软件架构

软件架构说明

.
├── emu                     演示项目目录
│   └── ...
├── include
│   ├── clock.h
│   ├── configs.h
│   ├── constrs.h
│   ├── event.h
│   ├── nboard.h
│   └── render.h
├── LICENSE
├── Makefile                NVBOARD项目构建makefile
├── pic
│   ├── vbg_1.png
│   ├── vbg_2.png
│   ├── vbtn_off.png
│   ├── vbtn_on.png
│   ├── vsegled_bg.png
│   ├── vsw_off.png
│   └── vsw_on.png
├── README.en.md
├── README.md
└── src                     NVBORAD源码
    ├── clock.cpp
    ├── constrs.cpp
    ├── event.cpp
    ├── main.cpp
    ├── render.cpp
    └── uvga.cpp

安装教程

  1. 将项目拷贝到本地,git clone https://github.com/NJU-ProjectN/nvboard.git
  2. 接下来,把本项目的目录设置成环境变量NBOARD_HOME

使用说明

编写makefie

你可以在任意运行在NVBOARD的项目目录下编写makefilemakefile格式如下

# 需要手动指定项目目录
DIR = .
## 默认项目源码在项目目录的src文件夹下可手动指定
### SRC_DIR ?= $(DIR)/src
## 参与verilator编译的文件默认为$(SRC_DIR)下的所有*.v, *.c, *.cc, *.cpp文件可手动指定
### SRCS ?= $(shell find $(SRC_DIR) -name "*.v" -or -name "*.c" -or -name "*.cc" -or -name "*.cpp")


# 需要指定顶层模块名称
TOPNAME = top

# 需要在最后将NVBOARD的makefile包含进来
-include $(NBOARD_HOME)/Makefile

编写项目文件
//top.v
module top (
  input clk,
  input reset,
  output reg [3:0] out);
  
  always @(posedge clk) begin
    out <= reset ? 0 : out + 1;
  end  
endmodule

这是一个简单的计数器。你可以将其放入$SRC_DIR文件夹中

编写两个辅助函数

接下来你需要在src文件中新建一个c++代码文件(如update.cpp)。

emu下有一个update.cpp的示例。 可以看到input_mapoutput_map,这两个std::map就是nboard和verilog通信的渠道。

NVBOARD会在输入有了变化或时钟边沿处调用dut_update()当你在虚拟FPGA上改变输入比如按下btnc)的时候, input_map里面对应的键值会随之更新,

接下来dut_update()就会执行update_input()input_map里面的键值赋值给模块的引脚,让你编写的模块能够收到这个改变。

之后,模块会进行模拟计算,最终将结果更新到输出引脚。

模块得到新的输出之后,dut_update()会执行update_output(),把模块的输出存入output_map

dut_update()调用结束后nvboard会把模块的输出同步到GUI上。

update.cpp里,你需要编写以下内容

  • 创建一个顶层模块对象dut
  • 你需要手动编写辅助函数dut_update(),其行为如下:
    1. input_map中更新顶层模块输入
    2. 执行模块模拟过程dut.eval();
    3. output_map中更新顶层模块输出
体验虚拟FPGA

最后,你只需要在项目目录下执行

make run

命令即可在NVBOARD上模拟运行你自己的verilog代码

特技

  1. 可以用include/configs.h选择贴图让自己的虚拟FPGA开发板更有特色贴图放在pic目录下;