vivado 开发过程中所遇错误类型一览

 [Synth 8-4556] 开辟的数组内存空间大小问题

 

[Synth 8-4556] size of variable 'out_FM_buffer' is too large to handle; the size of the variable is 1634688, the limit is 1000000 

问题描述:

开发过程,开辟如下空间,综合报错[Synth 8-4556]

 问题解决:

使用的TCL命令如下,修改综合时大小限制

set_param synth.elaboration.rodinMoreOptions "rt::set_parameter var_size_limit 1634688"

[Synth 8-6859] 在不同的always逻辑块中,对同一个reg变量进行了赋值

[Synth 8-6859] multi-driven net on pin group_index[0] with 1st driver pin 'group_index_reg[0]__0/Q' 
问题描述:

开发过程,运行实现出现错误,追溯到综合阶段发现有众多致命警告[Synth 8-6859]

 问题解决:

保持一个寄存器只能在一个always块中被赋值。

[Synth 8-6859] 另外注意可能产生多驱动问题的情况,在使用generate ... for批量例化时,注意输出端口要定义为数组,如下例的mat_flag端口

// 错误写法

    wire  mat_flag;
    genvar ii;  
    generate
        for(ii=0;ii
            matrix_3x3_in
                u_line_buffer(
                    .clk(clk),
                    .rst_n(rst_n),
                    .valid_in(valid_in),
                    .dout_r_r0d0(buffer_out_x00[ii]),
                    .dout_r_r0d1(buffer_out_x01[ii]),
                    .mat_flag(mat_flag) // 输出端口
            );
           
            MAC_3x3_mul_ch_in
                u_mul_chin(
                    .clk(clk),
                    .rst_n(rst_n),
                    .valid_in(mat_flag),
                    .X00(buffer_out_x00[ii]),
                    .X01(buffer_out_x01[ii]),
                    .output_result_array(result_mul_chout[ii])
            );          
        end           
    endgenerate

// 正确写法

    wire  mat_flag_lib [ch_in_num-1:0]; // 定义为数组
    genvar ii;  
    generate
        for(ii=0;ii
            matrix_3x3_in
                u_line_buffer(
                    .clk(clk),
                    .rst_n(rst_n),
                    .valid_in(valid_in),
                    .dout_r_r0d0(buffer_out_x00[ii]),
                    .dout_r_r0d1(buffer_out_x01[ii]),
                    .mat_flag(mat_flag_lib[ii])
            );
           
            MAC_3x3_mul_ch_in
                u_mul_chin(
                    .clk(clk),
                    .rst_n(rst_n),
                    .valid_in(mat_flag_lib[ii]),
                    .X00(buffer_out_x00[ii]),
                    .X01(buffer_out_x01[ii]),
                    .output_result_array(result_mul_chout[ii])
            );          
        end           
    endgenerate

  [Place 30-58]和[Place 30-99]

 [Place 30-58] IO placement is infeasible. Number of unplaced terminals (387) is greater than number of available sites (328). The following are banks with available pins:  IO Group: 2 with : SioStd: LVCMOS18   VCCO = 1.8 Termination: 0  TermDir:  Out  RangeId: 1 Drv: 12  has only 328 sites available on device, but needs 387 sites.

[Place 30-99] Placer failed with error: 'IO Clock Placer failed'
Please review all ERROR, CRITICAL WARNING, and WARNING messages during placement to understand the cause for failure.

问题描述:

开发过程,

 问题解决:

在综合设置中添加-mode out_of_context(在OOC综合方式下,模块可以有自己的约束文件,同时会单独生成该模块对应的DCP文件,且在综合阶段不会插入IBUF或OBUF。)

vivado 开发过程中所遇错误类型一览_第1张图片

vivado 开发过程中所遇错误类型一览_第2张图片

参考:OOC综合方式

  综合-实现后未显示DSP、BRAM资源使用情况

问题描述:

写完verilog代码,明明用了较多DSP和BRAM资源,Report Utilization确没有这两项

问题解决:

RAM资源显示问题:一般Implementation 菜单下的Report Utilization会较准确,或者使用tcl指令,Implementation后 在Tcl Console中使用 report_utilization -hierarchical 指令查询

DSP资源显示问题:一般算法中用到的乘法器可以用Slice单元或DSP块实现,vivado实现使用DSP的方法一般有(1)让综合器自己推断(2)例化DSP原语两种方式。未显示,可能是综合器使用了Slice单元。

如果只是乘法使用DSP实现的话,在结果寄存器添加如下语法规则即可:

(*use_dsp = "yes"*) reg  [35:0] r_mul_result_0 = 36'd0;

参考:综合属性之use_dsp48?

你可能感兴趣的:(verilog,vivado)