Vivado 2012.x,Vivado综合 – 当在两个以上进程中以位片方式分配包含keep或syn_keep属性的多位寄存器时,Vivado Synthesis会生成多个驱动程序,或者总是阻塞语句
描述
Vivado Synthesis当前在HDL代码上生成多个驱动程序,其中包含多位寄存器上的keep或syn_keep属性,该属性在两个以上进程中以位片方式分配或始终为块语句。
这种行为的原因是什么?
解
以下是该问题的详细说明。
例如,在HDL代码中的3位寄存器arst_d上存在固有的KEEP或syn_keep属性,该代码在两个以上的进程中以位片方式分配,或者始终是块语句。 Vivado Synthesis目前将生成多驱动程序严重警告,如下所示:
关键警告:[Synth 8-3352]多驱动网络\ u_fpga / u_proj / eth_switch_ctrl.u_glbl_rst_gp_reg_clk / arst_d [0]第一个驱动程序引脚’\ u_fpga / u_proj / eth_switch_ctrl.u_glbl_rst_gp_reg_clk / arst_d_reg [0] __ 0 / Q’
严重警告:[Synth 8-3352]多驱动网络\ u_fpga / u_proj / eth_switch_ctrl.u_glbl_rst_gp_reg_clk / arst_d [0],第二个驱动程序引脚’\ u_fpga / u_proj / eth_switch_ctrl.u_glbl_rst_gp_reg_clk / arst_d_reg [0] / Q’
这些多个驱动程序的原因是,以位片方式在多于2个进程中分配的3位寄存器上的keep或syn_keep属性阻止该工具对此3位寄存器执行分析,从而导致多个司机情况。
要解决此问题,请删除代码中存在的keep或syn_keep属性。这将解决多个驱动程序冲突场景,并且不会生成严重警告消息。此外,如果将代码重写为单个进程或始终阻塞,则不会生成多个驱动程序。这也可以被视为解决方法的另一种选择。
此问题已在2013.1 VIvado Synthesis中修复。不再生成这些严重警告。
没有回复内容