SignalTap II应用小实例之采样数据缓存类型
概述
本文笔者介绍另外一个SignalTap II应用小实例,即设置SignalTap使用不同的数据缓存类型,SignalTap在触发条件发生的时候,有两种不同的缓存采样数据的类型,用户可以根据自己实际调试的情况进行选择,以便更好地调试自己的逻辑设计。
什么是采样数据缓存类型
所谓采样数据缓存类型,即SignalTap II的buffer type设置。默认的时候这个选项不用设置,除非用户需要改变buffer类型,如图1所示。
图1:缓存类型设置
如图1所示,默认的时候选择框是没有选上的,即这时候得buffer类型是环形(即circular,笔者理解其实就是连续使用buffer),如图2所示。数据是被循环地采集到缓存里直到触发条件发生,数据的存储类似FIFO,触发条件发生后,后面的数据继续被采集并存入缓存,直到缓存被填满。
图2:环形缓存示意图
如果选上如图1所示的勾选项,那么就设置buffer类型为分段模式(即Segmented),如图1所示,如果选择Segmented后面还有一个设置框,即分别可以设置分段的数量以及每个分段的大小。注意,所谓的buffer,其大小就是如图1所示sample depth已经指定好了的。每个分段可以看作一个独立的环形缓存区,触发条件设置对每个分段有效,每次触发条件发生数据填满一个分段 ,直到所有分段填满为止,非常适合触发条件循环发生,并需要查看多个触发点的状况。
实例演示2种不同缓存类型的使用
上一篇博文以及我们平时一般使用的都是circular缓存类型,这里就不做介绍了,本节主要介绍下Segmented缓存类型的使用情况。如图3所示,我们勾选设置使用Segmented缓存类型,并选择16个分段,即每个分段64个采样深度(因为我们设置总的采样深度是1K)。
图3:选择数据缓存类型为Segmented
前面我们知道每个分段可以看作一个环形缓冲区,每次触发条件发生就会“切换”一个分段。所以这时候设置触发条件要十分小心,如果还如上篇博文那样设置七段码为触发条件,那么SignalTap II运行的结果就如图4所示。
图4:设置触发条件不当时运行结果
图4是笔者还是设置“one_led_out”为“three”时候运行的结果,由于“three”条件存在很长时间,所以除了头尾两个分段,中间所有分段都存储了一个sample,因为下一个时钟周期触发条件又满足要求,所以要立即“切换”到下一个分段,我们来看看放大后的结果,如图5所示。
图5:分段0填满了数据,而分段1只有一个sample
图6:只保存了一个采样值的分段7
所以如果我们修改触发条件,设置cnt_one_enable的上升沿来触发,由于两次上升沿之间相隔足够的长度,所以这时候每个分段都能填满数据,如图7所示。
图7:修改触发条件,所有分段填满了采样数据
结论
所以这个buffer的类型设置有两种,根据实际需要选择合适的buffer类型,可以方便逻辑设计的调试。如果需要查看多个触发点状况,可以考虑使用分段buffer类型。需要注意的是修改buffer类型需要重新编译工程。
文章评论(0条评论)
登录后参与讨论