Jump to content
    

Онлайновый tool для генерации CRC,Scrambler,LFSR Counter на Verilog/VHDL

Я сделал онлайновый tool который генерирует CRC,Scrambler,LFSR Counter на Verilog / VHDL:

 

OutputLogic.com

 

Пользуйтесь.

 

это хорошо, вешь безусловно полезная, но позвольте немного критики :

 

1. Онлайновые тулзы не удобны, сделали бы скрипты пусть на том же Python и выложили бы для людей

2. Ручками параметризуемый CRC, скремблер LFSR пишется не немного дольше чем пользоваться генератором и только один раз + пользоваться параметруземыми, с помошью языковых средств, корками удобнее, чем сгенерированными по месту %)

 

Удачи вам в вашем начинании !!!

Share this post


Link to post
Share on other sites

Я сделал онлайновый tool который генерирует CRC,Scrambler,LFSR Counter на Verilog / VHDL:

 

OutputLogic.com

 

Пользуйтесь.

 

Привествую.

Мне надо посчитать CRC-16-CCITT полином - x16 + x12 + x5 + 1:

 

Я руками все расчитал, но надо проверить. Вот что получилось:

    CRCreg[ 0] <= CRCreg[ 8] ^ CRCreg[12] ^ data[ 4] ^ data[ 0];                             
    CRCreg[ 1] <= CRCreg[ 9] ^ CRCreg[13] ^ data[ 5] ^ data[ 1];                             
    CRCreg[ 2] <= CRCreg[10] ^ CRCreg[14] ^ data[ 6] ^ data[ 2];                             
    CRCreg[ 3] <= CRCreg[11] ^ CRCreg[15] ^ data[ 7] ^ data[ 3];                             
    CRCreg[ 4] <= CRCreg[12] ^ data[ 4];                                             
    CRCreg[ 5] <= CRCreg[ 8] ^ CRCreg[12] ^ CRCreg[13] ^ data[ 5] ^ data[ 4] ^ data[ 0];             
    CRCreg[ 6] <= CRCreg[ 9] ^ CRCreg[13] ^ CRCreg[14] ^ data[ 6] ^ data[ 5] ^ data[ 1];             
    CRCreg[ 7] <= CRCreg[10] ^ CRCreg[14] ^ CRCreg[15] ^ data[ 7] ^ data[ 6] ^ data[ 2];             
    CRCreg[ 8] <= CRCreg[ 0] ^ CRCreg[11] ^ CRCreg[15] ^ data[ 7] ^ data[ 3];                     
    CRCreg[ 9] <= CRCreg[ 1] ^ CRCreg[12] ^ data[ 4];                                     
    CRCreg[10] <= CRCreg[ 2] ^ CRCreg[13] ^ data[ 5];                                     
    CRCreg[11] <= CRCreg[ 3] ^ CRCreg[14] ^ data[ 6];                                     
    CRCreg[12] <= CRCreg[ 4] ^ CRCreg[ 8] ^ CRCreg[12] ^ CRCreg[15] ^ data[ 7] ^ data[ 4] ^ data[ 0];     
    CRCreg[13] <= CRCreg[ 5] ^ CRCreg[ 9] ^ CRCreg[13] ^ data[ 5] ^ data[ 1];                     
    CRCreg[14] <= CRCreg[ 6] ^ CRCreg[10] ^ CRCreg[14] ^ data[ 6] ^ data[ 2];                     
    CRCreg[15] <= CRCreg[ 7] ^ CRCreg[11] ^ CRCreg[15] ^ data[ 7] ^ data[ 3];

 

Как проверить с помощью вашего online tool? Что-то не совпадает у меня, может я что-то не так делаю....

Share this post


Link to post
Share on other sites

Привествую.

Мне надо посчитать CRC-16-CCITT полином - x16 + x12 + x5 + 1:

 

