我需要强制合成器或编译器使用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块作为寄存器存储,如何做到这一点?我正在使用的设备是IGLOO,我可以这样做吗?否则在设备重启时会丢失数据? synplify pro是合成器。
发布于 2015-05-08 23:19:24
请查看文档。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;https://stackoverflow.com/questions/30127139
复制相似问题