如何强制合成器使用RAM块来存储数据 - VHDL

时间:2015-05-08 15:09:43

标签: vhdl fpga

我需要强制我的合成器或编译器使用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是合成器。

1 个答案:

答案 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;