LINUX.ORG.RU

FPGA


1

1

Пришла ко мне долгожданная ПЛИС Altera и китайский USB Blaster к ней. Теперь собственно вопрос: в какую сторону копать?

Во-первых, каким софтом под Linux её лучше прошивать? Программатор определяется lsusb так:

Bus 002 Device 025: ID 09fb:6001 Altera Blaster

Во-вторых, каким компилятором пользоваться.

В-третьих, проясните один вопрос - как у ПЛИС с циклами перезаписи? Нормально, как у AVR (10000+ циклов), отлично как у PIC (100000+ циклов) или плохо (несколько сотен, пока не видел таких чипов)?

★★★★★

Последнее исправление: KivApple (всего исправлений: 1)

Ответ на: комментарий от ebantrop

у FPGA логическая ячейка маленькая и тупая, зато их МНОГО и очень развит интерконнект. у CPLD основная единица - макроячейка, она гораздо больше FPGA-шной ячейки, но их мало, также как и соединений между ними. за счет этого FPGA гибче, т.е. на ней эффективнее реализуются сложные схемы. CPLD, соответственно, лучше подходит для простых схем, но они постепенно отмирают. к слову, «чистых» FPGA сейчас тоже в природе нет, их вытеснили «гибридные»

registrant ★★★★★
()
Последнее исправление: registrant (всего исправлений: 1)
Ответ на: комментарий от ebantrop

Ну а для простого смертного не вдаваясь в детали реализации в чем разница?

Разница в способе задания логической функции. В FPGA применяется LUT (Lookup Table), которая по сути представляет из себя ОЗУ, в которую записываются значения выходов для всех комбинаций входов (входы - адрес, выходы - данные).

В CPLD применялась программируемая матрица логики - это набор логических элементов ИЛИ и И, между которыми осуществляется программируемая коммутация. Для задания требуемой функции нужно вписать ее в набор имеющихся логических элементов, что не всегда получается. Зато занимает меньше места, чем lut.

Потому, кстати, в CPLD можно было применять флэш для конфигурации, потому что там флэш не участвует в вычислении логической функции, а только включает/выключает коммутацию (причем один раз, при программировании).

Puzan ★★★★★
()
Последнее исправление: Puzan (всего исправлений: 1)
Ответ на: комментарий от Puzan

Интересно. Спасибо за разъяснения.

А потом смешались кони и люди, и разница осталась только в названии.

Вот у меня в точности такое же ощущение, что сейчас CPLDой именуют то же самое FPGA, только маленькое простое и флешовое.

ebantrop
()
Ответ на: комментарий от registrant

Прикольно. Никогда о нутрях даже не задумывался. Почитал немного на досуге. Спасибо.

CPLD, соответственно, лучше подходит для простых схем, но они постепенно отмирают.

Ну я их (максы) для простого и использую. Чтоб питание подал и поехал. Места мало занимают, кушают тоже скромно.

ebantrop
()
Ответ на: комментарий от ebantrop

Не, ну ты тупой. Там подробно объясняется разница между логическими блоками fpga и cpld.

anonymous
()
Ответ на: комментарий от ebantrop

Ну я их (максы) для простого и использую

посмотри в сторону дешевых lattice. это вполне себе FPGA (в современном понимании, т.е. гибриды) нижнего ценового диапазона в микрокорпусах. в лоукосте они сейчас всех заруливают - столько счастья за копейки. вот, например: http://www.latticesemi.com/MachXO3

registrant ★★★★★
()

Скоро будут деньги, присмотрел такую плату: http://ru.aliexpress.com/item/CoreEP4CE10-EP4CE10F17C8N-EP4CE10-ALTERA-Cyclon...

Подойдёт для экспериментов, китайцы ничего не забыли нужного поставить (flash-память вроде есть для конфигурации FPGA)?

cast mv Eddy_Em ebantrop

KivApple ★★★★★
() автор топика
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от KivApple

альтера циклон iv cpld и fpga развития основных доска с полным io расширители

Зачетное описалово у них на сайте. Я бы им свои 50 баксов нипочем бы не отдал. А по делу что ты в итоге хочешь сделать? Зачем тебе это «fpga развития основных доска» конкретно нужна?

Если в образовательных целях экономный вариант я бы посмотрел что цепляют к raspberry. Если не жалко денег, то есть клевые вещи на zynq, там и два яйца цпу и fpga нифиговый и еще куча всякого есть, например такое.

ebantrop
()
Ответ на: комментарий от KivApple

После редактирования сообщения "кастование" не работает, меджу прочим.

Но я таки нифига не понял, зачем тебе такие дорогущие игрушки.

// P.S. С праздником!

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от ebantrop

Ну описание это автоматический перевод торговой площадки. Там есть кнопочка «показать оригинал», в оригинале звучит лучше.

Зачем мне FPGA? Ну для начала хочу изучить на практике устройство процессоров написав типа своего микроконтроллера. Заодно в процессе этого я многое узнаю о различных интерфейсах. Время у меня пока есть, не очень дорогую плату купить я могу, а образовательный эффект по-любому будет.

Хочу минимальную плату по двум причинам:

1) Она стоит дешевле. Следовательно я смогу купить плату с более жирной ПЛИС вместо покупки менее жирной, зато с FT232 и всякими индикаторами-светодиодами. И если последнее я на штырьки сам навесить смогу (опыт подключения разнообразной самодельной переферии к МК есть), то если не хватит ресурсов ПЛИС, то только новую плату покупать, а это уже дороговато для меня может быть. А поскольку опыта у меня нет, то лучше купить самую крутую ПЛИС, которую я могу себе позволить.

2) Мне приятнее по максимуму обвязку и окружение задавать самому. Правильно это или нет, но FPGA я учу just for fun пока что (у меня специальность инженерная, но FPGA мы вряд ли проходить будем), то почему я не могу сделать так как мне больше нравится? Да и в конце концов мало ли, что я подключить захочу. Может я захочу повесить DDR-память от компа (не самую новую, конечно же) и с ней поработать, заняв 90% ножек ПЛИС? А на плате уже ножки будут намертво разведены.

Так что я сейчас ищу минимальную плату с максимальной ПЛИС не дороже 1.5к (моя степендия). Закажу 25-ого числа, а пока хочу решить все вопросы, чтобы не пролететь как сейчас, когда я заказал CPLD.

Насколько я понимаю, ПЛИС помимо её самой нужен понижающий стабилизатор (ибо питать я буду от 5 вольт USB), микросхема Flash памяти, тактовый генератор и разъём JTAG. На вышеуказанной плате всё это есть. Однако, меня немного волнует, что разъём JTAG один. На некоторых платах я видел два. Насколько я понимаю, один служит для прошивки ПЛИС, а второй для прошивки долговременной памяти конфигурации (могу ошибаться, поправьте). А тут он один. Это нормально?

KivApple ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

Я хочу сделать свой процессор. Можешь сказать «не нужно», однако это в любом случае полезнее, чем то, чем занимаются 90% остальных студентов моего ВУЗа.

KivApple ★★★★★
() автор топика
Ответ на: комментарий от KivApple

Можешь сказать «не нужно»

Не скажу. Нужно. Только невозможно. ПЛИСка не позволяет выполнять разнообразные задачи. Она заточена под однообразие, зато шустрое.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от KivApple

Я хочу сделать свой процессор.

И на фига тебе один процессор без всего? А если делать полноценную SoC, то FPGA нужна уже более-менее жирная. Посмотри на требования к orpsocv2.

anonymous
()
Ответ на: комментарий от Eddy_Em

