Первое знакомство с ПЛИС.
Nov. 9th, 2008 03:13 amПЛИС (программируемая логическая интегральная схема) - это самое лучше, что могли изобрести на логике. Лучше всего про плис скажут на ВИКИПЕДИИ . Итак, ещё на прошлом СС я прзнакомился с культовой личностью - со SVO, который тогда сделал игру Понг на ПЛИС Тогда я ему намекнул, что хотел бы их изучать, но тогда так и не дошли руки. Год спустя, на этом СС SVO, как справедливо заметил
f_andrey в коментах, сделал ещё эмулятор компьютера "Вектор-06Ц" http://code.google.com/p/vector06cc/. В этот раз я уже более конкретно сказал, что мне нехватает хорошего учителя, и мы уже более плотно обменялись контактами, и он мне прислал платку:
Подробнее про платку можно поглядеть на официальном сайте: http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=39&No=215 (там и фотка лучшего качества). У платки есть только один недостаток - количество перепрошивок ограничено 100 (!!!!!) штуками. Это ОоооооооООооочень мало!!! (Даже я, который мало программирует, умудрился израсходовать ресурс EEPROM за день отладки, с 1000 циклами перезаписи!). В общем, сегодня интерактивно, по скайпу обучался программированию ПЛИС! В результате написали на VHDL простейший бегущий огонь:
Видео бегущего огонька
module new_very_log (CLOCK_50, KEY, LED);
input CLOCK_50;
input [3:0] KEY;
output reg [7:0] LED; //регистр светодиодов
reg [24:0] divctr; //регистр счётчик на 24 бит
wire reset_n = KEY[0];
wire led_ce = divctr[23:0] == 0;// Принимает значение истина, в остальное время ложь
always @(posedge CLOCK_50) begin
divctr <= divctr + 1'b1;
end
always @(posedge CLOCK_50) begin
if (~reset_n)
LED <= 'b1;
else
if (led_ce) LED <= {LED[0], LED[7:1]};//Крутим битик, циклически по кругу.
end
endmodule
Изящно, неправда ли? На асме было бы значительно больше.
Самый смак ПЛИС, который вводит меня в благовенный трепет, и полностью рушит мозг у обычных программистов, это то, что всё исполняется ОДНОВРЕМЕННО!!!! Вот где максимальный реализм, и многопоточность обработки данных. А вы говорите много ядер, контроллеры с большей частотой. ПЛИС спасёт мир :).
З.Ы. Ютуб тупорылая овца, гугл видео - быстро и просто. Перелил.
Подробнее про платку можно поглядеть на официальном сайте: http://www.terasic.com.tw/cgi-bin/page/archive.pl?Language=English&CategoryNo=39&No=215 (там и фотка лучшего качества). У платки есть только один недостаток - количество перепрошивок ограничено 100 (!!!!!) штуками. Это ОоооооооООооочень мало!!! (Даже я, который мало программирует, умудрился израсходовать ресурс EEPROM за день отладки, с 1000 циклами перезаписи!). В общем, сегодня интерактивно, по скайпу обучался программированию ПЛИС! В результате написали на VHDL простейший бегущий огонь:
Видео бегущего огонька
module new_very_log (CLOCK_50, KEY, LED);
input CLOCK_50;
input [3:0] KEY;
output reg [7:0] LED; //регистр светодиодов
reg [24:0] divctr; //регистр счётчик на 24 бит
wire reset_n = KEY[0];
wire led_ce = divctr[23:0] == 0;// Принимает значение истина, в остальное время ложь
always @(posedge CLOCK_50) begin
divctr <= divctr + 1'b1;
end
always @(posedge CLOCK_50) begin
if (~reset_n)
LED <= 'b1;
else
if (led_ce) LED <= {LED[0], LED[7:1]};//Крутим битик, циклически по кругу.
end
endmodule
Изящно, неправда ли? На асме было бы значительно больше.
Самый смак ПЛИС, который вводит меня в благовенный трепет, и полностью рушит мозг у обычных программистов, это то, что всё исполняется ОДНОВРЕМЕННО!!!! Вот где максимальный реализм, и многопоточность обработки данных. А вы говорите много ядер, контроллеры с большей частотой. ПЛИС спасёт мир :).
З.Ы. Ютуб тупорылая овца, гугл видео - быстро и просто. Перелил.

