|
ATA контроллер & ПЛИС |
|
|
|
Jun 22 2009, 14:29
|
Группа: Участник
Сообщений: 3
Регистрация: 11-06-09
Пользователь №: 50 191

|
Посоветуйте, пожалуйста, как лучше реализовать ATA контроллер, работающий на одной плате с ПЛИС (Virtex-5). Отдельная микросхема или IP Core?
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 36)
|
Jun 23 2009, 05:23
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 15-08-06
Из: Russia
Пользователь №: 19 554

|
Цитата(SD713 @ Jun 22 2009, 18:29)  Посоветуйте, пожалуйста, как лучше реализовать ATA контроллер, работающий на одной плате с ПЛИС (Virtex-5). Отдельная микросхема или IP Core? А какие задачи решает ПЛИС?
|
|
|
|
|
Jun 23 2009, 11:04
|
Группа: Участник
Сообщений: 3
Регистрация: 11-06-09
Пользователь №: 50 191

|
Цитата(water @ Jun 23 2009, 09:23)  А какие задачи решает ПЛИС? ПЛИС управляет потоком данных, которые должны как читаться с HDD, так и записываться на HDD.
|
|
|
|
|
Jun 24 2009, 04:37
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 15-08-06
Из: Russia
Пользователь №: 19 554

|
Цитата(DmitryR @ Jun 23 2009, 19:29)  Все может и переходят, только ATA можно сделать самому довольно легко или взять на OpenCores, а SATA говорят где-то в человеко-год выходит, и стоит несколько десятков тысяч долларов. Тогда совсем не понятно, что Вы хотите сделать? На мой взгляд стоит делать то что будет иметь смысл и через 5 лет, а заниматься ради того что бы через пару лет все переделывать заново - какой смысл? Ну это мой взгляд, Ваше право с ним не согласиться. А что касательно вопроса непосредственной реализации то, на мой взгляд, лучшим решением будет упаковка в одну ПЛИС всех ваших задач.
|
|
|
|
|
Jun 25 2009, 11:18
|
Частый гость
 
Группа: Свой
Сообщений: 195
Регистрация: 9-01-09
Из: Москва
Пользователь №: 43 085

|
Цитата(DmitryR @ Jun 23 2009, 19:29)  Все может и переходят, только ATA можно сделать самому довольно легко или взять на OpenCores, а SATA говорят где-то в человеко-год выходит, и стоит несколько десятков тысяч долларов. Virtex 5 имеет гигабитные трансиверы, так что самая сложная часть SATA уже считай готова. А уже сам протокол реализовать, по-моему, дело нехитрое.
|
|
|
|
|
Jul 6 2009, 12:16
|
Частый гость
 
Группа: Свой
Сообщений: 199
Регистрация: 2-03-05
Из: МОСКВА
Пользователь №: 3 016

|
Цитата(SD713 @ Jun 22 2009, 18:29)  Посоветуйте, пожалуйста, как лучше реализовать ATA контроллер, работающий на одной плате с ПЛИС (Virtex-5). Отдельная микросхема или IP Core? Я делал на V4. Для согласования ставил 95хх(CPLD), она у меня работала как выходной регистр. Сам автомат делал на Виртексе. Ничего сложного. Обычный, в общем-то , последовательно -параллельный интерфейс.
|
|
|
|
|
Jul 16 2009, 13:09
|
Частый гость
 
Группа: Свой
Сообщений: 199
Регистрация: 2-03-05
Из: МОСКВА
Пользователь №: 3 016

|
Цитата(Kuzmi4 @ Jul 16 2009, 16:40)  2 tolik1 - то есть вы использовали 95хх(CPLD) как переходник уровней для PATA-V4 ? Да. Не очень оптимально, но работает.
|
|
|
|
|
Jul 16 2009, 13:23
|
Частый гость
 
Группа: Свой
Сообщений: 199
Регистрация: 2-03-05
Из: МОСКВА
Пользователь №: 3 016

|
Цитата(VslavX @ Jul 16 2009, 17:19)  А UDMA делали? Для ATA100-133 уже по времянке могут быть проблемы. Нет. Такого не делал. Писать надо было не быстро, но много.
|
|
|
|
|
Sep 24 2009, 08:18
|

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

