FPGA开发教程:Quartus II环境搭建

在本教程中,我们将详细介绍如何搭建Quartus II环境,该环境可以用于FPGA(现场可编程门阵列)开发。Quartus II是一款由英特尔(Intel)公司开发的集成电路设计软件,它提供了丰富的工具和功能,用于设计、仿真和编程FPGA。

以下是搭建Quartus II环境的步骤:

步骤1:下载Quartus II软件
首先,您需要从英特尔官方网站上下载Quartus II软件。请确保选择适用于您操作系统的版本,并根据指示完成软件的下载和安装。

步骤2:安装Quartus II软件
下载完成后,运行安装程序并按照指示完成软件的安装过程。确保选择正确的安装目录和组件,以便后续使用。

步骤3:创建新项目
打开Quartus II软件后,您将看到一个欢迎界面。在该界面中,选择“Create a New Project”选项,然后按照指示创建一个新的项目。

步骤4:选择目标设备
在创建项目过程中,您需要选择目标FPGA设备。如果您已经确定要使用的FPGA型号,可以直接选择该型号。否则,选择“Unknown device”选项,并在稍后的步骤中手动选择设备。

步骤5:选择设计目录
选择一个用于存储项目文件的目录。这个目录将包含您的设计文件、约束文件和生成的输出文件。

步骤6:添加设计文件
在这一步中,您需要添加您的设计文件到项目中。设计文件可以是Verilog或VHDL等硬件描述语言编写的源代码文件。点击“Add Files”按钮,然后选择您的设计文件并添加到项目中。

步骤7:添加约束文件
约束文件用于定义FPGA的管脚映射、时序要求等。点击“Add Files”按钮,然后选择您的约束文件并添加

FPGA: Quartus II 的初学者使用 目录一、Quartus II的初识主界面介绍二、基本设计步骤1、新建工程与文件2、创建输入文件3、编译文件4、引脚锁定5、仿真6、下载到硬件电路 一、Quartus II的初识 主界面介绍 Quartus Ⅱ12.0的主界面包括菜单与工具栏、主窗口、工程引导窗口(Project Navigator)、任务窗口(Tasks)、信息(Messages)窗口等 (1)工程引导窗口中有三个小窗口分别是层次体系,文件,设计单元 (2)任务窗口在编译与综合时会显示各个过程的进度 (3)菜单与工具栏 二、基本设计步骤 阅读详情

相关推荐

Quartus II14.1安装教程

安装前先关闭杀毒软件和360卫士,注意安装路径不能有中文,安装包路径也不要有中文。 1.鼠标右击【Quartus II 14.1】压缩包选择【解压到Quartus II 14.1】。 2.双击打开解压后的【Quartus II 14.1】文件夹。 3.双击打开【Quartus】文件夹。 4.鼠标右击【QuartusSetup-14.1.0.186-windows.exe】选择【以管理员身份运行】。 5.点击【Next>】。 6.选择【I accept t...

谢谢关注“小鱼教你模数电”,各平台同号 6692

[FPGA 实战指南] 从零搭建 Quartus II + Modelsim 联合开发环境

本文详细指导如何从零搭建Quartus II与Modelsim联合开发环境,这是FPGA高效开发的关键。内容涵盖软件版本选择、安装路径规划、USB-Blaster驱动安装、Modelsim破解配置,以及核心的软件关联步骤。通过清晰的流程和实战避坑指南,帮助开发者快速构建稳定可靠的FPGA仿真验证平台,大幅提升调试效率。

ujm567890的博客 900

FPGA开发:初识FPGA × 开发环境

Quartus II是Altera公司(已被Intel收购)开发的综合性CPLD/FPGA开发软件,支持原理图、VHDL、Verilog HDL以及ADHL等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。

qq_74114817的博客 3211

Quartus II使用小技巧

有两个Quartus工程:q_pfj_1.qpf与q_prj_2.qpf,其中q_prj_2.qpf是q_prj_1.qpf的衍生工程,两个工程想要在Signal Tap Logic Analyzer中观察的信号一样,直接将q_prj_1.qpf中已经设置好的stp1.stp挪到q_prj_2.qpf工程中,替换掉q_prj_2.qpf中原来的stp1.stp文件,即可在q_prj_2.qpf中的Signal Tap Logic Analyze抓取相同的信号。

qq_37624854的博客 4169

FPGA开发环境搭建避坑指南:从Quartus II到Modelsim的完整配置流程

本文提供了一份详尽的FPGA开发环境搭建避坑指南,重点介绍了从Quartus II软件安装、器件库配置到Modelsim仿真工具关联的完整流程。针对USB-Blaster驱动安装、工具链联调等常见难题,给出了具体的解决方案和实用技巧,旨在帮助开发者快速构建稳定高效的FPGA开发工作流,避免在环境配置上浪费不必要的时间。

weixin_29290259的博客 422

Quartus II 下FPGA管脚锁定