Если ПЛИС достаточно жирная, то у неё достаточно логических блоков, чтобы на них организовать дешифратор команд, регистры, конвееры выполнения... Не зря на OpenCores есть готовые ядра ARM и даже какого-то 486 (последнее сугубо в образовательных целях, потому что на практике не особо нужно). И вообще проекты часто содержат RISC-ядро, а на оставшихся в ПЛИС блоках, уже реализуется конкретная задача (а ядро управляет этим вычислителем, обеспечивая более удобный интерфейс). На некоторые особо крутые RISC-ядра даже можно запустить Linux.

KivApple ★★★★★
() автор топика
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от anonymous

Ну да, тогда скорее SoC. Процессору нужны интерфейсы взаимодействия с окружающим миром :-)

KivApple ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Возможно, когда-нибудь я так и сделаю. Но с учётом отсутствия у меня опыта пайки SMD меньше SOIC для микросхем и 1206 для всего остального, я не хочу рисковать жизнью микросхемы за несколько сотен рублей. Пока заказал для тренировки десяток копеечных atmega8 в tqfp, потом буду повышать сложность постепенно.

А ПЛИС хочется учить уже сейчас, так что для начала возьму плату, где она уже распаяна.

KivApple ★★★★★
() автор топика
Ответ на: комментарий от KivApple

На некоторые особо крутые RISC-ядра даже можно запустить Linux.

Для Linux никакой крутизны даром не надо. Он даже на крошечном MicroBlaze пойдет (uclinux без MMU, естественно).

or1200 с MMU тоже довольно маленький и тащит полноценный linux. Влезает запросто в дешевенький Spartan6-LX45 вместе с полноценным Soc (vga, uart, ethernet, ddr контроллер).

anonymous
()
Ответ на: комментарий от Eddy_Em

Зачем в ПЛИС делают RISC-ядра?

Допустим, ПЛИС что-то считает. Или обрабатывает сигнал по заданным параметрам, а не константному алгоритму. Или алгоритм может менять свои параметры сам по ходу выполнения. Реазлизация такого универсального алгоритма на чистой логике займёт слишком много места и будет слишком сложной. В таком случае можно вместе с ПЛИС поставить обычный МК, который бы ею управлял - забирал данные, задавал параметры вычисления... Но это лишняя микросхема. А так можно ядро управления запихнуть тоже в ПЛИС. И выводить данные сразу куда надо.

KivApple ★★★★★
() автор топика
Ответ на: комментарий от KivApple

or1200 без кэшей, деления и умножения должен поместиться. Может еще и контроллер ddr и uart влезет, но не уверен, надо посмотреть будет. «Официальная» борда orpsoc как раз на Cyclone IV: http://www.orsoc.se/?page_id=449

anonymous
()
Ответ на: комментарий от Eddy_Em

Описание процессора на ПЛИС мало чем должно отличаться от хардварного процессора. Но вот спроектировать и заказать производство обычного процессора вряд ли представляется возможным (заказывать новую партию при каждом изменении исходника, ага), а FPGA можно перепрошивать много раз. А потом уже как получится. Если что-то годное, можно и попытаться «в железе сделать», были бы деньги...

KivApple ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Если есть свободное время, можешь ещё кое-что подсказать? Проверить код пока не могу, но хотелось бы понять понимаю ли я вообще Verilog или нет. Сделал вот такую вот реализацию UART: http://pastebin.com/hT5LJcs5. Квартус синтезирует (то есть банальных ошибок синтаксиса нет), icarus verilog эмулирует вроде как надо (насколько я понимаю UART). Если что uart_clock - удвоенная частота передачи.

KivApple ★★★★★
() автор топика
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от KivApple

Прикольно. Могу пожелать тебе только всяческих успехов в этом начинании. Я тебе ссылку на дигилент давал выше, так там есть схема и описание. Если паять умеешь у них описано как на коленке VGA можно зафигачить просто на логических сигналах, если я правильно понял. Можешь сделать микроконтроллер с дисплеем, правда не уверен что у той плисины памяти на видеобуффер хватит. Но на текстовый терминал с символогенератором (или как оно там называется) должно.

