Jump to content

    
Sign in to follow this  
Dimidrol

Обсуждение IP ядра SATA2

Recommended Posts

Всем привет. Нашел недавно сабж от автора Ashwin Mendon, и попробовал поотлаживать для приведения его в рабочий вид и дальнейшего использования в корыстных целях.

Предлагаю тут пообсуждать работу (а точнее не работу) данного ядра. В принципе написано оно ужасно, но за не имением ничего другого и понимание что с нуля писать будет долго, ничего не остается.

 

Target Platform: ML605 Xilinx Virtex-6 240T

 

Первое что меня интересует это алгоритм выравнивания, или ловли точки. GTX у автора настроен так, что шина данных у него 32 бита. Это удобно, потому что передача в sata происходит двойными словами. Но это только снаружи. Внутри самого GTX данные 16/20 бит. Теперь представим что к нам от жесткого диска приходит примитив ALIGNp. А точнее 2, потому что их всегда приходит 2. Сумеет ли GTX правильно выполнить выравнивание данных при такой внешей шине? Никто не наблюдал в этом ядре каких–либо проблем с выравниванием данных?

Share this post


Link to post
Share on other sites

Собственно меня смутила таблица из даташита ug366 на GTX.

post-26933-1359384046_thumb.png

 

Не совсем понятно что авторы имели ввиду, и когда это может понадобится.

 

После манипуляций с тактовой частотой корка завелась, и даже поехала. По крайней мере на запись, на чтение еще не проверял. Правда работает не со всеми жесткими дисками. C SSD OCZ Vertex 4 256G пишет нормально, с Seagate Barracuda 7200.10 глючит, на пол пути детектируются ошибки от диска. Копаем дальше.

Share this post


Link to post
Share on other sites
Всем привет. Нашел недавно сабж от автора Ashwin Mendon, и попробовал поотлаживать для приведения его в рабочий вид и дальнейшего использования в корыстных целях.

Предлагаю тут пообсуждать работу (а точнее не работу) данного ядра. В принципе написано оно ужасно, но за не имением ничего другого и понимание что с нуля писать будет долго, ничего не остается.

 

Target Platform: ML605 Xilinx Virtex-6 240T

 

Такие стандратные вещи нужно покупать. Я знаю этих ребят и для каких целей разрабатывалось это ядро. Они явно указывают, что этот core поставляеться "AS IS", без каких-либо гарантий, скорее в образовательных целях. Установка таких вещей в коммерческие продукты сулит большой головной болью на этапе расширения проекта и поддержки покупателей.

 

Для твоих "корыстных" целей ядро можно купить за $15k-20k для FPGA и $35k-$45k для ASIC. Лучшие имплементации предлагают Американские компании. Там и оптимизация по latency and throughput, и документация, RTL, Verification Environment, Integration Scripts, Use Case examples, полный цыкл тестирования в железе и даже support для ASIC Back-End. :beer:

 

Если цены не очень доступны, можно посмотреть в сторону Индии или Китая. Покупать у Российских компаний не рекомендую, т.к у большинства вендоров цены американские, а вот качество, поддержка и опыт коммерческих проектов очень ограниченый. :laughing:

Share this post


Link to post
Share on other sites
Всем привет. Нашел недавно сабж от автора Ashwin Mendon, и попробовал поотлаживать для приведения его в рабочий вид и дальнейшего использования в корыстных целях.

Предлагаю тут пообсуждать работу (а точнее не работу) данного ядра. В принципе написано оно ужасно, но за не имением ничего другого и понимание что с нуля писать будет долго, ничего не остается.

 

Target Platform: ML605 Xilinx Virtex-6 240T

 

Первое что меня интересует это алгоритм выравнивания, или ловли точки. GTX у автора настроен так, что шина данных у него 32 бита. Это удобно, потому что передача в sata происходит двойными словами. Но это только снаружи. Внутри самого GTX данные 16/20 бит. Теперь представим что к нам от жесткого диска приходит примитив ALIGNp. А точнее 2, потому что их всегда приходит 2. Сумеет ли GTX правильно выполнить выравнивание данных при такой внешей шине? Никто не наблюдал в этом ядре каких–либо проблем с выравниванием данных?

 

Добрый день.

У нас есть своя реализация SATA. Правда под Arria II GX.

Портирование дело несложное, тем более, мы это так и так планируем.

 

Если интересно, ответьте в личку. Дам датащит.

Share this post


Link to post
Share on other sites
Добрый день.

У нас есть своя реализация SATA. Правда под Arria II GX.

Портирование дело несложное, тем более, мы это так и так планируем.

 

Если интересно, ответьте в личку. Дам датащит.

 

Если я правильно понял, это было что—то вроде коммерческого предложения. Так вот, покупать ничего не намерен, тем более что обсуждаемое ядро вполне работоспособно. Но если я не так все понял, то готов пообщаться на эту тему.

Share this post


Link to post
Share on other sites
Если я правильно понял, это было что—то вроде коммерческого предложения. Так вот, покупать ничего не намерен, тем более что обсуждаемое ядро вполне работоспособно. Но если я не так все понял, то готов пообщаться на эту тему.

 

Да, это было что-то вроде того :)

Share this post


Link to post
Share on other sites

Недавно тоже ее скачал. Переписал phy под virtex5. Заработало. Пробовал на двух разных дисках sata2. Чтение сектора -- заработало. Сделал бесконечное чтение сектора по кнопке и вооружился чипскопом. Корка зависала рандомно в пределах 512 попыток. Я до последнего надеялся, что читать спеку и изучать код корки не придется. Понял как ошибался. Нашел причину и место, где поправить. Бага пропала, открылась следующая. Поизучав еще код link_layer'a в шоке до сих пор. Там на обработку ошибок вообще забили. Опять удар в бубен и чудо происходит! Корка начинает стабильно читать сектора/группы секторов в бесконечном цикле. Запись сектора в цикле также приводит к дедлокам, причина все таже. Мучаюсь уже месяц с этой коркой, знаю код и спецификацию уже почти наизусть. Мне так и не удалось найти легкого способа пофиксить зависание при циклической записи сектора на диск, просто потому что корка реализована идеологически неправильно и спецификации там практически ничего не соответсвует. Пришел к выводу, что проще стереть этот код и переписать. Так и поступил.

Edited by Mar_K

Share this post


Link to post
Share on other sites
Недавно тоже ее скачал. Переписал phy под virtex5. Заработало. Пробовал на двух разных дисках sata2. Чтение сектора -- заработало. Сделал бесконечное чтение сектора по кнопке и вооружился чипскопом. Корка зависала рандомно в пределах 512 попыток. Я до последнего надеялся, что читать спеку и изучать код корки не придется. Понял как ошибался. Нашел причину и место, где поправить. Бага пропала, открылась следующая. Поизучав еще код link_layer'a в шоке до сих пор. Там на обработку ошибок вообще забили. Опять удар в бубен и чудо происходит! Корка начинает стабильно читать сектора/группы секторов в бесконечном цикле. Запись сектора в цикле также приводит к дедлокам, причина все таже. Мучаюсь уже месяц с этой коркой, знаю код и спецификацию уже почти наизусть. Мне так и не удалось найти легкого способа пофиксить зависание при циклической записи сектора на диск, просто потому что корка реализована идеологически неправильно и спецификации там практически ничего не соответсвует. Пришел к выводу, что проще стереть этот код и переписать. Так и поступил.

 

Плюсую. Максимум на что меня хватило это вставить чипоскоп. Что–то править в поделке индийских студентов желания не возникло. Шепну на ухо, где-то на просторах интернета есть замеательные исходники sata2 корки, и даже с реализованным NCQ. Причем совсем за бесплатно, правда под лицензией Intel (образовательные цели и тд...). Написал ее работник Intel. Правда ссылку дать не могу - потерял. Не могу сказать что она работает на 100%, но написана просто отменно.

Share this post


Link to post
Share on other sites
Плюсую. Максимум на что меня хватило это вставить чипоскоп. Что–то править в поделке индийских студентов желания не возникло. Шепну на ухо, где-то на просторах интернета есть замеательные исходники sata2 корки, и даже с реализованным NCQ. Причем совсем за бесплатно, правда под лицензией Intel (образовательные цели и тд...). Написал ее работник Intel. Правда ссылку дать не могу - потерял. Не могу сказать что она работает на 100%, но написана просто отменно.

 

Да бог с ней, с ссылкой, может корку-то выложите тут, в образовательных целях? :)

Лично мне, действительно, просто ради интереса погонять, никакой коммерческой подоплеки...

 

Share this post


Link to post
Share on other sites
замеательные исходники sata2 корки, и даже с реализованным NCQ. Причем совсем за бесплатно, правда под лицензией Intel (образовательные цели и тд...). Написал ее работник Intel.

Groundhog?

Share this post


Link to post
Share on other sites
Groundhog?

Она. Правда у меня сразу не заработала, где-то косяк в логике работы. Но потенциал у нее очень большой, так как написана вменяемым программистом. Жалко, что автор решил сделать ее 16 битной, и кмк где-то там и скрывается косяк.

Share this post


Link to post
Share on other sites
Она. Правда у меня сразу не заработала, где-то косяк в логике работы. Но потенциал у нее очень большой, так как написана вменяемым программистом. Жалко, что автор решил сделать ее 16 битной, и кмк где-то там и скрывается косяк.

Запустил ее под Virtex5 VFX70T , попутно заменил трансы на GTX. Чтение секторов работает отменно, чего не скажешь о записи. Почему-то при переполнении выходного буфера(buffer outgoing traffic), когда сигнал wdata_full = block_outbuf_writes || buffer_out_overflow; принимает значение 1 по переполнению буфера buffer_out_overflow, то последнее записанное слово куда-то пропадает (дебажил линк -- там видно). Параметр OVERFLOWLIM (6) не сказал бы, что неправильно стоит. Но, если поменять на OVERFLOWLIM (5), то бага испаряется. Чтение/запись проверял только на командах CMD_READ_DMA_EXTENDED/CMD_WRITE_DMA_EXTENDED.

А какую вы нашли ошибку?

 

PS: Корка всяко лучше предидущей, однако не идеальная. Как-то странно там обрабатывается потеря связи. Если выдернуть и вставить кабель, то связь не восстанавливается. Но и на том спасибо...допилим.

Edited by Mar_K

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this