用 std_logic_vector 填充零会导致实现错误

问题描述 投票:0回答:1

我在使用 Vivado 时遇到一个问题,即我的 VHDL 代码中的零填充未保留在详细设计中,并导致实现错误。以下是问题的简要概述:

我的 VHDL 设计中有一个 14 位计数器,我需要将其与零连接以形成 32 位信号,然后再将其分配给 RAM 输入。我使用以下代码片段实现了这一点:

ram_输入<= "000000000000000000" & i;

Here is the elaborated design snapshot, where zeros are missing to make ram_input 32-bit wide, it just take counter i (14-bits) value

在模拟中,一切都按预期工作,并且计数器值正确地用零填充。然而,在 Vivado 生成的精心设计中,似乎只考虑了计数器的 14 位,而忽略了零填充。

还有其他人在 Vivado 或其他综合工具中遇到过类似的问题吗?是否有任何我应该注意的特定设置或技术,以确保在精心设计的设计中保留零填充?

任何见解或建议将不胜感激。

提前感谢您的帮助!

我希望期望建议的方法是用 i (std_logic_vector) 附加零以使其成为 32 位宽,并且可以在精细设计中看到该块。现在,它只需将计数器 i 值作为输入。

vhdl fpga vivado
1个回答
0
投票

您可以尝试以下几件事。首先,在输入和输出寄存器上使用

dont_touch
属性应该可行。其次,您可以使用
Out of Context
模式来综合您的设计。这将保留每个模块端口,您将能够按照您的意愿实现它。

© www.soinside.com 2019 - 2024. All rights reserved.