报错信息[Synth 8-1751] cannot index into non-array adc_data
![报错信息[Synth 8-1751] - 第1张 - FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训 报错信息[Synth 8-1751] - 第1张](https://admin.shaonianxue.cn/wp-content/uploads/2025/11/image-2025-11-09-12-14-45-83.png)
报错信息[Synth 8-1751] cannot index into non-array adc_data
![报错信息[Synth 8-1751] - 第1张 - FPGA线上课程平台|最全栈的FPGA学习平台|FPGA工程师认证培训 报错信息[Synth 8-1751] - 第1张](https://admin.shaonianxue.cn/wp-content/uploads/2025/11/image-2025-11-09-12-14-45-83.png)

![报错信息[Synth 8-2715] syntax error near](https://admin.shaonianxue.cn/wp-content/uploads/grafika/prev-next-image-2025-11-09-12-14-45-83.webp)
原因:数据位宽不对,定义数据时定义了一位位宽,实际需要16位位宽。
措施:修改位宽为16位。
——————————————
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];