Дешевые FPGA платы для нужд школьных кружков и университетских курсов с большим количеством студентов

В образовательных проектах, в которых я участвую, мы несколько раз обсуждали перенос всех лаб и упражнений на максимально дешевые FPGA платы. Это особенно актуально для программ со школьниками, а также для университета Иннополис, в котором 210 студентов на курсе компьютерной архитектуры с элементами введения в HDL, RTL и FPGA — и всего 13 плат.

После исследования нескольких плат я остановился на комплекте, который выбрал на AliExpress Виктор Медведев:

https://ru.aliexpress.com/item/USB-Blaster-altera-fpga-board-altera-board-fpga-development-board-EP4CE6E22C8N-board-cyclone-IV-kit/32813061054.html

В комплект входит плата под названием ZEOWAA A-C4E6 и клон Altera USB-Blaster. На этой плате стоит Cyclone IV с 6K альтеровских ячеек, динамический 7-сегментный индикатор, 12 LED построенных в странной фигуре, 4 кнопки со странным расположением, 8 неудобных переключателя и зуммер, который работает не всегда надежно. Разумеется это хуже, чем Terasic DE10-Lite, но зато она стоит ZEOWAA $28.90, а Terasic DE10-Lite стоит $85 (академическая цена $55, но мне никто не продает по академической).

Хотя на плате ZEOWAA нельзя запустить MIPSfpga, но в нее точно должен влезать schoolMIPS и простые упражнения. Я сначала ошибочно считал, что клон USB Blaster в этом комплекте несовместим с последней верситей Quartus, но оказалось, что совместим — просто у разных версий USB Blaster разные названия кабелей, а я конфиругировал в command line c названием одной из версии.

Помимо ZEOWAA я исследовал и плату совсем без периферии EPM240 с Altera Max II, за $6.16. К ней требуется еще и USB Blaster за $2.65, а также доставка $1.95, иными словами выходит $11.02. Однако все, что может делать эта плата — это моргать одним светодиодом, для большего к ней нужно подключить внешние устройства. Кроме этого, в нее еле-еле влез текстовый пример, который для этого плишлось упростить, а в ZEOWAA этот пример занял всего 4% платы. Тем не менее, EPM240 наверное можно использовать для каких-нибудь хакатонов-олимпиад на смекалку «придумайте что-нибудь интересное с этой простой голой платой и куче сенсоров».

Тестовый пример находится на https://github.com/MIPSfpga/digital-design-lab-manual/tree/master/alt_boards.

В него входит:

1. Устранитель дребезга (button and switch debouncer), вариант Ильи Неганова.
2. Генератор strobes / enable, на основе счетчика — два применения.
3. Сдвиговый регистр.
4. Конечные автоматы Мура и Мили, для распознавания простой последовательности (из Harris & Harris).
5. Счетчики strobes и результатов работы конечных автоматов (4)
6. Драйвер динамического семисегментного индикатора.
7. Вырожденно тривиальная среда тестирования.

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

Оно все работает. Результаты синтеза:

Device : EP4CE6E22C8
Total logic elements : 267 / 6,272 ( 4 % )
Total combinational functions : 246 / 6,272 ( 4 % )
Dedicated logic registers : 216 / 6,272 ( 3 % )
Total registers : 216
Total pins : 42 / 92 ( 46 % )

Теперь к этому нужно подобрать зоопарк сенсоров. Какие будут рекомендации?

Вот список проектов, которые я предложил для студентов в Иннополисе:

A list of simple student projects to implement in Verilog on FPGA board. Each project gives you an extra credit for Computer Architecture course.

1. Implement a design that outputs a «snake» moving over multi-digit seven-segment display.

2. Implement the Conway’s Game of Life with output to LED matrix.

3. Design a circuit that divides by 3. See Hacker’s Delight https://www.silicon-russia.com/2018/02/05/hackers-delight-2ed/.

4. Design a circuit that calculates integer cube root. See Hacker’s Delight.

6. Calculating Cycle Redundancy Check (CRC) using Linear Feedback Shift Register (LFSR). See Hacker’s Delight.

7. Passcode recognition using state machine.

8. Stack calculator with reverse Polish notation that inputs from 16-key keyboard. See https://store.digilentinc.com/pmod-kypd-16-button-keypad/

9. Input from rotary encoder https://store.digilentinc.com/pmod-enc-rotary-encoder/.

10. Input from 3-axis Accelerometer on DE10-Lite board.

11. Output interesting picture to VGA. The interface is on DE10-Lite board.

12. Input from SPI joystick https://store.digilentinc.com/pmod-jstk2-two-axis-joystick/ . See the example of SPI module https://github.com/yuri-panchul/2017-tomsk-novosibirsk-astana/tree/master/parts_and_examples/pmod_als_spi_receiver

13. Output text from FPGA board to a console on PC using USB to UART serial console cable. See the example of UART receiver at https://github.com/yuri-panchul/2017-tomsk-novosibirsk-astana/tree/master/parts_and_examples/uart_receiver_from_mipsfpga

14. Generate music. See the example at https://github.com/yuri-panchul/2017-tomsk-novosibirsk-astana/blob/master/parts_and_examples/sound_pwm/top.v

A list of more complicated student projects. Each project gives you not only an extrac credit, but also a board as a bonus.

The conditions:

I am willing to donate my personal $1000 for Terasic DE10-Lite boards (~$100 each including shipping) in exchange for student projects. I am interested in the following types of projects:

1. Integrating MIPSfpga with a peripheral device or a memory controller. Examples of such projects:

https://habrahabr.ru/post/329808/
https://habrahabr.ru/post/316770/
https://habrahabr.ru/post/325168/
https://habrahabr.ru/post/323360/
https://habrahabr.ru/post/329854/
https://habrahabr.ru/post/329852/
https://habrahabr.ru/post/321530/
https://habrahabr.ru/post/321532/

2. Adding instructions to MIPSfpga using CorExtend/UDI interface for creating coprocessors. These coprocessors can implement the arithmetic of intervals, fast interconnect of the mesh of cores etc. The examples:

https://habrahabr.ru/post/276205/
http://zatslogic.blogspot.com/2016/01/using-mips-microaptiv-up-processor.html

3. Extending schoolMIPS core – for example adding load-store unit with data memory to it, making schoolMIPS pipelined, adding interrupts to it.

4. A detailed lab describing a creative way of designing arithmetic unit – some optimized multipliers, special-case dividers, pipelined operation etc. Should use Verilog “generate” contract, be scalable, the report should include the chart of max frequency versus area versus number width.

5. Some classic block from computer architecture – CDC 6600 scoreboard, Tomasulo unit, a very simple cache design, MESI protocl. It should demonstrate how it works with minimum amount of code.

Each project should be published with detailed explanation on http://habrahabr.ru website (it gets many hits). Each article should include the steps to reproduce, a link to github with the source code, Fmax and area measurements, and justification why it is important to know.

Thank you,
Yuri Panchul