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

【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];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值