每个运行完整以太坊节点的人都需要处理托管在区块链上的智能合约。通常,这是通过在软件中模拟以太坊虚拟机 (EVM) 来完成的。
该项目的目的是在 FPGA 上构建 EVM 的硬件实现。结果将是以太坊处理单元 (EPU),这是一个 256 位处理器,它不在寄存器上运行,而是在堆栈上运行。
选择非常安静的组件可以为运行 Xilinx 软件的工作站降温,但不能为托管 Varium C1100 的机器降温。如果您想将卡安装在同一个 PC 机箱中,请在进行物理安装之前阅读“冷却系统得到加强”一章。
组件选择:
使用我特定的 BIOS 设置(3200 MHz,1.2 V),RAM 不需要额外的冷却。注意:我想将 CPU 风扇安装在护罩上,让一些空气流向 RAM 条。但这不是必需的。
对于无风扇电源,我们需要机箱内部有一个正压。这意味着所有三个 Fractal 风扇都安装在前挡板侧。顶部和底部网格覆盖有纸(下图中的白色区域),以引导气流从前到后。
要连接风扇,请解开下图中左侧的所有电缆。风扇电缆使用相同的扎带连接,以避免它们在运输过程中晃来晃去。风扇集线器从 SATA 获取电源。虽然 SSD 是 2.5",但我将它安装在 3.5" 的托架中。在那里,它不会被主板加热。
CPU 冷却器和机箱背面之间不需要护罩。
气流足够。
如果您计划在任何基于 Ubuntu 的 Linux 上安装 Vitis,请确保在启动安装程序之前安装 libtinfo5。
https://support.xilinx.com/s/article/76616?language=en_US
简而言之:成为超级用户,更新您的系统并安装 libtinfo5。其他一些安装将很方便或稍后需要:
sudo su
apt update
apt upgrade
apt install libtinfo5
apt install cmake
apt install openssh-server
apt install git
apt install build-essential
apt install opencl-headers
apt install xsensors
后面会使用cmake搭建区块链加速挖矿demo。openssh-server 允许您使用 ssh 从另一台计算机登录您的工作站,或使用 scp 从另一台计算机复制 Vitis 安装程序。
确保在要安装 Vitis 的文件系统上禁用日志功能。如果您在 /tools 下安装了一个单独的 300GB 分区,那么这样做可能最简单。
这次我将包括 Vitis 在内的整个系统安装在 logbsize=256k 的 XFS 分区上,并且只在统一安装程序中勾选该项目所需的内容。
如果使用 xfs 文件系统,编辑 /etc/fstab 并替换
UUID=...... / xfs defaults 0 0
/swapfile none swap sw 0 0
经过
UUID=...... / xfs logbsize=256k 0 0
#/swapfile none swap sw 0 0
并删除所有交换分区和交换文件。我们不想在 128 GB RAM 系统中更换 SSD 驱动器。
重新启动您的系统(是的,我知道有使用 mount 和 swapoff 的替代方法——但让我们保持简单)。
现在是时候下载 Xilinx 统一安装程序了:
或者更大的选择:https ://www.xilinx.com/support/download.html
仍然以root身份,我们切换到下载目录并运行
chmod 555 ./Xilinx_Unified_2021.2_1021_0703_Lin64.bin
./Xilinx_Unified_2021.2_1021_0703_Lin64.bin
将单选按钮留在顶部(“Vitis”)。它还将安装 Vivado。是的,Vitis 依赖于 Vivado。从组件中,删除所有不需要的。Varium 卡上的 U55 是一个 UltraScale+ 器件。
选中以下项目:
除非用于其他项目,否则取消选中以下内容:
不选中工程样本。
安装过程需要几个小时。
之后,需要做一些工作来避免以 root 权限运行 Vivado:
https://support.xilinx.com/s/feed/0D52E00006hpUGrSAM
对于构建 Xilinx DMA:
https://github.com/Xilinx/dma_ip_drivers/issues/39
该项目历史上的一个重要日期(2021-12-20):实物 Varium C1100 卡进入现场。非常感谢 Xilinx!
包装内只包含 Varium 卡。所有软件都在网站上。不提供电缆。
该卡本身看起来像一个智能网卡。但我们都知道:它是一个非常智能的 HBM 网卡。它有两个 QSFP-28 端口的 8 个 MAC 地址。在马来西亚制作。
编程端口连接到 Micro-USB。
卡片很重。一切都与冷却有关。还有一个金属背板。有人知道J37有什么用吗?I2C?我想为风扇提供 PWM 输出。也许我也可以为此滥用 Alveo 连接器。
... 还有一个Hackster.io贴纸。凉爽的。
选项 1:垂直插槽
对于这个项目,我买了一个带有垂直 GPU 插槽和实心侧面板的电脑机箱。我希望有更多的遮蔽选项,尤其是在主板附近的遮蔽预计会有问题的情况下。
显示的问题:前面的 USB 3 电缆最好放在电源连接器旁边。
----
选项 2:底部插槽
该主板的底部插槽只有 8 个 PCIe 通道。用临时纸罩盖在主板旁边失败了。如果您使用此插槽,请将护罩直接连接到 Varium 卡上。
Option 1
:旧的 80 毫米 ProLiant 服务器风扇 + 护罩
护罩直接连接到 Varium 卡上。因此,底部插槽和垂直插槽安装是可以的。只有 PCIe AUX 电源线穿过护罩。
风扇全速运转并发出令人不快的噪音。但它提供 10 mm H2O 的静压(在 12VDC 下运行)。确保您的探测软管垂直于气流。
服务器风扇在 12VDC 下运行时声音太大。将其电压降至 5VDC(也可在 Molex 连接器上轻松获得)在噪音滋扰和 Varium 卡在库存设置(即无超频)下的充分冷却之间实现了良好的折衷。
----
Option 2
: 三洋电机高静压风扇
(!) 危险区域 (!) 别开玩笑了。触摸正在运行的 PC 风扇,它就会停止。触摸正在运行的服务器风扇,您会流血(亲身体验)。触摸正在运行的工业级风扇……不。就是不要。Sanyo Denki 产品上没有警告标签。
没有免费运行的桌面测试!这个风扇的推力太大了。直接安装到 PC 机箱中进行首次通电测试,当然还有保护网:
接线:红色:+48V,黑色:0V,棕色:PWM(连接到 0V 以获得 0% PWM!),黄色:转速计(未连接)。
Sanyo Denki 是一个不错的软启动。上电时无电涌。即使在 0%PWM 下,这架直升机也会产生稳固的静压。但是声音太大了。它消耗大约 7-14W。这些值在我的分辨率为 7W 的坏瓦特表上很难重现。
下一个测试是将直升机加电至 100% PWM。我关了电脑。这样,即使出现LOCA(冷却剂损失),我也不会冒 Xilinx 赞助的全新 Varium 反应堆核心熔毁的风险。
Tektronix 电源可用于 0%PWM。但是对于 100%PWM,我使用了我为音频放大器项目设计的电源,我试图将直升机加速到全功率。断开棕色线与黑色线的连接就足够了。当然,要戴护目镜和耳罩。我妻子的评论?可怕!她是对的:根据数据表,Sanyo Denki 直升机从 3000 RPM 缓慢上升到 15000 RPM 以下。但是我的电源进入电流限制(1.5 A)并且功耗为 77W,低于额定的 98W。RND 组件风扇保护网格显然不是为该吞吐量而设计的。气流变得过于湍流,所有能量都被吸收,而不是通过 Varium 卡推动空气或在 PC 机壳中增加压力。
如果你真的想起诉 Sanyo Denki 直升机,尽管它的噪音很大,直接把它裹在 Varium 卡上。也许你甚至想建造一个风道来冷却背板和前板。在进气侧,添加空气动力学安全罩。超频快乐!
直升机将在以后的项目中进行低噪音改装。
与此同时,自从我感染了 COVID 之后,我的 Hackster 实验室就是一个生物危险区。
----
Option 3
:三个串联的 140mm 分形风扇
最后一个空闲系统的可接受解决方案。
将分形风扇从机箱中取出,将它们排成一行,使所有电缆都在同一侧,并且气流进入同一方向。然后,将烧烤串(最大直径 3 毫米)的尖端逆着气流插入风扇的安装孔和垫片中:
现在,在烤肉串上卷上胶带(在烤肉串上粘一点胶带,然后开始旋转烤肉串,直到胶带层厚到无法再通过安装孔)。从第一个风扇组件内部的较薄端获益。
确保风扇紧密堆叠在一起。
在进气侧的第一个风扇组件内部和最后一个风扇组件的外部切割串杆。剪一张长约 600 毫米、宽与风扇叠一样的纸。将它粘在电线附近的两个垫片上,然后将其缠绕在风扇组周围。添加胶带使电缆通道气密。将其安装在电源护罩的正上方。
您现在有两个选择:
a) 继续为 Varium 卡添加护罩并为 PC 的其余部分添加更多风扇
b) 用胶带覆盖前板的剩余部分,以免空气逸出到前面。PC 机壳的背面部分用胶带遮盖,以迫使足够的空气通过 Varium 卡。调整阻力最小的路径。
我选择了选项 b)。
不是很漂亮,但可以作为概念证明。
我们在可接受的噪音水平下有几毫米的静压。
只要系统处于空闲状态,温度也可以。
只要 Varium 在 golden 或 xilinx_u55n_gen3x4_xdma_base_1 上空闲,就可以在没有适当冷却的情况下应用电源。该卡的功耗略低于 10W 至 14W,具体取决于加载的固件。
----
结论:
将 Varum 卡冷却到可接受的办公室噪音水平是一项挑战。
接受的解决方案是:
速度控制会很好,因为它允许超频。
在以后的项目中尝试一下:https ://github.com/neffs/fan_controller
华硕的一个缺点是不允许我使用机箱风扇接头连接器来控制覆盖在 Varium 卡上的风扇。
如果你跑
xsensors
你知道一些温度。有两个错误
恢复为 Golden 并重新刷写 shell 奇迹般地解决了 HBM 温度读数问题。您的主板的某些插槽可能被剥离(看起来像 16 通道,但实际上是 8 通道)。在我的系统上,由于依赖性问题,这不起作用。将所有 deb 文件放入同一个apt install命令中。问题解决了:
sudo apt install ./xilinx-u55n-gen3x4-xdma-validate_1-3191757_all.deb ./xilinx-cmc-u55_1.5.16-2.3143933_all.deb ./xilinx-sc-fw-u55_7.1.12-1.ba326cb_all.deb xilinx-u55n-gen3x4-xdma-base_1-3191732_all.deb ./xilinx-u55n-gen3x4-xdma-1-202110-1-dev_1-3236984_all.deb
根据建议:
sudo /opt/xilinx/xrt/bin/xbmgmt flash --update --shell xilinx_u55n_gen3x4_xdma_base_1
现在,是时候重启装有 Varium 卡的机器了。
欢迎回来。
让我们看看升级是否有效:
lspci | grep Xilinx
09:00.0 Processing accelerators: Xilinx Corporation Device 5058
09:00.1 Processing accelerators: Xilinx Corporation Device 5059
是的,我们还有一条线。重新运行与上面相同的命令:
sudo /opt/xilinx/xrt/bin/xbmgmt flash --update --shell xilinx_u55n_gen3x4_xdma_base_1
它现在将刷新 SC。
现在是验证部分:
sudo lspci -vd 10ee:
sudo /opt/xilinx/xrt/bin/xbmgmt flash --scan
确保您可以看到扫描结果并相应地替换以下命令中的 09:00:
sudo /opt/xilinx/xrt/bin/xbutil validate -d 0000:09:00.1 --verbose
是的,第一次对卡进行真正的测试。
有些消息虽然很奇怪:
Test 1 [0000:09:00.1] : Aux connection
Description : Check if auxiliary power is connected
Details : Aux power connector is not available on this board
Test Status : [SKIPPED]
我连接了 AUX 电源。
剧透警报:我没有成功。如果你想要一个正在运行的系统,请跳到下一章。
以下是要下载的文件(我们无法使用 curl 获取它们,因为这些 URL 是登录墙):
现在,让我们设置环境变量
source /opt/xilinx/xrt/setup.sh
我遇到了 cmake 的问题,可能是因为我设置了 Vitis。确保一个
cmake --version
产生版本 >= 3.5
./build.sh build_host
缺少 CUDA 工具包时失败。因为我不想在无风扇显卡上挖矿,所以我禁用了 CUDA:
在build.sh文件中将第 146 行更改为
cmake .. -DETHASHCUDA=OFF
source /opt/xilinx/xrt/setup.sh
./build.sh build_host
[100%] 内置目标 ethminer
是的!
如果您没有 ETH 钱包,请创建一个。我从https://f-droid.org/获取了 WallETH
然后开始编辑你的启动脚本:
nano mine.sh
脚本看起来像
source /opt/xilinx/xrt/setup.sh
./build.sh mine 0x295805bbbaf99ec63183bfe5078c8bc34203e7 xiliminix eu1.xxxxxmine.org:4444
将0x...替换为钱包的公钥,将xiliminix 替换为您的工作人员姓名,将 eu1.xxxxxmine.org:4444 替换为矿池的主机名:端口。不要使用 ethermine.org。如果尝试失败,他们会很快将您列入黑名单。
现在,让我们使这个脚本可执行并运行它:
chmod 755 mine.sh
./mine.sh
您真的期望这会起作用吗?
在我的系统上,ethminer 内置在我的主目录中。所以留在build.sh所在的位置
mv ~/ethminer .
./mine.sh
答案是:
Unrecognized platform Xilinx
Subscription failed : Invalid user provided
听起来更有希望。我显然必须将我的 WallETH 与 ethermine.org 连接起来。这可以通过ethermine.org网站右上角的“连接钱包”选项来完成。
还有 IIRC,我还没有在 Varium 卡上刷写 DAG 和挖矿内核。
xbutil program --device 0000:09:00.1 --user dag_gen_kernel.xclbin
xbutil program --device 0000:09:00.1 --user ethash_kernel.xclbin
我希望他们不要互相覆盖。
显然,ethermine 禁止了我。使用eu-eth.hiveon.net:4444代替。
首先尝试用我的显卡挖矿,然后......
SIGSEGV
sudo su
source /opt/xilinx/xrt/setup.sh
xbmgmt program -d 0000:09:00.0 --revert-to-golden
告诉我重启电源。也许这就是我在对用户分区进行编程后错过的。
我没有验证的另一件事是我是否为正确的平台构建了 daggen。
Team Red Miner最初专注于 AMD/OpenCL 矿工,可轻松将您的 Varium 卡变成 ETH PoW 矿工。
创建一个新用户,使其成为dialout组的成员并重新启动您的机器。确保 trm 用户可以访问 ttyUSB。否则,您可以以 root 身份运行 Tea Red miner,但这是不好的做法。
以下是温度(使用低电压(5V 而不是 12V)服务器风扇冷却):
Team Red Miner 支持对该卡进行超频。但这需要更好的冷却。这可以通过将服务器风扇切换到 12V 来提供:
sudo su
source /opt/xilinx/xrt/setup.sh
./teamredminer --eth_dag_slowdown=0 --fpga_clk_core=625 --fpga_clk_mem=1250 -a ethash -o stratum+tcp://eu-eth.hiveon.net:4444 -u 0x2a13f15b04f7b8d6319e9ed56521f2c2adcaf324 -p x
调整参数以满足您的需要。否则,它会挖到我的钱包里 ;-)。
您的最大时钟值可能与我的不同,具体取决于冷却和制造公差。
热点被推离风扇更远。对电源转换器不利。
与超频速度相比,风扇速度对温度的影响更大。在 USB 连接器的右侧,我切掉了后板的一些部分,以便于空气流动。在热图像上,我们可以清楚地看到主冷却器。不要切掉 QSFP28 连接器上方的后板。下面我们需要更多的气流。注意空气阻力最小的路径。
Red Miner 团队正在编写 Varium C1100 卡上开箱即用的罕见应用程序之一。但是,当您购买 FPGA 时,通常希望在其上运行您自己的设计。闪烁的 LED 是您可以证明整个设计流程有效的第一个证据。
幸运的是,@Quarky 帮助我让 Blinky 在 Varium 上运行。
切换到您的项目目录并下载 Quarky 的代码。它不仅仅是眨眼,但让我们迈出第一步:
git clone https://github.com/Quarky93/warpshell.git
按照 README.md 文件中有关 Blinky 的说明进行操作。
对其进行编程后,其中一个 SQFP28 端口状态 LED 开始闪烁,其他 LED 保持亮起。低频是我的错;-)。增加它留给读者作为练习。
让 DMA 演示运行起来更具挑战性,因为您必须构建 xdma 驱动程序:
切换到您构建项目的目录。然后
source /tools/Xilinx/Vivado/2021.2/settings64.sh
git checkout https://github.com/Xilinx/dma_ip_drivers.git
并根据https://github.com/Xilinx/dma_ip_drivers/issues/39创建一个 SSL 密钥
现在,您可以开始 xdma 驱动程序的构建过程。请参阅自述文件。然后,
modprobe xdma
lsmod | grep xdma
将显示您的构建是否成功。如果
lspci | grep x
将您的 Varium 卡显示为 9041,然后您就完成了,您可以尝试 Quarky 的传感器和 DMA 演示。如果您的卡片显示为5058,
您仍然在卡片上加载了 Xilinx 运行时。使用 Vivado 的硬件管理器对 Quarky 的 shell 进行编程。如果这没有将 lspci 5058 更改为 9041,请执行热重启(即没有电源循环)。
一旦一些 /dev/xdma* 文件出现,xdma 驱动程序就被正确构建,你的卡也被正确编程。
注意:如果更新内核,则必须重建 xdma 驱动程序。在重新创建 SSH 密钥和 make install 之前执行 make clean。
启动 Vivado 时,您会在开始设计的电路板中错过 Varium C1100。此问题有两种解决方法:
启动vivado
source /tools/Xilinx/Vivado/2021.2/settings64.sh
vivado
您可以从此页面下载 XDC 文件:https ://www.xilinx.com/products/accelerators/varium/c1100.html#vivado
现在,您已准备好创建新设计。
我首先想到构建一个扩展的 EPU
与使用 MicroBlaze 执行上述管理模式任务相比,这不太可能成功。我们不需要 256 位 ALU 和堆栈引擎来将作业加载到内存中。第一个版本的想法也是不使用 PCIe/DMA,而是使用 MicroUSB UART。像这样,我可以避免重新启动主机以获得正确的 PCIe。我们或许也可以避免编写驱动程序软件。性能可能低于在主 CPU 上模拟 EVM。如果是这样,以后还是可以引入DMA的。
请注意,所有涉及 SDK 的文档均已过时。我们现在使用 Vitis 在 MicroBlaze 上实施软件。
https://www.xilinx.com/support/documentation/quick_start/microblaze-quick-start-guide-with-vitis.pdf
还可以搜索 MircroBlaze Hello World。当心旧的 SDK 工作流程。
根据 Vitis 的能力,也可以采取“先造后造”的方法,即在 microBlaze 上实现 EPU,然后逐步用真正的硬件 EPU 替换它。
切换到您的项目目录并避免成为超级用户,然后:
git clone https://github.com/ethereum/go-ethereum.git
sudo apt install golang
cd go-ethereum
make all
您真的期望构建过程顺利吗?上面命令安装的1.13.8版本报错如下:
build github.com/ethereum/go-ethereum/cmd/clef: cannot load hash/maphash: malformed module path "hash/maphash": missing dot in first path element
golang 的更新可以解决这个问题?咱们试试吧。这里的一些说明看起来不错。
sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt update
sudo apt install golang-go
sudo apt autoremove
让我们再试一次:
make all
自述文件没有告诉我们如何使 bash 可以访问可执行文件。我在这个页面的底部找到了。
cd build/bin
哇,甚至还有一个 evm 可执行文件。自述文件说了什么?
./evm --code 60ff60ff --debug run
输出是:
0x
#### TRACE ####
PUSH1 pc=00000000 gas=10000000000 cost=3
PUSH1 pc=00000002 gas=9999999997 cost=3
Stack:
00000000 0xff
STOP pc=00000004 gas=9999999994 cost=0
Stack:
00000000 0xff
00000001 0xff
#### LOGS ####
整洁的!那个仍然在 CPU 上运行。对于 EVM 上的“hello world”,拥有这个工具真是太好了。
./geth --goerli console
开始同步测试网。这将成为衡量 EPU/EVM 加速效率的基准。但是窃听同伴会干扰时间。Geth 已经是多线程的了。好的。-- 但不是 EVM。可以让生活更轻松。
错过了--syncmode 完整选项。那应该称为 EVM。
https://github.com/ethereum/go-ethereum/tree/master/core/vm
更确切地说
https://github.com/ethereum/go-ethereum/blob/master/core/vm/interpreter.go
在这里,我们看到
func (in *EVMInterpreter) Run(contract *Contract, input []byte, readOnly bool) (ret []byte, err error) {
所以,策略是设置一个DMA发送合约*Contract,输入[]byte, readOnly bool到Varium卡,等到处理完成,通过DMA获取ret []byte, err error 。
解释器主循环将有效地被 EPU 取代。interpreter.go中的其余代码用于执行既不在 EVM 也不在 EPU 上运行的预编译合约。
现在,我将在我的 geth 分支上进行与硬件实现相关的更改:https ://github.com/stonux/go-ethereum.git
如果您想要自己的副本,请切换到您的本地工作目录。当心那里是否已经有一个 go-ethereum。我不知道 IDE 处理多个分支的能力如何。
git clone https://github.com/stonux/go-ethereum.git
请记住,以太坊想要抗 ASIC。这对 EVM 的硬件实现来说是有毒的。费用表、操作码……从一个叉子变成另一个叉子。如果我们对一个全节点进行完全同步,我们将不得不为每个分叉重新编程 FPGA,或者实现一个以分叉 ID 作为参数的 EPU,并相应地调整指令解码和 gas 计量(可能在以后的版本)。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !