[email protected] 0 18 октября, 2016 Опубликовано 18 октября, 2016 · Жалоба Коллеги, есть непонятная проблема. Имею систему на ПЛИС (Cyclone III) с софт-процессором и памятью на базе встроенных блоков ОЗУ. Из памяти при старте системы памяти запускается программа. Суть проблемы в том, что если процессор начинает обращаться к памяти с первых тактов, то память глючит и программа сбоит. Если перед началом обращений выдержать некоторое количество тактов, то всё работает нормально. Точное количество тактов задержки я не знаю, но с 256 ещё глючит, а с 4096 уже нет. Кто-нибудь сталкивался с подобным? Вот код модуля памяти: ENTITY integratedRam IS PORT ( clk : in std_logic; write_f : in std_logic; ce_f : in std_logic; address: in std_logic_vector (13 DOWNTO 0); data : inout std_logic_vector (15 DOWNTO 0) ); END integratedRam; ARCHITECTURE integratedRamImpl OF integratedRam IS TYPE mem IS ARRAY(0 TO 16383) OF std_logic_vector(15 DOWNTO 0); SIGNAL ram_block : mem := ( 0 => X"0000", ... - тут инициализирующие значения. 4385 => X"0000", others => X"0000"); signal data_out : std_logic_vector(15 downto 0); BEGIN data <= data_out when ce_f = '1' and write_f = '0' else (others => 'Z'); PROCESS (clk) BEGIN if (rising_edge(clk)) then if(ce_f = '1' and write_f = '1') then ram_block(to_integer(unsigned(address))) <= data; end if; if(ce_f = '1' and write_f = '0') then data_out <= ram_block(to_integer(unsigned(address))); end if; end if; END PROCESS; END integratedRamImpl; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nmurzin 0 18 октября, 2016 Опубликовано 18 октября, 2016 · Жалоба 1. Почему не пользуешься стандартными LPM модулями для создания памяти. Ты смотрел во что компилятор квартуса синтезировал твой код? могут быть сюрпризы. 2. Чем тактируешь память и процессор. Если от PLL, то перед тем как работать, надо дождаться пока PLL войдет в синхронизацию (PLL_lock). 1. Почему не пользуешься стандартными LPM модулями для создания памяти. Ты смотрел во что компилятор квартуса синтезировал твой код? могут быть сюрпризы. 2. Чем тактируешь память и процессор. Если от PLL, то перед тем как работать, надо дождаться пока PLL войдет в синхронизацию (PLL_lock). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться