Вернуться   Биткоин Форум > - Помощь начинающим
3 июля 2013, 2:32:53 PM   # 1
 
 
Сообщения: 3
Цитировать по имени
цитировать ответ
по умолчанию Re: Verilog код мясорубка один цикл

Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome"
Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e
подробнее...


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
Я только что зарегистрировался, так что я пишу здесь, а не в рудничной тему FPGA, где как новичок я не имею доступа пока.

Я хочу поделиться Verilog код чисто комбинационной Hasher. Насколько мне известно, все доступные шахтеры FPGA требуется более одного тактового цикла для обработки одного значения одноразового номера (например, 6 тактов с шахтером kramble в для de0-нано борту). Этот код, в отличии от этого, требуется только один цикл для вычисления два SHA-256 хэша.

Пожалуйста, обратите внимание, что код был протестирован только моделированием, так как нет аппаратных средств здесь, чтобы запустить его. Для Cyclone IV E, реализация синтезирует в около 55000 LEs, который будет вписываться в Terasic DE2-115, например.

Icarus Verilog следует назвать следующие:

Код:
iverilog -Wall -DSIM -o расческа comb.v

И, наконец, здесь идет сам код:

Код:
`Определить INDEX (а, я) а [32 * (I) +: 32]
`Определить ROR32 (х, п) {х [(N) - 1: 0], х [31: (п)]}
 
модуль круглые (данные, слово, хэш);
вход [255: 0] данных;
вход [31: 0] слово;
Выход [255: 0] хэш;
 
Провод [31: 0] а, б, в, г, д, е, ж, з;
Провод [31: 0] s1, ч, t1, s0, Maj, t2;
 
назначить = `INDEX (данные, 0);
назначить Ь = `INDEX (данные, 1);
назначать с = `INDEX (данные, 2);
присвоить D = `INDEX (данные, 3);
назначать е = `INDEX (данные, 4);
назначить F = `INDEX (данные, 5);
назначить г = `INDEX (данные, 6);
назначить час = `INDEX (данные, 7);
 
назначить s1 = `ROR32 (е, 6) ^` ROR32 (е, 11) ^ `ROR32 (е, 25);
назначить CH = г ^ (е & (Е ^ г));
назначить t1 = H + s1 + ч + слово;
назначить s0 = `ROR32 (а, 2) ^` ROR32 (а, 13) ^ `ROR32 (а, 22);
назначить Maj = (а & б) | (с & (А | б));
назначить t2 = s0 + Maj;
 
назначить хэш = {G, F, E, D + t1, C, B, A, t1 + t2};
endmodule
 
Модуль цепи (первонач, данные, хэш);
вход [255: 0] INIT;
вход [511: 0] данных;
Выход [255: 0] хэш;
 
проволочный [31: 0] Слово [0:63];
 
localparam Конст = {
32'h428a2f98, 32'h71374491, 32'hb5c0fbcf, 32'he9b5dba5,
32'h3956c25b, 32'h59f111f1, 32'h923f82a4, 32'hab1c5ed5,
32'hd807aa98, 32'h12835b01, 32'h243185be, 32'h550c7dc3,
32'h72be5d74, 32'h80deb1fe, 32'h9bdc06a7, 32'hc19bf174,
32'he49b69c1, 32'hefbe4786, 32'h0fc19dc6, 32'h240ca1cc,
32'h2de92c6f, 32'h4a7484aa, 32'h5cb0a9dc, 32'h76f988da,
32'h983e5152, 32'ha831c66d, 32'hb00327c8, 32'hbf597fc7,
32'hc6e00bf3, 32'hd5a79147, 32'h06ca6351, 32'h14292967,
32'h27b70a85, 32'h2e1b2138, 32'h4d2c6dfc, 32'h53380d13,
32'h650a7354, 32'h766a0abb, 32'h81c2c92e, 32'h92722c85,
32'ha2bfe8a1, 32'ha81a664b, 32'hc24b8b70, 32'hc76c51a3,
32'hd192e819, 32'hd6990624, 32'hf40e3585, 32'h106aa070,
32'h19a4c116, 32'h1e376c08, 32'h2748774c, 32'h34b0bcb5,
32'h391c0cb3, 32'h4ed8aa4a, 32'h5b9cca4f, 32'h682e6ff3,
32'h748f82ee, 32'h78a5636f, 32'h84c87814, 32'h8cc70208,
32'h90befffa, 32'ha4506ceb, 32'hbef9a3f7, 32'hc67178f2
};
 
genvar я;
 