Я руками все расчитал, но надо проверить. Вот что получилось:

    CRCreg[ 0] <= CRCreg[ 8] ^ CRCreg[12] ^ data[ 4] ^ data[ 0];                             
    CRCreg[ 1] <= CRCreg[ 9] ^ CRCreg[13] ^ data[ 5] ^ data[ 1];                             
    CRCreg[ 2] <= CRCreg[10] ^ CRCreg[14] ^ data[ 6] ^ data[ 2];                             
    CRCreg[ 3] <= CRCreg[11] ^ CRCreg[15] ^ data[ 7] ^ data[ 3];                             
    CRCreg[ 4] <= CRCreg[12] ^ data[ 4];                                             
    CRCreg[ 5] <= CRCreg[ 8] ^ CRCreg[12] ^ CRCreg[13] ^ data[ 5] ^ data[ 4] ^ data[ 0];             
    CRCreg[ 6] <= CRCreg[ 9] ^ CRCreg[13] ^ CRCreg[14] ^ data[ 6] ^ data[ 5] ^ data[ 1];             
    CRCreg[ 7] <= CRCreg[10] ^ CRCreg[14] ^ CRCreg[15] ^ data[ 7] ^ data[ 6] ^ data[ 2];             
    CRCreg[ 8] <= CRCreg[ 0] ^ CRCreg[11] ^ CRCreg[15] ^ data[ 7] ^ data[ 3];                     
    CRCreg[ 9] <= CRCreg[ 1] ^ CRCreg[12] ^ data[ 4];                                     
    CRCreg[10] <= CRCreg[ 2] ^ CRCreg[13] ^ data[ 5];                                     
    CRCreg[11] <= CRCreg[ 3] ^ CRCreg[14] ^ data[ 6];                                     
    CRCreg[12] <= CRCreg[ 4] ^ CRCreg[ 8] ^ CRCreg[12] ^ CRCreg[15] ^ data[ 7] ^ data[ 4] ^ data[ 0];     
    CRCreg[13] <= CRCreg[ 5] ^ CRCreg[ 9] ^ CRCreg[13] ^ data[ 5] ^ data[ 1];                     
    CRCreg[14] <= CRCreg[ 6] ^ CRCreg[10] ^ CRCreg[14] ^ data[ 6] ^ data[ 2];                     
    CRCreg[15] <= CRCreg[ 7] ^ CRCreg[11] ^ CRCreg[15] ^ data[ 7] ^ data[ 3];

 

Как проверить с помощью вашего online tool? Что-то не совпадает у меня, может я что-то не так делаю....

 

Нужно выбрать:

Data width =8

Polynomial width = 16

Отметить checkboxes = 1,5,12

Получается тоже самое:

    lfsr_c[0] = lfsr_q[8] ^ lfsr_q[12] ^ data_in[0] ^ data_in[4];
    lfsr_c[1] = lfsr_q[9] ^ lfsr_q[13] ^ data_in[1] ^ data_in[5];
    lfsr_c[2] = lfsr_q[10] ^ lfsr_q[14] ^ data_in[2] ^ data_in[6];
    lfsr_c[3] = lfsr_q[11] ^ lfsr_q[15] ^ data_in[3] ^ data_in[7];
    lfsr_c[4] = lfsr_q[12] ^ data_in[4];
    lfsr_c[5] = lfsr_q[8] ^ lfsr_q[12] ^ lfsr_q[13] ^ data_in[0] ^ data_in[4] ^ data_in[5];
    lfsr_c[6] = lfsr_q[9] ^ lfsr_q[13] ^ lfsr_q[14] ^ data_in[1] ^ data_in[5] ^ data_in[6];
    lfsr_c[7] = lfsr_q[10] ^ lfsr_q[14] ^ lfsr_q[15] ^ data_in[2] ^ data_in[6] ^ data_in[7];
    lfsr_c[8] = lfsr_q[0] ^ lfsr_q[11] ^ lfsr_q[15] ^ data_in[3] ^ data_in[7];
    lfsr_c[9] = lfsr_q[1] ^ lfsr_q[12] ^ data_in[4];
    lfsr_c[10] = lfsr_q[2] ^ lfsr_q[13] ^ data_in[5];
    lfsr_c[11] = lfsr_q[3] ^ lfsr_q[14] ^ data_in[6];
    lfsr_c[12] = lfsr_q[4] ^ lfsr_q[8] ^ lfsr_q[12] ^ lfsr_q[15] ^ data_in[0] ^ data_in[4] ^ data_in[7];
    lfsr_c[13] = lfsr_q[5] ^ lfsr_q[9] ^ lfsr_q[13] ^ data_in[1] ^ data_in[5];
    lfsr_c[14] = lfsr_q[6] ^ lfsr_q[10] ^ lfsr_q[14] ^ data_in[2] ^ data_in[6];
    lfsr_c[15] = lfsr_q[7] ^ lfsr_q[11] ^ lfsr_q[15] ^ data_in[3] ^ data_in[7];

Share this post


Link to post
Share on other sites

Нужно выбрать:

Data width =8

Polynomial width = 16

Отметить checkboxes = 1,5,12