no subject
Date: 2008-11-09 01:14 am (UTC)как же ты на ЦЦ просмотрел вот это чудо http://code.google.com/p/vector06cc/
а по поводу ресурса ну есть же наверное эмуляторы, зачем же железо так мучать.
no subject
Date: 2008-11-09 01:21 am (UTC)no subject
Date: 2008-11-09 01:21 am (UTC)no subject
Date: 2008-11-09 01:31 am (UTC)no subject
Date: 2008-11-09 01:39 am (UTC)no subject
Date: 2008-11-09 06:02 am (UTC)А ПЛИС - штука очень клёвая, да. У меня есть давняя затея сделать на каком-нибудь Xilinx'е процессор Alpha EV7z =)
no subject
Date: 2008-11-09 08:39 am (UTC)но это еще не взрыв мозга
взрыв мозга это когда одну и ту же функцию можно описать разными стилями программирования, причем в одном случае все будет и моделироваться и синтезироваться, а в другом случае будет моделироваться но не будет синтезироваться -)
no subject
Date: 2008-11-09 08:58 am (UTC)no subject
Date: 2008-11-09 08:58 am (UTC)no subject
Date: 2008-11-09 09:02 am (UTC)no subject
Date: 2008-11-09 09:24 am (UTC)no subject
Date: 2008-11-09 09:27 am (UTC)Кстати, когда я работал в НИЦЭВТ, в соседней группе на сотнях ПЛИСин эмулировали какую-то хитровыебанную самостоятельно разработанную сеть. Так что если захочешь поработать в данном направлении - могу скинуть телевончик ;)
no subject
Date: 2008-11-09 09:31 am (UTC)no subject
Date: 2008-11-09 09:34 am (UTC)no subject
Date: 2008-11-09 09:45 am (UTC)no subject
Date: 2008-11-09 11:00 am (UTC)и хочется просто взять три шины (две на вход и одну на выход) и прицепить к ним двухвходовые однобитные сумматоры в цикле, чтобы 256 раз не копировать одну и ту же HDL-конструкцию. Получится коротенький красивый HDL-код. Однако соберет ли в итоге синтезатор на плис 256 параллельный сумматор на базе этого кода? -)
no subject
Date: 2008-11-09 11:23 am (UTC)no subject
Date: 2008-11-09 11:50 am (UTC)no subject
Date: 2008-12-07 11:26 am (UTC)А я тоже некоторое время назад пытался изучать ПЛИС, сам, но проблема была что не нашел достаточно интересной и при этом доступной платы..
В результате пришел к выводу, что надо-бы сделать новую плату на ПЛИС и сейчас вижу 2 варианта:
1. На плате с FPGA (у которой прошивка не в флеше а в SRAM), будет однокристалка и SD слот, и однокристалка будет загружать прошивку в FPGA из файла на SD.
2. На плате с FPGA встроенный интерфейс byteblaster, аналогично на однокристалке и батарейка чтобы держать SRAM даже после отключения от компа.
Да, вероятно, эти две идеи можно объединить в одну (взять, например, софтверный avrusb) и плюс добавить компрессию прошивок.
- Должно получиться просто и недорого.
З.Ы. Ютуб, по-моему давненько принадлежит гуглу :)
no subject
Date: 2008-12-07 12:56 pm (UTC)Да, но гугловские ролики и ютубовские имеюти разный код обработки, и как показывает практика, гугл менее глючен.
no subject
Date: 2008-12-07 04:52 pm (UTC)СРАМ это хорошо, я если честно сразу не думал цеплять оную, но если легкодоступная и недорогая, лишней не будет явно.
Полных аналогов я не видел - обычно никто не ставит на одной плате FPGA и простой микроконтроллер, потому что FPGA сама может замечательно выполнять функции микроконтроллера, конечно когда загружена прошивка, и получается избыточно, а платы с более мощными процессорами, уровня ARM, просто в принципе сложно сделать дешевыми, и плюс, то есть минус, маленький нюанс, что микроконтроллер загружает программу в FPGA довольно медленно - где-то встречал цифру порядка 2 секунды на чуть больше мегабита самого младшего циклона-2.
Мне нравится идея с заливкой прошивки с помощью микроконтроллера, тем что это дешевле специальных флешей для прошивок и при этом универсальнее, например в микроконтроллерах есть АЦП, таймеры, вачдоги и на нем можно реализовать много полезного, не занимая ресурс FPGA.
Да, естественно, есть прошивки и библиотеки для микроконтроллеров, реализующие работу с SD, также есть реализации JTAG интерфейса и byteblaster, но чтобы все в одном устройстве - не встречал.
Готовую плату брать не хотелось-бы, поскольку моя идея именно посмотреть чего есть сейчас на рынке и попытаться скомпилировать как можно доступнее, плюс хотелось-бы чтобы можно было изготовлять плату по технологии ЛУТ, чтобы могло присоединиться больше желающих.