Перейти к содержанию
    

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

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

 

OutputLogic.com

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

OutputLogic.com

 

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

 

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

 

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я сделал онлайновый 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? Что-то не совпадает у меня, может я что-то не так делаю....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Привествую.

Мне надо посчитать 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];

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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];

отлично

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне надо посчитать 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 версию приводиться за пару минут.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

 

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

 

 

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

 

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

 

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

 

sourceforge.net/projects/crc-gen-verilog

sourceforge.net/projects/lfsr-counter

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

 

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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 я не знаю и приведенную Вами ранее программу к сожалению не понимаю.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не могли бы Вы поделиться реализацией 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 прикрутите снаружи.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

assign crc_ok = reg16 == 16'h1D0F;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

crctool

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну многих устраивает, но похоже 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:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...