|
|
  |
ПЛИС 5576ХС1Т применение..., что-то не пойму я про конфигурирование.... |
|
|
|
Oct 29 2014, 05:53
|
Частый гость
 
Группа: Участник
Сообщений: 96
Регистрация: 2-04-12
Из: Саратов
Пользователь №: 71 142

|
Нужна помощь. Пытаюсь создать однопортовую память на 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;
|
|
|
|
|
Oct 29 2014, 06:12
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
На сколько я помню, во флексах блоки памяти нативно двухпортовые, так что Вам надо иметь два адреса - адрес для порта записи, и адрес для порта чтения. При этом, кстати, адрес для чтения вовсе не обязательно заносить в регистр, так как блоки памяти там асинхронные, а регистры опциональные, и, вроде как, там регистр на адреса один, то есть, или на запись, или на чтение. и укажите атрибут этой памяти, что она должна быть размещена в 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
|
|
|
|
|
Oct 29 2014, 08:34
|

я только учусь...
     
Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839

|
Цитата(seldim @ Oct 29 2014, 07:53)  Нужна помощь. Пытаюсь создать однопортовую память на 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 Приведенное описание работает в квартусе
--------------------
If it doesn't work in simulation, it won't work on the board.
"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
|
|
|
|
|
Oct 29 2014, 12:25
|
Знающий
   
Группа: Свой
Сообщений: 610
Регистрация: 22-04-05
Пользователь №: 4 410

|
Это работает в 5576ХС4Т CODE 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;
|
|
|
|
|
Apr 27 2015, 14:21
|
Группа: Участник
Сообщений: 12
Регистрация: 18-04-14
Пользователь №: 81 436

|
Цитата(AndreiUS @ Nov 20 2014, 11:55)  А существуют ли отладочные платы для воронежских ПЛИС? Может кто-то уже покупал/интересовался данным вопросом? Да, существуют!
|
|
|
|
|
May 25 2015, 11:39
|
Группа: Участник
Сообщений: 12
Регистрация: 18-04-14
Пользователь №: 81 436

|
Цитата(DSIoffe @ May 14 2015, 15:39)  Здравствуйте все! Скажите, пожалуйста, надо ли как-то закреплять корпус 5576ХС4Т, помимо пайки выводов? Клеить, например? Корпус большой, а ноги тонкие и, говорят, мягкие. Советую почитать ТУ на этот предмет.
|
|
|
|
|
May 26 2015, 11:29
|
Группа: Участник
Сообщений: 12
Регистрация: 18-04-14
Пользователь №: 81 436

|
Цитата(DSIoffe @ May 25 2015, 15:48)  Спасибо за совет. Мне бы ответ. Собственно ответ на ваш вопрос в ТУ. Цитировать не имею к сожалению права.
|
|
|
|
|
Jul 1 2015, 10:45
|
Участник

Группа: Участник
Сообщений: 30
Регистрация: 4-07-10
Пользователь №: 58 276

|
Здраствуйте! У кого нибудь есть схема отладочного комплекта на 5576хс1т?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|