在vivado中fpga功能验证比ise中方便了很多,主要体现在debug的ip核生成以及最后的波形观察和调试上,下面我就从这两个方面说一下vivado的fpga验证调试。
fpga验证的步骤一般是:
× 在代码中加入关键字,表示信号要被调试.
× 进行elaboration和synthesis.
× 打开synthesis, 设置debug核.
× 重新进行synthesis和implement以及write bitstream.
1,vivado中debug核的生成:
原来在ise中,要进行fpga的验证,必须生成两个debug核,一个是ICon,另外一个就是ILA,分别对应是控制和收集波形。但是在vivado中,我们只需生成ILA即可,不需生成ICon。
在生成ILA之前,我们要指定哪些信号应该被调试,原来在ise中,如果不用例化的方式的话,我们就必须一点点去net中找哪些信号应该被调试,很不方便,但是在vivado中,我们可以事先在源代码中加入关键字mark_debug="true"来告诉软件这个信号是要被调试的,从而在生成debug核的过程中,这些被调试的信号就直接显示出来了。如下所示:
(* mark_debug="true" *)output reg [17:0] wr_addr, // Memory Write Address
(* mark_debug="true" *)output reg [7:0] wr_be, // Memory Write Byte Enable
(* mark_debug="true" *)output reg [31:0] wr_data, // Memory Write Data
(* mark_debug="true" *)output reg wr_en, // Memory Write Enable
(* mark_debug="true" *)input wr_busy // Memory Write Busy
接着我们对加入关键字的代码进行elaborate和synthesis。等到综合完成之后,我们就要生成debug核了,生成debug核的方式有好几种,这里只说我感觉比较方便的一种,及Open Implemention Design下的Set Up Debug选项,如下所示:
上图中的信号就是我们在verilog源码中标记的要debug的信号,在生成debug核之前,首先要为debug核生成时钟信号,即上图蓝色圆圈标记的部分。这里Set UpDebug是自动为所选信号生成debug核,也就是说我们可以全选上面的信号,然后点击Next就自动生成所需要的debug核。
2,观察调试信号
在debug核生成之后,我们要对设计重新synthesis和implementation,然后生成比特流下载到fpga上进行验证。在配置好bit流和debug文件之后,就会自动出现调试波形接口,如下所示:
在调试窗口中,可以设置Tigger Setup,这里要说一个对实际观察波形非常方便的一个功能,就是在Trigger Setup窗口中可以选择一个信号,然后编辑enumeration,就是现实信号所代表的含义,而不是只现实数值,这在状态机观察中非常方便,如下图所示:
然后在点击Trigger程序就可观察实时的波形了,如下图所示:
最后可以选择保存收集到的波形,可以看出上图中的Enumeration的作用(例如PIO_RX_WAIT_STATE不是数值而是名称),这个比chipscope方便多了,因为在chipscope里面好像就无法保存收集到的波形(至少我现在还没有找到),保存(上图蓝色圆圈标记的部分),可以选择不同的格式,Native(vivado本身波形的格式),CSV和VCD,保存成VCD格式,其他软件就能打开了。