Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Поиск NAND флеш контроллера
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
demonizer
Несколько раз на форумах поднимались топики по поиску NAND флеш контроллера на ПЛИСах. Но все безуспешно.
Кроме сигнального интерфейса к флешкам ничего не могу нарыть.
Очень нужен контроллер NAND с буферизацией данных в памяти ПЛИСа, с wishbone интерфейсом. Желательно на Verilog'е.
В просторах сети можно несколько платных корок. А вот с бесплатными - беда, на Opencores только началась разработка такого проекта, результатов пока нет.
Кто-нибудь может поделиться своими или чужими разработками? Или указать, где можно найти. Очень буду признателен.
DmitryR
Поделиться не могу, но могу сказать: это несложно сделать. У нас его сделал один человек за пару месяцев, еще и с Ридом-Соломоном вместо ECC.
demonizer
Цитата(DmitryR @ May 21 2010, 13:31) *
Поделиться не могу, но могу сказать: это несложно сделать. У нас его сделал один человек за пару месяцев, еще и с Ридом-Соломоном вместо ECC.


Я думаю что смогу это тоже написать за 2-3 месяца. Но времени как всегда в обрез sad.gif

На сайте Микрона были исходники, но они куда-то пропали. Может у кого-то есть эти исходники?
DmitryR
Где-то были, но эти исходники контроллером не являются.
demonizer
Цитата(DmitryR @ May 21 2010, 14:04) *
Где-то были, но эти исходники контроллером не являются.


DmitryR, а что это тогда? Как бе в описании у них полноценный контроллер с буферной памятью и набором управляющих регистров. Или я не прав?
Я имею ввиду вот этот http://www.micron.com/document_download/?documentId=4314. Так же есть отдельный документ по ECC.
В моем проекте мне не нужно производить запись и чтение из FPGA. Этим будет заниматься хост, мне только нужно предоставить ему доступ к флеш памяти.
Kuzmi4
Занимательный документик laughing.gif

а что вы понимаете под
Цитата
...мне только нужно предоставить ему доступ к флеш памяти....
??
DmitryR
Смех там, мост из SRAM интерфейса в NAND. То есть скорость будет никакая, wear leveling неясно как делать, etc. Смотрите сами, короче.
demonizer
Цитата(Kuzmi4 @ May 21 2010, 15:31) *
Занимательный документик laughing.gif

а что вы понимаете под
??

Имеется ввиду, что стирание/запись/чтение/bad block коррекцию производит хост девайс через доступ к ПЛИС. Как будет расчитываться ECC еще не определился, в смысле программно или аппаратно. По возможности лучше бы сразу иметь блок со встроенным блоком контроля и коррекцией ошибок.

Цитата(DmitryR @ May 21 2010, 15:47) *
Смех там, мост из SRAM интерфейса в NAND. То есть скорость будет никакая, wear leveling неясно как делать, etc. Смотрите сами, короче.


Спасибо, DmitryR. Единственно с VHDL у меня напряг, а придеться скорее всего дорабатывать под свои нужды. Посмотрю исходники, если не поможет буду рыть дальше.
demonizer
2 DmitryR:

Пока разбираюсь с исходниками.
А вы в курсе, поддерживает ли микроновский контроллер burst mode флешей для последовательного чтения/записи данных?
DmitryR
Цитата(demonizer @ May 21 2010, 17:21) *
А вы в курсе, поддерживает ли микроновский контроллер burst mode флешей для последовательного чтения/записи данных?

Я не в курсе, но практически уверен, что нет. Вобщем я очень быстро пришел к выводу, что написать самому человеческий контроллер будет быстрее, чем копаться в этом. Например, если бы я дал такой (микроновский) контроллер программисту - мне пришлось бы написать талмуд о том, что там можно делать и чего нельзя (очевидно например что полностью случайный доступ нельзя делать). Это вообще глупо на мой взгляд: делать контроллеру интерфейс Random Access Memory при том, что access там совершенно не random. Это вводит всех в заблуждение и чревато.
Victor®
Цитата(demonizer @ May 21 2010, 12:05) *
Несколько раз на форумах поднимались топики по поиску NAND флеш контроллера на ПЛИСах. Но все безуспешно.
Кроме сигнального интерфейса к флешкам ничего не могу нарыть.
Очень нужен контроллер NAND с буферизацией данных в памяти ПЛИСа, с wishbone интерфейсом. Желательно на Verilog'е.
В просторах сети можно несколько платных корок. А вот с бесплатными - беда, на Opencores только началась разработка такого проекта, результатов пока нет.
Кто-нибудь может поделиться своими или чужими разработками? Или указать, где можно найти. Очень буду признателен.


А может посмотрите в сторону e.MMC?
http://www.numonyx.com/en-US/MemoryProduct...Pages/eMMC.aspx
Напишите контроллер для MMC - получите более универсальную штуку, IMHO
demonizer
Цитата(DmitryR @ May 24 2010, 12:35) *
Я не в курсе, но практически уверен, что нет. Вобщем я очень быстро пришел к выводу, что написать самому человеческий контроллер будет быстрее, чем копаться в этом. Например, если бы я дал такой (микроновский) контроллер программисту - мне пришлось бы написать талмуд о том, что там можно делать и чего нельзя (очевидно например что полностью случайный доступ нельзя делать). Это вообще глупо на мой взгляд: делать контроллеру интерфейс Random Access Memory при том, что access там совершенно не random. Это вводит всех в заблуждение и чревато.



По поводу интерфейса Random Access Memory смею не согласиться. В данном контроллере используется стандартная схема работы с NAND флеш по следующей логике: запись команды во флеш->чтение/запись данных во внутренний буфер->извлечение данных из внутреннего буфера по SRAM интерфейсу. Так что SRAM интерфейс нужен только для обращения к регистрам и буферам данных контроллера, а не напрямую к NAND. А это как раз то что мне нужно, так как я не представляю как по другому сделать скоростной DMA доступ к флеш памяти, минуя копирование данных во внутренний буфер.

Цитата(Victor® @ May 24 2010, 13:04) *
А может посмотрите в сторону e.MMC?
http://www.numonyx.com/en-US/MemoryProduct...Pages/eMMC.aspx
Напишите контроллер для MMC - получите более универсальную штуку, IMHO

Я рассматривал вариант с самсунговской OneNAND памятью - это контроллер+NAND массив в одном корпусе. Здесь принцип тот же, только использован MultimediaCard интерфейс. Спасибо за совет, буду иметь ввиду, что у Numonix есть такой чип.

Я пока еще мучаю контроллер от Мicron. Перевел код на Verilog с помощью бесплатной утилиты под Linux, кое-что пришлось править руками.
Написал тестбенч для контроллера. Короче такая проблема: на VHDL все работает, в Veriloge работать отказывается, ошибка - бесконечный цикл симуляции. В списках чувствительности в VHDL процессов в FSM есть перекрестные ссылки, причем процессы асинхронные, нет ни rising_edge ни falling_edge условий. Объясните почему в VHDL это работает, а в верилоге нет?
Еще есть одно подозрение, используется tristate цепь данных, причем эта цепь есть в списке чувствительности одного из процессов. В VHDL данные в цепь назначаются внутри другого процесса. Я пробовал заменить эту цепь assign'ом с условным оператором с записью Z-состояния, второй вариант с использованием force, release внутри процесса. Оба варианта все равно ничего не дают.

прикладываю FSM на верилоге. Похоже симуляция зацикливается в процессах COMBtoggleFSM и combFSMmain при стейте STprogrampage. Там кое-что уже закомментарено, это результаты моих экспериментов smile.gif.

Нажмите для просмотра прикрепленного файла
DmitryR
Цитата(demonizer @ Jun 2 2010, 11:47) *
А это как раз то что мне нужно, так как я не представляю как по другому сделать скоростной DMA доступ к флеш памяти, минуя копирование данных во внутренний буфер.

Никак, правда, но не SRAM же интерфейс делать к буферу? В этих случаях используют FIFO, причем естественно раздельные на чтение и на запись.

Цитата(demonizer @ Jun 2 2010, 11:47) *
Перевел код на Verilog

Зачем?
demonizer
Цитата(DmitryR @ Jun 2 2010, 14:33) *
Никак, правда, но не SRAM же интерфейс делать к буферу? В этих случаях используют FIFO, причем естественно раздельные на чтение и на запись.


Зачем?



Я предполагал такой ответ. Может с FIFO будет лучше. Но мне SRAM интерфейс несколько удобней использовать.

Перевел на верилог для того чтобы было удобно дорабатывать, я пока еще не особо разбираюсь в VHDL. DmitryR, в чем может быть причина таких проблем?

DmitriyR, можно ли как-то в ModelSim'е посмотреть параметр из списка чувствительности, который вызвал исполнение always блока?
DmitryR
Цитата(demonizer @ Jun 2 2010, 15:19) *
Перевел на верилог для того чтобы было удобно дорабатывать, я пока еще не особо разбираюсь в VHDL. DmitryR, в чем может быть причина таких проблем?

В кривизне транслятора, конечно же.

Цитата(demonizer @ Jun 2 2010, 15:19) *
DmitriyR, можно ли как-то в ModelSim'е посмотреть параметр из списка чувствительности, который вызвал исполнение always блока?

Может и можно, но не нужно. Потому что в синтезе списки чувствительности не поддерживаются все равно, и если у вас дизайн зависим от списков чувствительности он в железе работать не будет.
demonizer
DmitryR, что же получается синтезатор из верилога не поддерживает такие конструкции как в VHDL? И в списке чувствительности возможны только два сигнала clk и reset?
DmitryR
Поддерживает, только трансляция из одного в другое является не столь тривиальной задачей, как это на первый взгляд кажется. Что же касается списков чувствительности - то да, с точки зрения синтеза туда кроме clk и reset ничего ставить не стоит. Другой вопрос что создание списков чувствительности может сильно ускорить моделирование, но зависеть логика дизайна от них не должна.
demonizer
Да уж. В таком случае перевести данный проект в Verilog очень проблематично, так как там сплошь и рядом используются асинхронные регистры и защелки.
DmitryR
Повторюсь, что бы там не использовалось - описать это не проблематично хоть на VHDL, хоть на Verilog. Проблема в автоматической трансляции. А также в том что сам контроллер кривоватый IMHO.
XVR
Цитата(DmitryR @ Jun 2 2010, 17:24) *
Поддерживает, только трансляция из одного в другое является не столь тривиальной задачей, как это на первый взгляд кажется. Что же касается списков чувствительности - то да, с точки зрения синтеза туда кроме clk и reset ничего ставить не стоит. Другой вопрос что создание списков чувствительности может сильно ускорить моделирование, но зависеть логика дизайна от них не должна.
Ой! В Verilog список чуствительности определяет (вместе с телом блока always) конкретную схему, которая получится в результате синтеза. Так что логика дизайна определенно зависит от списка чуствительности.
Пример -
Код
always @(posedge clk or posedge res)
if (res) D <= 1'b0;
else D <= in;

always @(posedge clk)
if (res) D <= 1'b0;
else D <= in;
Первый описавает D тригер с АСИНХРОННЫМ сбросом, второй - с СИНХРОННЫМ. Отличаются ТОЛЬКО списком чуствительности
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.