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

 
 
 
Reply to this topicStart new topic
> Avalon & WaitRequest, есть вопросы...
Kuzmi4
сообщение Jul 25 2008, 08:21
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Здравствуйте.

Делал тут я недавно периферийку - и решил её запхнуть в NIOSII систему.
Чтобы не муксить клоки, решил чтение синхронизовать с входным клоком для периферии.И потом выдавать флаг.
Значится про WaitRequest нашёл такое:

Прикрепленное изображение

Потом сварганил враппер чтоб он работал как на вышеприведённой картинке, просимулил его.

Прикрепленное изображение

Как видно из рисунка, WaitRequest взводится как раз до начала rising_edge(основной клок - 25МГц).
Но в результате тестов в железе - имеем чтение только 1-го символа с фифо - остальные - идентичны(что 10 что 20 символов) wacko.gif
Вчера клок даже до 10 МГц опускал - всё равно все символы одинаковые (чтение остальных регистров, что без WaitRequest - нормально)...
Файлы прицепил.
Прикрепленный файл  data00.rar ( 7.63 килобайт ) Кол-во скачиваний: 97

Есть у кого идеи отчего так может быть ?
07.gif

Если кто-то раньше дизайнил периферию с WaitRequest - можете прицепить экзампл - чтоб я посмотрел как оно точно работает. help.gif
Спасибо.
Go to the top of the page
 
+Quote Post
Postoroniy_V
сообщение Jul 25 2008, 13:06
Сообщение #2


МедвеД Инженер I
****

Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951



Цитата(Kuzmi4 @ Jul 25 2008, 17:21) *
Здравствуйте.

Делал тут я недавно периферийку - и решил её запхнуть в NIOSII систему.
Чтобы не муксить клоки, решил чтение синхронизовать с входным клоком для периферии.И потом выдавать флаг.
Значится про WaitRequest нашёл такое:

Прикрепленное изображение

Потом сварганил враппер чтоб он работал как на вышеприведённой картинке, просимулил его.

Прикрепленное изображение

Как видно из рисунка, WaitRequest взводится как раз до начала rising_edge(основной клок - 25МГц).
Но в результате тестов в железе - имеем чтение только 1-го символа с фифо - остальные - идентичны(что 10 что 20 символов) wacko.gif
Вчера клок даже до 10 МГц опускал - всё равно все символы одинаковые (чтение остальных регистров, что без WaitRequest - нормально)...
Файлы прицепил.
Прикрепленный файл  data00.rar ( 7.63 килобайт ) Кол-во скачиваний: 97

Есть у кого идеи отчего так может быть ?
07.gif

Если кто-то раньше дизайнил периферию с WaitRequest - можете прицепить экзампл - чтоб я посмотрел как оно точно работает. help.gif
Спасибо.

чисто от безделия и от интереса к фразе Чтобы не муксить клоки глунял и при..фигел
у вас два клок домена и от одного к другому готовность вы передаёте так вот просто и не затейливо
Avalon_waitrequest <= read_from_data_reg and (not data_now_prepared);
data_now_prepared - это как раз от вашего компонента....
мне вот не кажется что вам срочно нужно почитать про всякую там метасбильность и там синхронность ну и прочую фигню

ну а я бы использовал двух портовое двух клочное озу для таких целей как у вас
Удачи!


--------------------
Cogito ergo sum
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jul 25 2008, 14:10
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Postoroniy_V - спрашивал уже... глухо..

А на счёт простого перехода - тут вы правы - без перехода в avalon_clock клоковый домен, но есть примерчик, тоесть вырезка из рабочего прожекта. Там приблизительно такое :
Код
rxf_chipselect_s <= '1' when chipselect='1' and address(3 downto 0) = ADD_RXFIFO else '0';
rxf_read_s <= rxf_chipselect_s and read_signal;
process(clk,reset)
begin
    if(reset='1') then
        rxf_waitcycle_s <='0';
        rxf_read_ack_s <= '0';
    elsif(rising_edge(clk)) then
        if(rxf_read_s='1') then
            if(rxf_waitcycle_s='1') then
                rxf_read_ack_s <= '1';
            else
                rxf_waitcycle_s <= '1';
            end if;
        else
            rxf_waitcycle_s<='0';
            rxf_read_ack_s <= '0';
        end if;
    end if; -- RST_i
end process;
waitrequest <= rxf_read_s and not rxf_read_ack_s;

Прикрепленное изображение