Получается тоже самое:

    lfsr_c[0] = lfsr_q[8] ^ lfsr_q[12] ^ data_in[0] ^ data_in[4];
    lfsr_c[1] = lfsr_q[9] ^ lfsr_q[13] ^ data_in[1] ^ data_in[5];
    lfsr_c[2] = lfsr_q[10] ^ lfsr_q[14] ^ data_in[2] ^ data_in[6];
    lfsr_c[3] = lfsr_q[11] ^ lfsr_q[15] ^ data_in[3] ^ data_in[7];
    lfsr_c[4] = lfsr_q[12] ^ data_in[4];
    lfsr_c[5] = lfsr_q[8] ^ lfsr_q[12] ^ lfsr_q[13] ^ data_in[0] ^ data_in[4] ^ data_in[5];
    lfsr_c[6] = lfsr_q[9] ^ lfsr_q[13] ^ lfsr_q[14] ^ data_in[1] ^ data_in[5] ^ data_in[6];
    lfsr_c[7] = lfsr_q[10] ^ lfsr_q[14] ^ lfsr_q[15] ^ data_in[2] ^ data_in[6] ^ data_in[7];
    lfsr_c[8] = lfsr_q[0] ^ lfsr_q[11] ^ lfsr_q[15] ^ data_in[3] ^ data_in[7];
    lfsr_c[9] = lfsr_q[1] ^ lfsr_q[12] ^ data_in[4];
    lfsr_c[10] = lfsr_q[2] ^ lfsr_q[13] ^ data_in[5];
    lfsr_c[11] = lfsr_q[3] ^ lfsr_q[14] ^ data_in[6];
    lfsr_c[12] = lfsr_q[4] ^ lfsr_q[8] ^ lfsr_q[12] ^ lfsr_q[15] ^ data_in[0] ^ data_in[4] ^ data_in[7];
    lfsr_c[13] = lfsr_q[5] ^ lfsr_q[9] ^ lfsr_q[13] ^ data_in[1] ^ data_in[5];
    lfsr_c[14] = lfsr_q[6] ^ lfsr_q[10] ^ lfsr_q[14] ^ data_in[2] ^ data_in[6];
    lfsr_c[15] = lfsr_q[7] ^ lfsr_q[11] ^ lfsr_q[15] ^ data_in[3] ^ data_in[7];

отлично

Share this post


Link to post
Share on other sites

Мне надо посчитать CRC-16-CCITT полином - x16 + x12 + x5 + 1:

 

Я руками все расчитал, но надо проверить. Вот что получилось:

 

module sample #(parameter pW = 8) (input logic iclk, iena, init, logic [pW-1 : 0] idat, logic [15:0] crc);

  typedef logic   [15 : 0] uint16_t;
  typedef logic [pW-1 : 0] data_t;

  always_ff @(posedge iclk) begin
    if (iena) begin
      crc <= init ? crc16(16'h0, idat) : crc16(crc, idat);
    end
  end

  //
  // G(x) = x16 + x12 + x5 + 1:
  //
  function automatic uint16_t crc16x1 (input uint16_t crc, input logic d);
    logic msb;
  begin
    msb     = crc[15];
    crc16x1 = (crc << 1);

    crc16x1[0]  = d ^ msb;
    crc16x1[5]  = d ^ msb ^ crc[4];
    crc16x1[12] = d ^ msb ^ crc[11];
  end
  endfunction

  function automatic uint16_t crc16xW (input uint16_t crc, input data_t data);
    crc16xW = crc;
    for (int i = 0; i < $size(data); i++) begin
      crc16xW = crc16x1(crc16xW, data[$high(data)-i]);
    end
  endfunction

endmodule

 

и никакого хендсмейда, для любых входных векторов %) .

 

ЗЫ. это SV версия, в V версию приводиться за пару минут.

Share this post


Link to post
Share on other sites

это хорошо, вешь безусловно полезная, но позвольте немного критики :

 

1. Онлайновые тулзы не удобны, сделали бы скрипты пусть на том же Python и выложили бы для людей

2. Ручками параметризуемый CRC, скремблер LFSR пишется не немного дольше чем пользоваться генератором и только один раз + пользоваться параметруземыми, с помошью языковых средств, корками удобнее, чем сгенерированными по месту %)

 

Удачи вам в вашем начинании !!!

 

 

По работе мне нужно часто генерировать код для нестандартных CRC. Я долгое время пользовался програмкой на Veriloge. Затем написал скрипт на Perl, выложил на сервер и добавил JavaScript interface. В результате процесс генерации занимает нескоько секунд.

 

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

 

Код на C выложен здесь:

 

