?

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 ]

Как я провел воскресенье [Aug. 4th, 2014|07:54 am]
Yuri Panchul
[Tags|]

Смастерил примерчик для вводного курса по микроконтроллерам и FPGA и проинструктировал как использовать Microchip MPLAB X и Xilinx ISE профессоршу из Казахстана, которая гостит в Калифорнии:

Сходил со старшим сыном в зоопарк (не в Сан-Франциско, а в Окленде):

В зоопарке интересные парковые розы

Потом пошли в ресторан. На первое сьел жареные устрицы:

на второе сьел равиоли с артишоками и крабами. одновременно читал интернет с дискуссиями, был ли Голодомор на Украине геноцидом:

На обратном пути попал в пробку и увидел, как везли вот такую машину:

Poll #1977685 mobile-poll

Был ли Голодомор геноцидом?

Отфренживаю
2(3.2%)
Голодомора не было
3(4.8%)
Голод в СССР в 1931-32 годах был не только в Украине, но в Поволжье, поэтому называть его геноцидом русских против украинцев нельзя
51(81.0%)
Голодомор придумал Ющенко, чтобы Бандеру и Шухевича наградить
7(11.1%)
Из-за бугра плюете?
0(0.0%)

Приложение: код примерчика на Верилоге: Зеленая плата - Digilent Cmod S6 с Xilinx Spartan-6 FPGA (xc6slx4, package cpg196, speed -2)

module clock_divider
(
    input        clock,
    input        reset,
    output       clock_for_debouncing,
    output       clock_for_display
);

    reg [19:0] counter;

    always @(posedge clock)
    begin
        if (reset)
            counter <= 0;
        else
            counter <= counter + 1;
    end

    // clock is 8 MHz
    // clock_for_debouncing is 8 MHz / 2 ** (16 + 1) ~ 61 Hz
    // clock_for_display    is 8 MHz / 2 ** (12 + 1) ~ 977 Hz

    assign clock_for_debouncing = counter [16];
    assign clock_for_display    = counter [12];

endmodule

module debouncer
(
    input      clock,
    input      clock_for_debouncing,
    input      reset,
    input      button,
    output reg push
);

    reg [2:0] samples;

    always @(posedge clock_for_debouncing)
    begin
        if (reset)
            samples <= 0;
        else
            samples <= { samples [1:0], button };
    end

    wire current = & samples;
    reg  previous;

    always @(posedge clock)
    begin
        if (reset)
        begin
            previous <= 0;
            push     <= 0;
        end
        else
        begin
            previous <= current;
            push     <= { previous, current } == 2'b01;
        end
    end

endmodule

module display
(
    input             clock,
    input             reset,
    input      [15:0] number,
    output reg [ 6:0] seven_segments,
    output reg [ 3:0] cathodes
);

    function [6:0] bcd_to_seg (input [3:0] bcd);

        case (bcd)
        'h0: bcd_to_seg = 'b0111111;  // g f e d c b a
        'h1: bcd_to_seg = 'b0000110;
        'h2: bcd_to_seg = 'b1011011;  //   --a--
        'h3: bcd_to_seg = 'b1001111;  //  |     |
        'h4: bcd_to_seg = 'b1100110;  //  f     b
        'h5: bcd_to_seg = 'b1101101;  //  |     |
        'h6: bcd_to_seg = 'b1111101;  //   --g--
        'h7: bcd_to_seg = 'b0000111;  //  |     |
        'h8: bcd_to_seg = 'b1111111;  //  e     c
        'h9: bcd_to_seg = 'b1100111;  //  |     |
        'ha: bcd_to_seg = 'b1110111;  //   --d-- 
        'hb: bcd_to_seg = 'b1111100;
        'hc: bcd_to_seg = 'b0111001;
        'hd: bcd_to_seg = 'b1011110;
        'he: bcd_to_seg = 'b1111001;
        'hf: bcd_to_seg = 'b1110001;
        endcase

    endfunction

    reg [1:0] i;

    always @(posedge clock or posedge reset)
    begin
        if (reset)
        begin
            i <= 0;

            seven_segments <= bcd_to_seg (0);
            cathodes       <= 'b0000;
        end
        else
        begin
            seven_segments <= bcd_to_seg (number [i * 4 +: 4]);
            cathodes       <= ~ (1 << i);

            i <= i + 1;
        end
    end

endmodule

module raw_and_debounced
(
    input        CLK,         // FPGA_GCLK, 8MHz
    input        CLK_LFC,     // FPGA_LFC, 1 Hz

    output       LED_0,
    output       LED_1,
    output       LED_2,
    output       LED_3,

    input        BTN_0,
    input        BTN_1,

    // DEPP interface

    // input        DEPP_ASTB,   // Address strobe
    // input        DEPP_DSTB,   // Data strobe
    // input        DEPP_WRITE,  // Write enable (write operation = 0, read operation = 1)
    // output       DEPP_WAIT,   // Ready 
    // inout  [7:0] DBUS,

    // General purpose I/O

    output [7:0] PORTA,
    output [7:0] PORTB,
    output [6:0] PORTC,
    output [7:0] PORTD,
    input  [7:0] PORTE,
    output [6:0] PORTF
);

    assign PORTB = 'hff;
    assign PORTC = 'h7f;
    assign PORTD = 'hff;
    
    wire clock = CLK;
    wire reset = BTN_0;

    wire clock_for_debouncing;
    wire clock_for_display;

    clock_divider clock_divider
    (
        .clock                 ( clock                ),
        .reset                 ( reset                ),
        .clock_for_debouncing  ( clock_for_debouncing ),
        .clock_for_display     ( clock_for_display    )
    );

    wire raw_button                = ~ PORTE [7];
    wire pre_debounced_button      = ~ PORTE [6];
    wire posedge_debounced_button;

    wire on_board_button = ~ BTN_1;

    debouncer debouncer
    (
        .clock                 ( clock                    ),
        .clock_for_debouncing  ( clock_for_debouncing     ),
        .reset                 ( reset                    ),
        .button                ( pre_debounced_button     ),
        .push                  ( posedge_debounced_button )
    );

    reg   [15:0] number;
    wire  [ 6:0] seven_segments;
    wire  [ 3:0] cathodes;

    display display
    (
        .clock           ( clock_for_display ),
        .reset           ( reset             ),
        .number          ( number            ),
        .seven_segments  ( seven_segments    ),
        .cathodes        ( cathodes          )
    );

    // g f e d c b a
    
    //   --a--
    //  |     |
    //  f     b
    //  |     |
    //   --g--
    //  |     |
    //  e     c
    //  |     |
    //   --d-- 
		  
    assign PORTA [0] = seven_segments [4]; // E  1
    assign PORTA [1] = seven_segments [3]; // D  2
    assign PORTA [2] = 0;                  // .  3
    assign PORTA [3] = seven_segments [2]; // C  4
    assign PORTA [4] = seven_segments [6]; // G  5
    assign PORTA [5] = seven_segments [1]; // B  7
    assign PORTA [6] = seven_segments [5]; // F 10
    assign PORTA [7] = seven_segments [0]; // A 11

    assign PORTF = { 4'b1111, cathodes };

    assign LED_0 = 0; // raw_button;
    assign LED_1 = 0; // pre_debounced_button;
    assign LED_2 = 0;
    assign LED_3 = 0;

    reg prev_raw_button;

    always @(posedge CLK)
    begin
        if (reset)
            prev_raw_button <= 0;
        else
            prev_raw_button <= raw_button;
    end
	 
    wire posedge_raw_button = ~ prev_raw_button & raw_button;

    always @(posedge CLK)
    begin
        if (reset)
            number = 0;
        else if (posedge_raw_button | posedge_debounced_button)
            number = number + 1;
    end

endmodule

# cmods6.ucf

#FPGA_GCLK
NET "CLK" LOC = "N8" | IOSTANDARD = LVCMOS33;

#CLK_LFC
NET "CLK_LFC" LOC = "N7" | IOSTANDARD = LVCMOS33;

#BTNs
NET "BTN_0" LOC = "P8" | IOSTANDARD = LVCMOS33;
NET "BTN_1" LOC = "P9" | IOSTANDARD = LVCMOS33;

#LEDs
NET "LED_0" LOC = "N3" | IOSTANDARD = LVCMOS33;
NET "LED_1" LOC = "P3" | IOSTANDARD = LVCMOS33;
NET "LED_2" LOC = "N4" | IOSTANDARD = LVCMOS33;
NET "LED_3" LOC = "P4" | IOSTANDARD = LVCMOS33;

#DEPP Signals
#NET "DEPP_WAIT" LOC = "B6" | IOSTANDARD = LVCMOS33;
#NET "DEPP_ASTB" LOC = "A6" | IOSTANDARD = LVCMOS33;
#NET "DEPP_DSTB" LOC = "B7" | IOSTANDARD = LVCMOS33;
#NET "DEPP_WRITE" LOC = "A7" | IOSTANDARD = LVCMOS33;
#NET "DBUS<0>" LOC = "B9" | IOSTANDARD = LVCMOS33;
#NET "DBUS<1>" LOC = "A9" | IOSTANDARD = LVCMOS33;
#NET "DBUS<2>" LOC = "B10" | IOSTANDARD = LVCMOS33;
#NET "DBUS<3>" LOC = "A10" | IOSTANDARD = LVCMOS33;
#NET "DBUS<4>" LOC = "B11" | IOSTANDARD = LVCMOS33;
#NET "DBUS<5>" LOC = "A11" | IOSTANDARD = LVCMOS33;
#NET "DBUS<6>" LOC = "B12" | IOSTANDARD = LVCMOS33;
#NET "DBUS<7>" LOC = "A12" | IOSTANDARD = LVCMOS33;

#IO PORTs

#A
NET "PORTA<0>" LOC = "P5" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTA<1>" LOC = "N5" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTA<2>" LOC = "N6" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTA<3>" LOC = "P7" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTA<4>" LOC = "P12" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTA<5>" LOC = "N12" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTA<6>" LOC = "L14" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTA<7>" LOC = "L13" | IOSTANDARD = LVCMOS33 | PULLUP;

#B
NET "PORTB<0>" LOC = "K14" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTB<1>" LOC = "K13" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTB<2>" LOC = "J14" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTB<3>" LOC = "J13" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTB<4>" LOC = "H14" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTB<5>" LOC = "H13" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTB<6>" LOC = "F14" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTB<7>" LOC = "F13" | IOSTANDARD = LVCMOS33 | PULLUP;

#C
NET "PORTC<0>" LOC = "G14" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTC<1>" LOC = "G13" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTC<2>" LOC = "E14" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTC<3>" LOC = "E13" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTC<4>" LOC = "D14" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTC<5>" LOC = "D13" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTC<6>" LOC = "C13" | IOSTANDARD = LVCMOS33 | PULLUP;

#D
NET "PORTD<0>" LOC = "A3" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTD<1>" LOC = "B3" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTD<2>" LOC = "A2" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTD<3>" LOC = "B1" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTD<4>" LOC = "C1" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTD<5>" LOC = "D1" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTD<6>" LOC = "D2" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTD<7>" LOC = "E1" | IOSTANDARD = LVCMOS33 | PULLUP;

#E
NET "PORTE<0>" LOC = "E2" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTE<1>" LOC = "F1" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTE<2>" LOC = "F2" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTE<3>" LOC = "H1" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTE<4>" LOC = "H2" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTE<5>" LOC = "G1" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTE<6>" LOC = "G2" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTE<7>" LOC = "J1" | IOSTANDARD = LVCMOS33 | PULLUP;

#F
NET "PORTF<0>" LOC = "J2" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTF<1>" LOC = "K1" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTF<2>" LOC = "K2" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTF<3>" LOC = "L1" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTF<4>" LOC = "L2" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTF<5>" LOC = "M1" | IOSTANDARD = LVCMOS33 | PULLUP;
NET "PORTF<6>" LOC = "M2" | IOSTANDARD = LVCMOS33 | PULLUP;
LinkReply

Comments:
[User Picture]From: husainov
2014-08-04 02:58 pm (UTC)
Является ли плевок из-за бугра геноцидом? :)
(Reply) (Thread)
[User Picture]From: panchul
2014-08-04 03:07 pm (UTC)
Конечно является. Мне написали уже минимум два или три комментария в ЖЖ и Фейсбуке, что мои посты с упоминаниями Украины стоят молодых жизней защитников Майдана.
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: georg_pik
2014-08-04 03:01 pm (UTC)
Интересно, сколько стоил этот обед?
(Reply) (Thread)
[User Picture]From: panchul
2014-08-04 03:05 pm (UTC)
$66.11 без чаевых, $77.11 с чаевыми
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: bankworm
2014-08-04 03:26 pm (UTC)
Ох уж эта любовь к языкам низкого уровня.
(Reply) (Thread)
[User Picture]From: mexa_nik
2014-08-04 03:30 pm (UTC)
Ну разве это низкого уровня код - сам-то чипа на ассемблере программируется.
(Reply) (Parent) (Thread) (Expand)
(Deleted comment)
[User Picture]From: panchul
2014-08-04 03:50 pm (UTC)
Голод был, причинно-следственная связь с раскулачиванием была, но это не было "москали против украинцев" имхо:



Edited at 2014-08-04 04:16 pm (UTC)
(Reply) (Parent) (Thread)
(Deleted comment)
[User Picture]From: sergegers1
2014-08-04 03:29 pm (UTC)
Верилог - гадог, гадок, гадок. Это напоминает драйверовых ребят. Когда вышел виндовый фрэймворк с новой парадигмой, я, хоть и не являюсь активным драйверописателем сказал себе, ну, наконец-то. Описание напоминало библиотеку ATL/WTL - но, когда я посмотрел на неё, это всё си-си-си. Даже без классов. Надоело.
(Reply) (Thread)
[User Picture]From: panchul
2014-08-04 03:38 pm (UTC)
Пока альтернативы верилогу и vhdlу нет. Да, я в курсе про 200 неуспешных проектов языков высокого уровня хардвера с high-level synthesis.
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: adilbek
2014-08-04 03:45 pm (UTC)
В Казахстане заблокирован жж.
(Reply) (Thread)
[User Picture]From: panchul
2014-08-04 03:47 pm (UTC)
Но небось все кому надо знают как это обойти?
А фейсбук не заблокирован?
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: alexey_zharikov
2014-08-04 06:11 pm (UTC)

Голодомор

Я читал несколько развёрнутых статей по поводу голода 30-х годов на Украине. Там всё достаточно запутано. Во-первых, мировые СМИ активно пиарили это событие с использованием фотографий голода в Поволжье 20-х годов, а не реальных материалов с Украины 30-х годов. Во вторых, есть обоснованная версия (выпускника Физтеха с фамилией Покровский, на несколько лет нас старше, он уже умер), что во время так называемого "Голодомора" 33 года люди умирали не столько от голода, сколько от отравления спорыньёй. Уж больно описываемые симптомы сходятся. А еды было по крайней мере не меньше, чем в блокадном Ленинграде.

То есть, собственно, гуманитарная катастрофа в 33 году на Украине, несомненно, имела место. Но вот в её причинах и ответственности за неё надо подробно разбираться, там не всё так просто.
(Reply) (Thread)
[User Picture]From: red_army_1917
2014-08-04 08:21 pm (UTC)

голодоморы в дореволюционной России

"голодоморы" были весьма распространенным явлением в дореволюционной России.

«После голода 1891 г., охватывающего громадный район в 29 губерний, нижнее Поволжье постоянно страдает от голода: в течение XXв. Самарская губерния голодала 8 раз, Саратовская 9. За последние тридцать лет наиболее крупные голодовки относятся к 1880 г. (Нижнее Поволжье, часть приозерных и новороссийских губерний) и к 1885 г. (Новороссия и часть нечернозёмных губерний от Калуги до Пскова); затем вслед за голодом 1891 г. наступил голод 1892 г. в центральных и юго-восточных губерниях, голодовки 1897 и 98 гг. приблизительно в том же районе; в XXв. голод 1901 г. в 17 губерниях центра, юга и востока, голодовка 1905 г. (22 губернии, в том числе четыре нечернозёмных, Псковская, Новгородская, Витебская, Костромская), открывающая собой целый ряд голодовок: 1906, 1907, 1908 и 1911 гг. (по преимуществу восточные, центральные губернии, Новороссия
Новый энциклопедический словарь / Под общ. ред. акад. К.К.Арсеньева. Т.14. СПб.: Ф.А.Брокгауз и И.А.Ефрон, 1913. Стб.41.

19 век:


Орды голодающих пытаются спастись в городах

Толпы голодающих из деревни добрались до Петербурга. Около ночлежки.

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



Урядник с казаками въезжают в деревню в поисках спрятанного крестьянином зерна.




В голодающую деревню введены войска. Крестьянка на коленях умоляет урядника не отнимать последнее.

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


Раздача кукурузы голодающим

В. Г. Короленко "В голодный год": «... на печке сидит мальчик, опухший от голода, с желтым лицом и сознательными, грустными глазами. В избе -- чистый хлеб от увеличенной ссуды (улика в глазах недавно еще господствовавшей системы), но теперь, для поправления истощенного организма, уже недостаточно одного, хотя бы и чистого хлеба.»



Изба голодающиего крестьянина


Голодомор в дореволюционной России. Крыши разобраны чтобы соломой кормить скотину.

«Волна переселенческого движения быстро растет с приближением весны. Челябинским переселенческим управлением зарегистрировано за февраль 20 000 ходоков, большинство из голодающих губерний. Среди переселенцев распространены сыпной тиф, оспа, дифтерит. Медицинская помощь недостаточна. Столовых от Пензы до Манчжурии только шесть».Газета «Русское слово» от 30 (17) марта 1907 года


Голод в Сибири. Фотогр. снимки с натуры, сделанные в Омске 21 июля 1911 года членом Гос. Думы Дзюбинским.
(Reply) (Thread)
[User Picture]From: red_army_1917
2014-08-04 08:22 pm (UTC)

Re: голодоморы в дореволюционной России


главнокомандующий русской армии генерал В.Гурко о призывах с 1871 по 1901 г.сообщает:

40% крестьянских парней впервые в жизни пробовали мясо в армии.

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

Смертность по всем шести основным инфекционным болезням (оспа, корь, скарлатина, дифтерия, коклюш, тиф)
1. Россия – 527,7 чел.
2. Венгрия – 200,6 чел.
3. Австрия – 152,4 чел.

по Нефедову "О причинах Русской революции":

Французы потребляли в 1,6 раз больше зерна, чем русские крестьяне. И это в климате, где растет виноград и пальмы.

Мяса русский крестьянин потреблял в 2 раза меньше, чем в Дании и в 7-8 раз меньше, чем во Франции. Молока русский крестьян выпивал в 2,5 раза меньше, чем датчанин и в 1,3 раза меньше, чем француз.

Яйиц русский крестьянин съедал в аж 2,7г в день, в то время датский крестьянин – 30 г, а французский - 70,2 г в день.

С. Ю. Витте 1899 год «Если сравнивать потребление у нас и в Европе, то средний размер его на душу составит в России четвертую или пятую часть того, что в других странах признается необходимым для обычного существования»

«В конце XIXвека в России до 5-летнего возраста доживало всего 550 из 1000 родившихся детей, тогда как в большинстве западноевропейских стран — более 700.Перед Революцией ситуация несколько улучшилась – умирало «всего лишь» 400 детей из 1000.»
Прохоров Б.Б. Здоровье россиян за 100 лет

(Reply) (Parent) (Thread)
[User Picture]From: con_vertor
2014-08-05 02:45 am (UTC)
а я был на рок-концерте в Маунтин-Вью (в амфитеатре)
(Reply) (Thread)
From: korolev_dweller
2014-08-12 02:48 pm (UTC)
В принципе аж 3 ответа - второй, третий и четвёртый, - отчасти правильны, но в то же время не совсем правильны.

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

Было желание выжать много хлеба, не считаясь с возможными жертвами, причём когда выяснилось, что жертв СЛИШКОМ много, пошли на попятную - началось снабжение голодающих регионов хлебом.

Ну а нынешние политические камлания вокруг "Голодомора", который непременно хотят объявить геноцидом, да ещё и по этническому признаку (!!!), - часть той же политико-пропагандистской кампании, что и героизация Бандеры с Шухевичем, да.
(Reply) (Thread)