|
Здравствуйте. Забуксовал я что-то на реализации этого контроллера.. Разжился даже ANSI INCITS 397-2005, однако это не помогло.. Винт - HM160HC Проблема вся заключается в том, что времянку организовываю согласно "Register transfer to/from device timing" для PIO 0, а поведение железяки совсем не по стандарту. Делаю согласно стандарта(после ресета плиски) - "hardware reset protocol", после того как читаю статус и получаю BSY==0, перехожу к стадии идентификации устроства - записываю сначала в Device/Head Register Dev==0, а потом в Device Control Register nIEN ==0 последовательно, после этого записываю в Command Register == EC - то есть комманду идентификации - жду, получаю INTRQ, читаю статус и вываливаюсь по (BSY == 0) & (DRQ == 0).. Вот интересно- было ли у кого то такое поведение - это где-то чтот опропустил или как ?? И что самое печальное, вот чипскопленая картинка транзакций
Лапы на вход-выход определены так: Код assign ch1_dd_pad_i = ch1_dd_pad; assign ch1_dd_pad = (ch1_dd_padoe_o)? ch1_dd_pad_o : 16'bz; Откуда мусор на ch1_dd_pad_i когда ch1_dd_padoe_o == 1 ??  Если сделать есчё 3 раза ресет плиски - вообсче стадию выхода из "hardware reset protocol" не прохожу уже - BSY == 1 всегда...
|
|
|
|
|
Sep 24 2009, 09:45
|
Профессионал
    
Группа: Свой
Сообщений: 1 535
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770

|
Цитата(Kuzmi4 @ Sep 24 2009, 12:18)  Код assign ch1_dd_pad_i = ch1_dd_pad; assign ch1_dd_pad = (ch1_dd_padoe_o)? ch1_dd_pad_o : 16'bz; Откуда мусор на ch1_dd_pad_i когда ch1_dd_padoe_o == 1 ??  Я конечно не гуру верилога и может быть скажу глупость, но написал бы Код assign ch1_dd_pad=(ch1_dd_padoe_o==1'b1) ? ch1_dd_pad_o : 16'bzzzz_zzzz_zzzz_zzzz;
|
|
|
|
|
Sep 24 2009, 12:41
|

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

|
Смотрю осцилом на лапах, и чипскопом сигналы - что осцил что чипскоп говорят одно и то же - времянка на запись и чтение согласно спецификации - вот это меня и ставит в тупик, на матери винт проверял - в биосе видится, значит IDENTIFY DEVICE проходит всё таки... Самое подозрительное - это мусор на лапах данных при записи (хотя отчётливо видно из assign-ов, что на них должны быть стабильные данные). Счас немного модифицировал дизайн для проверки (опустился на самый низ - примитивы прост опроверить) Код assign ch1_dd_pad_o = 16'hAAAA; assign ch1_dd_pad_i = ch1_dd_pad; assign ch1_dd_pad = (ch1_dd_padoe_o)? ch1_dd_pad_o : 16'bz;
assign LED1_n = ch1_dd_pad_i[0]; assign LED2_n = ch1_dd_pad_i[1]; assign LED3_n = ch1_dd_pad_i[2]; ch1_dd_padoe_o - беру с кнопки на ПП. Проверил в технолоджи-мапе как он конструирует это всё (работаю с Xilinx) - через IOBUF - как и должен. На вход IO этому IOBUF заводится шина dd_pad, сигналы на которую выводятся с pad_o через OBUFT. То есть вообсче не к чему придраться вроде бы со стороны плиски (всё как заказывал). В немодифицированном дизайне конструкция чесная, через IOBUF - как и должна быть, но откуда тогда берётся мусор на линии данных когда я пишу в шину, получается ата-девайс начинает гадить, но с какого это....
|
|
|
|
|
Sep 28 2009, 03:15
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Kuzmi4 @ Sep 26 2009, 03:31)  На будущее, может кому будет полезно - радиоэлектроника- наука про контакты, и с проектированием переходников уровней нужно внимательным быть  . Кстати , может кто посоветует грамотные переходники уровней с 2.5В на 5В, так чтоб 2направленные были (а то один тут уже выбрали  ) ? мне нравятся вот эти Dual Supply Translators http://focus.ti.com/paramsearch/docs/param...AliasId=1100707использовал SN74ALVC164245 http://focus.ti.com/docs/prod/folders/prin...alvc164245.htmlдоставал через чип дип
--------------------
|
|
|
|
|
Sep 28 2009, 08:42
|
Местный
  
Группа: Участник
Сообщений: 222
Регистрация: 27-01-09
Из: г.Жирновск
Пользователь №: 44 025

|
Цитата(des00 @ Sep 28 2009, 07:15)  мне нравятся вот эти Dual Supply Translators использовал SN74ALVC164245 А у меня так ничего и не вышло. Делал самопальный usb-hdd переходник для ATA винта, без UDMA. Удалось даже прочитать его каталог, и файлы киношек с винта вытащить. Но работало нестабильно. Использовал как раз похожие двухуровневые переходники от Ti. И хотя по диаграмме все было верно, никаких там всплесков, но похоже есть еще какие то подводные дела. В результате винт заткнулся причем надолго. Такое впечатление что у было где то наложение выходов друг на дружку во время переключения трансляторов SN74, и в итоге выходные буферы винта перегревались и переставали работать. Где это происходило, в каком месте так и не смог выловить. Общая конструкция была такая. Плата usb, разъем IDE40, шлейф 10см, разъем IDE40, плата трансляторов уровней, разъем IDE40 и шлейф 20см, собственно к винту. Возможно вот эта куча разъемов на пути сигналов сыграла свою роль. Может у автора такая же штука, сигналы двигаются от чипа к винту очень по разному.
--------------------
Еж - птица гордая. Не пнешь - не полетит.
|
|
|
|
|
Oct 19 2009, 09:56
|

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

|
И снова здравствуте. Опять натолкнулся на некоторые трудности. Очень специфический момемент, литературу перерыл, по инету полазил - что-то не нашёл ответа. Собственно проблема такого плана - есть модуль с машинкой - чтение/запись (объём - 1 сектор). Читать могу сколько угодно - всё завершается без ошибок. А вот с записью есть некая заковыка - использовал для проверки такую последовательность действий - читаю в блоковую память плиски сектор (512Б), модифицирую, записываю обратно в тот же сектор, читаю - сравниваю. Значит всё шло хорошо до момента 2-го чтения - когда нужно вычитать из сектора то, что модифицировал на предыдущих этапах. Возвращается DRDY == 1 - то есть девайс готов и BSY==0,DRQ==0 - то есть в девайсе произошла ошибка, такое происходит всегда после обрабатывания запроса записи (чтений штук 10 вставлял даже, а между ними запись, или записи 5 штук - именно после первой же записи на следующей любой транзакции получаю BSY==0,DRQ==0). И что самое интересное - если провести софтварный сброс - и начать заново вышеописанную последовательность действий - всё повторятся по кругу (всмысле ошибка на следующей транзакции после запииси сектора). Чтение же после софтварного ресета показывает немодифицированный блок - что тоже странно , потому как первая процедура записи возвращает статусовый регистр с нормальным завершением. Код машинки приложил
ide_rw_1sector00.txt ( 9.6 килобайт )
Кол-во скачиваний: 222Писал её по атапи-7 и сравнивал с найденными в инете исходниками для МК - вроде одно и тоже, но отчего то не работает . Пио0-тайминги делает другой процесс - для него управляющий сигнал - strobe_in/out, сигнал в главную машину что операция закончена - pio_cyc_ok
pio_timing_module.txt ( 2 килобайт )
Кол-во скачиваний: 176...
|
|
|
|
|
Oct 20 2009, 07:28
|

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

|
Цитата(DmitryR @ Oct 20 2009, 09:29)  описанию я не вижу, чтобы (BSY==0 & DRQ==0) сигнализировало об ошибке. Кейс 13 главной машины Код else if ((BSY == 0) & (DRQ == 0)) ide_case <= 5'd23; // Err = > go 2 switch err_led в документе атапи-7 (да и в 5-й версии это же видел): figure 47 - HOST PIO data-In state diagram. Под диаграмой расшифрование стейтов и переходов: Цитата When BSY is cleared to zero and DRQ is cleared to zero, then the device has completed the command with an error. Цитата(DmitryR @ Oct 20 2009, 09:29)  Затем, вы CRC как считаете? А с этого момента можно поподробнее - зачем в Write Block комманде (блоки в количестве 1) CRC ? Его же вроде там нет ( по крайней мере в описании к комманде READ SECTOR(S), которая имеет код 20h, и к комманде WRITE SECTOR(S), которая имеет код 30h, CRC не упоминается) ? пс Может там подождать где нужно помимо соблюдения тайминга для пио0 ? или есчё какие нъюансы написанные мелким шрифтом внизу и в другом документе ?
|
|
|
|
|
Oct 21 2009, 10:00
|

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

|
2 DmitryR - там глядел  на основании этого прожекта и построен процесс для ПИО времянок. Добрый человек подсказал поглядеть сюда http://www.heeltoe.com/software/pdp11/index.html - вроде бы полноценный прожект - залил и проверил. Постараюсь переделать под V5 и посмотреть как заработает. пс Есчё что забавно - идентификация устройства проходит на ура Файлы прожекта прицепил
ata_host_top00.rar ( 4.79 килобайт )
Кол-во скачиваний: 114 Может какой добрый человек посмотрит (там IDENTIFY_DEVICE в SOFT RESET Machine - всмысле после софт ресета я делаю идентификацию и смотрю чипскопом  )
|
|
|
|
|
Jul 20 2011, 18:55
|
Группа: Validating
Сообщений: 3
Регистрация: 24-02-09
Пользователь №: 45 307

|
Уважаемый Kuzmi4, а чем собственно закончилась работа и где можно разжиться моделькой PATA? "Просел" на подобной задаче с единственным отличием в том, что у меня мост PATA->SATA и требования по линейной скорости записи порядка 130МБайт/с.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|