OutputLogic 0 June 27, 2009 Posted June 27, 2009 · Report post Я сделал онлайновый tool который генерирует CRC,Scrambler,LFSR Counter на Verilog / VHDL: OutputLogic.com Пользуйтесь. Quote Share this post Link to post Share on other sites More sharing options...
des00 27 June 27, 2009 Posted June 27, 2009 · Report post Я сделал онлайновый tool который генерирует CRC,Scrambler,LFSR Counter на Verilog / VHDL: OutputLogic.com Пользуйтесь. это хорошо, вешь безусловно полезная, но позвольте немного критики : 1. Онлайновые тулзы не удобны, сделали бы скрипты пусть на том же Python и выложили бы для людей 2. Ручками параметризуемый CRC, скремблер LFSR пишется не немного дольше чем пользоваться генератором и только один раз + пользоваться параметруземыми, с помошью языковых средств, корками удобнее, чем сгенерированными по месту %) Удачи вам в вашем начинании !!! Quote Share this post Link to post Share on other sites More sharing options...
asic8 0 June 27, 2009 Posted June 27, 2009 · Report post Я сделал онлайновый 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? Что-то не совпадает у меня, может я что-то не так делаю.... Quote Share this post Link to post Share on other sites More sharing options...
OutputLogic 0 June 27, 2009 Posted June 27, 2009 · Report post Привествую. Мне надо посчитать 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]; Quote Share this post Link to post Share on other sites More sharing options...
asic8 0 June 27, 2009 Posted June 27, 2009 · Report post Нужно выбрать: 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]; отлично Quote Share this post Link to post Share on other sites More sharing options...
des00 27 June 29, 2009 Posted June 29, 2009 · Report post Мне надо посчитать 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 версию приводиться за пару минут. Quote Share this post Link to post Share on other sites More sharing options...
OutputLogic 0 June 29, 2009 Posted June 29, 2009 · Report post это хорошо, вешь безусловно полезная, но позвольте немного критики : 1. Онлайновые тулзы не удобны, сделали бы скрипты пусть на том же Python и выложили бы для людей 2. Ручками параметризуемый CRC, скремблер LFSR пишется не немного дольше чем пользоваться генератором и только один раз + пользоваться параметруземыми, с помошью языковых средств, корками удобнее, чем сгенерированными по месту %) Удачи вам в вашем начинании !!! По работе мне нужно часто генерировать код для нестандартных CRC. Я долгое время пользовался програмкой на Veriloge. Затем написал скрипт на Perl, выложил на сервер и добавил JavaScript interface. В результате процесс генерации занимает нескоько секунд. В общем с вами согласен что сделать удобный онлайновый тулз не просто. Код на C выложен здесь: sourceforge.net/projects/crc-gen-verilog sourceforge.net/projects/lfsr-counter Quote Share this post Link to post Share on other sites More sharing options...
Maverick_ 17 July 2, 2009 Posted July 2, 2009 · Report post У кого-то совпадает CRC реализованный в ПЛИС онлайновым средством/ручками и программой для ПК для одной и той же последовательности данных? ЗЫ у меня нет. Писал наподобии как привел asic8 в Сообщении #3 и брал здесь цепочку CRC для каждого бита входных данных. Для ПК программу брал здесь Quote Share this post Link to post Share on other sites More sharing options...
des00 27 July 2, 2009 Posted July 2, 2009 · Report post У кого-то совпадает CRC реализованный в ПЛИС онлайновым средством/ручками и программой для ПК для одной и той же последовательности данных? ЗЫ у меня нет. Писал наподобии как привел asic8 в Сообщении #3 и брал здесь цепочку CRC для каждого бита входных данных. Для ПК программу брал здесь всегда совпадает %) если вы не перепутали : 1. начальную инициализацию 2. направление прохода массива данных 3. учли что иногда проверять нужно не на 0, а на т.н. magic number. для эзернета это 0x04C11DB7 Quote Share this post Link to post Share on other sites More sharing options...
Maverick_ 17 July 3, 2009 Posted July 3, 2009 · Report post всегда совпадает %) если вы не перепутали : 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 я не знаю и приведенную Вами ранее программу к сожалению не понимаю. За ранее благодарен. ОЧЕНЬ НУЖНО!!! Quote Share this post Link to post Share on other sites More sharing options...
des00 27 July 3, 2009 Posted July 3, 2009 · Report post Не могли бы Вы поделиться реализацией 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 прикрутите снаружи. ЗЗЫ. убрал приатаченый модуль, т.к. все равно никому не интересно, все есть в сорцах на этом форуме %) Quote Share this post Link to post Share on other sites More sharing options...
_sda 2 July 3, 2009 Posted July 3, 2009 · Report post А чем этот tool не устраивает? crctool Quote Share this post Link to post Share on other sites More sharing options...
asic8 0 July 3, 2009 Posted July 3, 2009 · Report post Долго мучился почему CRC не совпадает. Оказалось, что нужно не с нулем сравнивать а с assign crc_ok = reg16 == 16'h1D0F; Quote Share this post Link to post Share on other sites More sharing options...
des00 27 July 4, 2009 Posted July 4, 2009 · Report post А чем этот tool не устраивает? crctool ну многих устраивает, но похоже Maverick неправильно его использовал и я показал как надо использовать сгенерированную crc для расчета в частности в 100 мегабином эзернете %) PS. меня подобные тулзы не устраивают свой онлайновостью и не возможностью кастомизации "по месту", мне проще прописать 3 параметра pDAT_W/pCRC_TYPE/pINIT_VALUE в одном и том же модуле чем каждый раз генерить отдельный модуль %) Quote Share this post Link to post Share on other sites More sharing options...
Мур 5 December 15, 2011 Posted December 15, 2011 · Report post ну многих устраивает, но похоже 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: Quote Share this post Link to post Share on other sites More sharing options...