我想要生成一個RAM來存儲VHDL中的基本繪圖程序的可編輯位圖。爲此,一組I/O採用當前像素的地址並輸出存儲的像素顏色。另一組採用要寫入的像素的地址和其數據輸入的顏色。由於顯示器的大小,這需要是1Megx12bit雙端口RAM。然而,綜合推斷鎖存開始正好在2^13地址導致我相信我用盡資源。我能做些什麼來使這個RAM工作?在VHDL中創建大型雙端口RAM
下面的代碼(注意輸入工具不使用,最終將會被移除):
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
entity DUALRAM_Custom is port (
ADDR1 : in STD_LOGIC_VECTOR(19 downto 0);
D_in2 : in STD_LOGIC_VECTOR(11 downto 0);
ADDR2 : in STD_LOGIC_VECTOR(19 downto 0);
WE2 : in STD_LOGIC;
tool : in STD_LOGIC_VECTOR(3 downto 0);
CLR : in STD_LOGIC;
CLK : in STD_LOGIC;
D_out1 : out STD_LOGIC_VECTOR(11 downto 0)
);
end DUALRAM_Custom;
architecture Behavioral of DUALRAM_Custom is
type RAM_type is ARRAY(0 to 1048575) of STD_LOGIC_VECTOR(11 downto 0);
signal RAM : RAM_type := (others => (others => '0'));
begin
process(CLK) is
begin
if((CLK'event) AND (CLK = '1')) THEN
D_out1 <= RAM(to_integer(unsigned(ADDR1)));
if ((WE2 = '1') AND (CLR = '0')) THEN
if (CLR = '1') THEN
RAM(to_integer(unsigned(ADDR2))) <= x"000";
else
RAM(to_integer(unsigned(ADDR2))) <= D_in2;
end if;
end if;
end if;
end process;
end Behavioral;
我在代碼中看不到任何鎖存器。話雖如此,你的CLR將無法正常工作。 – 2014-12-02 04:55:28
您的目標平臺是否支持BlockRAM的1.5 MiB?通常,外部(S)SRAM更適合於這種像素緩衝器。 – Paebbels 2014-12-02 09:36:09
比爾 - 我的CLR應該將活動地址設置爲0 - 這更像是一個清除而不是清除。 Paebbels - 我不確定。我會嘗試使用Xilinx附帶的CoreGen,看看它是否允許更大的雙塊RAM,因爲我認爲分佈式RAM是有限的。 – 2014-12-02 18:52:32