官方论坛
官方淘宝
官方博客
微信公众号
点击联系吴工 点击联系周老师
您的当前位置:主页-old > 教程中心 > 问题解答 >

在线调试工具(SIGNALTAP chipscope vivado)问题【汇总帖】

发布时间:2023-11-30   作者:admin 浏览量:

温馨提示:明德扬2023推出了全新课程——逻辑设计基本功修炼课,降低学习FPGA门槛的同时,增加了学习的趣味性,并组织了考试赢积分活动
(点击→了解课程详情)http://www.mdy-edu.com/ffkc/415.html感兴趣请联系易老师:13112063618(微信同步)


通过平时同学们反馈学习中经常用到的学习点,因此明德扬最近做了抖音系列短视频,都是一些FPGA学习技巧分享,大家感兴趣可以关注明德扬抖音号:87481069842。
内容不断更新!记得关注点赞学习不迷路!





【问题1】 按以下设置采样时钟,结果提示出现wait clock,没有抓到数据。

答:可能的原因如下:
      1.该时钟确实是没有,即一直为0,或者一直为1。
      2. 该clk不是本模块产生的,而是其他模块产生,然后在此模块使用。这个时候有可能不能作为采样时钟。正确的做法,哪个模块产生的就使用那个模块的信号。例如常见的PLL的C0,C1等。


 【问题2】 如果使用在线调试工具,测量一个信号低电平的间隔。
答:假设预期一个信号低电平时间为2000个时钟周期。那么可以如下设置。

      1. 采集深度设置至少为2K,即2048个点,保证能采到一个低电平周期时间。
      2. 触发条件为:该信号的下降沿。
      当触发条件满足后,查看低电平的采样点个数,即可测量出时间。
      如果受资源限制,采样深度小于信号低电平时,可以在代码里添加计数器,通过观测计数器来推测出低电平时间。


【问题3】SIGNALTAP每次后,总是出现红色提示,如下图。


答:有可能以下几种情况,请逐个进行排除。

1. 每当修改了SIGNALTAP的设置,如添加观察信号,改变深度等,需要保存后,在QUARTUS重新编译一次,生成的文件再烧写。

2. 如果烧写后,仍然出现上面情况:一定要检查sof文件生成的日期,要确保是刚刚生成的!!(这个很重要)
3. 有部分人喜欢在programmer里烧写SOF文件,然后再在SIGNALTAP里再烧写一次。这是没有必要的。请不要使用Programmer烧写。


【问题4】在SIGNALTAP添加信号,编译时出现如下错误。


答:使用在线调试工具,是需要占用FPGA芯片资源的,特别是RAM资源。观察的信号越多,观察的深度越大,所需要的RAM资源就越多。
上面的问题是指,整体的资源(设计占用的资源 + 调试工具占用的资源)已经超过了芯片资源本身。
为了解决上面问题,可以将观察信号减少,或者将深度减小,再次编译试试。


【问题5】 SIGNALTAP观察的现象和代码对不上的问题。如下图




上图中,add_flag由1变0条件是end_cnt_B=1。但观察到的是add_flag在end_cnt_B为1之前就变低了。
答:上面已经定位到某个采样点的时刻处,这已经非常好!
当定位到某个采样点,波形和代码对不上的,应该检查一下时钟:SIGNALTAP的采集时钟,必须与代码中的“clk”一致!
如果不同,就会有异常现象,看到的也不正确。


【问题6】在添加信号时,搜索框中搜索不到所需要的信号,如下图


答: 1. 搜索信号时,建议加上通配符*,即上面应该搜索“*dout*”。因为SIGNALTAP的信号名与代码中的并不相同,有时会加前缀和后缀。
       2. 其实如果搜索不到,那就不要搜索,直接点击查看有没有这个信号,从而定位出是“搜索问题”,还是说“本身没有此信号”。建议多动手多思考。       

       3. 将“Filter”设置为“Design entry all name”选项,再搜索。 如果此窗口都没有所需要的信号,说明就是没有。


【问题7】 采样时钟必须是时钟信号吗?
答:在线调试工具在采样时钟的上升沿,对信号进行采样。
      注意,在线调试工具不是智能的,它无法判断连接到采样时钟的信号是时钟。它只是在采样时钟的上升沿,对信号采样。
      也就是说,连到“采样时钟”的信号,可以是任意信号。但一般来说,这没有任何意义。


 【问题8】signaltap在使用多窗口进行触发的时候,捕捉到的波形出现空白的情况,是什么原因?


答:出现这种问题一般是由于触发条件第一次成立和下一次成立之间的间隔,小于signaltap设置的一个窗口的采样深度造成的。



 【问题9】使用signaltap的时候,下载完程序出现如下提示,连接设置都没有问题,怎么办?


答:一般是由于signaltap工程没有保存,点击左上角的File,选择“Save as”,另外起一个名字进行保存。


 【问题10】在线调试工具采集到的信号,其时间是怎么算的?

答:在线调试工具,每次触发时,只能看到 时间 =  采样时钟频率*采样深度。 例如说采样时钟是50M,采样深度为2000个点,那么将只看到20*2000ns内的信号。


 【问题11】在线调试工具严格反应FPGA内部数据么?为什么我的波形不对?
答:在线调试工具肯定是要严格反应内部数据的,如果这都做不了,那这FPGA也不用玩了。波形不对,只能说明
      1. 你工具使用不当;
      2. 这波形确实是不对。



 【问题12】抓取CLK信号来看,发现它一直为1,明明是有时钟的,为什么看不到变化?如下图


答:注意一下SIGNALTAP中“采样时钟”和采集信号“CLK”的关系。如果“采样时钟”就是“CLK”,想象一下会发生什么现象?
      要知道SIGNATAP的原理,它是在“采样时钟”的上升沿,去采信号“CLK”。由于“采样时钟”和“CLK”是同一个信号。
      当“采样时钟”上升沿的时候,同时也意味着“CLK”的上升沿,它们是同频同相的,所以你会永远采到同一个值:一直为1或者一直为0。

       不管运行多久时间,都不会变化的。这不是CLK没有,而是“观测”的缺陷是这样的。

使用在线调试工具定位的技巧
【在线调试工具求助技巧】!!!在线调试工具,定位时,正确的求助方式。(请按下面方式截图)!!!!
 1. 上面是在线调试工具的波形图,下面是对应的代码。
 2. 哪个信号有错误,就看哪个代码。
 3. 波形图要放大,能看到错误时刻"某一个采样点",如图中的最上行。
 4. 波形图要将代码中出现的所有信号拉出来。
 5. 波形图的信号排列顺序是:复位、条件、结果信号。
 6. 哪一个时刻有错,要按上图的箭头标示出来。
 7. 特别注意:在线调试工具的采样时钟,必须为该信号的工作时钟!!!
 8. 如果组合逻辑信号不能观察,那可以拉组成该组合逻辑的所有信号,然后推测出结果。
 9. 对于觉得上面步骤太麻烦的,我只想说一句:如果你能定位出问题,可以不这么仔细。如果你都定位不出来了,此时不就是要更加认真仔细一些吗?


【问题13 】只有波形图,但没有代码fpga仿真输出是对的,但是用signaltap显示出来就一直为零,为什么?

答:本问题,只有波形图,但没有代码。请按在线调试工具(SIGNALTAP chipscope vivado)

 【问题14】我们做了一个工程,用SOF文件运行不正常,但是加上逻辑分析仪检测数据正常运行,将该SOF生成JIC仍然不可以,一般遇到这种情况,什么原因啊

答:一般是可以考虑时序不满足而导致的,具体请看时序报告


【问题15】在线调试工具一直处于等待触发的状态。如下图。
 

答:在线调试工具没有触发,只能“实实在在说明”一点:触发条件不满足! 满足了,就一定会触发!

       1. 比较多错误的一点是:多个信号是相与还是相或的关系。例如上图中,其触发条件是:rst_n上升沿 并且 cnt值为5。只是rst_n上升沿了,而cnt不等于5,也不会触发。
       2. 假设上图中触发条件“只有rst_n为上升沿”,如果按了按键后,还是没触发。这已经给你提示了:rst_n信号和按键之间有问题,例如管脚没配对;例化不正确等,你需要检查这些。


 【问题16】SIGNALTAP添加的信号,显示的是红色,表示什么含义?


答:添加的信号,如何是红色,其可能的原因有:
1. 该信号可能一直处于固定值,例如固定为0,固定为1,或者其他数。
2. 该信号可能没有”用“,从而被优化了。这里没有用,可能是直接的,也可能是间接的。
    a. 直接是指,如设计了信号A,但信号A没有作为条件来产生任何信号,那么A就是没用的,会被优化;
    b. 间接是指,如设计了信号A,然后使用A作为条件产生了信号B,但B没有拿去用,那么B是无用的,间接说明A也是无用的,B和A都会被优化。
3. 该信号是组合逻辑产生的信号。组合逻辑产生的信号,在SIGNALTAP中可能不可观察,但VIVADO不存在此问题。


【问题17】在ISE,chipscope中抓取信号发现,触发位置并不是设置的触发点,稍微滞后了半个采样周期,这个是我哪儿设置的不对吗,还是本来就是这样的。


答:在线调试工具,都是一个上升沿采样一个点,所以只有第1个采样点,第2个采样点的概念,绝对没有“中间点”的概念。

       图上,只不过是chipscope把“这个点”标在数据中间而已,只是一个显示的方式。


【问题18】这种波形窗口能增高的吗?  要看有符号数 ADC波形,这个窗口高度太低了,看不见波形了
 

答:这个波形看起来小,主要是由于数值相对于位宽来说太小。例如该信号是16位的,可表示0~65535,而数值只有几十的话,那自然就很小了。

      从波形上看,该信号的高位都是0。所以可以只取该信号的低8位,组成一个新信号,那么波形自然就放大了。


 【问题19】如何使Quartus再综合的时候,不带signal'tap的逻辑?

答:按照下图进行设置

  



【问题20】使用ila的时候,有的信号看不到位宽定义,该怎么在ila中设置位宽?
答:没有位宽定义的信号位宽就是1bit的


 【问题21】如果我想看抓“模块的时钟”,看其波形是否正确,如何做?即观察信号是“时钟”
答:通常想看“时钟信号”,一般的需求是2个。1. 看时钟有没有;2. 看频率正不正确。

      看时钟有没有:可以用一个更高频的时钟,作为“采样时钟”,对时钟信号进行观察,如果频率更高,就能看到是否有变化。
      看频率正不正确:在线调试工具没法解决这个问题。建议将该信号拉到IO口,通过示波器来观察。


 【问题22】VIVADO加载ILA时不能正确加载,提示如下错误(就是ILA需要free clock)。


答:当VIVADO刚下载到FPGA时,就搜索ILA,如果搜索不到或者时钟没有,就会提示上面的错误。这意味着,时钟要在上电的时候就应该有了,

      如果某些时钟要上电比较久之后才出现(如锁相环输出时钟、外部芯片输入的时钟等),就可能出问题。上面的建议,是采用晶振出来的时钟。

      解决思路大致如下:
      1. 按建议,采用晶振出来的时钟。
      2. 如果确实是需要一个延迟比较大的时钟怎么办?你可以再另外新建一个ILA,这个ILA使用的是晶振时钟,看的信号随便。

       这样,系统上电后,就发现这个ILA后,就能启动了,然后就能启动你所需要的ILA了。



 【问题23】在线调试工具抓取三态门信号,会报错,该如何解决?

答:一般三态门是放在接口上的,内部不会有三态信号。FPGA三态信号一般可分解成如下:
      assign sdio = sdio_en?sdio_w:1'bz;assign sdio_in = sdio ;您可以抓取sdio_en和sdio_w来观察。


【问题24】在明德扬提供的SIGNALTAP练习中,找到错误后,要如何修改?

答:明德扬提供的SIGNATAP练习,为了不让学员看到答案,专心找BUG,特意将有错误的代码封装成IP核的形式,即QXP格式文件。

       该格式文件的内容是不可观看的。所以这些练习只要找到错误即可,不必修改。


【问题25】在抓取信号时,信号名后面都加有数字,跟我命名的不同,这是为什么?例如 定义中没有Add1,怎么在Nodes Found中有Add1~2.add~4


答:QUARTUS或者VIVADO会对代码进行综合,即变成电路。在进行综合变成电路的时候中,工具会自动产生很多信号来命名每个电路线。所以这是正常的现象。

甚至原有的信号也会改变(如会加数字,会加reg等),所以在看信号的时候,要仔细观察,不用太在意后续。

当然,多尝试抓几次就好。



【问题26】quartus开发平台,在做SIGNALTAP 练习中,右窗口提示no device is selected,如下图,请问如何解决?

答:
1.连接好硬件后,请点击hardware旁边的下拉接口,选择USB-Blaster即可。  

2.如果问题依旧,是硬件没有连接好或者连接错误,请看http://old.mdy-edu.com/plus/view.php?aid=1191此贴问题3,排除原因。

3.以上两个操作没有解决,请联系服务老师


【问题27】请问 SIGNALTAP选择采样时钟

答:1SIGNALTAP的采样时钟,不一定是时钟信号,可以是其他任意的信号。总之,SIGNALTAP会在采样时钟的上升沿去捕捉信号的值,
       如果没有上升沿,则会一直等待。例如下图所示,就是以按键信号key0为采样时钟。在key001时,就会采样一个值。

2、若该工程使用到几个模块,并且每个模块的时钟不一定相同,则我们选择采样时钟时,要根据我们要测试的信号所在的模块的时钟是什么。



【问题28】怎么选择触发条件的次数

下图所示,通过设置segmented,可以检查满足触发条件的次数。例如,发现按键有时候失灵的情况,为了定位此问题,我想检查按键按下的次数,是否与捕捉到信号次数一致。


答:主要设置为:

1. segmented设置为32

2. 把捕捉到信号key_vld拉到显示窗口,该信号为1表示捕捉到一个按键;

3. 设置触发条件为:key_vld的上升沿;

4. 按下run键,等待触发条件满足;

5. 按下按键4次;按停止捕捉键


【问题29】如下图所示,当加载比特流文件后,没有显示逻辑分析义的窗口,或者窗口没有波形显示?


答:1. 请确认添加了逻辑分析仪观察的信号。可以通过例化ILA方式添加,也可以通过MARK DEBUG方式添加。
      2. 请检查添加逻辑分析仪观察信号,步骤是否正确。
      3. 请确认逻辑分析仪的观察时钟正确。要确保上电的时候,就有时钟(最好是晶振产生的时钟)。可以尝试换一下时钟看看


【问题30】
请问SignalTap添加时钟,配置JTAG下载怎么操作?
答:添加时钟,配置JTAG下载,在此界面中可以直接下载





问题31如何新建Instance中添加观测节点

答:在新建Instance中添加观测节点(Nodes)。在Edit菜单中选择Add notes(或者在信号那一大片区域处双击鼠标),弹的Nodes  Finder界面,在Named一栏中填入节点名称,
可以用*号通配符;点击List按钮后的箭头,在其中选取信号类型,之后点击list按钮,Nodes Found窗口中将列出查找到的信号,双击以选取所需信号。
用同样的方法加入其它所需信号,完成后点击OK。

 


问题32】使用在线调试工具(SIGNALTAP ILA)时,如果修改或者添加信号后,功能由正常变成不正常(或者由不正常变成正常),是什么原因?

关键词:SIGNALTAP ILA,正常变不正常,不正常变正常  

答:在线调试工具使用时,会影响到内部信号的时序,有可能出现时序违例的情况。这通常发生在时序约束很紧张的时刻。最好的方法是优化时序,如流水线打拍方式。 
       另外,不排除原来逻辑功能就有问题,只是刚好暴露而已,建议还是要找到问题点。


问题33请问sigaltap采样时钟频率是不是有上限?我用400M的采样时钟采集信号一直触发不到,sigaltap采样时钟速率有没有上限?有的话是多少?

答:
1、采样时钟频率,跟FPGA内部的其他时钟一样,不能任意大的频率,而是应该要满足时序要求的频率。
2、参考《在线调试工具》【问题1】 解答: 可能的原因如下: 1.该时钟确实是没有,即一直为0,或者一直为1。 2. 该clk不是本模块产生的,而是其他模块产生,然后在此模块使用。这个时候有可能不能作为采样时钟。正确的做法,哪个模块产生的就使用那个模块的信号。例如常见的PLL的C0,C1等。
3、参考《在线调试工具》【问题12】解答。




【问题34】 在ILA的窗口中,能否设置触发条件为:一个多位数据的某一位为1或者为0?例如信号a[15:0],捕捉a[10]为1。

答:可以的。在触发设置窗口中添加该数据,然后设置为二进制显示,在数值中,不关心的位设置为X,关心的位设置为1或者0即可。 例如,信号a[15:0],捕捉a[10]为1,该值可为xxxx_x1xx_xxxx_xxxx。






【问题35】在ILA的窗口中,能否设置触发条件为:一个多位数据的某两位,其中某一位为1来触发?例如信号a[15:0],捕捉a[10]为1,或者a[9]为1。 
答:可以的。在触发设置窗口中添加该数据,添加两次,均二进制表示。其中第1个值可为xxxx_x1xx_xxxx_xxxx。第2个值设置为xxxx_xx1x_xxxx_xxxx。尤其注意, 下图要选择“或”的关系。




【问题36】问:在上板调试(如ILA、CHIPSCOPE或者SIGNALTAP等工具)的时候,状态机跳转到不可能的状态,例如同时进入两个不同的状态,从分析上是不可能出现的,偏偏出现了。
答:通常状态机会按代码的逻辑进行跳转。当出现了不可能的状态时,一般是由于亚稳态等原因导致的。亚稳态可能是由于异步信号、时序不满足等原因,请仔细检查。


【问题37】问:如何将某一个变量加入到signtap中呀
答:

【问题38】在线调试生成那个stp文件,如何编译就报错,只有把stp文件删了才正常

答:可以检查下路径里是否包含了中文字符,出现这种情况一般是路径有中文字符






温馨提示:明德扬除了培训学习还有项目承接业务,擅长的项目主要包括的方向有以下几个方面:


1. MIPI视频拼接


2. SLVS-EC转MIPI接口(IMX472 IMX492)

3. PCIE采集系统

4. 图像项目

5. 高速多通道ADDA系统

6. 基于FPGA板卡研发

7. 前端模拟采集、射频、电荷灵敏前置放大器


需要了解相关信息可以联系:易老师13112063618(微信同号)
明德扬科技教育















   拓展阅读