рейтинг блогов

Я тоже силиконовый крымчанин

топ 100 блогов panchul28.03.2015 Господа! На днях Председатель Совета Федерации Валентина Матвиенко (наверняка посовещавшись с Натальей Поклонской) предложила создать в Крыму Силиконовую Долину:


Я тоже силиконовый крымчанин

Я тоже силиконовый крымчанин


Я не мог остаться к этому равнодушен. Помимо того, что я более 20 лет являюсь обитателем и работником калифорнийской Silicon Valley, я еще и был в Крыму (я - слева, а справа мой младший брат):


Я тоже силиконовый крымчанин


Кроме этого, я читал книгу "Остров Крым" и кроме этого Крым недавно посещала великая ЖЖ-блоггерша Наталья ... нет, не Поклонская, ... Наталья Радулова:


Я тоже силиконовый крымчанин


Не буду вас томить. Чтобы помочь Крыму по части силикона, я зарегистрировал вебсайт:

silicon-crimea.com




на который буду выкладывать разного рода заметки и учебные материалы для того, чтобы приобщить широкие массы крымчан и гостей Крыма к схемотехнике, языкам описания аппаратуры, программируемым пользователем вентильным матрицам, разработке систем на кристалле, системам автоматизации проектирования электронных устройств, встроенным микропроцессорам, микроконтроллерам, полупроводниковому производству и экономике электронного бизнеса.

Замечу, что крымчане, с их ограниченными ресурсами, могут довольно просто переиграть как минимум Министерство Образования Украины. В мой визит в Киев в 2012 году я изучил, какие учебники МинОбр Украины рекомендует для изучения электроники и ... Короче, я не хочу никого обижать, но в учебниках МинОбра Украины просто не представлены многие базовые мейнстримные технологии последних 25 лет, включая использование языков описания аппаратуры для разработки цифровых схем на уровне регистровых обменов, микроархитектуру конвейерных процессоров и другие вещи, которые там должны были быть минимум с начала 1990-х.

Но переиграть Киев - это не достижение. Реально крымчане должны вписаться в мировой рынок, работать с компаниями из Калифорнии, Японии, Южной Кореи, Великобритании, российского Зеленограда, Шанхая, Тайваня и т.д. Конечно, сейчас есть всякие санкции, но когда-нибудь их снимут, и до этого в Крыму должно сформироваться сообщество инженеров с навыками в разнообразных silicon-овых технологиях.

Мой сегодняшний пост на silicon-crimea.com - это примерчик, который я приготовил в рамках моей помощи Тимуру Палташеву из AMD учить 35 индийских и китайских студентов в небольшом университете во Fremont, California:

http://www.silicon-crimea.com/2015/03/28/verilog-and-fpga-intro-project-example/

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

Задание: Разработать схему, которая вводит нажатия на клавишу в сдвиговый регистр с сигналом разрешения, выводит текущее состояние сдвигового регистра на группу светодиодов в двоичном представлении, а также на статический многоразрядный семисегментный индикатор, показывающий текущее состояние сдвигового регистра в шестнадцатеричном представлении. Реализовать схему на плате Terasic DE2-115 с ПЛИС Altera Cyclone IV E. В качестве примеров для разработки схемы можно использовать шаблон верхнего модуля от Terasic, пример драйвера одноразрядного семисегментного индикатора для платы Digilent Basys 3 с ПЛИС Xilinx Artix-7, и пример иллюстрирующий сдвиговый регистр без сигнала разрешения, с выводом текущего состояния на светодиоды в двоичном представлении, также реализованный на плате Basys 3.


HTML для печати - http://www.silicon-crimea.com/student_projects/2015_03_27_intro_project_example

An example introductory project: Implement a design of a shift register with enable signal. The design should input a single bit from a key and put in into the shift register. The current state and the output of the shift register should be displayed on LEDs in binary representation. In addition, the current state of the shift register should be displayed on static multi-digit seven-segment display in hexadecimal form. The design should be implemented using Terasic DE2-115 board with Altera Cyclone IV E FPGA. As a base for the project a student can use the top module template from Terasic; the example of a seven-segment display driver for Digilent Basys 3 board with Xilinx Artix-7 FPGA; and the example illustrating a shift register (without enable signal), that outputs the current state of the shift register on LEDs in binary representation, also implemented for Basys 3 board.



//--------------------------------------------------------------------
//--------------------------------------------------------------------
//--------------------------------------------------------------------


The reference materials:


//--------------------------------------------------------------------
//--------------------------------------------------------------------
//--------------------------------------------------------------------


Top module from Terasic Altera DE2-115 template:


module de2_115_user
(
    input         CLOCK_50,
    input  [ 3:0] KEY,
    input  [17:0] SW,
    output [ 8:0] LEDG,
    output [17:0] LEDR,
    output [ 6:0] HEX0,
    output [ 6:0] HEX1,
    output [ 6:0] HEX2,
    output [ 6:0] HEX3,
    output [ 6:0] HEX4,
    output [ 6:0] HEX5,
    output [ 6:0] HEX6,
    output [ 6:0] HEX7
);

    assign LEDG [3:0] = KEY;
    assign LEDG [4]   = KEY [0] & KEY [1];
    assign LEDG [5]   = KEY [0] | KEY [1];
    assign LEDG [6]   = KEY [0] ^ KEY [1];
    assign LEDG [7]   = ~ KEY [0];
    assign LEDG [8]   = ~ KEY [1];

    assign LEDR = SW;

    assign HEX0 = 7'h0;
    assign HEX1 = 7'h7f;
    assign HEX2 = 7'h0;
    assign HEX3 = 7'h7f;
    assign HEX4 = 7'h0;
    assign HEX5 = 7'h7f;
    assign HEX6 = 7'h0;
    assign HEX7 = 7'h7f;

endmodule


//--------------------------------------------------------------------


// Combinational driver for single-digit display


module single_digit_display
(
    input      [3:0] digit,
    input            single_digit,
    input            show_dot,

    output reg [6:0] seven_segments,
    output           dot,
    output     [3:0] anodes
);

    always @*
        case (digit)
        'h0: seven_segments = 'b1000000;  // a b c d e f g
        'h1: seven_segments = 'b1111001;
        'h2: seven_segments = 'b0100100;  //   --a--
        'h3: seven_segments = 'b0110000;  //  |     |
        'h4: seven_segments = 'b0011001;  //  f     b
        'h5: seven_segments = 'b0010010;  //  |     |
        'h6: seven_segments = 'b0000010;  //   --g--
        'h7: seven_segments = 'b1111000;  //  |     |
        'h8: seven_segments = 'b0000000;  //  e     c
        'h9: seven_segments = 'b0011000;  //  |     |
        'ha: seven_segments = 'b0001000;  //   --d-- 
        'hb: seven_segments = 'b0000011;
        'hc: seven_segments = 'b1000110;
        'hd: seven_segments = 'b0100001;
        'he: seven_segments = 'b0000110;
        'hf: seven_segments = 'b0001110;
        endcase

    assign dot    = ~ show_dot;
    assign anodes = single_digit ? 4'b1110 : 4'b0000;

endmodule


//--------------------------------------------------------------------


// Basys3 project that instantiates
// combinational driver for single-digit display


module basys3
(
    input         clk,

    input         btnC,
    input         btnU,
    input         btnL,
    input         btnR,
    input         btnD,

    input  [15:0] sw,

    output [15:0] led,

    output [ 6:0] seg,
    output        dp,
    output [ 3:0] an
);

    single_digit_display single_digit_display
    (
        .digit           ( sw [3:0] ),
        .single_digit    ( sw [15]  ),
        .show_dot        ( sw [14]  ),

        .seven_segments  ( seg      ),
        .dot             ( dp       ),
        .anodes          ( an       )
    );

endmodule


//--------------------------------------------------------------------


// Clock divider for 100 MHz input clock:


module clock_divider_100_MHz_to_1_49_Hz
(
    input  clock_100_MHz,
    input  resetn,
    output clock_1_49_Hz
);

    // 100 MHz / 2 ** 26 = 1.49 Hz

    reg [25:0] counter;

    always @ (posedge clock_100_MHz)
    begin
        if (! resetn)
            counter <= 0;
        else
            counter <= counter + 1;
    end

    assign clock_1_49_Hz = counter [25];

endmodule


//--------------------------------------------------------------------


// Shift register (without enable)


module shift_register
(
    input             clock,
    input             resetn,
    input             in,
    output            out,
    output reg [15:0] data
);

    always @ (posedge clock or negedge resetn)
    begin
        if (! resetn)
            data <= 16'hABCD;
        else
            data <= { in, data [15:1] };
            // data <= (data >> 1) | (in << 15);
    end
    
    assign out = data [0];

endmodule


//--------------------------------------------------------------------


// Basys3 project that instantiates shift register


module basys3
(
    input         clk,

    input         btnC,
    input         btnU,
    input         btnL,
    input         btnR,
    input         btnD,

    input  [15:0] sw,

    output [15:0] led,

    output [ 6:0] seg,
    output        dp,
    output [ 3:0] an
);

    wire clock;
    wire resetn = ! btnU;

    clock_divider_100_MHz_to_1_49_Hz clock_divider
    (
        .clock_100_MHz (clk),
        .resetn        (resetn),
        .clock_1_49_Hz (clock)
    );

    wire out;

    shift_register shift_register
    (
        .clock      ( clock  ),
        .resetn     ( resetn ),
        .in         ( btnC   ),
        .out        ( out    ),
        .data       ( led    )
    );

    assign seg = out ? 7'b1111001 : 7'b1000000;
    assign dp  = 1'b1;
    assign an  = 4'b1110;

endmodule


//--------------------------------------------------------------------
//--------------------------------------------------------------------
//--------------------------------------------------------------------


The implementation report:


//--------------------------------------------------------------------
//--------------------------------------------------------------------
//--------------------------------------------------------------------


Top module:


module de2_115_user
(
    input         CLOCK_50,
    input  [ 3:0] KEY,
    input  [17:0] SW,
    output [ 8:0] LEDG,
    output [17:0] LEDR,
    output [ 6:0] HEX0,
    output [ 6:0] HEX1,
    output [ 6:0] HEX2,
    output [ 6:0] HEX3,
    output [ 6:0] HEX4,
    output [ 6:0] HEX5,
    output [ 6:0] HEX6,
    output [ 6:0] HEX7
);

    wire clock;
    wire resetn = KEY [3];

    clock_divider_50_MHz_to_1_49_Hz clock_divider_50_MHz_to_1_49_Hz
    (
        .clock_50_MHz  (CLOCK_50),
        .resetn        (resetn),
        .clock_1_49_Hz (clock)
    );

    shift_register_with_enable shift_register_with_enable
    (
        .clock      (   clock    ),
        .resetn     (   resetn   ),
        .in         ( ~ KEY  [2] ),
        .enable     (   KEY  [1] ),
        .out        (   LEDG [7] ),
        .data       (   LEDR     )
    );

    single_digit_display digit_0
    (
        .digit          ( LEDR [ 3: 0] ),
        .seven_segments ( HEX0         )
    );

    single_digit_display digit_1
    (
        .digit          ( LEDR [ 7: 4] ),
        .seven_segments ( HEX1         )
    );

    single_digit_display digit_2
    (
        .digit          ( LEDR [11: 8] ),
        .seven_segments ( HEX2         )
    );

    single_digit_display digit_3
    (
        .digit          ( LEDR [15:12] ),
        .seven_segments ( HEX3         )
    );

    single_digit_display digit_4
    (
        .digit          ( { 2'b0 , LEDR [17:16] } ),
        .seven_segments ( HEX4                    )
    );

    assign LEDG [7:1] = 7'b111_1111;
    assign HEX5       = 7'h7f;
    assign HEX6       = 7'h7f;
    assign HEX7       = 7'h7f;

endmodule


Top module instantiation in the wrapper provided by Terasic. Note unused ports: Я тоже силиконовый крымчанин


Top module de2_115_user RTL schematics: Я тоже силиконовый крымчанин


Clock divider has to be modified to accomodate 50 MHz input frequency instead of 100 MHz:


module clock_divider_50_MHz_to_1_49_Hz
(
    input  clock_50_MHz,
    input  resetn,
    output clock_1_49_Hz
);

    // 50 MHz / 2 ** 25 = 1.49 Hz

    reg [24:0] counter;

    always @ (posedge clock_50_MHz)
    begin
        if (! resetn)
            counter <= 0;
        else
            counter <= counter + 1;
    end

    assign clock_1_49_Hz = counter [24];

endmodule


Module clock_divider_50_MHz_to_1_49_Hz RTL schematics: Я тоже силиконовый крымчанин


Added enable signal to shift register, made it wider (18 bits) and changed its reset value for simplicity:


module shift_register_with_enable
(
    input             clock,
    input             resetn,
    input             in,
    input             enable,
    output            out,
    output reg [17:0] data
);

    always @ (posedge clock or negedge resetn)
    begin
        if (! resetn)
            data <= 18'b10_0000_0000_0000_0000;
        else if (enable)
            data <= { in, data [17:1] };
    end
    
    assign out = data [0];

endmodule


Module shift_register_with_enable RTL schematics: Я тоже силиконовый крымчанин


Module shift_register_with_enable post synthesis schematics: Я тоже силиконовый крымчанин


Module shift_register_with_enable post synthesis schematics - fragment: Я тоже силиконовый крымчанин


Terasic DE2-115 board uses static display, so we don't need a dynamic display.
We just instantiate several single digit displays. Moreover, this static
display does not have a dot, so we can remove unused signals.


module single_digit_display
(
    input      [3:0] digit,
    output reg [6:0] seven_segments
);

    always @*
        case (digit)
        'h0: seven_segments = 'b1000000;  // a b c d e f g
        'h1: seven_segments = 'b1111001;
        'h2: seven_segments = 'b0100100;  //   --a--
        'h3: seven_segments = 'b0110000;  //  |     |
        'h4: seven_segments = 'b0011001;  //  f     b
        'h5: seven_segments = 'b0010010;  //  |     |
        'h6: seven_segments = 'b0000010;  //   --g--
        'h7: seven_segments = 'b1111000;  //  |     |
        'h8: seven_segments = 'b0000000;  //  e     c
        'h9: seven_segments = 'b0011000;  //  |     |
        'ha: seven_segments = 'b0001000;  //   --d-- 
        'hb: seven_segments = 'b0000011;
        'hc: seven_segments = 'b1000110;
        'hd: seven_segments = 'b0100001;
        'he: seven_segments = 'b0000110;
        'hf: seven_segments = 'b0001110;
        endcase

endmodule


Module single_digit_display RTL schematics: Я тоже силиконовый крымчанин


Altera Quartus II screenshot with area report Я тоже силиконовый крымчанин

         
Altera Quartus II timing report - Fmax Я тоже силиконовый крымчанин


Altera Quartus II timing report - slack Я тоже силиконовый крымчанин


Board on reset Я тоже силиконовый крымчанин


Board after reset Я тоже силиконовый крымчанин


Entering input Я тоже силиконовый крымчанин


A new sequence started after entering input: Я тоже силиконовый крымчанин


Created by Yuri Panchul


View Poll: #2005693

Оставить комментарий

Посты по теме:

Новая газета

Крым и Новороссия: войны нет, перспектив — тоже
Новая газета
В Крым попасть несложно: едете по трассе Владивосток—Находка, в центре военно-морского города Фокино сворачиваете направо, по указателю с неожиданными словами «Крым» и «Дунай» (Дунай — маленький приморский Чернобыль, здесь в бухте Чажма в 1985-м произошел взрыв ...

и другие »

Новости Крыма

Фильм «Крым. Путь на Родину» понравился почти всем посмотревшим
Slon.ru - Редакция деловых новостей
Трети россиян (33%) понравился телефильм «Крым. Путь на Родину» с участием президента Владимира Путина, при том, что всего картину посмотрели 35% участников опроса, проведенного фондом «Общественное мнение» (ФОМ), результаты которого приводит «Коммерсантъ».
Более 60% россиян проигнорировали фильм "Крым. Путь на Родину", выяснили социологиNEWSru.com
Учитель ОБЖ лицея НГТУ показал на уроках фильм «Крым. Путь на Родину»НГС.НОВОСТИ
Фильм «Крым. Путь на Родину» понравился только трети россиянНовости Крыма
Информационное агенство Крым Медиа -Полит.ру -SoftСraze: актуально и обьективно
Все похожие статьи: 32 »

РБК

Крым остался без отеля Radisson из-за американских санкций
РБК
По словам исполнительного вице-президента по Восточной Европе группы Rezidor Илмаза Илдиримлара, решение об уходе компании из Крыма было вынужденным. «Мы искренне сожалеем, что из-за санкций Radisson вынужден покинуть гостеприимный город Алушту и гостиницу, ...
Rezidor покинула КрымКоммерсантъ
Radisson покидает гостеприимную Алушту из-за санкций, – управляющая компанияИнформационное агенство Крым Медиа
​Международный гостиничный оператор Carlson Rezidor вынужденно покинул КрымИнтернет-журнал про гостиницы ProHotel
РИА НОВОСТИ - Недвижимость -Обещания.Ru -РИА "Новый Регион"
Все похожие статьи: 47 »
Архив записей в блогах:
ФОТО с Выставки собак 22 февраля 2016 года в Ярославле По вопросам приобретения фотографий с выставки пишите в личку или на почту [email protected] Часть 6. Разноринговая: Лабрадор ретривер, Немецкая овчарка, Австралийская овчарка, Колли, Венгерская выжла, Ирландский сеттер, И ...
в эфире радио "Радонеж"! Прослушайте наши позывные: "Бох-бох-бо-бох, бобо-х-х-х"! Братья, веряне, сегодня мы поговорим с вами о наших почти православных друзьях, но не менее упоротых мозгом чем мы - о свидетелях Иеговы. (далее - СИ) Как все мы знаем, сегодня государственный ...
Не пойму никак: почему те, кто ревностно защищают церковно-славянский язык, ...
Я вот тут задумался, а с каких пор человек на полном серьезе может назвать себя блогером? Ну вот если он взял да и завел себе аккаунт в ЖЖ, то разве стал он сразу блогером? Нет же. Вот что должно произойти или какой параметр должен достичь некого ...
Сегодня, мои маленькие любители генетики, мы поговорим о таком пренеприятном явлении, как гомосексуализм. Нет, конечно, этот порок вполне приятен для многих из тех, кто ему подвержен. Однако я веду речь о нормальных людях, в большинстве своём люди ...
  • NaumBen : RT @xui_de: Кто смотрел «Крым. Возвращение на Родину» должен знать - это просто подделка. Немецкий оригинал | русские субтитры https://t.co…

  • kadannic_sergey : ... Градами" сепаратистів #новости #Украина #Крым #АТО #крым #Донбас ...

  • UkoPindos_UA : Крым — главный фактор поражения России в новой холодной войне http://t.co/afnm3qtGV1 http://t.co/1gfEOWLLh8

  • msss40077 : #серость #старость @ Крым, Орджоникидзе https://t.co/QHfXKAoFFv

  • bvnbei : Создается батальон КРЫМ. http://t.co/HRsV1C5PSK

  • YanovichAndrey : RT @Zapoponio: Крым Гурзуф март 2015 http://t.co/WJRCmeDn75

  • gritinzodist198 : RT @VitaliyBill: Украина - единый организм: Киев - душа Львов - мозг Днепропетровск - сердце Крым- аппендикс Донецк- жопа

  • a30227430 : RT @ThomasineAllen2: Авто для АТО / новости Украина Крым крым Донбас Донецк Луганск Киев

  • s1Bu6WBATQ8YUx : 7У Артура обзор двора дом с квартирами Судак Крым http://t.co/W1UVDQHELh

  • TheStorm76 : RT @ka1tmaz: @vinorick1 В Крым не ходят поезда, Вместо них пришли мзда и узда.

  • natasha18248 : RT @24crimea: Премьер-министра Греции пригласили в Крым Крымские греки пригласили премьер-министра Греции Алексиса Ципраса посетит http://…