FPGA:调试报错Error:add_1 must be in range [-1,DEPTH-1]解决办法和调试思路

这篇具有很好参考价值的文章主要介绍了FPGA:调试报错Error:add_1 must be in range [-1,DEPTH-1]解决办法和调试思路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在进行FPGA调试的过程中,进行行为仿真,能观察设计的逻辑是否正确,通常情况下需要进行run all的运行,这样才能看到信号在运行过程中的状态,

在调试的过程中遇到如下的报错:
failure: error:add_1 must be in range [-1,depth-1],FPGA,fpga开发

# ** Failure: ERROR:add_1 must be in range [-1,DEPTH-1]
#    Time: 128 ns  Iteration: 1  Protected: /top_tb/DmodInst0/FirD40/U0/<protected>/<protected>/<protected>/<protected>/<protected>/<protected> File: D:/Xilinx/Vivado/2019.1/data/ip/xilinx/axi_utils_v2_0/hdl/axi_utils_v2_0_vh_rfs.vhd
# Break in file D:/Xilinx/Vivado/2019.1/data/ip/xilinx/axi_utils_v2_0/hdl/axi_utils_v2_0_vh_rfs.vhd
run -all
# ** Failure: ERROR:empty_1 and not_empty_1 are inconsistent
#    Time: 128 ns  Iteration: 1  Protected: /top_tb/DmodInst0/FirD40/U0/<protected>/<protected>/<protected>/<protected>/<protected>/<protected> File: D:/Xilinx/Vivado/2019.1/data/ip/xilinx/axi_utils_v2_0/hdl/axi_utils_v2_0_vh_rfs.vhd
# Break in file D:/Xilinx/Vivado/2019.1/data/ip/xilinx/axi_utils_v2_0/hdl/axi_utils_v2_0_vh_rfs.vhd
run -all
# ** Failure: ERROR:rd_avail asserted when rd_valid deasserted
#    Time: 160 ns  Iteration: 1  Protected: /top_tb/DmodInst0/FirD40/U0/<protected>/<protected>/<protected>/<protected>/<protected>/<protected> File: D:/Xilinx/Vivado/2019.1/data/ip/xilinx/axi_utils_v2_0/hdl/axi_utils_v2_0_vh_rfs.vhd
# Break in file D:/Xilinx/Vivado/2019.1/data/ip/xilinx/axi_utils_v2_0/hdl/axi_utils_v2_0_vh_rfs.vhd

用的是vivado 2019.1联合modelism 10.7进行的仿真过程,用vivado内置的仿真也是同样的报错信息,建议用modelsim进行仿真,速度快。

因为存在报错,所以仿真程序是不能连续运行的。如何解决这个报错,让程序连续运行?

如下为解决这个问题的思路:
1.从打印的报错信息来看,这个错误的字段是add_1和empty_1和rd_avail的错误,但是实际上自己编写的Verilog代码是没有这个变量的,所以这个应该是其他内部的错误。
2.判断是哪个内部的错误,基本上可以判断是调用的IP核的内部报错,但是如何判断是哪个IP核使用过程中引起的呢,在利用vivado内部的仿真工具是是无法看到其他信息的,但是在利用modeisim仿真的时候,可以看到程序停止时,停在了打开的fir_complier_v7_2_vh_rfs_vhd,在这里判断应该是调用的Fir的IP核引起的错误。
failure: error:add_1 must be in range [-1,depth-1],FPGA,fpga开发
3.定位了IP核,因为每个人使用IP核的习惯可能不同,所以最直观有效的办法是把用的fir的IP核都注释掉,让程序运行,看是否还存在该报错信息。通过自己的测试,注释掉之后确实可以,接下来对IP核的使用过程重新例化。
4.在不使用如下的ARESET和ACLKEN时,共有六个接口,可以逐一排查,
failure: error:add_1 must be in range [-1,depth-1],FPGA,fpga开发

FirR your_instance_name (
  .aclk(aclk),                              // input wire aclk
  .s_axis_data_tvalid(s_axis_data_tvalid),  // input wire s_axis_data_tvalid
  .s_axis_data_tready(s_axis_data_tready),  // output wire s_axis_data_tready
  .s_axis_data_tdata(s_axis_data_tdata),    // input wire [31 : 0] s_axis_data_tdata
  .m_axis_data_tvalid(m_axis_data_tvalid),  // output wire m_axis_data_tvalid
  .m_axis_data_tdata(m_axis_data_tdata)    // output wire [63 : 0] m_axis_data_tdata
);

在排查的时候重点是s_axis_data_tvalid和s_axis_data_tready,这个两个信号一个输入,一个输出,这个是可以利用输出与其他信号做逻辑运算然后给到输入的,重点是在初始化的时候保证s_axis_data_tvalid要有效,因为本人在例化的时候没有采用aclken接口,而且没有注意输入信号的初始状态,导致s_axis_data_tvalid信号在开始时存在一段不确定状态,为X,导致了上述的报错内容。
5.把信号的初始状态搞定,不让存在X即解决了该错误,最终程序能够run all,不报错。

总结:出现这种add_1等的内部IP核的错误的时候,要有一个清晰的思路,在不确定的时候用控制变量法,一点点增加,然后注意保证IP例化的过程中数据一直有状态,而不是X,这样的思路去解决问题最后应该都能够解决文章来源地址https://www.toymoban.com/news/detail-618133.html

到了这里,关于FPGA:调试报错Error:add_1 must be in range [-1,DEPTH-1]解决办法和调试思路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包