在FPGA上运行轻量级Linux系统的RISC-V内核 FPGA开发

AI摘要

本文介绍了如何在FPGA上运行基于RISC-V架构的轻量级Linux系统,包括安装交叉编译工具链、配置Linux内核、构建根文件系统,并详细阐述了整个流程和步骤。

随着嵌入式系统的发展,FPGA(现场可编程门阵列)在实现高性能和灵活性方面发挥着重要作用。RISC-V是一种基于开放指令集架构(ISA)的处理器架构,它在嵌入式系统中越来越受欢迎。本文将介绍如何在FPGA上实现一个轻量级Linux系统,其中包括RISC-V内核的开发。

为了在FPGA上运行Linux系统,我们需要以下组件:

  1. RISC-V内核:RISC-V是一种开放的指令集架构,它提供了一种灵活的选择,适用于各种应用场景。我们将使用RISC-V内核来运行Linux系统。

  2. FPGA开发板:FPGA开发板是用于将设计加载到FPGA芯片上的硬件平台。它提供了与外部设备进行通信的接口,并包含处理器、存储器和其他外设。

  3. Linux操作系统:Linux是一种开放源代码的操作系统,具有广泛的应用领域和活跃的开发社区。我们将在FPGA上运行一个轻量级的Linux系统,以实现高度灵活性和可扩展性。

以下是在FPGA上运行轻量级Linux系统的RISC-V内核的步骤:

  1. 安装交叉编译工具链:在本地开发环境中,我们需要安装一个交叉编译工具链,以便能够将Linux内核和相关软件交叉编译为适用于RISC-V架构的可执行文件。可以使用开源工具链,如GCC工具链,来完成这个步骤。

  2. 配置Linux内核:从Linux内核的源代码中选择适合的配置选项,以满足我们在FPGA上运行Linux系统的需求。可以通过运行make menuconfig命令来配置内核选项,包括处理器架构、设备驱动程序和功能选择等。

嵌入式中FPGA和arm+Linux之间该如何抉择 阅读详情

相关推荐

基于FPGA平台RISCV架构的SOC应用系统设计1

本系列文章是参加第四届“复微杯”全国大学生电子设计大赛 FPGA 赛道的作品,该平台基于 RISCV,要求在 FPGA 平台可以实现指令执行,设计思路清晰, 具体如下: 对所用 RISCV 的内核结构熟悉,了解其数据通路; 应用方案完整,设计思路清晰,能够清楚的表达设计的内容以及价值; 可以根据硬件上的资源实现片外启动; 实现串口通信功能; FPGA 平台实现功能; 提供完整设计报告及验证报告;

qq_42248523的博客 3867

fpga在线升级 linux_仅5000行Verilog代码、可在FPGA上跑轻量级Linux系统的RISC-V内核

本文发布于www.hackster.io,由东京理工大学的计算机学院开发,专用于教学与加速用(苏老师也一直认为这是RISC-V当前的主要方向)。目前市场上开源的RISC-V内核已经很多,但很少有公开的RISC-V计算系统是非常轻型且能跑Linux系统的。这一款RISC-V内核就可以运行在FPGA上,用Verilog编写的,需要很少硬件的资源就能跑起来,所以可以运行在一个低成本的FPGA上。来看一下...

weixin_34083807的博客 1867

FPGA上跑Linux:基于RISC-V软核的轻量级系统与在线升级实践

嵌入式系统开发中,软核处理器作为可定制的CPU核心,为硬件与软件的协同设计提供了灵活路径。RISC-V凭借开源指令集与精简架构,成为FPGA上实现软核的主流选择。然而,在FPGA上运行标准Linux并非易事,核心难点在于处理器必须支持MMU和特权级切换,以满足虚拟内存与进程隔离的需求。通过合理裁剪内核、构建OpenSBI引导链路和initramfs根文件系统,可以实现轻量级Linux在FPGA上的稳定启动。在此基础上,结合A/B分区与掉电保护机制,还能实现现场可用的在线升级功能。本文详细解析了从RISC-V

weixin_29163797的博客 273

5000行Verilog写RISC-V软核,在FPGA上跑通Linux的做减法哲学

在嵌入式系统开发中,处理器与操作系统的协同设计往往决定硬件方案的灵活性与开发成本。RISC-V指令集凭借其模块化特性,为精简处理器内核设计提供了可能。FPGA器件上承载的软核处理器,允许开发者自由裁剪指令集与外围设备,从而在有限的逻辑资源上实现轻量级操作系统。而Linux内核的NOMMU模式打破了传统MMU依赖,使得极小规模的处理器核心也能运行多任务系统。这一技术路径在工业控制、教学实验、边缘计算等场景具有显著价值,开发者能够通过硬件与软件的双向优化,构建可远程维护的嵌入式平台。本文从基础概念出发,阐述如何

weixin_29189003的博客 310

FPGA上的RISC-V软核选型指南:PicoRV32与VexRiscv全面对比

在FPGA设计中,软核处理器是构建灵活嵌入式系统的关键。传统方案如MicroBlaze和Nios II受限于封闭生态,而开放开源的RISC-V指令集为开发者提供了自由裁剪的CPU架构,使其能够根据需求灵活配置硬件资源。RISC-V软核凭借免费工具链和可移植性,正在成为FPGA上实现控制逻辑、运行RTOS乃至Linux的优选路径。本文深入解析两个代表性RISC-V软核——极致小巧的PicoRV32与高度可配置的VexRiscv,从设计哲学、资源占用、性能特性到实际集成中的避坑点进行横评。无论你是想在资源紧张的

weixin_34417183的博客 401

SiFive演示RISC-V PC与AI SoC:从架构挑战到开发实战

指令集架构(ISA)是处理器设计的基石,而开放生态正推动计算平台向多元化演进。RISC-V作为开源指令集,凭借简洁、可扩展的特性,在嵌入式领域站稳脚跟后,正向PC与AI高性能计算发起冲击。要支撑桌面级应用,RISC-V SoC必须解决缓存一致性、中断控制器、虚拟化扩展及完整软件栈等系统级难题,而非仅依赖CPU核心规格。与此同时,AI算力的提升不仅靠独立NPU,RVV向量扩展与异构集成正成为关键路径。对于开发者,通过QEMU模拟、Buildroot构建及RISC-V工具链,可以快速上手这一架构的软件生态。本文

weixin_33802505的博客 447

BeagleV实战:RISC-V开发板跑Linux与NPU端侧AI部署指南

随着RISC-V架构的开放与模块化特性日益受到关注,开发者在嵌入式Linux和边缘计算领域迎来了全新的硬件选择。作为单板计算机,RISC-V开发板正在从早期的评估验证走向实际工程应用,其指令集可控性和开源生态为底层系统开发带来了更高的自主性。与此同时,端侧AI推理逐步下沉到边缘设备,NPU硬件加速成为提升模型实时性的关键。本文围绕一块集成四核CPU与1TOPS算力NPU的RISC-V单板计算机,介绍其Linux系统烧录、开发环境搭建、交叉编译方法,并基于MobileNetV2图像分类示例演示了从模型量化到N

weixin_34414196的博客 344

用Efinity IDE在FPGA上开发RISC-V软核:从环境搭建到调试实战

在嵌入式系统与硬件加速设计领域,FPGA凭借灵活的可编程逻辑资源,成为实现自定义处理器的理想平台。而RISC-V作为开放指令集架构,为开发者提供了不受商业IP约束的处理器实现路径。将两者结合,在FPGA上构建软核处理器,需要一套高效的工具链来兼顾硬件描述、软件编译与调试。传统方案或依赖封闭生态,或需要手动搭建交叉编译环境,门槛较高。Efinity IDE作为面向Efinix FPGA的集成开发环境,将硬件工程、软核配置、嵌入式编译及调试统一起来,大幅降低了从RTL到C程序落地的复杂度。文章从环境搭建、Cor

weixin_34268310的博客 258

Allwinner D1s RISC-V开发板硬件设计详解

RISC-V架构正成为嵌入式Linux系统的重要技术路径,其开源指令集与低授权成本特性显著降低了边缘计算终端的开发门槛。基于玄铁C906内核的Allwinner D1s SoC,支持RV64GC指令集与完整Linux启动链,是RISC-V从教学验证迈向工业落地的关键载体。该芯片集成GMAC千兆以太网、LPDDR3内存控制器及eMMC 5.1 Host等原生外设,大幅简化系统BOM并提升信号完整性。在智能HMI、轻量级边缘AI和国产化替代等场景中,D1s凭借高能效比与成熟开源工具链(如sunxi-tools、

weixin_42596214的博客 365

基于高云FPGA的RISC-V软核Linux系统设计与实现

FPGA以其可重构特性成为数字系统设计的核心平台,而RISC-V开源指令集则降低了处理器设计的门槛。基于可编程逻辑构建软核CPU,并围绕其集成DDR3控制器、串口、定时器与中断控制器等外设,即可形成完整的片上系统。通过交叉编译工具链生成内核镜像与根文件系统,再借助设备树描述硬件资源,标准Linux内核便能在FPGA上启动运行。这一技术路径在嵌入式教学、毕业设计及竞赛项目中具有极高的实践价值,帮助开发者从底层理解计算机系统的工作原理。本文以高云FPGA为平台,详细记录从RISC-V软核生成到Linux系统启动

weixin_29189373的博客 324

高云FPGA上跑通Linux:RISC-V软核SoC设计与调试实战

在国产FPGA平台上构建处理器系统,是嵌入式领域的热门方向。基于开源RISC-V指令集架构,可以在FPGA中实现一个带MMU和Cache的软核处理器,进而运行完整的Linux操作系统。这种软硬件协同设计方法,不仅验证了RISC-V生态的成熟度,也为国产FPGA在边缘计算、嵌入式教学和竞赛项目中的应用提供了可行路径。工程实践中,需要完成软核配置、AXI总线搭建、外设规划、交叉编译内核与根文件系统,并解决启动调试中的各类问题。文章从处理器软核的概念出发,完整梳理了从方案选型到系统联调的关键环节,为希望在FPGA

weixin_29176179的博客 297

Shell数学计算(算术运算,加减乘除运算)

声明: 本篇博客的学习途径主要为以下网站和课堂讲解,发博客目的仅为学习使用,在该博客的基础上做了一定程序的简略和修改。 参考博客 : 原文链接:http://c.biancheng.net/shell/ Shell数学计算Shell数学计算数学计算命令对整数进行数学运算: (()) / let / $[] /exprShell (())Shell let命令bc命令:一款数学计算器在 Shell 中使用 bc 计算器 Shell数学计算 默认情况下,Shell 不会直接进行算术运算,而是把+两边的数据(数

AKUANer的博客 2万+

基于深度强化学习的无地图移动机器人导航:让机器人在未知环境中智能前行

虽然仍然面临sim-to-real差距、安全性保证等挑战,但随着算法的不断改进和计算能力的提升,基于DRL的无地图导航技术将在服务机器人、工业自动化、太空探索等领域发挥越来越重要的作用,为人类生产和生活带来更大便利和价值。对于复杂环境下的动态目标导航问题,研究人员提出了多智能体协同控制算法(如Teamwork-Net算法),通过多个智能体分别控制机器人的运动速度与运动方向,协同实现更高效、更稳定的导航性能。深度强化学习结合了深度学习的感知能力和强化学习的决策能力,非常适合解决无地图导航问题。

weixin_45131592的博客 902

Cadence数模混合仿真实战:从Verilog到ADE L的完整流程解析

本文详细解析了Cadence数模混合仿真的完整流程,从Verilog代码编写到ADE L仿真环境配置。通过实战案例讲解如何创建Config文件、搭建混合信号原理图,并分享提高仿真效率的技巧和常见问题排查方法,帮助工程师掌握这一关键芯片设计验证技术。

weixin_29246195的博客 986

win11下的MySQL安装

目前官方最新版本是8.0.26,考虑到其稳定性、可靠性还需一定周期保证,所以使用官方版求稳定仍然建议5.7系列。3、选择MySQL Servers 5.7.38 -x64,然后按绿色箭头将选中的版本移植到右边选中框中。4、点击下方蓝色Advanced Options,选择安装位置。1、在开始界面搜索MySQL,点击command line。4、在“系统变量”中选择“path”,点击编辑。5、新建——>增加MySQL路径——>确定,12、execute,安装好后next。9、不需要做修改,直接点击next。.

rensweet的博客 2万+

OpenCode:终端开源AI编程助手,多模型接入与实战指南

AI编程助手正在从IDE侧边栏走向终端环境。其核心原理是让模型直接读取项目文件、执行命令、查看报错,形成从诊断到修复的完整闭环,从而解决传统插件上下文割裂的问题。技术价值在于开源透明、模型无关,既可接入OpenAI等云端服务,也能通过Ollama连接本地模型,兼顾数据安全与离线场景。在工程实践中,它适用于长时间驻留项目、自动修Bug、团队统一AI工具链等需求。OpenCode正是这样一款终端AI助手,支持灵活配置第三方API密钥,提供免费档与Go套餐,并通过Skills技能系统让模型遵循标准操作流程。同时,

weixin_28745821的博客 327

Lmcache+vllm——KVcache卸载CPU/SSD探索

目前查看了vllm、Nvidia dynamo、mooncake都没有找到将kvcache卸载到SSD的方法,幸好lmcache支持。以下进行lmcache+vllm实践,对比将kvcache分别卸载到CPU-ram和SSD上的TTFT性能差异。目前的query只是单并发,对比的效果已经比较明显了,可能多并发下对存储的要求就会更高了。

weixin_43579058的博客 2655

9、傅里叶变换:连续时间与离散时间信号分析的核心工具

本文深入探讨了傅里叶变换在连续时间和离散时间信号分析中的核心作用,详细介绍了连续时间傅里叶变换(CTFT)和离散时间傅里叶变换(DTFT)的定义、性质及其应用。文章涵盖了傅里叶级数到傅里叶变换的推导过程、常见变换对、系统分析中的关键性质,并讨论了采样后频谱的周期延拓与混叠问题。此外,还展示了傅里叶变换在滤波器设计、通信系统调制解调等实际场景中的应用,最后展望了其在图像处理、生物医学等领域的广阔前景。

jump7的博客 67

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: 学习FPGA之:FPGA开发实践
下一篇: 使用SoC FPGA和HLS编译实现全连接算子的FPGA开发
普通网友
博客等级 码龄3年 252粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值