генерировать
для (я = 0; я < 16; I = I + 1) начинают: во-первых
назначить слова [I] = `INDEX (данные, я);
конец
 
для (I = 16; я < 64; I = I + 1) начинают: смесь
Провод [31: 0] s0, s1;
 
присвоить S0 = `ROR32 (слова [я - 15], 7) ^
`ROR32 (слова [я - 15], 18) ^
(Слова [я - 15] >> 3);
присвоить s1 = `ROR32 (слова [я - 2], 17) ^
`ROR32 (слова [я - 2], 19) ^
(Слова [я - 2] >> 10);
назначить слова [I] = слов [I - 16] + слова [я - 7] +
s0 + s1;
конец
 
для (я = 0; я < 64; I = I + 1) начинают: массив
Провод [31: 0] = ш `INDEX (Конст, 63 - я) + слова [I];
Провод [255: 0] д, ч;
 
Если я)
назначить д = массив [я - 1] .h;
еще
присвоить D = INIT;
 
круглый шаг (д, ш, ч);
конец
 
для (я = 0; я < 8; I = I + 1) начинают: сумматор
назначить `INDEX (хэш, I) =` INDEX (массив [63] .h, я) +
`ИНДЕКС (первонач, я);
конец
endgenerate
endmodule
 
Модуль шахтер (CLK, данные, середина, результат, найденный);
вход CLK;
вход [255: 0] в середине;
вход [127: 0] данных;
Выход [31: 0] результат;
Выход найден;
 
рег [31: 0] = Nonce 32'b0;
 
Провод [255: 0] hash1, хэш;
 
цепь sha1 (середина, {
32'h00000280, 32'h00000000, 32'h00000000, 32'h00000000,
32'h00000000, 32'h00000000, 32'h00000000, 32'h00000000,
32'h00000000, 32'h00000000, 32'h00000000, 32'h80000000,
результат, данные [95: 0]
}, Hash1);
 
цепь SHA2 ({
32'h5be0cd19, 32'h1f83d9ab, 32'h9b05688c, 32'h510e527f,
32'ha54ff53a, 32'h3c6ef372, 32'hbb67ae85, 32'h6a09e667
}, {
32'h00000100, 32'h00000000, 32'h00000000, 32'h00000000,
32'h00000000, 32'h00000000, 32'h00000000, 32'h80000000,
hash1
}, Хэш);
 
присвоить результат = временное значение + данные [127: 96];
присвоить найденное = (32'b0 == `ИНДЕКС (хэш, 7));
 
всегда @ (posedge CLK)
данное время <= Nonce + 1;
endmodule
 
`IFDEF SIM
модуль доказательства;
рег CLK = 1'b0;
 
Провод [31: 0] результат;
Проволока найдено;
 
минер сердечник (CLK, {
32'h381353f8, 32'h378a0e1c, 32'hfd270c51, 32'ha7f5f990
}, {
32'h00f10dad, 32'hacc0caa8, 32'h7482c0f3, 32'ha66f356d,
32'hdb1ff3ca, 32'hfb545b91, 32'h1efebbc8, 32'h24e39e50
}, Результат, найденный);
 
всегда начинается
если (результат > 32'h381353fa)
$ Отделка;
 
# 1 CLK <= ~ CLK;
# 1 CLK <= ~ CLK;
 
$ Дисплей ("% Х% х% х", Результат, найдено, core.hash);
конец
endmodule
`ENDIF
takanasi сейчас офлайн Пожаловаться на takanasi   Ответить с цитированием Мультицитирование сообщения от takanasi Быстрый ответ на сообщение takanasi


Как заработать Биткоины?
Без вложений. Не майнинг.


3 июля 2013, 4:46:07 PM   # 2
 
 
Сообщения: 546
Цитировать по имени
цитировать ответ
по умолчанию Re: Verilog код мясорубка один цикл

Получил 1806 Биткоинов
Реальная история.





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

К сожалению, у меня нет достаточного понимания кода, чтобы проверить его или комментарий, но выглядит интересно.
Trillium сейчас офлайн Пожаловаться на Триллиуме   Ответить с цитированием Мультицитирование сообщения от Trillium Быстрый ответ на сообщение Trillium

3 июля 2013, 4:53:33 PM   # 3
 
 
Сообщения: 384
Цитировать по имени
цитировать ответ
по умолчанию Re: Verilog код мясорубка один цикл

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

Это выглядит интересно. Я компиляция прямо сейчас (в обертке на основе DE2_115_Unoptimized_Pipelined), это займет около 55kLE, но до сих пор не завершен фитинг (после того, как один час прошло). Это будет интересно посмотреть, что будет сообщено FMAX (я подозреваю, что это, почему его не было сделано ранее, одна огромная комбинаторной цепь только антитезой конвейерная).

На самом деле я только что убил его и снова. Его смешно ожидать, что это работать на 50МГц по умолчанию, я сначала попробовать 100kHz и работать вверх (я действительно не ожидаю, что это очень хорошо работают на всех).
kramble сейчас офлайн Пожаловаться на kramble   Ответить с цитированием Мультицитирование сообщения от kramble Быстрый ответ на сообщение kramble

3 июля 2013, 5:06:37 PM   # 4
 
 
Сообщения: 3
Цитировать по имени
цитировать ответ
по умолчанию Re: Verilog код мясорубка один цикл

Здравствуйте kramble и спасибо за тестирование этого. Не могли бы вы поделиться вашей дальнейшей обратной связи, когда и если у вас есть.
takanasi сейчас офлайн Пожаловаться на takanasi   Ответить с цитированием Мультицитирование сообщения от takanasi Быстрый ответ на сообщение takanasi

3 июля 2013, 5:15:03 PM   # 5
 
 
Сообщения: 384
Цитировать по имени
цитировать ответ
по умолчанию Re: Verilog код мясорубка один цикл

Здравствуйте kramble и спасибо за тестирование этого. Не могли бы вы поделиться вашей дальнейшей обратной связи, когда и если у вас есть.

Буду делать, но я не очень оптимистично. Отсутствие каких-либо конвейерная потребует очень медленно часов, поэтому скорость хеширования будет довольно низкой. Но я не специалист по логике конструкции, так что получить ваше время просмотра до 4-х часов, а прийти и обсудить на главном форуме

[РЕДАКТИРОВАТЬ]
Я сделал сборку на 500kHz часы (50MHz делят 100 в ФАПЧ), которая заняла около 30 минут, но теперь quartus_sta (Timequest Timing Analyzer) просто крутится на CPU. Я подозреваю, что это просто не нравится огромная комбинаторная цепь, так что не знаю, когда это может закончить. SOF был создан, хотя, но я не могу на самом деле проверить это сам, как я не имею систему Dev DE2 (только de0-Nano, который слишком мал, чтобы поместиться этот код).

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

Я собираюсь оставить его там на данный момент. Увидимся на главном потоке, как только вы избежали новичка тюрьмы 
kramble сейчас офлайн Пожаловаться на kramble   Ответить с цитированием Мультицитирование сообщения от kramble Быстрый ответ на сообщение kramble

4 июля 2013, 9:44:40 AM   # 6
 
 
Сообщения: 3
Цитировать по имени
цитировать ответ
по умолчанию Re: Verilog код мясорубка один цикл

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

Код:
`Определить INDEX (а, я) а [32 * (I) +: 32]
`Определить ROR32 (х, п) {х [(N) - 1: 0], х [31: (п)]}

Модуль Sched (w 0, w 1, W9, W14, W16);
вход [31: 0] w 0, w 1, W9, W14;
Выход [31: 0] W16;

Провод [31: 0] s0, s1;

назначить s0 = `ROR32 (w1, 7) ^` ROR32 (w1, 18) ^ (w1 >> 3);
назначить s1 = `ROR32 (W14, 17) ^` ROR32 (W14, 19) ^ (W14 >> 10);

назначить W16 = w 0 + s0 + W9 + s1;
endmodule

модуль круглые (в, слово, выход);
вход [255: 0] в;
вход [31: 0] слово;
Выход [255: 0] из;

Провод [31: 0] а, б, в, г, д, е, ж, з;
Провод [31: 0] s1, ч, t1, s0, Maj, t2;

назначить {ч, г, е, е, D, C, B, A} = В;

назначить s1 = `ROR32 (е, 6) ^` ROR32 (е, 11) ^ `ROR32 (е, 25);
назначить CH = г ^ (е & (Е ^ г));
назначить t1 = H + s1 + ч + слово;
назначить s0 = `ROR32 (а, 2) ^` ROR32 (а, 13) ^ `ROR32 (а, 22);
назначить Maj = (а & б) | (с & (А | б));
назначить t2 = s0 + Maj;

назначить из = {G, F, E, D + t1, C, B, A, t1 + t2};
endmodule

Модуль синхронизации (CLK, пред, Конст, рядом);
вход CLK;
вход [767: 0] пред;
вход [31: 0] Конст;
Выход рег [767: 0] следующим;

Провод [255: 0] результат;
Провод [31: 0] w 0, w 1, W9, W14, W16;

назначить w0 = `INDEX (пред, 0);
назначить W1 = `INDEX (пред, 1);
назначить W9 = `INDEX (пред, 9);
назначить W14 = `INDEX (предыдущая, 14);

Sched звено (w0, w1, W9, W14, W16);

круглый шаг (пред [767: 512], Конст + w0, результат);

всегда @ (posedge CLK)
следующий <= {Результат, W16, пред [511: 32]};
endmodule

Модуль цепи (CLK, первонач, данные, хэш);
вход CLK;
вход [255: 0] INIT;
вход [511: 0] данных;
Выход [255: 0] хэш;

Провод [2047: 0] Конст;

