Verilog 在vivado中合成分层名称时出错

Verilog 在vivado中合成分层名称时出错,verilog,fpga,system-verilog,xilinx,vivado,Verilog,Fpga,System Verilog,Xilinx,Vivado,使用Vivado 2015.1,我试图使用分层名称访问我设计的顶层模块上的对象。模拟运行正常,但我收到以下合成错误: [Synth 8-660]无法解析“top”[“child.sv”:3] module top() logic foo; endmodule module child() always(bar) begin logic top.foo <= bar; end endmodule 模块顶部() 逻辑foo; 端模 子模块() 总是(

使用Vivado 2015.1,我试图使用分层名称访问我设计的顶层模块上的对象。模拟运行正常,但我收到以下合成错误:

[Synth 8-660]无法解析“top”[“child.sv”:3]

module top()
    logic foo;
endmodule

module child()
    always(bar) begin
        logic top.foo <= bar;
    end
endmodule
模块顶部()
逻辑foo;
端模
子模块()
总是(酒吧)开始

logic top.foo因此,Vivado合成中不支持分层名称


Vivado 2019.1 UG901支持

使用Verilog,您可以尝试描述硬件。该语言在一定程度上围绕着描述模块之间的连接而展开。如何描述逻辑很难知道
foo
是否有多个驱动程序。随着设计变得越来越复杂,像这样的编码最终将变得无法维护。无法知道是什么设置了foo值。我尝试的解决方案并不理想,但是,我发布的代码只是一个简单的示例。在我的实际实现中,“foo”非常大,以至于它本身就是我设计的主要内存约束。如果我要通过一个端口将foo传递给一个较低的模块,那么就会制作一个副本,这将在我添加子模块时迅速使我的芯片最大化。您能否建议一种更好的策略,在不复制的情况下从子模块操作父模块中的注册表?谢谢。“会复印的”,我不明白,复印到哪里去了?将进行有线连接,而不是复制。分层参考应仅用于测试台。SystemVerilog和Verilog语言用于设计和验证。如果分层引用是可综合的,那么就没有必要拥有输入/输出/接口端口。有时,仅仅使用分层名称更容易,我在修改所有顶级模块之前经常使用它们。vivado 2019.1中支持的表仍然无法说明支持是用于合成还是仅用于模拟。但我相信你的话。此表用于Verilog合成,自Vivado 2017.3以来支持分层名称功能。