报错信息[Synth 8-1751]

开放1 回答 207 浏览

报错信息[Synth 8-1751] cannot index into non-array adc_data

分享:
  • 二牛学FPGA

    原因:数据位宽不对,定义数据时定义了一位位宽,实际需要16位位宽。

    措施:修改位宽为16位。

    ——————————————

    【Vivado报错】cannot index into non-array type wire for ‘xxx‘

    1、报错原因

    错误地使用了verilog中的索引功能。

    例如

    我声明了一个单bit的wire型变量

    wire m_axis_data_tuser;

    但我对它进行了索引操作

    assign w_index = m_axis_data_tuser[10:0];

    或者是我声明的位宽不满足索引位宽的长度

    wire [7:0] m_axis_data_tuser;

    assign w_index = m_axis_data_tuser[10:0];

    2、解决办法

    对要进行索引的wire型变量给定合适的位宽。

    3、常见出错案例

    当我们例化模块时,常常会直接复制过来IP核给的模板,而里面的许多output接口,我们忘记了对其进行wire定义。此时编译器会自动把他们设置为单bit的wire型变量。

    这个时候我们对其进行索引操作时,就会报此类错误。

    举例:

    xfft_0 your_instance_name (
        .aclk                                          (clk                      ),// input wire aclk
        .s_axis_config_tdata                           (8'b1                     ),// input wire [7 : 0] s_axis_config_tdata   1 fft 0 ifft
        .s_axis_config_tvalid                          (1'b1                     ),// input wire s_axis_config_tvalid          
        .s_axis_config_tready                          (s_axis_config_tready     ),// output wire s_axis_config_tready         
        .s_axis_data_tdata                             ({16'b0,sin_mulit}        ),// input wire [31 : 0] s_axis_data_tdata    输入数据
        .s_axis_data_tvalid                            (m_axis_data_tvalid       ),// input wire s_axis_data_tvalid            接主机的m_axis_data_tvalid信号
        .s_axis_data_tready                            (s_axis_data_tready       ),// output wire s_axis_data_tready
        .s_axis_data_tlast                             (1                        ),// input wire s_axis_data_tlast             当这个信号拉高的时候 表示现在fft ip核里面的2048个数就是我要算的数 可以开始计算了
        .m_axis_data_tdata                             (m_axis_data_tdata        ),// output wire [31 : 0] m_axis_data_tdata   低16位是实数 高16位是虚数
        .m_axis_data_tuser                             (m_axis_data_tuser        ),// output wire [23 : 0] m_axis_data_tuser   低11位是频谱点坐标
        .m_axis_data_tvalid                            (m_axis_data_tvalid_fftout),// output wire m_axis_data_tvalid
        .m_axis_data_tready                            (1'b1                     ),// input wire m_axis_data_tready
        .m_axis_data_tlast                             (m_axis_data_tlast        ),// output wire m_axis_data_tlast
        .m_axis_status_tdata                           (                         ),// output wire [7 : 0] m_axis_status_tdata
        .m_axis_status_tvalid                          (                         ),// output wire m_axis_status_tvalid
        .m_axis_status_tready                          (                         )// input wire m_axis_status_tready
    );
    

    当我们复制过来之后,并没有对m_axis_data_tuser这个output接口定义,此时我们直接对它进行索引操作时,就发生了错误。

    assign w_index = m_axis_data_tuser[10:0];

登录后可在本页底部提交回答

提问者

爱提问的小白白查看主页

描述场景与已尝试方案,更容易获得有效解答

浏览「技术分享」

相关问题

同分类问答

提问建议

  • 标题写清核心疑问,避免「求助」「请问」等空泛用语
  • 正文补充环境、版本、报错信息或截图
  • 先搜索本站是否已有相近问题,减少重复提问
  • 若与课程相关,请标明课时或章节便于讲师定位

技术问答

问完之后的闭环

  • 关联课程精学高频问题往往对应章节,建议回到课程补基础。
  • 产出与互助解决过程可写成笔记,帮助后续同学。

探索全站