sourceforge.net/projects/crc-gen-verilog

sourceforge.net/projects/lfsr-counter

Share this post


Link to post
Share on other sites

У кого-то совпадает CRC реализованный в ПЛИС онлайновым средством/ручками и программой для ПК для одной и той же последовательности данных?

ЗЫ у меня нет. Писал наподобии как привел asic8 в Сообщении #3 и брал здесь цепочку CRC для каждого бита входных данных.

Для ПК программу брал здесь

Share this post


Link to post
Share on other sites

У кого-то совпадает CRC реализованный в ПЛИС онлайновым средством/ручками и программой для ПК для одной и той же последовательности данных?

ЗЫ у меня нет. Писал наподобии как привел asic8 в Сообщении #3 и брал здесь цепочку CRC для каждого бита входных данных.

Для ПК программу брал здесь

 

всегда совпадает %) если вы не перепутали :

1. начальную инициализацию

2. направление прохода массива данных

3. учли что иногда проверять нужно не на 0, а на т.н. magic number. для эзернета это 0x04C11DB7

Share this post


Link to post
Share on other sites

всегда совпадает %) если вы не перепутали :

1. начальную инициализацию

2. направление прохода массива данных

3. учли что иногда проверять нужно не на 0, а на т.н. magic number. для эзернета это 0x04C11DB7

Не могли бы Вы поделиться реализацией CRC-32 (желательно на VHDL)

Name : CRC-32

Poly : 0x04C11DB7 x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11

+ x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1

Init : 0xFFFFFFFF

Revert: true

XorOut: 0xFFFFFFFF

Check : 0xCBF43926 ("123456789")

и рассказать как подавать последовательность 123456789 чтобы получить 0xCBF43926

ЗЫ SV Verilog я не знаю и приведенную Вами ранее программу к сожалению не понимаю.

 

За ранее благодарен. ОЧЕНЬ НУЖНО!!!

Share this post


Link to post
Share on other sites

Не могли бы Вы поделиться реализацией CRC-32 (желательно на VHDL)

 

и рассказать как подавать последовательность 123456789 чтобы получить 0xCBF43926

ЗЫ SV Verilog я не знаю и приведенную Вами ранее программу к сожалению не понимаю.

 

считаем и проверяем CRC-32 для Ethernet.

 

module crc32;

  //------------------------------------------------------------------------------------------------------
  //
  //------------------------------------------------------------------------------------------------------
  //
  // G(x) = x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x1 + 1
  //
  function bit [31:0] crc_32x1 (input bit [31:0] crc, input bit d);
    bit msb;
  begin
    msb       = crc[31];
    crc_32x1  = crc << 1;

    crc_32x1[ 0] = d ^ msb;
    crc_32x1[ 1] = d ^ msb ^ crc[ 0];
    crc_32x1[ 2] = d ^ msb ^ crc[ 1];
    crc_32x1[ 4] = d ^ msb ^ crc[ 3];
    crc_32x1[ 5] = d ^ msb ^ crc[ 4];
    crc_32x1[ 7] = d ^ msb ^ crc[ 6];
    crc_32x1[ 8] = d ^ msb ^ crc[ 7];
    crc_32x1[10] = d ^ msb ^ crc[ 9];
    crc_32x1[11] = d ^ msb ^ crc[10];
    crc_32x1[12] = d ^ msb ^ crc[11];
    crc_32x1[16] = d ^ msb ^ crc[15];
    crc_32x1[22] = d ^ msb ^ crc[21];
    crc_32x1[23] = d ^ msb ^ crc[22];
    crc_32x1[26] = d ^ msb ^ crc[25];
  end
  endfunction
  //
  //
  //
  function bit [31:0] crc_32x8(input bit [31:0] crc, input bit [7:0] data);
    int i;
  begin
    crc_32x8 = crc;
    for (i = 8; i > 0; i--) begin
      crc_32x8 = crc_32x1 (crc_32x8, data[i-1]);
    end
  end
  endfunction

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

  int unsigned crc32_tx, crc32_rx;
  byte unsigned data [128];

  initial begin : main
  //
  // generate tx packet
  //
    // init crc
    crc32_tx = 32'hFFFF_FFFF;
    // count crc
    for (int i = 0; i < 128; i++) begin
      data[i]  = $urandom;
      crc32_tx = crc_32x8(crc32_tx, data[i]);
    end
    // put crc to data packet, we must to put " The complement of this 32-bit sequence is the CRC-32. "
    crc32_tx = ~crc32_tx;
  //
  // receive rx packet
  //
    // init crc
    crc32_rx = 32'hFFFF_FFFF;
    // count crc
    for (int i = 0; i < 128; i++) begin
      crc32_rx = crc_32x8(crc32_rx, data[i]);
    end
    crc32_rx = crc_32x8(crc32_rx, crc32_tx[31:24]);
    crc32_rx = crc_32x8(crc32_rx, crc32_tx[23:16]);
    crc32_rx = crc_32x8(crc32_rx, crc32_tx[15: 8]);
    crc32_rx = crc_32x8(crc32_rx, crc32_tx[7 : 0]);
    // check with magic world 32'hC704DD7B
    if (crc32_rx != 32'hC704DD7B)
      $display("get bad crc %h", crc32_rx);
    else
      $display("get good crc %h", crc32_rx);
  end

endmodule

 

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

 

ЗЫ. вот готовый модуль, (код кстати выкладывал в теме про холивар AHDL vs Verilog/VHDL), который можно использовать как есть, только проверку crc прикрутите снаружи.

 

ЗЗЫ. убрал приатаченый модуль, т.к. все равно никому не интересно, все есть в сорцах на этом форуме %)

Share this post


Link to post
Share on other sites

А чем этот tool не устраивает?

crctool

Share this post


Link to post
Share on other sites

Долго мучился почему CRC не совпадает. Оказалось, что нужно не с нулем сравнивать а с

assign crc_ok = reg16 == 16'h1D0F;

Share this post


Link to post
Share on other sites

А чем этот tool не устраивает?

crctool

 

ну многих устраивает, но похоже Maverick неправильно его использовал и я показал как надо использовать сгенерированную crc для расчета в частности в 100 мегабином эзернете %)

 

PS. меня подобные тулзы не устраивают свой онлайновостью и не возможностью кастомизации "по месту", мне проще прописать 3 параметра pDAT_W/pCRC_TYPE/pINIT_VALUE в одном и том же модуле чем каждый раз генерить отдельный модуль %)

Share this post


Link to post
Share on other sites

ну многих устраивает, но похоже Maverick неправильно его использовал и я показал как надо использовать сгенерированную crc для расчета в частности в 100 мегабином эзернете %)

 

PS. меня подобные тулзы не устраивают свой онлайновостью и не возможностью кастомизации "по месту", мне проще прописать 3 параметра pDAT_W/pCRC_TYPE/pINIT_VALUE в одном и том же модуле чем каждый раз генерить отдельный модуль %)

 

Для полинома А001 под MODBUS генератор от OutputLogic.com генерирует

-- CRC module for data(7:0)

-- lfsr(15:0)=1+x^13+x^15+x^16;

------------------------------------------------

 

Прогоняю бенчем счетчиком oт 0 до 255 на выходе заявленная таблица не просматривается

//**************************************************************************

const unsigned short CrcTable[256] = {

0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241,

0xC601, 0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440,

0xCC01, 0x0CC0, 0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40,

0x0A00, 0xCAC1, 0xCB81, 0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841,

0xD801, 0x18C0, 0x1980, 0xD941, 0x1B00, 0xDBC1, 0xDA81, 0x1A40,

0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01, 0x1DC0, 0x1C80, 0xDC41,

0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0, 0x1680, 0xD641,

0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081, 0x1040,

0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,

0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441,

0x3C00, 0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41,

0xFA01, 0x3AC0, 0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840,

0x2800, 0xE8C1, 0xE981, 0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41,

0xEE01, 0x2EC0, 0x2F80, 0xEF41, 0x2D00, 0xEDC1, 0xEC81, 0x2C40,

0xE401, 0x24C0, 0x2580, 0xE541, 0x2700, 0xE7C1, 0xE681, 0x2640,

0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0, 0x2080, 0xE041,

0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281, 0x6240,

0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,

0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41,

0xAA01, 0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840,

0x7800, 0xB8C1, 0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41,

0xBE01, 0x7EC0, 0x7F80, 0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40,

0xB401, 0x74C0, 0x7580, 0xB541, 0x7700, 0xB7C1, 0xB681, 0x7640,

0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101, 0x71C0, 0x7080, 0xB041,

0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0, 0x5280, 0x9241,

0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481, 0x5440,

0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,

0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841,

0x8801, 0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40,

0x4E00, 0x8EC1, 0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41,

0x4400, 0x84C1, 0x8581, 0x4540, 0x8701, 0x47C0, 0x4680, 0x8641,

0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040,

};

 

Что я упускаю?

Спасибо! :1111493779:

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...