Board logo

标题: 在ise综合时如何使用block ram [打印本页]

作者: zsz810924    时间: 2006-4-7 09:08     标题: 在ise综合时如何使用block ram

大家看看我得这个RAM程序,我用RAM_STYPE进行了约束,按理说,应该在综合时使用block ram才对,但是综合报告中却没有用block ram,这是为什么?


library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;


entity ram is
    Port ( addra : in STD_LOGIC_VECTOR(8 downto 0);
           addrb : in STD_LOGIC_VECTOR(8 downto 0);
           clka : in std_logic;
           clkb : in std_logic;
           dina : in STD_LOGIC_VECTOR(10 downto 0);
           doutb : out STD_LOGIC_VECTOR(10 downto 0);
           ena : in std_logic;
           enb : in std_logic;
           wea : in std_logic);
     attribute ram_stype :string;
     attribute ram_stype of ram: entity is "block";
end ram;


architecture Behavioral of ram is


TYPE Blram IS ARRAY(0 to 512) OF STD_LOGIC_VECTOR(10 DOWNTO 0);
SIGNAL mm:Blram;


begin


p1:process(clka,ena,wea)
 begin
  if (ena='1' and wea='1') then
   if rising_edge(clka) then
   mm(conv_integer(addra))<= dina;
   end if;
  end if;
end process p1;


p2:process(clkb,enb)
begin
if (enb='1') then
 if rising_edge(clkb) then
  doutb <= mm(conv_integer(addrb));
 end if;
end if;
end process p2;


end Behavioral;


作者: zsz810924    时间: 2006-4-7 09:18

我写错了,是使用ram_style进行约束,综合报告中没有用block ram
作者: stone133    时间: 2006-4-7 11:50

我试了一下,好像不行;
你为什么不用ip(coregen)来生成呢,这个能直接生成block rom,只要你生成了,肯定使用的是block rom;
rom和ram好像只有在分布式存储器中才能选择,在block rom中是选择不了的;
那个综合设置无效是不是因为ram只能做成分布式的?你的综合报告里出现了ram的使用情况吗?能把报告传上来吗?
作者: ckh123    时间: 2006-4-14 10:40

我是用的IP直接生成的,两个双口RAM:18bit*1024,两个ROM:16bit*256,但在ISE综合结果中显示用了12个BRAM。采用Virtex II XC2V1000,内部有40个BRAM,每个RAM块容量是18Kbit,为何结构显示内部有10个BRAM,所以资源利用超出范围。谢谢!
作者: zsz810924    时间: 2006-4-23 21:25

我改了一下程序,可以了
综合报告里面显示使用的就是Block RAM。我改的地方就是把进程里面的两个IF语句调换了一下顺序,就可以了
但是我不知道为什么会这样?




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0