【常见 Error & Bug】Vivado仿真报错 ERROR: [XSIM 43-3322] 解决方法

问题发现

在进行 DDR3 实验时,仿真时出现以下报错信息。

ERROR: [XSIM 43-3322] Static elaboration of top level Verilog design unit(s) in library work failed.

谷歌翻译为:错误:[XSIM 43-3322]顶层Verilog设计单元在库工作中静态精化失败。

【常见 Error & Bug】Vivado仿真报错 ERROR: [XSIM 43-3322] 解决方法_第1张图片

解决办法

经过仔细检查,发现出现这个报错主要可能有以下两种原因:

例化名写错

initial begin
	force inst_top_ddr3_init.user_clk              = user_clk;  //用户控制时钟
	//写指令FIFO控制模块
	force inst_top_ddr3_init.fifo_wr_cmd_en        = fifo_wr_cmd_en;
	force inst_top_ddr3_init.fifo_wr_cmd_brust_len = fifo_wr_cmd_brust_len;
	force inst_top_ddr3_init.fifo_wr_cmd_addr      = fifo_wr_cmd_addr;
	force inst_top_ddr3_init.fifo_wr_cmd_instr     = fifo_wr_cmd_instr;
	//写数据FIFO控制模块
	force inst_top_ddr3_init.fifo_wr_data_en       = fifo_wr_data_en;
	force inst_top_ddr3_init.fifo_wr_data          = fifo_wr_data;
	//读指令FIFO控制模块
	force inst_top_ddr3_init.fifo_rd_cmd_en        = fifo_rd_cmd_en;
	force inst_top_ddr3_init.fifo_rd_cmd_brust_len = fifo_rd_cmd_brust_len;
	force inst_top_ddr3_init.fifo_rd_cmd_addr      = fifo_rd_cmd_addr;
	force inst_top_ddr3_init.fifo_rd_cmd_instr     = fifo_rd_cmd_instr;
	//读数据FIFO控制模块
	force inst_top_ddr3_init.fifo_rd_data_en       = fifo_rd_data_en;

	//数据获取
	force rst                = inst_top_ddr3_init.inst_ddr3_arbit.rst;
	force rd_end             = inst_top_ddr3_init.rd_end;
	force fifo_rd_data_count = inst_top_ddr3_init.fifo_rd_data_count;
	force fifo_wr_cmd_full   = inst_top_ddr3_init.fifo_wr_cmd_full;
	force wr_end             = inst_top_ddr3_init.wr_end;
end

top_ddr3_init inst_top_ddr3_init (
		.ddr3_dq      (ddr3_dq),
		.ddr3_dqs_n   (ddr3_dqs_n),
		.ddr3_dqs_p   (ddr3_dqs_p),
		.ddr3_addr    (ddr3_addr),
		.ddr3_ba      (ddr3_ba),
		.ddr3_ras_n   (ddr3_ras_n),
		.ddr3_cas_n   (ddr3_cas_n),
		.ddr3_we_n    (ddr3_we_n),
		.ddr3_reset_n (ddr3_reset_n),
		.ddr3_ck_p    (ddr3_ck_p),
		.ddr3_ck_n    (ddr3_ck_n),
		.ddr3_cke     (ddr3_cke),
		.ddr3_cs_n    (ddr3_cs_n),
		.ddr3_dm      (ddr3_dm),
		.ddr3_odt     (ddr3_odt),
		.sys_clk      (sys_clk),
		.rst_n        (rst_n)
	);

以上部分代码为例,在 testbench 文件中利用 force 语句对信号进行绑定时,刚开始的语句中inst_top_ddr3_init.wr_end的inst_top_ddr3_init写成了top_ddr3_init,也就是用了顶层模块的模块名,而不是用的顶层的例化名,因此就出现了以上的报错,

在顶层创建任务时,任务不存在

initial begin
    #100
    wr_cmd_fifo_en();
end

//创建写指令FIFO使能
// task wr_cmd_fifo_en;
// 	begin
// 		@ (negedge rst);
// 		@ (negedge fifo_wr_cmd_full);
// 		@ (posedge user_clk);
// 		@ (posedge user_clk);
// 		@ (posedge user_clk);
// 		@ (posedge user_clk);
// 		@ (posedge user_clk);
// 		@ (posedge user_clk);
// 		@ (posedge user_clk);
// 		@ (posedge user_clk);
// 		fifo_wr_cmd_en <= 'd1;
// 		@ (posedge user_clk);
// 		fifo_wr_cmd_en <= 'd0;		
// 	end	
// endtask

比如以上情况,当在 testbench 中调用 task 任务时,但是此时task所调用的任务名不存在,或者被注释了(当时注释错了),此时进行仿真也会出现以上报错。

目前我所遇到这个报错的原因主要有这两个。

你可能感兴趣的:(常见error,Vivado,bug,fpga开发)