plis 0 29 апреля, 2007 Опубликовано 29 апреля, 2007 · Жалоба Господа-товарище подскажите пожалуйста как реализовать память на VHDL для FLEX10 в Quartus II. Конкретный вопрос, прошу дать конкретный ответ с примерами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Artem_Petrik 0 30 апреля, 2007 Опубликовано 30 апреля, 2007 · Жалоба В Quartus-е для этого есть MegaWizard plug-in manager. Выбираешь в Memory compiler нужный тип памяти и вперед. Насчет примеров не знаю, разве что скриншотов наделать? но лень :) . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_P 0 30 апреля, 2007 Опубликовано 30 апреля, 2007 · Жалоба LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.numeric_std.ALL; ENTITY ram IS GENERIC ( ADDR_WIDTH : integer := 4; DATA_WIDTH : integer := 8 ); PORT ( clk : IN std_logic; data : IN std_logic_vector(DATA_WIDTH - 1 DOWNTO 0); addr_wr : IN std_logic_vector(ADDR_WIDTH - 1 DOWNTO 0); addr_rd : IN std_logic_vector(ADDR_WIDTH - 1 DOWNTO 0); we : IN std_logic; q : OUT std_logic_vector(DATA_WIDTH - 1 DOWNTO 0) ); END ram; ARCHITECTURE rtl OF ram IS TYPE memory IS ARRAY(0 TO 2 ** ADDR_WIDTH - 1) OF std_logic_vector(DATA_WIDTH - 1 DOWNTO 0); SIGNAL mem : memory; BEGIN PROCESS (clk) BEGIN IF (clk'event AND clk = '1') THEN IF (we = '1') THEN mem(to_integer(unsigned(addr_wr))) <= data; END IF; q <= mem(to_integer(unsigned(addr_rd))); END IF; END PROCESS; END rtl; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
plis 0 16 мая, 2007 Опубликовано 16 мая, 2007 · Жалоба В продолжение темы, все стандартные способы уже испробывал, работают. Чистый модуль памяти работает без проблем. Спасибо всем отозвавшимся. Возник следующий вопрос, треба сделать кучу блоков памяти типа mem_type is array(0 to 63) of std_logic_vector(7 downto 0) в принципе то же самое, только надо обращаться к ним в любой момент времени как поступить с сигналми типа wr и rd, вобщем надо работать с нними как с обычными регистрамино, но упорядочееными в массив и что бы они были на блоках памяти. Как это реализовать, как описать, для плис Altera flex10k и Actel APA300 только на VHDL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 17 мая, 2007 Опубликовано 17 мая, 2007 · Жалоба только надо обращаться к ним в любой момент времени как поступить с сигналми типа wr и rd Убрать их совсем. Состояние памяти будет изменяться при изменении адреса или данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
plis 0 17 мая, 2007 Опубликовано 17 мая, 2007 · Жалоба Убрать их совсем. Состояние памяти будет изменяться при изменении адреса или данных. А можно какнибудь жестко задать что это память через атрибуты, что бы всегда быть увереным в actel ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vetal 0 17 мая, 2007 Опубликовано 17 мая, 2007 · Жалоба А можно какнибудь жестко задать что это память через атрибуты, что бы всегда быть увереным в actel ? Это вам не хухры-мухры. За правильностью использования необходимо следить всегда! В противном случае результат -> регистры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 23 мая, 2007 Опубликовано 23 мая, 2007 · Жалоба LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.numeric_std.ALL; ENTITY ram IS GENERIC ( ADDR_WIDTH : integer := 4; DATA_WIDTH : integer := 8 ); PORT ( clk : IN std_logic; data : IN std_logic_vector(DATA_WIDTH - 1 DOWNTO 0); addr_wr : IN std_logic_vector(ADDR_WIDTH - 1 DOWNTO 0); addr_rd : IN std_logic_vector(ADDR_WIDTH - 1 DOWNTO 0); we : IN std_logic; q : OUT std_logic_vector(DATA_WIDTH - 1 DOWNTO 0) ); END ram; ARCHITECTURE rtl OF ram IS TYPE memory IS ARRAY(0 TO 2 ** ADDR_WIDTH - 1) OF std_logic_vector(DATA_WIDTH - 1 DOWNTO 0); SIGNAL mem : memory; BEGIN PROCESS (clk) BEGIN IF (clk'event AND clk = '1') THEN IF (we = '1') THEN mem(to_integer(unsigned(addr_wr))) <= data; END IF; q <= mem(to_integer(unsigned(addr_rd))); END IF; END PROCESS; END rtl; Так это какая память однопортовая или двупортовая? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_P 0 23 мая, 2007 Опубликовано 23 мая, 2007 · Жалоба Так это какая память однопортовая или двупортовая? Это однопортовая, двухпортовая будет выглядеть так: library ieee; use ieee.std_logic_1164.all; entity MyRAM is generic ( DATA_WIDTH : natural := 8; ADDR_WIDTH : natural := 10 ); port ( clk_a : in std_logic; clk_b : in std_logic; addr_a : in natural range 0 to 2**ADDR_WIDTH - 1; addr_b : in natural range 0 to 2**ADDR_WIDTH - 1; data_a : in std_logic_vector((DATA_WIDTH-1) downto 0); data_b : in std_logic_vector((DATA_WIDTH-1) downto 0); we_a : in std_logic := '1'; we_b : in std_logic := '1'; q_a : out std_logic_vector((DATA_WIDTH -1) downto 0); q_b : out std_logic_vector((DATA_WIDTH -1) downto 0) ); end MyRAM; architecture rtl of MyRAM is type memory is array(addr_a'high downto 0) of std_logic_vector((DATA_WIDTH-1) downto 0); signal ram : memory; begin process(clk_a) begin if(rising_edge(clk_a)) then if(we_a = '1') then ram(addr_a) <= data_a; q_a <= data_a; else q_a <= ram(addr_a); end if; end if; end process; process(clk_b) begin if(rising_edge(clk_b)) then if(we_b = '1') then ram(addr_b) <= data_b; q_b <= data_b; else q_b <= ram(addr_b); end if; end if; end process; end rtl; В Quartus есть Insert Tamplate - можно выбрать любой тип памяти и вставить в свой проект. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 23 мая, 2007 Опубликовано 23 мая, 2007 · Жалоба Это однопортовая Ойданупрям :) Адреса чтения и записи разные и независимые. Чтение и запись одновременно возможны. С одного порта такого не сделать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex_P 0 23 мая, 2007 Опубликовано 23 мая, 2007 · Жалоба Да, ошибся, первый вариант это simple_dual_port_ram_single_clock, а второй true_dual_port_ram_dual_clock. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться