|
проблема с RAM в ModelSim |
|
|
|
Mar 14 2012, 08:08
|
Местный
  
Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925

|
Добрый день всем. Работая с ModelSim заметил странную вещь. В одном проекте имеются два компонента памяти: 1-портовая и 2-портовая, обе синхронные. При симуляции проекта, во время чтения каждой из памятей получаю разные задержки данных на выходе относительно сигнала "rden". Вот две картинки: для однопортовой:
для двухпортовой:
По нулевому адресу в обеих памятях лежит значение "F00..", т.е. не ноль. Подскажите что делать, если Вы знаете.
|
|
|
|
|
Mar 15 2012, 05:15
|
Местный
  
Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925

|
Цитата(des00 @ Mar 14 2012, 11:23)  при генерации памяти поставить одинаковую read latency %) Какую "read latency"??? В МегаВизарде вообще нет такой опции для памяти %) З.Ы.: прошу отвечать тех, кто сталкивался с такой проблемой или знает решение.
Сообщение отредактировал billidean - Mar 15 2012, 05:17
|
|
|
|
|
Mar 15 2012, 06:42
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(billidean @ Mar 15 2012, 09:15)  З.Ы.: прошу отвечать тех, кто сталкивался с такой проблемой или знает решение. Смешно, ей богу... Ну, про МоделСим кое-что мы знаем. Но откуда Визард? Какая память? Откуда взялась однопортовая память и двухпортовая? Этого кроме Вас похоже никто не знает. Но Вы об этом нем не сообщаете. Так что каков вопрос, таков и ответ... а телепаты ушли за пивом...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Mar 15 2012, 07:45
|
Местный
  
Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925

|
Цитата(iosifk @ Mar 15 2012, 10:42)  Но откуда Визард? Какая память? Откуда взялась однопортовая память и двухпортовая? Ладно... Разрабатываю проект в Квартусе (VHDL), где Визардом создал памяти( RAM:1-Port и RAM:2-Port ). Перед отладкой проекта на железе решил промоделировать систему в МоделСиме и наткнулся на проблему.
|
|
|
|
|
Mar 15 2012, 07:57
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(billidean @ Mar 15 2012, 11:45)  Разрабатываю проект в Квартусе (VHDL), где Визардом создал памяти Ну, уже легче. Теперь остается взять описание мегафункций Квартуса и прочесть два раздела о памяти. И обратить внимание на латентность. А если Квартус генерит визардом файлы, которые можно прочитать, то как написал des можно их тогда исследовать на латентность... Или скажем так. Если бы я делал двухпортовку, то она бы выглядела так: блок памяти и у него на адресной шине - мультиплексор, который коммутирует шину адресов с порта А или с порта Б. Соответственно, после мультиплексора я бы поставил регистр для фиксации адреса. Вот и получился бы лишний такт латентности...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Mar 15 2012, 08:28
|
Местный
  
Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925

|
Вот vhd-файл, сгенеренный Визардом:
qwerty.vhd ( 7.3 килобайт )
Кол-во скачиваний: 285Покажител, плз, где настраивается задержка
|
|
|
|
|
Mar 15 2012, 09:54
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(billidean @ Mar 15 2012, 12:28)  Вот vhd-файл, сгенеренный Визардом:
qwerty.vhd ( 7.3 килобайт )
Кол-во скачиваний: 285Покажител, плз, где настраивается задержка Задержка и не настраивается. Она задается режимами работы. Если задали синхронный режим, значит адрес будет защелкиваться. Если задали еще и регистр по выходу, значит данные будут защелкиваться еще и на выходе и задержка будет в 2 такта. А ваш файл ссылается на библиотечный altsyncram, вот там и смотрите... Если он доступен для чтения... Читайте описание мегафункций. Там все должно быть описано. Я давно с Альтерой работал...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Mar 15 2012, 10:46
|
Местный
  
Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925

|
Цитата(iosifk @ Mar 15 2012, 13:54)  Если задали синхронный режим, значит адрес будет защелкиваться. Если задали еще и регистр по выходу, значит данные будут защелкиваться еще и на выходе и задержка будет в 2 такта. В том то и дело, что обе памяти у меня сформированы на основе библиотечного компонента altsyncram, обе в синхронном режиме, и обе имеют регистры на выходе, даже тактируются одной частотой, но вот ведут себя по разному, одна имеет на выходе задержку в 1 такт, другая - 2 такта.
|
|
|
|
|
Mar 15 2012, 15:40
|
Местный
  
Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925

|
Цитата(iosifk @ Mar 15 2012, 14:53)  Так у них же разная "начинка". Почему же они должны иметь одинаковую задержку? Вообще-то обе этих памяти в железе (циклон,стратикс...) имеют одинаковую задержку выходных данных относительно сигнала rden, два такта. Или Вы с ними в железе не сталкивались?
|
|
|
|
|
Mar 19 2012, 03:39
|
Местный
  
Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925

|
При написании такого кода Код ... process clk begin if ( rising_edge(clk) ) then ... ram_wren <= '1'; --сигнал чтения памяти ... end if; ... end process; ... в моделсиме получаю задержку выходных данных из памяти в 1 такт, но уже при коде Код ... process clk begin if ( rising_edge(clk) ) then ... ram_wren <= '1' after 1 ns; --сигнал чтения памяти ... end if; ... end process; ... получаю нормальную рабочую задержку, как в железе, в 2 такта. Т.е. получается, что проекты заточенные конкретно для железа нельзя сразу моделировать, не расставив задержки по всем устанавливаемым сигналам?
Сообщение отредактировал billidean - Mar 19 2012, 03:43
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|