реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> проблема с RAM в ModelSim
billidean
сообщение Mar 14 2012, 08:08
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



Добрый день всем.
Работая с ModelSim заметил странную вещь.
В одном проекте имеются два компонента памяти: 1-портовая и 2-портовая, обе синхронные.
При симуляции проекта, во время чтения каждой из памятей получаю разные задержки данных на выходе относительно сигнала "rden".
Вот две картинки:
для однопортовой:
Прикрепленное изображение

для двухпортовой:
Прикрепленное изображение


По нулевому адресу в обеих памятях лежит значение "F00..", т.е. не ноль.

Подскажите что делать, если Вы знаете.
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Mar 14 2012, 08:22
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Разбираться, что раскосячилось в первом примере. Выведите внутренние сигналы из модели памяти для начала.
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 14 2012, 08:23
Сообщение #3


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(billidean @ Mar 14 2012, 02:08) *
Подскажите что делать, если Вы знаете.

при генерации памяти поставить одинаковую read latency %)


--------------------
Go to the top of the page
 
+Quote Post
billidean
сообщение Mar 15 2012, 05:15
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



Цитата(des00 @ Mar 14 2012, 11:23) *
при генерации памяти поставить одинаковую read latency %)

Какую "read latency"??? 01.gif
В МегаВизарде вообще нет такой опции для памяти %)

З.Ы.: прошу отвечать тех, кто сталкивался с такой проблемой или знает решение.

Сообщение отредактировал billidean - Mar 15 2012, 05:17
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 15 2012, 06:42
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(billidean @ Mar 15 2012, 09:15) *
З.Ы.: прошу отвечать тех, кто сталкивался с такой проблемой или знает решение.


Смешно, ей богу...
Ну, про МоделСим кое-что мы знаем. Но откуда Визард? Какая память? Откуда взялась однопортовая память и двухпортовая? Этого кроме Вас похоже никто не знает. Но Вы об этом нем не сообщаете.
Так что каков вопрос, таков и ответ...
а телепаты ушли за пивом... sm.gif


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
billidean
сообщение Mar 15 2012, 07:45
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



Цитата(iosifk @ Mar 15 2012, 10:42) *
Но откуда Визард? Какая память? Откуда взялась однопортовая память и двухпортовая?


Ладно...

Разрабатываю проект в Квартусе (VHDL), где Визардом создал памяти( RAM:1-Port и RAM:2-Port ). Перед отладкой проекта на железе решил промоделировать систему в МоделСиме и наткнулся на проблему.

Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 15 2012, 07:57
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(billidean @ Mar 15 2012, 11:45) *
Разрабатываю проект в Квартусе (VHDL), где Визардом создал памяти

Ну, уже легче. Теперь остается взять описание мегафункций Квартуса и прочесть два раздела о памяти. И обратить внимание на латентность.
А если Квартус генерит визардом файлы, которые можно прочитать, то как написал des можно их тогда исследовать на латентность...
Или скажем так. Если бы я делал двухпортовку, то она бы выглядела так: блок памяти и у него на адресной шине - мультиплексор, который коммутирует шину адресов с порта А или с порта Б. Соответственно, после мультиплексора я бы поставил регистр для фиксации адреса. Вот и получился бы лишний такт латентности...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
billidean
сообщение Mar 15 2012, 08:28
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



Вот vhd-файл, сгенеренный Визардом:
Прикрепленный файл  qwerty.vhd ( 7.3 килобайт ) Кол-во скачиваний: 285

Покажител, плз, где настраивается задержка
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 15 2012, 09:54
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 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
Go to the top of the page
 
+Quote Post
billidean
сообщение Mar 15 2012, 10:46
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



Цитата(iosifk @ Mar 15 2012, 13:54) *
Если задали синхронный режим, значит адрес будет защелкиваться. Если задали еще и регистр по выходу, значит данные будут защелкиваться еще и на выходе и задержка будет в 2 такта.

В том то и дело, что обе памяти у меня сформированы на основе библиотечного компонента altsyncram, обе в синхронном режиме, и обе имеют регистры на выходе, даже тактируются одной частотой, но вот ведут себя по разному, одна имеет на выходе задержку в 1 такт, другая - 2 такта.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 15 2012, 11:53
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(billidean @ Mar 15 2012, 14:46) *
, но вот ведут себя по разному, одна имеет на выходе задержку в 1 такт, другая - 2 такта.

Так у них же разная "начинка". Почему же они должны иметь одинаковую задержку? Я же Вам написал, что скорее всего дело в мультиплексоре входных адресов. Если там есть регистр, то он даст задержку на один такт. Или вы ему "приказываете" как это называется "по щучьему веленью, хочу чтобы задержки не было"....


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
billidean
сообщение Mar 15 2012, 15:40
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



Цитата(iosifk @ Mar 15 2012, 14:53) *
Так у них же разная "начинка". Почему же они должны иметь одинаковую задержку?

Вообще-то обе этих памяти в железе (циклон,стратикс...) имеют одинаковую задержку выходных данных относительно сигнала rden, два такта.
Или Вы с ними в железе не сталкивались?
Go to the top of the page
 
+Quote Post
des00
сообщение Mar 16 2012, 07:07
Сообщение #13


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



судя по тому что в выложеным вами файле, параметр используется outdata_reg_a => "CLOCK0", при генерации памяти вы поставили ее латентность == 2.

тогда следующий вопрос, как именно сформирован сигнал rden на эту память в тестбенче, правильно ли он ложиться на дельта циклы симулятора ?


--------------------
Go to the top of the page
 
+Quote Post
novartis
сообщение Mar 18 2012, 07:39
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



извиняюсь, а что такое дельта циклы симулятора?
Go to the top of the page
 
+Quote Post
billidean
сообщение Mar 19 2012, 03:39
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 1st July 2025 - 15:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01525 секунд с 7
ELECTRONIX ©2004-2016