Vivado调试工具相关

我的调试习惯

在各个子模块中预留吊事端口,在顶层文件中,例化各个模块后,通过多路选择将某一路信号送给ILA观测,过程大致如下所示,

entity A is
    port(
    	debug_A : out std_logic_vector(255 downto 0)
    );
end A;
entity TOP is
    port(
    	......
    );
end TOP;

signal ila_sel_vio : std_logic_vector(1 downto 0);
signal ila_bdg_bus : std_logic_vector(255 downto 0);
signal debug_A : std_logic_vector(255 downto 0);
signal debug_B : std_logic_vector(255 downto 0);
signal debug_C : std_logic_vector(255 downto 0);
signal debug_D : std_logic_vector(255 downto 0);

.......

process(clk)
begin
	if rising_edge(clk) then
    	case ila_sel_vio is
        	when "00"    =>  ila_bdg_bus <= debug_A;
        	when "01"    =>  ila_bdg_bus <= debug_B;
        	when "10"    =>  ila_bdg_bus <= debug_C;
        	when "11"    =>  ila_bdg_bus <= debug_D;
        	when others =>  ila_bdg_bus <= debug_A;
        end case;
    end if;
end process;

在ISE中的用法

在ISE环境下,在HDL中例化ICON、VIO、ILA等IP核,打开ChipScope中手动管理信号名,保存成CPJ,这样在调试过程中可以打开不同的CPJ,观测不同的信号。

在Vivado中的用法

使用ChipScope观测核

在Vivado的工程中,直接使用ICON、VIO、ILA等观测核时,只对FPGA进行调试是可以的在联合SDK进行调试时会有问题。出问题时,ChipScope会卡住,SDK的运行、暂停按钮也变灰。我做过如下尝试

  • 先在ChipScope中下bit,关闭ChipScope;在SDK中使用System Debuger方式跑软件;重新打开ChipScope,使用open plun-in的方式扫描FPGA,此时,不连续观测ChipScope还好,一旦ChipScope设为重复触发,就挂了(在SDK中使用gdb方式调试也是一样的情况)
  • 在SDK中直接Program FPGA,会出现target连接不上的情况

使用ILA观测核

直接使用Vivado自带的ILA IP,联合SDK调试时一切OK。考虑到在调试时我是使用多选器对多路观测信号进行切换的,我在ILA的dashboard中,对不少信号进行了管理,包括:设置virtual bus,设置进制,设置颜色等。一般情况下,我在重新打开hardware manage时,之前保存的设置是能够再次使用的,但我遇到过,再次打开hardware manage时,所有之前的设置全部消失的情况。
观察了一下vivado工程中xx.hw文件夹下的文件,每个ILA对应的文件夹下有xx.wcfg和xx.wdb两个文件,这个xx.wcfg就是与设置相关的文件。我曾在修改设置并保存之后,将此wcfg文件备份后删除,再次打开hardware manage,就是最原初的状态了,不做任何更改退出,将之前备份的wcfg文件拷入文件夹下,再次打开hardware manage,则显示的是我之前的设置。

在这里插入图片描述
在这里插入图片描述

结语

在Vivado中,最好直接使用ILA核,不再使用ChipScope相关的IP观测核。调试习惯是可以改的,使用非官方推荐的方式多多少少会出现些问题,还很难找到解决方案。