DDR на такой костыль как у этой платы не посадишь. Нужны дифлинии с согласованием. Вообще дело хозяйское, но я бы может поискал бы плату где плис уже с обвязкой какой-никакой.

Для питания обычно есть отдельная микросхема которая из пяти вольт делает все что этому плису надо на ядро и ввод-вывод.

Есть такая штука как JTAG chain, на которую можно сажать много устройств. Не знаю как конкретно у той и у этой плат сделано. Надо читать описание.

ebantrop
()
Ответ на: комментарий от KivApple

На вскидку, смешиваешь blocking и non-blocking assignments в одном always, это плохо, quartus может и сожрет, а может и нет. По логике вроде все ок.

anonymous
()
Ответ на: комментарий от Eddy_Em

У тебя в устройстве может быть одна или несколько задач, требующих огромной вычислительной мощности, и куча мелких сервисных задач, достаточно сложных, но медленных, редковыполняемых и многочисленных. Вот чем под сервисные задачи писать кучу конечных автоматов (расходующих к тому же под медленную фигню ценную быструю логику), можно взять один процессор и написать к нему код на Си, который он будет из внешней памяти исполнять по мере надобности.

prischeyadro ★★★☆☆
()
Ответ на: комментарий от prischeyadro

Да мне и самому уже интересно взять, да использовать либо какой-нибудь миникомпьютер (тут недавно что-то с мощным GPU от nvidia анонсировали), либо даже плисину для того, чтобы уменьшить количество компьютеров при работе с приборами.

А то у нас сейчас ужас какое нагромождение: минимум 2 компьютера ставится в стакан. Один компьютер под мастдайкой — для работы с ПЗС, другой (под операционной системой или игровой прошивкой — смотря кто разрабатывал) — для управления и автогидирования. А ведь современное железо позволяет вообще ни одного компьютера не ставить! Тупо по сети всем этим делом управлять. Для ногодрыга вообще хватит микроконтроллера с ethernet, а вот для обработки видеосигнала (автогид) нужно что-то посерьезней, тут бы плисина или миникомпьютер с GPU были бы в самый раз!

Правда, уж очень у нас народ инертный. Тут от атмелей никак не отучишь, куда уж современные-то средства?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от KivApple

UART: http://pastebin.com/hT5LJcs5.

Строки 37, 38 замени = на <=. 39 ненужно сравнивать весь байт, достаточно старшего бита. Курбит не ресетиться. Data лучше сделать на сдвиговом регистре, а не через селектор. В idle стейте done <= 0. Для FSM состояние можно просто задать через integer, компайлер сам сообразит котировку и ширину. Юзай parameter, а не define, хотя тут наверное дело вкуса.

ebantrop
()
Ответ на: комментарий от KivApple

PS: и самое главное либо привязывай фронт uartclk к clk, либо делай состояние где ждешь uartclk == 0. Это нужно ежели у тебя clk на 100 МГц, а уарт на 10 КГц?

ebantrop
()
Ответ на: комментарий от ebantrop

Если заменить строки 37, 38, то получится, что мы одновременно увеличиваем cur_bit на единицу и обращаемся к нему как индексу. В icarus verilog это приводит к глюкам, что cur_bit может сначала увеличиться, а потом уже произойти обращение, хз, что будет на реальном железе.

Весь байт я сравниваю, потому что потом собираюсь добавить возможность изменения длинны посылки (от 5 до 9 бит, а не только 8). Обязательно ли ресетить cur_bit, если я в любом случае его сброшу по ходу работы конечного автомата (я не могу попасть в UART_RX_DATA, читающего cur_bit, пока не попаду в UART_RX_START)?

Со сдвиговыми регистрами я пока не разобрался.

KivApple ★★★★★
() автор топика
Ответ на: комментарий от ebantrop

Ну пока uartclk получается путём деления clk.

KivApple ★★★★★
() автор топика
Ответ на: комментарий от KivApple

Если заменить строки 37, 38, то получится, что мы одновременно увеличиваем cur_bit на единицу и обращаемся к нему как индексу.

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

У тебя схема синхронная, поэтому ты меняешь по posedge clk, а скажем так «использоваться» это будет только на следующем клоке. Так что никакого противоречия тут нет.

Весь байт я сравниваю, потому что потом собираюсь добавить возможность изменения длинны посылки...

Тут ты можешь просто инициализировать курбит не нулем, а чем то другим что бы сравнивать только один бит. Это просто для скорости и экономии ресурсов. 1 компаратор это же меньше восьми :) Посмотри rtl схематику, если в квартусе это можно.

Shift register это очень простая и быстрая штука.

Ну пока uartclk получается путём деления clk.

И что? Значит у тебя на один uartclk придется много clk'ов и автомат у тебя будет работать пока uartclk в единице висит.

ebantrop
()
Ответ на: комментарий от ebantrop

И что? Значит у тебя на один uartclk придется много clk'ов и автомат у тебя будет работать пока uartclk в единице висит.

Да, я столкнулся с такой проблемой. Решил изменением кода делителя, что uartclk = 1 лишь один такт clk (то есть uartclk равен 1, если counter == 0, во всех остальных случаях, пока counter стремится к нулю он равен 0). Твоё решение более изящное, вероятно, перейду на него.

Тут ты можешь просто инициализировать курбит не нулем, а чем то другим что бы сравнивать только один бит. Это просто для скорости и экономии ресурсов. 1 компаратор это же меньше восьми :) Посмотри rtl схематику, если в квартусе это можно.

Да, думаю стоит так сделать, ты прав. Спасибо.

Shift register это очень простая и быстрая штука.

Я знаю их в реальности, а вот в Verilog пока не разобрался как использовать. Но планирую разобраться.

У тебя схема синхронная, поэтому ты меняешь по posedge clk, а скажем так «использоваться» это будет только на следующем клоке. Так что никакого противоречия тут нет.

Пока у меня код такой:

a[i] = b;
i = i + 1;

Это исполняется за один такт. Как следствие, если исполнять асинхронно, то может получиться a = b, а может a[i + 1] = b, как повезёт. Обгонит вторая команда первую или нет.

KivApple ★★★★★
() автор топика
Ответ на: комментарий от anonymous

не-не-не - только не дигилент. Обвеса-то много, но все через свой хитрый кабель, который пол платы стоит. Весь обвес будет дороже платы раза в два стоить (надо точно считать).

С другой стороны - можно усб для передачи данных использовать, мне понравилось.

Rubbiroid
()
Ответ на: комментарий от Deleted

Есть какой-то способ связи с тобой? Я бы тоже попилил процессор, как время освободится.

Лисповый!

mv ★★★★★
()
Ответ на: комментарий от Eddy_Em

Да не, я не про это, а про то, зачем эмулировать процессор на плисине? Просто интереса ради?

Не эмулировать, а свой написать. Пусть даже простейший, но свой. Чтобы знать, как оно работает.

mv ★★★★★
()
Ответ на: комментарий от KivApple

Это исполняется за один такт. Как следствие, если исполнять асинхронно, то может получиться a = b, а может a[i + 1] = b, как повезёт. Обгонит вторая команда первую или нет.

Да никто никого не обгоняет. Вот смотри, если у тебя нет клока, подумай что значит i + 1? Эта строка сделает логическое устройство которое на входе имеет i, а на выходе i + 1. А конструкция i = i + 1 запихнет выход на вход. То есть у тебя получается счетчик, который работает со скоростью задержек на carry chain (не знаю как эта хрень по-русски зовется) устройства i + 1. И чему у тебя будет равно i, в реальности сказать невозможно из-за разных задержек на каждый бит. Бред короче. Ну или еще проще: i = ~i сделает генератор на мегагерц эдак 500, если скажем задержка на вентиль около двух нан.

А в синхронной схеме гармония и благодать i <= i + 1, просто будет увеличивать значение регистра i на единицу с каждым клоком.

ebantrop
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.