another_one 0 23 октября, 2019 Опубликовано 23 октября, 2019 · Жалоба Здравствуйте !! Подскажите пожалуйста, кто знает, как реализовать FIFO на верилоге в кавартусе 9.0, используя его библиотеки для FLEX10KE ?? Попробовал реализовать dcfifo и lm-fifo_dc, первый моделируется нормально , второй в моделе уже "записан". На практике первый даёт нули, второй так и не пробовал. Вопрос в связи с этим также как посмотреть в квартусе используются ли блоки EAB ? Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrGalaxy 9 4 ноября, 2019 Опубликовано 4 ноября, 2019 (изменено) · Жалоба another_one, Коль скоро Вы начали пробовать с мегафункциями, можете попробовать с lpm_ram_dq. Я отлаживал что-то похожее на FIFO, затем применил в проекте. Циклическая запись 32 чисел, затем по команде прекращение записи и начинается считывание последних 4 чисел (по циклу). Проект рабочий, можете воспользоваться как образцом, правда он на VHDL, но там элементарно, разберётесь. В 23.10.2019 в 16:39, another_one сказал: Попробовал реализовать dcfifo и lm-fifo_dc, первый моделируется нормально , второй в моделе уже "записан". На практике первый даёт нули, второй так и не пробовал. Странно, что моделируется нормально, а на практике даёт нули... Обычно бывает наоборот. В 23.10.2019 в 16:39, another_one сказал: как посмотреть в квартусе используются ли блоки EAB ? На этапе компиляции проекта в саммари приводится сколько мемори битс использовано. Спойлер LIBRARY ieee; USE ieee.std_logic_1164.all; -- Entity Declaration ENTITY block_name IS -- {{ALTERA_IO_BEGIN}} DO NOT REMOVE THIS LINE! PORT ( lp0_q : IN integer range 0 to 255; Clk : IN STD_LOGIC; Launch : IN STD_LOGIC; Data_in : IN integer range 0 to 255; lp0_data : OUT integer range 0 to 255; lp0_we : OUT STD_LOGIC; lp0_address : BUFFER integer range 0 to 31; Data_out : OUT integer range 0 to 255 ); -- {{ALTERA_IO_END}} DO NOT REMOVE THIS LINE! END block_name; -- Architecture Body ARCHITECTURE block_name_architecture OF block_name IS Signal Address0 : integer range 0 to 31; Shared variable lp0_address0 : integer range 0 to 3; BEGIN Process(Launch, Data_in, lp0_q) begin if Launch='0' then lp0_data <= Data_in; else Data_out <= lp0_q; end if; end process; Process(Clk) begin if Launch='0' then lp0_we <= Clk; else lp0_we <= '0'; end If; end process; Process(Clk, Launch) begin if(Clk'event)and(Clk='0') then if Launch='0' then -- Текущий адрес ОЗУ (чтение, запись - неважно, хотя можно формировать -- раздельно, я в проекте для изделия разделил) lp0_address <= lp0_address + 1; -- Адрес, с которого начнётся отсчёт адресов при считывании из ОЗУ Address0 <= Address0 + 1; else -- Вообще говоря, так в боевом проекте делать нельзя, надо разнести по разным -- тактам вычисление lp0_address0 и lp0_address. Здесь я так поступил для -- простоты и наглядности: lp0_address0 := lp0_address0 - 1; lp0_address <= lp0_address0 + Address0 - 3; end if; end if; end process; END block_name_architecture; lp0_dq-2 - для форума.7z Изменено 4 ноября, 2019 пользователем MrGalaxy убрал подсветку синтаксиса Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться