电源 ram IP 处的 Xilinx FPGA 将初始化为 0,而不是电子随机数?但我需要电子随机数。
Xilinx FPGA 中 Block RAM 的内容是配置比特流的一部分。默认情况下(意思是,如果您没有在设计中指定任何内容),该内容全为零。这是设计使然,例如允许将块 RAM 用作 ROM,或用作软处理器(例如 MicroBlaze)的存储器,该处理器使用引导加载程序代码进行预初始化。
如何完成您想要的取决于您实际需要内容的随机程度。
如果您的应用程序在每次启动时具有相同的内容是可以接受的,您可以预先生成随机数据并在创建时使用该数据初始化您的 RAM 内容。这是最简单的选择。如果您查看Spartan-6 HDL 设计库指南中RAMB8BWER 和 RAMB16BWER 原语的描述,您将看到INIT_00toINIT_3F和INITP_01toINITP_07泛型正是用于此目的。
Xilinx 的设计建议(AR# 39999 9K Block RAM Initialization Support)指出,9-kb Block RAM 不会像上述那样可靠地初始化。没有描述确切的行为,只是设备“可能无法初始化用户指定的数据或默认值”,所以我也不会从中推断出块 RAM 是否可靠地未初始化。建议的解决方法之一是使用 18-kb 块 RAM(RAMB16BWER 原语)。
如果您的应用程序在每次启动时都具有相同的内容是不可接受的,您将需要实际编写某种状态机以在使用前初始化 RAM 内容。这有多复杂将取决于您对随机性的要求。你可以看看下面的指针问题:如何在FPGA中生成伪随机数?.