FPGA-README 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. This README contains extended details about FPGA mining with cgminer
  2. For ModMinerQuad (MMQ) BitForce (BFL) and Icarus (ICA, BLT, LLT, AMU, CMR)
  3. --------------------------------------------------------------------------
  4. When mining on windows, the driver being used will determine if mining will work.
  5. If the driver doesn't allow mining, you will get a "USB init," error message
  6. i.e. one of:
  7. open device failed, err %d, you need to install a WinUSB driver for the device
  8. or
  9. claim interface %d failed, err %d
  10. The best solution for this is to use a tool called Zadig to set the driver:
  11. http://sourceforge.net/projects/libwdi/files/zadig/
  12. This allows you set the driver for the device to be WinUSB which is usually
  13. required to make it work if you're having problems
  14. With Zadig, you may need to run it as administrator and if your device is
  15. plugged in but you cannot see it, use the Menu: Options -> List All Devices
  16. You must also make sure you are using the latest libusb-1.0.dll supplied
  17. with cgminer (not the libusbx version)
  18. When you first switch a device over to WinUSB with Zadig and it shows that
  19. correctly on the left of the Zadig window, but it still gives permission
  20. errors, you may need to unplug the USB miner and then plug it back in
  21. -
  22. When mining on linux, but not using 'sudo' and not logged into 'root' you
  23. may get a USB priviledge error (-3), so you may also need to do the following:
  24. sudo cp 01-cgminer.rules /etc/udev/rules.d/
  25. And also:
  26. sudo usermod -G plugdev -a `whoami`
  27. If your linux distro doesn't have the 'plugdev' group, you can create it like:
  28. sudo groupadd plugdev
  29. Then reboot ...
  30. -
  31. There is a hidden option in cgminer to dump out a lot of information
  32. about USB that will help the developers to assist you if you are having
  33. problems:
  34. --usb-dump 0
  35. It will only help if you have a working FPGA device listed above
  36. ModMinerQuad (MMQ)
  37. ------------------
  38. The mining bitstream does not survive a power cycle, so cgminer will upload
  39. it, if it needs to, before it starts mining (approx 7min 40sec)
  40. The red LED also flashes while it is uploading the bitstream
  41. -
  42. If the MMQ doesn't respond to cgminer at all, or the red LED isn't flashing
  43. then you will need to reset the MMQ
  44. The red LED should always be flashing when it is mining or ready to mine
  45. To reset the MMQ, you are best to press the left "RESET" button on the
  46. backplane, then unplug and replug the USB cable
  47. If your MMQ doesn't have a button on the "RESET" pad, you need to join
  48. the two left pads of the "RESET" pad with conductive wire to reset it.
  49. Cutting a small (metal) paper-clip in half works well for this
  50. Then unplug the USB cable, wait for 5 seconds, then plug it back in
  51. After you press reset, the red LED near the USB port should blink continuously
  52. If it still wont work, power off, wait for 5 seconds, then power on the MMQ
  53. This of course means it will upload the bitstream again when you start cgminer
  54. -
  55. Device 0 is on the power end of the board
  56. -
  57. You must make sure you have an approriate firmware in your MMQ
  58. Read here for official details of changing the firmware:
  59. http://wiki.btcfpga.com/index.php?title=Firmware
  60. The basics of changing the firmware are:
  61. You need two short pieces of conductive wire if your MMQ doesn't have
  62. buttons on the "RESET" and "ISP" pads on the backplane board
  63. Cutting a small (metal) paper-clip in half works well for this
  64. Join the 2 left pads of the "RESET" pad with wire and the led will dim
  65. Without disconnecting the "RESET", join the 2 left pads of the "ISP" pad
  66. with a wire and it will stay dim
  67. Release "RESET" then release "ISP" and is should still be dim
  68. Unplug the USB and when you plug it back in it will show up as a mass
  69. storage device
  70. Linux: (as one single line):
  71. mcopy -i /dev/disk/by-id/usb-NXP_LPC134X_IFLASH_ISP000000000-0:0
  72. modminer091012.bin ::/firmware.bin
  73. Windows: delete the MSD device file firmware.bin and copy in the new one
  74. rename the new file and put it under the same name 'firmware.bin'
  75. Disconnect the USB correctly (so writes are flushed first)
  76. Join and then disconnect "RESET" and then plug the USB back in and it's done
  77. Best to update to one of the latest 2 listed below if you don't already
  78. have one of them in your MMQ
  79. The current latest different firmware are:
  80. Latest for support of normal or TLM bitstream:
  81. http://btcfpga.com/files/firmware/modminer092612-TLM.bin
  82. Latest with only normal bitstream support (Temps/HW Fix):
  83. http://btcfpga.com/files/firmware/modminer091012.bin
  84. The code is currently tested on the modminer091012.bin firmware.
  85. This comment will be updated when others have been tested
  86. -
  87. On many linux distributions there is an app called modem-manager that
  88. may cause problems when it is enabled, due to opening the MMQ device
  89. and writing to it
  90. The problem will typically present itself by the flashing led on the
  91. backplane going out (no longer flashing) and it takes a power cycle to
  92. re-enable the MMQ firmware - which then can lead to the problem happening
  93. again
  94. You can either disable/uninstall modem-manager if you don't need it or:
  95. a (hack) solution to this is to blacklist the MMQ USB device in
  96. /lib/udev/rules.d/77-mm-usb-device-blacklist.rules
  97. Adding 2 lines like this (just above APC) should help
  98. # MMQ
  99. ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0003", ENV{ID_MM_DEVICE_IGNORE}="1"
  100. The change will be lost and need to be re-done, next time you update the
  101. modem-manager software
  102. TODO: check that all MMQ's have the same product ID
  103. BitForce (BFL)
  104. --------------
  105. --bfl-range Use nonce range on bitforce devices if supported
  106. This option is only for bitforce devices. Earlier devices such as the single
  107. did not have any way of doing small amounts of work which meant that a lot of
  108. work could be lost across block changes. Some of the "minirigs" have support
  109. for doing this, so less work is lost across a longpoll. However, it comes at
  110. a cost of 1% in overall hashrate so this feature is disabled by default. It
  111. is only recommended you enable this if you are mining with a minirig on
  112. p2pool.
  113. C source is included for a bitforce firmware flash utility on Linux only:
  114. bitforce-firmware-flash.c
  115. Using this, you can change the bitstream firmware on bitforce singles.
  116. It is untested with other devices. Use at your own risk!
  117. To compile:
  118. make bitforce-firmware-flash
  119. To flash your BFL, specify the BFL port and the flash file e.g.:
  120. sudo ./bitforce-firmware-flash /dev/ttyUSB0 alphaminer_832.bfl
  121. It takes a bit under 3 minutes to flash a BFL and shows a progress % counter
  122. Once it completes, you may also need to wait about 15 seconds,
  123. then power the BFL off and on again
  124. If you get an error at the end of the BFL flash process stating:
  125. "Error reading response from ZBX"
  126. it may have worked successfully anyway.
  127. Test mining on it to be sure if it worked or not.
  128. You need to give cgminer about 10 minutes mining with the BFL to be sure of
  129. the MH/s value reported with the changed firmware - and the MH/s reported
  130. will be less than the firmware speed since you lose work on every block change.
  131. Icarus (ICA, BLT, LLT, AMU, CMR)
  132. --------------------------------
  133. There are two hidden options in cgminer when Icarus support is compiled in:
  134. --icarus-options <arg> Set specific FPGA board configurations - one set of values for all or comma separated
  135. baud:work_division:fpga_count
  136. baud The Serial/USB baud rate - 115200 or 57600 only - default 115200
  137. work_division The fraction of work divided up for each FPGA chip - 1, 2, 4 or 8
  138. e.g. 2 means each FPGA does half the nonce range - default 2
  139. fpga_count The actual number of FPGA working - this would normally be the same
  140. as work_division - range is from 1 up to 'work_division'
  141. It defaults to the value of work_division - or 2 if you don't specify
  142. work_division
  143. If you define fewer comma seperated values than Icarus devices, the last values will be used
  144. for all extra devices
  145. An example would be: --icarus-options 57600:2:1
  146. This would mean: use 57600 baud, the FPGA board divides the work in half however
  147. only 1 FPGA actually runs on the board (e.g. like an early CM1 Icarus copy bitstream)
  148. --icarus-timing <arg> Set how the Icarus timing is calculated - one setting/value for all or comma separated
  149. default[=N] Use the default Icarus hash time (2.6316ns)
  150. short=[N] Calculate the hash time and stop adjusting it at ~315 difficulty 1 shares (~1hr)
  151. long=[N] Re-calculate the hash time continuously
  152. value[=N] Specify the hash time in nanoseconds (e.g. 2.6316) and abort time (e.g. 2.6316=80)
  153. If you define fewer comma seperated values than Icarus devices, the last values will be used
  154. for all extra devices
  155. Icarus timing is required for devices that do not exactly match a default Icarus Rev3 in
  156. processing speed
  157. If you have an Icarus Rev3 you should not normally need to use --icarus-timing since the
  158. default values will maximise the MH/s and display it correctly
  159. Icarus timing is used to determine the number of hashes that have been checked when it aborts
  160. a nonce range (including on a LongPoll)
  161. It is also used to determine the elapsed time when it should abort a nonce range to avoid
  162. letting the Icarus go idle, but also to safely maximise that time
  163. 'short' or 'long' mode should only be used on a computer that has enough CPU available to run
  164. cgminer without any CPU delays (an active desktop or swapping computer would not be stable enough)
  165. Any CPU delays while calculating the hash time will affect the result
  166. 'short' mode only requires the computer to be stable until it has completed ~315 difficulty 1 shares
  167. 'long' mode requires it to always be stable to ensure accuracy, however, over time it continually
  168. corrects itself
  169. The optional additional =N for 'short' or 'long' specifies the limit to set the timeout to in N * 100ms
  170. thus if the timing code calculation is higher while running, it will instead use N * 100ms
  171. This can be set to the appropriate value to ensure the device never goes idle even if the
  172. calculation is negatively affected by system performance
  173. When in 'short' or 'long' mode, it will report the hash time value each time it is re-calculated
  174. In 'short' or 'long' mode, the scan abort time starts at 5 seconds and uses the default 2.6316ns
  175. scan hash time, for the first 5 nonce's or one minute (whichever is longer)
  176. In 'default' or 'value' mode the 'constants' are calculated once at the start, based on the default
  177. value or the value specified
  178. The optional additional =N specifies to set the default abort at N * 100ms, not the calculated
  179. value, which is ~112 for 2.6316ns
  180. To determine the hash time value for a non Icarus Rev3 device or an Icarus Rev3 with a different
  181. bitstream to the default one, use 'long' mode and give it at least a few hundred shares, or use
  182. 'short' mode and take note of the final hash time value (Hs) calculated
  183. You can also use the RPC API 'stats' command to see the current hash time (Hs) at any time
  184. The Icarus code currently only works with an FPGA device that supports the same commands as
  185. Icarus Rev3 requires and also is less than ~840MH/s and greater than 2MH/s
  186. If an FPGA device does hash faster than ~840MH/s it should work correctly if you supply the
  187. correct hash time nanoseconds value
  188. The Icarus code will automatically detect Icarus, Lancelot, AsicminerUSB and Cairnsmore1
  189. FPGA devices and set default settings to match those devices if you don't specify them
  190. The timing code itself will affect the Icarus performance since it increases the delay after
  191. work is completed or aborted until it starts again
  192. The increase is, however, extremely small and the actual increase is reported with the
  193. RPC API 'stats' command (a very slow CPU will make it more noticeable)
  194. Using the 'short' mode will remove this delay after 'short' mode completes
  195. The delay doesn't affect the calculation of the correct hash time