我需要强制我的合成器或编译器使用RAM块来存储数据。
例如,这里的代码:
type REG_Memory is array (0 to 3) of std_logic_vector(15 downto 0);
signal Memory : REG_Memory :=
(x"0001",
x"0010",
x"0100",
x"1000");
当我编译它并看到编译器结果时,它不使用任何RAM块而是使用逻辑单元。我需要使用RAM块作为寄存器存储,我该怎么做?设备I使用的是IGLOO,我可以这样做吗?或者它会在设备重启时丢失数据?,synplify pro是合成器。
答案 0 :(得分:1)
查看文档。 Synplify有一本很好的FPGA参考手册,其中包含有关如何获得所需行为的代码示例和约束。有多种方法可以实现您的目标(在HDL中,在约束文件中等)。
您想查看Synopsys FPGA综合参考手册。特别是在Microsemi部分。在同一本手册中,您还可以找到有关RAM和ROM推理的部分。
本手册位于您安装的“doc”目录中。
这是他们提供的ROM示例(还有其他示例):
library ieee;
use ieee.std_logic_1164.all;
entity rom4 is
port (a : in std_logic_vector(4 downto 0);
z : out std_logic_vector(3 downto 0));
end rom4;
architecture behave of rom4 is
begin
process(a)
begin
if a = "00000" then
z <= "0001";
elsif a = "00001" then
z <= "0010";
elsif a = "00010" then
z <= "0110";
elsif a = "00011" then
z <= "1010";
elsif a = "00100" then
z <= "1000";
elsif a = "00101" then
z <= "1001";
elsif a = "00110" then
z <= "0000";
elsif a = "00111" then
z <= "1110";
elsif a = "01000" then
z <= "1111";
elsif a = "01001" then
z <= "1110";
elsif a = "01010" then
z <= "0001";
elsif a = "01011" then
z <= "1000";
elsif a = "01100" then
z <= "1110";
elsif a = "01101" then
z <= "0011";
elsif a = "01110" then
z <= "1111";
elsif a = "01111" then
z <= "1100";
elsif a = "10000" then
z <= "1000";
elsif a = "10001" then
z <= "0000";
elsif a = "10010" then
z <= "0011";
else
z <= "0111";
end if;
end process;
end behave;