ysyx:接入nvboard

ysyx的nvboard项目里自带了一个example,用来演示功能,同时也给出了简单的使用说明。

  要将自己的verilog代码接入nvboard,首先需要生成一份nvboard.a库文件。在nvboard目录下make nvboardarchive,然后将库文件放到npc文件夹下的目录文件。库文件位于nvboard的build文件夹。

  假设我们的c++文件只有main.cpp,元件代码只有top.v。为了接入nvboard,我们可以直接参考example的makefile文件,直接cp make run部分的代码。本来其实是可以自己写一个makefile代码的,但是由于有bug,所以就保留了原样。

1. 原本的记录波形的相关cpp激励代码可以不用改动,在cpp代码的对应位置,按照readme的说明,加入nvboard的函数即可:

nvboard_bind_all_pins(&dut);
nvboard_init();

while (1) {
// ...
nvboard_update();
}

nvboard_quit();

 

不过要注意,绑定所有引脚的函数是                          nvboard_bind_all_pins(Vtop *top);
 
样例代码里先声明了  static TOP_NAME dut;  然后  调用  nvboard_bind_all_pins(&dut);   如果你之前已经写好的波形激励代码已经有了Vtop* top,那传参时传top就行,不需要&dut。
 
2. 样例代码里有dut.rst =1 这样的内容,激励文件可以直接在代码里对元件进行赋值。样例代码首先是将rst分别设置为了1和0并运行数次。然后设置了时钟信号clk,每次时钟信号推进时更新一次值。如果仿真需要的话,可以用类似的方法在自己的代码中这样设置。因为nvboard的虚拟板子本身不附带clk引脚和rst引脚。
static void single_cycle() {
  dut.clk = 0; dut.eval();
  dut.clk = 1; dut.eval();
}

static void reset(int n) {
  dut.rst = 1;
  while (n -- > 0) single_cycle();
  dut.rst = 0;
}

int main() {
  nvboard_bind_all_pins(&dut);
  nvboard_init();

  reset(10);

  while(1) {
    nvboard_update();
    single_cycle();
  }
}

3.  编译需要包含的主要文件是csrc下的文件(main.cpp)和用于引脚绑定的auto_bind.cpp,以及vsrc下的所有verilog元件。

4. constr文件夹下的top.nxdc文件就是将verilog代码的信号和nvboard的引脚绑定。 每行一组,可以绑定单个输入输出信号,也可以直接一个向量绑定一组引脚(每个引脚都要写明,从高到低)。

比如说:我在top.v顶层模块里声明了一组8位向量[7:0] y,用来对应7号到0号led灯,那我在top.nxdc文件里就可以单开一行,写:

y  (LD7,LD6,LD5,LD4,LD3,LD2,LD1,LD0)

这个文件是必须要有的,要不然不能自动生成bind_all.cpp。当然,手动一个个调用函数、自己写makefile的话,这部分就可以无视。

5. nvboard文件夹下的N4可以查看nvboard所有可用的引脚以及对应的名字,比如左下角的led灯泡序列对应名字就叫LD。 虚拟板子的引脚和top元件的输入输出方向应该保持一致。此外,top.nxdc文件里,绑定到板子的元件输入输出信号,必须都在verilog顶层模块里直接声明,子模块里声明无效。

  反之,.v元件代码里的输入输出信号可以不绑定板子引脚,选择空置或者由c++代码管理,比如样例里面的rst和clk信号,就是通过代码赋值的。按照nvboard的说明,rst复位引脚似乎存在问题,所以需要时在cpp代码里人为赋值0/1.

7. top.nxdc文件第一行是声明top文件的名字,如果你的verilog顶层模块文件就叫top.v,那么写作top=top即可。注意文件内部顶层模块也要叫top,不然找不到模块。

8.nvboard的代码似乎很吃内存,我注释了波形部分的代码,但是运行nvboard还是有点吃力,反应很慢,这个每个人的情况不太一样,比较迷。如果卡顿,那尽量把代码修改好以后再编译。

 

24/7/10 更新:

除过这些,我也看到了一个写的比较好的心得,可以用于参考,但最好还是自己认真过一遍:【一生一芯03】verilator仿真框架搭建-CSDN博客
里面
有很多后续阶段才做的内容。

posted @ 2024-06-13 14:58  namezhyp  阅读(164)  评论(5编辑  收藏  举报