seldim 0 29 октября, 2014 Опубликовано 29 октября, 2014 · Жалоба Нужна помощь. Пытаюсь создать однопортовую память на VHDL в квартусе 9 версии для аналога ПЛИС 5576ХС1Т FLEX10K50RI. Изначально проект был под циклон с 2-х портовой памятью и в флексе он не прижился, переделал под однопортовую, Но квартус упорно не хочет использовать память, а компилирует на тригерах. В мегавизарде память создает нормально и использует блоки памяти, а из VHDL никак. Память описывал из квартусовского примера. Кто знает как заставить квартус использовать блоки памяти? -- Quartus II VHDL Template -- Single port RAM with single read/write address library ieee; use ieee.std_logic_1164.all; entity single_port_ram is port ( clk : in std_logic; addr : in natural range 0 to 31; data : in std_logic_vector(7 downto 0); we : in std_logic := '1'; q : out std_logic_vector(7 downto 0) ); end entity; architecture rtl of single_port_ram is -- Build a 2-D array type for the RAM subtype word_t is std_logic_vector(7 downto 0); type memory_t is array(256 downto 0) of word_t; -- Declare the RAM signal. signal ram : memory_t; -- Register to hold the address signal addr_reg : natural range 0 to 256; begin process(clk, we) begin if(rising_edge(clk)) then if(we = '1') then ram(addr) <= data; end if; addr_reg <= addr; end if; end process; q <= ram(addr_reg); end rtl; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 29 октября, 2014 Опубликовано 29 октября, 2014 · Жалоба На сколько я помню, во флексах блоки памяти нативно двухпортовые, так что Вам надо иметь два адреса - адрес для порта записи, и адрес для порта чтения. При этом, кстати, адрес для чтения вовсе не обязательно заносить в регистр, так как блоки памяти там асинхронные, а регистры опциональные, и, вроде как, там регистр на адреса один, то есть, или на запись, или на чтение. и укажите атрибут этой памяти, что она должна быть размещена в EAB (атрибут ramstyle, значение "EAB") UPD: Еще, пошукайте по логам на предмет нечто вроде "uninferred due to unsupported read-during-write behavior" UPD2: Стоит еще попробовать вместо q <= ram(addr_reg); поставить q <= ram(addr); в связи с нативной асинхронностью блоков. UPD3: Вот еще конструкции, которые стоит попробовать, на тему вариаций по read-during-write behavior: 1) process(clk, we) begin if(rising_edge(clk)) then if(we = '1') then ram(addr) <= data; end if; q <= ram(addr); end if; end process; 2) process(clk, we) begin if(rising_edge(clk)) then if(we = '1') then ram(addr) <= data; q <= data; else q <= ram(addr); end if; end if; end process; 3) я не знаю, как это на VHDL написать (именно блокирующее "=", а не "<="), сорри, я в основном читатель на VHDL: always @ (posedge clk) begin if (we) ram[wr_addr] = d; q = ram[rd_addr]; end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 29 октября, 2014 Опубликовано 29 октября, 2014 · Жалоба 5576XC4T. Подскажите пожалуйста, куда подключать выводы TEST_MODE, RES_MODE, RES. Схему надо делать сейчас, а закупка чего-либо будет в другом этапе. В альтеровском аналоге таких входов не увидел. ..это служебные входы, предусмотрите на них подтяжки и к нулю и к единице, на всякий случай и всё. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 29 октября, 2014 Опубликовано 29 октября, 2014 · Жалоба Нужна помощь. Пытаюсь создать однопортовую память на VHDL в квартусе 9 версии для аналога ПЛИС 5576ХС1Т FLEX10K50RI. Изначально проект был под циклон с 2-х портовой памятью и в флексе он не прижился, переделал под однопортовую, Но квартус упорно не хочет использовать память, а компилирует на тригерах. В мегавизарде память создает нормально и использует блоки памяти, а из VHDL никак. Память описывал из квартусовского примера. Кто знает как заставить квартус использовать блоки памяти? -- Quartus II VHDL Template -- Single port RAM with single read/write address library ieee; use ieee.std_logic_1164.all; entity single_port_ram is port ( clk : in std_logic; addr : in natural range 0 to 31; data : in std_logic_vector(7 downto 0); we : in std_logic := '1'; q : out std_logic_vector(7 downto 0) ); end entity; architecture rtl of single_port_ram is -- Build a 2-D array type for the RAM subtype word_t is std_logic_vector(7 downto 0); type memory_t is array(256 downto 0) of word_t; -- Declare the RAM signal. signal ram : memory_t; -- Register to hold the address signal addr_reg : natural range 0 to 256; begin process(clk, we) begin if(rising_edge(clk)) then if(we = '1') then ram(addr) <= data; end if; addr_reg <= addr; end if; end process; q <= ram(addr_reg); end rtl; ниже пример двупортовой памяти (то что было под рукой), там имеются атрибуты (attribute) которые у Вас тоже должны быть. Как раз с помощью этих атрибутов можно задать, где будет размещаться память: блочная память, регистровая логика и т.д. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; use std.textio.all; entity memA is generic ( DATA_WIDTH : natural := 4; ADDR_WIDTH : natural := 13 ); port ( clk_a : in std_logic; clk_b : in std_logic; addr_a : in std_logic_vector((ADDR_WIDTH-1) downto 0); addr_b : in std_logic_vector((ADDR_WIDTH-1) downto 0); 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 memA; architecture Behavioral of memA is -- Build a 2-D array type for the RAM subtype word_t is std_logic_vector((DATA_WIDTH-1) downto 0); type memory_t is array(2**ADDR_WIDTH-1 downto 0) of word_t; shared variable ram : memory_t:= (others => (others => '0')); -- signal ram : memory_t := --( -- to initialize memory -- ); signal mem_data : std_logic_vector (14 downto 0); attribute ramstyle : string; attribute ramstyle of ram : variable is "M9K, no_rw_check"; begin -- Port A process(clk_a) begin if(rising_edge(clk_a)) then if(we_a = '1') then ram(conv_integer(addr_a)) := data_a; end if; q_a <= ram(conv_integer(addr_a)); end if; end process; -- Port B process(clk_b) begin if(rising_edge(clk_b)) then if(we_b = '1') then ram(conv_integer(addr_b)) := data_b; end if; q_b <= ram(conv_integer(addr_b)); end if; end process; end Behavioral; уточните: - какая у Вас память на 9 килобит или 4 килобит или другая... - возможно для Вашего ПО эти атрибуты пишутся иначе... PS Приведенное описание работает в квартусе Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
disel 0 29 октября, 2014 Опубликовано 29 октября, 2014 · Жалоба Это работает в 5576ХС4Т library ieee; use ieee.std_logic_1164.all; entity analyzer_mem is generic ( DATA_WIDTH : natural := 8; ADDR_WIDTH : natural := 6 ); port ( clk : in std_logic; wr_addr : in natural range 0 to 2**ADDR_WIDTH - 1; rd_addr : in natural range 0 to 2**ADDR_WIDTH - 1; data_i : in std_logic_vector((DATA_WIDTH-1) downto 0); we : in std_logic := '1'; q : out std_logic_vector((DATA_WIDTH -1) downto 0) ); end analyzer_mem; architecture rtl of analyzer_mem is -- Build a 2-D array type for the RAM subtype word_t is std_logic_vector((DATA_WIDTH-1) downto 0); type memory_t is array(2**ADDR_WIDTH-1 downto 0) of word_t; -- Declare the RAM shared variable ram : memory_t; begin process(clk, rd_addr) begin if(rising_edge(clk)) then if(we = '1') then ram(wr_addr) := data_i; end if; end if; q <= ram(rd_addr); end process; end rtl; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Corner 0 6 ноября, 2014 Опубликовано 6 ноября, 2014 · Жалоба 5576 хорошие ПЛИС. Только ГК56 для них не родной, лучше ГК154. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
10ff 0 20 ноября, 2014 Опубликовано 20 ноября, 2014 · Жалоба А существуют ли отладочные платы для воронежских ПЛИС? Может кто-то уже покупал/интересовался данным вопросом? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spinorog 0 27 апреля, 2015 Опубликовано 27 апреля, 2015 · Жалоба А существуют ли отладочные платы для воронежских ПЛИС? Может кто-то уже покупал/интересовался данным вопросом? Да, существуют! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DSIoffe 2 14 мая, 2015 Опубликовано 14 мая, 2015 · Жалоба Здравствуйте все! Скажите, пожалуйста, надо ли как-то закреплять корпус 5576ХС4Т, помимо пайки выводов? Клеить, например? Корпус большой, а ноги тонкие и, говорят, мягкие. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spinorog 0 25 мая, 2015 Опубликовано 25 мая, 2015 · Жалоба Здравствуйте все! Скажите, пожалуйста, надо ли как-то закреплять корпус 5576ХС4Т, помимо пайки выводов? Клеить, например? Корпус большой, а ноги тонкие и, говорят, мягкие. Советую почитать ТУ на этот предмет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DSIoffe 2 25 мая, 2015 Опубликовано 25 мая, 2015 · Жалоба Спасибо за совет. Мне бы ответ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lmx2315 2 25 мая, 2015 Опубликовано 25 мая, 2015 · Жалоба ..у нас паяют так, без клея. Правда серьёзно ничего не трясли, а сами по себе они не отрываются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spinorog 0 26 мая, 2015 Опубликовано 26 мая, 2015 · Жалоба Спасибо за совет. Мне бы ответ. Собственно ответ на ваш вопрос в ТУ. Цитировать не имею к сожалению права. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DSIoffe 2 26 мая, 2015 Опубликовано 26 мая, 2015 · Жалоба У меня есть ТУ. Я его с Вашей подачи даже перечитал. Может, в личке ткнёте носом? Буду очень признателеню Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GMVM 0 1 июля, 2015 Опубликовано 1 июля, 2015 · Жалоба Здраствуйте! У кого нибудь есть схема отладочного комплекта на 5576хс1т? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться