Перейти к содержанию
    

Память глючит на старте системы

Коллеги,

есть непонятная проблема.

 

Имею систему на ПЛИС (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;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Почему не пользуешься стандартными LPM модулями для создания памяти.

Ты смотрел во что компилятор квартуса синтезировал твой код? могут быть сюрпризы.

 

2. Чем тактируешь память и процессор.

Если от PLL, то перед тем как работать, надо дождаться пока PLL войдет в синхронизацию (PLL_lock).

 

 

1. Почему не пользуешься стандартными LPM модулями для создания памяти.

Ты смотрел во что компилятор квартуса синтезировал твой код? могут быть сюрпризы.

 

2. Чем тактируешь память и процессор.

Если от PLL, то перед тем как работать, надо дождаться пока PLL войдет в синхронизацию (PLL_lock).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...