FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
登录
首页-所有问题-技术分享-正文

报错信息[Synth 8-1751]

爱提问的小白白爱提问的小白白
技术分享
17天前
0
0
11

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


报错信息[Synth 8-1751] - 第1张

爱提问的小白白

爱提问的小白白

初级工程师
这家伙真懒,几个字都不愿写!
152692.68K
分享:
Vivado普通IO引脚约束为时钟时报错
Vivado普通IO引脚约束为时钟时报错上一篇
报错信息[Synth 8-2715] syntax error near下一篇
报错信息[Synth 8-2715] syntax error near
回答列表总数:1
  • 二牛学FPGA

    二牛学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];

    17天前
我要回答
回答被采纳奖励100个积分
FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训
请先登录