Тут в принципе на одном клоковом домене, но всё же если посмотреть на временную диаграммку всё равно получается что waitrequest поднимается и опускается относительно клока не совсем я бы сказал синхронно..
sad.gif
А вот где кстати про эти ужасы метасбильности, синхронности ну и самое главное прочую фигню где можно прочитать?
Go to the top of the page
 
+Quote Post
Postoroniy_V
сообщение Jul 25 2008, 14:16
Сообщение #4


МедвеД Инженер I
****

Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951



Цитата(Kuzmi4 @ Jul 25 2008, 23:10) *
2 Postoroniy_V - спрашивал уже... глухо..

....
А вот где кстати про эти ужасы метасбильности, синхронности ну и самое главное прочую фигню где можно прочитать?

загляните в faq

waitreqeust может быть выставлен когда угодно, но он должен быть стабилен до следующего переднего фронта тактовой на авалон шине а не вашей input_clk

глянул ещё раз в код и не понял

Data_prepared <= delay_chain(3);
....
elsif (falling_edge(Input_clk)) then
delay_chain <= delay_chain(2 downto 0) & Read_request;

то есть работает всё верное! как вы и написали! по идее waitreqeust может остаться навечно в 1

Кузмич, извините но, что-то я устал....почему вы не читаете доки или читаете по диагонали?


--------------------
Cogito ergo sum
Go to the top of the page
 
+Quote Post
Asb
сообщение Jul 25 2008, 14:26
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 294
Регистрация: 11-11-04
Из: Москва
Пользователь №: 1 109



Цитата(Kuzmi4 @ Jul 25 2008, 18:10) *
А вот где кстати про эти ужасы метасбильности, синхронности ну и самое главное прочую фигню где можно прочитать?

http://www.sunburst-design.com/papers/
Правда по английски и с примерами на Verilog, но вообще очень не плохо в частности
"Synthesis and Scripting Techniques for Designing Multi-Asynchronous Clock Designs"
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jul 25 2008, 15:16
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Asb - спасибо, почитаемс..

2 Postoroniy_V -
спецификации авалона читал, оттуда собно и узнал проWaitRequest и что он должен быть установлен до следующего rising_edge авалоновского клока.
И собственно говоря это я и получаю =>
Цитата
read_from_data_reg and (not data_now_prepared)
даёт нам установленный WaitRequest через 10 с копейками нс после выставления нужной комбинации (пока всё декодится и пройдёт через луты).
Далее, data_now_prepared устанавливается как раз после того как был импульс на clock_enable компонента:
delay_chain <= delay_chain(2 downto 0) & Read_request - это мы подгоняем наш Read_request под Input_clock.
далее, логика
Цитата
strobe <= (not delay_chain(2)) and delay_chain(1)

Выставляет нам строб, чтоб до rising_edge Input_clock он уже был установлен.
Ну а как раз после strobe будет идти delay_chain(3) что и будет знаком что данные готовы.
Итого - data_now_prepared привязана как раз к клокам Input_clock - так что пока Input_clock тикает, а оно тикает пока есть питание, то data_now_prepared будет выставлен всегда.
и того вроде как раз всё согласно картинке с спецификации авалона для работы с WaitRequest:
Прикрепленное изображение

Так что получается что всё вроде сделано согласно тому как написано в документации.
Единственное что я пока заметил с вопиющего - data_now_prepared у меня привязана к Input_clock а не авалоновскому клоку, хотя по правилам нужно было перейти к авалоновском клоковому домену. Сегодня переработаю.. Но не ужели из-за этого оно всё и не работает ????
Go to the top of the page
 
+Quote Post
Postoroniy_V
сообщение Jul 25 2008, 15:31
Сообщение #7


МедвеД Инженер I
****

Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951



Цитата(Kuzmi4 @ Jul 26 2008, 00:16) *
2 Asb - спасибо, почитаемс..

2 Postoroniy_V -
спецификации авалона читал, оттуда собно и узнал проWaitRequest и что он должен быть установлен до следующего rising_edge авалоновского клока.
И собственно говоря это я и получаю => даёт нам установленный WaitRequest через 10 с копейками нс после выставления нужной комбинации (пока всё декодится и пройдёт через луты).
Далее, data_now_prepared устанавливается как раз после того как был импульс на clock_enable компонента:
delay_chain <= delay_chain(2 downto 0) & Read_request - это мы подгоняем наш Read_request под Input_clock.
далее, логика

Выставляет нам строб, чтоб до rising_edge Input_clock он уже был установлен.
Ну а как раз после strobe будет идти delay_chain(3) что и будет знаком что данные готовы.
Итого - data_now_prepared привязана как раз к клокам Input_clock - так что пока Input_clock тикает, а оно тикает пока есть питание, то data_now_prepared будет выставлен всегда.
и того вроде как раз всё согласно картинке с спецификации авалона для работы с WaitRequest:

Так что получается что всё вроде сделано согласно тому как написано в документации.
Единственное что я пока заметил с вопиющего - data_now_prepared у меня привязана к Input_clock а не авалоновскому клоку, хотя по правилам нужно было перейти к авалоновском клоковому домену. Сегодня переработаю.. Но не ужели из-за этого оно всё и не работает ????

неужели в самом деле погорели карусели smile.gif шучу
Раз не работает - значит что то сделано не согласно докам smile.gif
у вас клок что на инпуте, вы опускали до 10 МГц. так ведь? а ниос на какой частоте работал?
то есть до момента появления вайтреквеста может пройти более 30 нс а скажем у ниос тактовая 50 МГц...
понимаете о чём я?


--------------------
Cogito ergo sum
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jul 25 2008, 15:49
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Цитата
неужели в самом деле погорели карусели

smile.gif +1

На счёт 30 нан и 50МГц на ниосе - в симуляции говорится про 12 нан с момента выставления последнего нужного сигнал до установки WaitRequest`а - это ж и получается как раз предел частоты...
А на счёт понижения тактовой ниоса - я заводил NIOSII аж на 10MHz (там варнинги были что дебуг требует минимум 20 , но я как то решил что обойдётся..Может и тут надо было послушаться) - на 10 и получал идентичные...
Input_clock - сварганил тестовый - там около мегагерца.
Вот тут то и загвоздка как раз - вроде бы всё согласно требованиям, но в железе вообсче не ясно какое поведение....

Мне тут кроме правильного перехода на авалоновски клоковый домен больше ничего в голову не приходит.....
wacko.gif
мдя..
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jul 27 2008, 11:57
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Значит перевёл data_now_prepared на Avalon-овский клок.
Проверил - симуляция показывает всё то же - что работать должно, а в реальном тесте на железе - всё то же самое => только 1-й байт... Систему заводил на 25 МГц..
Вот теперь точно тупик...Куда рыть ??
wacko.gif
Данные с симуляцией и VHDL
Прикрепленные файлы
Прикрепленный файл  data01.rar ( 7.35 килобайт ) Кол-во скачиваний: 29
 
Go to the top of the page
 
+Quote Post
Postoroniy_V
сообщение Jul 27 2008, 13:11
Сообщение #10


МедвеД Инженер I
****

Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951



Цитата(Kuzmi4 @ Jul 27 2008, 20:57) *
Значит перевёл data_now_prepared на Avalon-овский клок.
Проверил - симуляция показывает всё то же - что работать должно, а в реальном тесте на железе - всё то же самое => только 1-й байт... Систему заводил на 25 МГц..
Вот теперь точно тупик...Куда рыть ??
wacko.gif
Данные с симуляцией и VHDL

да всё туда же smile.gif
сигнал тап вас рассудит smile.gif

з.ы. плохо моделировали


--------------------
Cogito ergo sum
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jul 27 2008, 13:47
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Postoroniy_V
Цитата
да всё туда же

а можно поточнее ? - вроде ж теперь всё по правилам, с переходами с одного домена на другой, клок 40нс при времени реакции WaitRequest ~12нс ....
Go to the top of the page
 
+Quote Post
Postoroniy_V
сообщение Jul 27 2008, 14:00
Сообщение #12


МедвеД Инженер I
****

Группа: Свой
Сообщений: 816
Регистрация: 21-10-04
Пользователь №: 951



Цитата(Kuzmi4 @ Jul 27 2008, 22:47) *
2 Postoroniy_V

а можно поточнее ? - вроде ж теперь всё по правилам, с переходами с одного домена на другой, клок 40нс при времени реакции WaitRequest ~12нс ....

ещё раз - воспользуйтесь сигнал тапом!


--------------------
Cogito ergo sum
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jul 28 2008, 07:47
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Postoroniy_V - та понял уже.
Начинаю хелпы читать по этой страшной шняге smile3046.gif , а то не сильно знаком с этой страшной штукой .......
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th June 2025 - 10:51
Рейтинг@Mail.ru


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