назначить Конст = {
32'hc67178f2, 32'hbef9a3f7, 32'ha4506ceb, 32'h90befffa,
32'h8cc70208, 32'h84c87814, 32'h78a5636f, 32'h748f82ee,
32'h682e6ff3, 32'h5b9cca4f, 32'h4ed8aa4a, 32'h391c0cb3,
32'h34b0bcb5, 32'h2748774c, 32'h1e376c08, 32'h19a4c116,
32'h106aa070, 32'hf40e3585, 32'hd6990624, 32'hd192e819,
32'hc76c51a3, 32'hc24b8b70, 32'ha81a664b, 32'ha2bfe8a1,
32'h92722c85, 32'h81c2c92e, 32'h766a0abb, 32'h650a7354,
32'h53380d13, 32'h4d2c6dfc, 32'h2e1b2138, 32'h27b70a85,
32'h14292967, 32'h06ca6351, 32'hd5a79147, 32'hc6e00bf3,
32'hbf597fc7, 32'hb00327c8, 32'ha831c66d, 32'h983e5152,
32'h76f988da, 32'h5cb0a9dc, 32'h4a7484aa, 32'h2de92c6f,
32'h240ca1cc, 32'h0fc19dc6, 32'hefbe4786, 32'he49b69c1,
32'hc19bf174, 32'h9bdc06a7, 32'h80deb1fe, 32'h72be5d74,
32'h550c7dc3, 32'h243185be, 32'h12835b01, 32'hd807aa98,
32'hab1c5ed5, 32'h923f82a4, 32'h59f111f1, 32'h3956c25b,
32'he9b5dba5, 32'hb5c0fbcf, 32'h71374491, 32'h428a2f98
};

genvar я;

генерировать
для (я = 0; я < 64; I = I + 1) начинают: массив
Провод [767: 0] пред, рядом;

Если я)
назначить = предыдущая массив [я - 1] .next;
еще
назначить Prev = {первонач, данные};

Узел синхронизации (CLK, пред, `ИНДЕКС (Конст, я), рядом);
конец

для (я = 0; я < 8; I = I + 1) начинают: сумматор
назначить `INDEX (хэш, я) =` INDEX (первонач, я) +
`ИНДЕКС (массив [63] .next, г + 16);
конец
endgenerate
endmodule

Модуль шахтер (CLK, данные, середина, результат, найденный);
вход CLK;
вход [255: 0] в середине;
вход [127: 0] данных;
Выход [31: 0] результат;
Выход найден;

рег [31: 0] = Nonce 32'b0;

Провод [255: 0] hash1, хэш;

цепь sha1 (CLK, середина, {
32'h00000280, 32'h00000000, 32'h00000000, 32'h00000000,
32'h00000000, 32'h00000000, 32'h00000000, 32'h00000000,
32'h00000000, 32'h00000000, 32'h00000000, 32'h80000000,
результат, данные [95: 0]
}, Hash1);

цепь SHA2 (CLK, {
32'h5be0cd19, 32'h1f83d9ab, 32'h9b05688c, 32'h510e527f,
32'ha54ff53a, 32'h3c6ef372, 32'hbb67ae85, 32'h6a09e667
}, {
32'h00000100, 32'h00000000, 32'h00000000, 32'h00000000,
32'h00000000, 32'h00000000, 32'h00000000, 32'h80000000,
hash1
}, Хэш);

присвоить результат = временное значение + данные [127: 96];
присвоить найденное = (32'b0 == `ИНДЕКС (хэш, 7));

всегда @ (posedge CLK)
данное время <= Nonce + 1;
endmodule

`IFDEF SIM
модуль доказательства;
рег CLK = 1'b0;

Провод [31: 0] результат;
Проволока найдено;

минер сердечник (CLK, {
32'h381353f9, 32'h378a0e1c, 32'hfd270c51, 32'ha7f5f990
}, {
32'h00f10dad, 32'hacc0caa8, 32'h7482c0f3, 32'ha66f356d,
32'hdb1ff3ca, 32'hfb545b91, 32'h1efebbc8, 32'h24e39e50
}, Результат, найденный);

всегда начинается
если (результат >= 32'h381353fb + 128)
$ Отделка;

# 1 CLK <= ~ CLK;
# 1 CLK <= ~ CLK;

если (результат >= 32'h381353f9 + 128)
$ Дисплей ("% Х% х% х", Результат - 128, найдено, core.hash);
конец
endmodule
`ENDIF
takanasi сейчас офлайн Пожаловаться на takanasi   Ответить с цитированием Мультицитирование сообщения от takanasi Быстрый ответ на сообщение takanasi



Как заработать Биткоины?

Bitcoin Wallet * Portefeuille Bitcoin * Monedero Bitcoin * Carteira Bitcoin * Portafoglio Bitcoin * Bitcoin Cüzdan * 比特币钱包

bitcoin-zarabotat.ru
Почта для связи: bitcoin-zarabotat.ru@yandex.ru

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW