?

Log in

No account? Create an account
Форма для студенческого проекта - Юрий Панчул [entries|archive|friends|userinfo]
Money can buy bandwidth. Latency requires bribing God.

[ website | My Website ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Форма для студенческого проекта [Mar. 6th, 2015|09:24 pm]
Yuri Panchul
Как вы помните, я по субботам помогаю Тимуру Палташеву из графической группы AMD вести вводные курсы компьютерной архитектуры, верилога, ПЛИС-ов и т.д. в небольшом частном университете во Фримонте. Сделал вот такую форму для выбора студенческого проекта с FPGA. Чем бы ее дополнить? (Речь идет о начальных студентах)


Class
Student name
Project title
Project description
Project type
FPGA / peripheral interfacing
FPGA / MCU interfacing
Aruthmetic circuits
Soft processors and cache memories
Other
The choices for FPGA board
Digilent Cmod S6 Xilinx Spartan™-6 XC6SLX4-2CPG196 FPGA $69.00
Digilent Basys 2 Xilinx Spartan 3E FPGA, 100K gates $69.00
Digilent Basys 3 Entry level - Xilinx Artix-7 : XC7A35T-1COG236C $79.00
Digilent Nexys 4 Xilinx Artix-7 XC7A100T FPGA $179.00
Altera DE0-Nano Altera Cyclone IV $61.00
Altera DE0 Altera Cyclone III $81.00
Altera DE1 Altera Cyclone II $127.00
Altera DE2 Altera Cyclone II $284.00
Altera DE2-115 Altera Cyclone IV $309.00
Altera GX Starter Kit Altera Cyclone V GX Starter Kit $179.00
Other
The peripherals for FPGA / peripheral interfacing projects
PmodALS Ambient Light Sensor SPI $15.00
PmodCDC1 Capacitative I/O I2C $21.99
PmodCLS Character LCD w/ serial interface UART, SPI, TWI $39.00
PmodDPOT Digital Potentiometer SPI $21.59
PmodENC Rotary encoder $16.99
PmodJSTK Two axis joystick SPI $35.00
PmodKYPD 16-Button Keypad $26.99
PmodMAXSONAR Ultrasonic Range Finder UART, Pulse $36.00
PmodR2R Resistor Ladder D/A Converter $15.99
PmodTMP3 Temperature Sensor I2C $20.00
PmodUSBUART USB to UART Interface UART $21.59
Others
Optional: The auxiliary peripherals and miscellaneous items
Pmod8LD LEDs $15.99
PmodBB Wire wrap / bread board $21.99
PmodBTN Push buttons $15.99
PmodDIP DIP to Pmod Adapter $15.00
PmodLED High bright LEDs $15.00
PmodSSD Seven-segment display $15.99
PmodSWT Slide switches $15.00
Others
Optional: The recommended microcontroller board choice for MCU/FPGA interfacing projects
chipKIT Cmod™ Microchip® PIC32 32-bit MIPS processor (PIC32MX150F128D) $29.00
chipKIT™ Wi-FIRE Microchip® PIC32 MZ Processor (PIC32MZ2048ECG) $79.00
Others

LinkReply

Comments:
[User Picture]From: mutoids
2015-03-07 05:33 am (UTC)
А вы принципиально хотите, чтобы дополнительные модули использовались в виде готовых комплектов? И почему бы тогда не добавить к микроконтроллерным платам ардуино? Для подключения переферии самое оно, и от сути вопроса (fpga) отвлекаться не нужно будет.
(Reply) (Thread)
[User Picture]From: panchul
2015-03-07 06:32 am (UTC)
Я специально выбрал периферию так, чтобы ее было просто подключать прямо к FPGA.

Микроконтроллеры я хочу использовать не для подключения периферии, а для демонстрации, как например SPI master может быть в софтвере, а SPI slave в хардвере.

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

Почему не Ардуино? Ну во-первых, я работаю на MIPS. Во-вторых, платки с PIC32 ( на основе MIPS M4K и MIPS microAptiv UP) по производительности лучше ардуино. В-третьих, использовать ардуинную среду разработки для студентов я не хочу (как и ее клон для PIC32 - MPIDE), а профессиональная среда для AVR наврядли более user friendly, чем профессиональная среда для PIC32 - MPLAB X и Harmony.

Впрочем, если студенты сами принесут AVR-ное ардуино и воткнут в FPGA-йную плату, то я возражать не буду.
(Reply) (Parent) (Thread)
[User Picture]From: mutoids
2015-03-07 07:28 am (UTC)
использовать ардуинную среду разработки для студентов я не хочу
А почему? Т.е. для меня логично было бы, раз курс посвящен FPGA, все остальные части системы должны быть максимально прозрачны, и не требовать усилий на свое собственное освоение.
(Reply) (Parent) (Thread)
[User Picture]From: panchul
2015-03-07 07:46 am (UTC)
С моей точки зрения разница между ардуинной средой разработки и профессиональной с точки зрения простоты использования недостаточно велика, чтобы использовать ардуинную среду для студентов computer science и electrical engineering.

Я сделал пошаговую инструкцию для MPLAB X и я в упор не вижу никакой мудрости для элементарного использования - см.

http://panchul.com/2013/02/27/microchip_pic32_1/

http://panchul.com/2013/02/27/microchip_pic32_2/

Кроме этого, в Ардуинной среде имеется важный "непрозрачный" момент. Используемый в ней язык - это просто C++ c implicit header files, и интерфейс к периферии часто реализуется через библиотеку классов, которая скрывает memory-mapped регистры ввода-вывода микроконтроллера. Я же хочу, чтобы эти регистры были полностью видны.


В PIC32 с профессиональной средой тоже все очень прозрачно, вот например передача через интерфейс SPI:

char spi_put_get_char (char c)
{
SPI2BUF = c; // send data to slave
while (SPI2STATbits.SPIBUSY); // wait until SPI transmission complete
return SPI2BUF;
}



Edited at 2015-03-07 07:47 am (UTC)
(Reply) (Parent) (Thread)
[User Picture]From: mutoids
2015-03-07 07:59 am (UTC)
Это-то понятно. Просто в моем понимании, на этом этапе сокрытие деталей микроконтроллерной кухни это даже хорошо. Студент на каждом этапе сосредотачивается на определенной задаче, не погружаясь в дебри. И вообще, на микроконтроллерах учить нужно только на ассемблере. Без этого не понять красоту архитектуры.
(Reply) (Parent) (Thread)
[User Picture]From: mig_jag
2015-03-07 06:14 am (UTC)
Слишком сложно для начальных студентов.
(Reply) (Thread)
[User Picture]From: panchul
2015-03-07 06:37 am (UTC)
Ну а что, ограничивать студентов только плоскими миганиями лампочками? Интерфейс через SPI да и I2C к выбранным периферийным устройствам довольно простой, вот мой пример трансмиттера для SPI в цифровом потециометре:

module spi_transmitter
(
    input            clock,
    input            reset,

    input      [7:0] data,

    input            transmit,
    output reg       ready,

    output reg       sclk,
    output reg       sdi,
    output reg       cs
);

    localparam IDLE                = 0,
               DRIVE_POSEDGE_CLOCK = 1,
               DRIVE_DATA          = 2;

    reg       d_ready;
    reg       d_sclk;
    reg       d_sdi;
    reg       d_cs;

    reg [2:0] counter;
    reg [6:0] shift_reg;
    reg [1:0] state;

    reg [2:0] d_counter;
    reg [6:0] d_shift_reg;
    reg [1:0] d_state;

    always @*
    begin
        d_ready     = ready;
        d_sclk      = 0;
        d_sdi       = sdi;
        d_cs        = cs;

        d_counter   = counter;
        d_shift_reg = shift_reg;
        d_state     = state;
        
        case (state)

        IDLE:
        begin
            if (transmit)
            begin
                d_ready     = 0;
                d_sclk      = 0;
                d_sdi       = data [7];
                d_cs        = 0;

                d_counter   = 7;
                d_shift_reg = data [6:0];
                
                d_state     = DRIVE_POSEDGE_CLOCK;
            end
            else
            begin
                d_cs        = 1;
            end
        end

        DRIVE_POSEDGE_CLOCK:
        begin
            d_sclk    = 1;
            // d_sdi stays the same

            if (d_counter == 0)
            begin
                d_ready = 1;
                d_state = IDLE;
            end
            else
            begin
                d_state = DRIVE_DATA;
            end
        end

        DRIVE_DATA:
        begin
            d_sclk      = 0;
            d_sdi       = d_shift_reg [6];

            d_counter   = d_counter - 3'd1;
            d_shift_reg = d_shift_reg << 1;

            d_state     = DRIVE_POSEDGE_CLOCK;
        end
		  
        endcase
    end

    always @(posedge clock)
    begin
        if (reset)
        begin
            ready     <= 1;
            sclk      <= 0;
            sdi       <= 0;
            cs        <= 0;

            counter   <= 0;
            shift_reg <= 0;
            state     <= IDLE;
        end
        else
        begin
            ready     <= d_ready;
            sclk      <= d_sclk;
            sdi       <= d_sdi;
            cs        <= d_cs;
                                      
            counter   <= d_counter;
            shift_reg <= d_shift_reg;
            state     <= d_state;
        end
    end

endmodule
(Reply) (Parent) (Thread)
[User Picture]From: mig_jag
2015-03-08 06:14 am (UTC)
I2C будет посложнее
(Reply) (Parent) (Thread)
[User Picture]From: panchul
2015-03-08 06:17 am (UTC)
Да, но если мало регистров, то не принципиально. Хотя FSM будет существенно поболее, это да
(Reply) (Parent) (Thread)
[User Picture]From: mig_jag
2015-03-08 06:20 am (UTC)
И сколько времени возьмет начинающему студенту написать I2C модуль?
(Reply) (Parent) (Thread)
[User Picture]From: panchul
2015-03-08 06:25 am (UTC)
I2C там на самом деле только в двух модулях - остальные попроще. Я сделаю эксперимент - все-таки есть 35 студентов.
(Reply) (Parent) (Thread)
[User Picture]From: ammosov
2015-03-07 09:56 am (UTC)
Почему бумажная, а не электронная?
(Reply) (Thread)
[User Picture]From: panchul
2015-03-07 04:00 pm (UTC)
Ты хочешь, чтобы я дал 35 студентам ссылку на вебсайт для заполнения? Дык кто-нибудь забудет, перепутает или будет (если во время класса) спрашивать у меня дурацкие вопросы про вебсайт. По старинке для меня надежнее.

А как бы ты это делал?
(Reply) (Parent) (Thread)
[User Picture]From: ammosov
2015-03-07 04:01 pm (UTC)
Google form, surveymonkey, да как угодно.
(Reply) (Parent) (Thread)
[User Picture]From: panchul
2015-03-07 04:06 pm (UTC)
Я попробую в следущий раз
(Reply) (Parent) (Thread)