Quartus II 下FPGA管脚锁定 在新建工程、编辑文件、编译、排错完成后就进入管脚锁定以及电平设置阶段。这里还是以一位全加器为例介绍管脚锁定。开发板使用FII-PRA006. 开发工具Quartus 18.1。 一位全加器的module 输入、输出与开发板,FPGA的对应关系,见表1。 表1 程序信号名 网络标号 FPGA管脚 端口说明 对应 module的输入、输出 co SW7_LED7 77 Led灯第7位 co sum S

c17611255160的博客 1万+

FPGA开发避坑指南:Quartus II与ModelSim仿真环境搭建与调试实战

本文详细介绍了FPGA开发中Quartus II与ModelSim仿真环境的搭建与调试实战,重点解析版本兼容性、环境配置、Testbench编写和波形分析等关键环节。通过四位全加器开发实例,演示如何避免常见错误并优化仿真流程,帮助开发者构建稳定可靠的FPGA开发工作流。

fff88的博客 1052

从零搭建FPGA开发环境:Quartus II 13.0与ModelSim联调实战指南

本文为FPGA开发新手提供了一份详尽的Quartus II 13.0与ModelSim联调实战指南。文章深入解析了为何选择经典稳定的Quartus II 13.0版本,并分步详解了软件安装、环境配置、破解及USB-Blaster驱动安装的全过程。同时,重点指导了独立版ModelSim的安装、破解与核心环境变量设置,最终完成两者在Quartus工程中的关联配置,实现一键RTL仿真,助力读者从零成功搭建高效、专业的FPGA开发与仿真环境。

weixin_29279047的博客 626

FPGA开发教程之Quartus II平台体验

本文主要目的带领大家学习Quartus II软件的各项功能用法,熟悉FPGA开发流程。以上就是DM今天要讲的内容,本文仅仅简单介绍了Quartus II的开发基本流程,后续更深层次的开发,也具有至关重要的作用。

qq_40197425的博客 671

fpga项目开发实例_FPGA 教程资料

​THE STARTFPGA是一种集成电路,由客户或设计人员在制造后配置,因此术语“现场可编程”。FPGA配置通常使用硬件描述语言(HDL)指定,类似于用于特定于应用程序的集成电路(ASIC)。电路图以前用于指定配置,但由于电子设计自动化工具的出现,这种情况越来越少。来自Xilinx FPGA的Spartan FPGA包含一组可编程逻辑块,以及允许块“连接在一起”的“可重构互连”层次结构,就像许多...

weixin_39883091的博客 5452

modelsim安装_Quartus II 11.0安装教程

软件·下载[软件名称]:Quartus II 11.0[软件语言]:英文[软件大小]:5.24G[安装环境]:Win10/Win8/Win7[64位下载链接]:https://pan.baidu.com/s/14FNxXi8Eu_CPsOiY0rwGsw[提取码]:[技术支持]:点击进入软件·简介Quartus II是一款综合性PLD/FPGA开发软件,支持原理图、VHDL、Ver...

weixin_39669075的博客 1689

成功搭建DSP开发环境:Quartus + DSP Builder + MATLAB 2010a

总结起来,通过成功搭建Quartus、DSP Builder和MATLAB的联合开发环境,我们能够高效地进行DSP算法设计和开发。这个环境提供了丰富的工具和资源,使我们能够设计和验证复杂的DSP系统,并将其实现在FPGA电路上。在本文中,我们将介绍如何成功搭建DSP(数字信号处理)开发环境,以便进行高效的DSP算法设计和开发。这样,我们就成功搭建了DSP开发环境,可以进行Quartus、DSP Builder和MATLAB的联合开发。在打开的对话框中,确保启用了DSP Builder,并选择正确的版本。

IfllUnity的博客 998

FPGA 7 ,FPGA开发环境搭建,Altrea开发环境搭建,Quartus几个版本之间的区别,以Quartus/ModelSim/Visio/NotePad++软件的安装与应用

⭐我们知道 FPGA 的应用领域非常广泛,包括但不限于,汽车驾驶、通信领域、视频图像处理、IC原型验证、医疗设备、数字信号处理和人工智能领域。而且未来应用前景也十分可观,几乎涵盖了所有涉及数字信号处理和技术实现的领域。这里我们以Altera(已被Intel收购)的开发板为例,来分享记录,如何搭建 FPGA 开发环境。

AI Agent 全栈架构师(AI + GIS + Backend)& 数字芯片系统架构师(FPGA),NorthCity Smile的博客(NcSmile,博主域名:https://ncmile.blog.youkuaiyun.com) 2689

一文搞定Quartus II安装,FPGA开发不迷路!

通过上述详细步骤,相信你已成功安装 Quartus II 并完成许可配置。安装过程中,务必牢记系统要求,提前关闭杀毒软件和防火墙,仔细选择安装路径和组件。在许可配置环节,准确放置许可证文件并正确设置,若选择试用模式,也能在一定时间内体验软件功能。安装过程中遇到问题在所难免,如安装错误、无法启动软件或找不到设备驱动等。但只要按照文中提供的解决方法,仔细排查问题根源,就能逐一解决。例如,安装错误时检查系统要求和文件完整性,无法启动软件时重新安装或检查环境变量,找不到设备驱动时重新安装驱动并检查连接。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 3350

Quartus II开发环境简介

Quartus II开发环境简介 一步一步教你入门

QuartusII4.0 官方中文入门手册

官方资料: QuartusII4.0 官方中文入门手册.

Yolov5实现道路裂缝检测

Yolov5实现道路裂缝检测 参考代码链接 Github代码链接 基于Pytorch的Yolov5道路裂缝检测程序运行说明。大家可以结合我的说明和原文说明使用,有问题欢迎询问。 文章目录Yolov5实现道路裂缝检测环境要求测试训练自己的数据集1.创建dataset.yaml文件2.创建标签文件3.组织文件路径4.选择模型5.开始训练 环境要求 Python 3.8或之后的版本 还要安装requirements.txt文件中所有依赖包,包括1.7及以上版本的torch $ pip install -r req

qq_26751379的博客 2万+

STM32F103C8T6+I2C+DMA读取陀螺仪模块JY901S(硬件I2C

说明:1.本实验代码适用移植一切stm32f1系列;2.本实验使用的是外设资源硬件I2C2;3.本实验运用的是DMA单次模式,如果需要DMA的循环模式,请移步我的另一篇文章;4.本文章不提供陀螺仪校准教学,并是在没有校准陀螺仪情况下读取数据;5.本文章是作者的学习记录及心得,如有不足,欢迎指正。 总结:亲测stm32f103c8t6最小系统板通过片上外设资源I2C配合DMA读去陀螺仪模块jy901s偏航角有效。

anquanyuanqqadsy的博客 6172

UE5.3与Colosseum配置实战:从编译到问题解决的全流程指南

本文提供了在Windows系统下配置UE5.3与Colosseum仿真环境的全流程实战指南。详细介绍了从软件版本选择、源代码获取、编译脚本执行到解决常见编译错误和引擎崩溃问题的具体步骤,旨在帮助开发者高效搭建无人机、机器人等仿真平台,并顺利运行外部API控制。

weixin_29002595的博客 557

保姆级教程:用GEE(Google Earth Engine)复现CASA模型计算NPP,附完整数据集清单与Python代码

本文提供了一份详细的保姆级教程,指导如何使用GEE(Google Earth Engine)复现CASA模型计算NPP(净初级生产力)。教程涵盖环境准备、关键数据集获取与处理、Python代码实现全流程,以及结果验证与常见问题解决方案,帮助生态学研究者高效完成NPP计算。

weixin_28707365的博客 334

oh-my-zsh详细安装与主题插件配置

使用Linux的小伙伴都知道默认shell是bash,但是对于喜欢折腾,喜欢酷炫的我们bash怎能够用。zsh的作为一种shell,功能更强大,但是配置复杂。后来,有大佬创建了一个名为oh-my-zsh的开源项目,使用方便,功能强大。 下面就去oh-my-zsh的配置。 ①安装zsh 想要安装oh-my-zsh,首先得安装zsh,输入命令 sudo apt-get install zsh 界面如下 ②查看是否安装成功 输入命令 zsh --version 可以查看安装zsh的版本..

惜洛-Jankin的博客 2万+

7.1华为OD机试真题 新系统 - 仓库盘点 (Java/Py/C/C++/Js/Go)

7.1华为OD机试真题 新系统 - 仓库盘点 (Java/Py/C/C++/Js/Go)

算法大师! 507

AI一键生成带货短视频:电商直播的未来

随着电子商务行业的快速发展,直播带货已成为一种极为有效的营销手段。然而,传统的人工直播方式存在诸多局限性,如人力成本高、主播培训周期长等问题。为了解决这些挑战,一种基于AI技术的一键生成带货视频解决方案应运而生——这就是“Anchor Crafter”。这项创新技术不仅能够自动创建高质量的带货视频,而且还能实现人物与商品之间的自然交互,极大地提升了用户体验。

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 2204

巡检机器人的基于ROS系统的任务管理架构设计总结

本文探讨了基于ROS(机器人操作系统)的工业巡检机器人任务管理架构设计,提出分层闭环方案。架构围绕稳、准、活、扩四大目标,分为感知层(多源数据融合)、调度层(智能决策)、执行层(动作控制)和数据层(存储交互)。关键技术包括ROS2实时性优化、功能包复用和多机器人协同调度。实践案例显示,该架构在电力巡检中使任务完成率达99%,在化工园区实现95%覆盖率。当前挑战包括SLAM地图漂移和多机通信延迟,未来可通过语义SLAM和区域通信优化。

start_up_go的博客 474

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

深度学习工具包 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")

上一篇: 面向对象编程(OOP):字符串和序列化在FPGA开发中
下一篇: Vivado 实现非官方支持的 FLASH 烧写 FPGA 开发
普通网友
博客等级 码龄3年 66粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值