ysyx的nvboard项目里自带了一个example,用来演示功能,同时也给出了简单的使用说明。
要将自己的verilog代码接入nvboard,首先需要生成一份nvboard.a库文件。在nvboard目录下make nvboardarchive,然后将库文件放到npc文件夹下的目录文件。
假设我们的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就行。 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)和引脚绑定cpp,以及vsrc下的所有verilog元件。
4. constr文件夹下的top.nxdc文件就是将verilog代码的信号和nvboard的引脚绑定。每行一组,可以绑定单个输入输出信号,也可以直接一个向量绑定一组引脚(每个引脚都要写明)。这个文件是必须要有的,要不然不能自动生成bind_all.cpp。当然,手动一个个调用函数、自己写makefile的话,这部分就可以无视。
5. nvboard文件夹下的N4可以查看nvboard所有的引脚。虚拟板子的引脚和top元件的输入输出方向应该保持一致。此外,top.nxdc文件里,绑定到板子的元件输入输出信号,必须都在verilog元件参数里直接声明。但是.v元件代码里的输入输出信号可以不绑定板子引脚,选择空置或者由c++代码管理,比如样例里面的rst和clk信号,就是通过代码赋值的。
标签:nvboard,引脚,接入,代码,绑定,ysyx,dut,top From: https://www.cnblogs.com/namezhyp/p/18244450